轉譯內容函式
五個 WGL 函式會管理轉譯內容,如下表所述。
WGL 函數 | 描述 |
---|---|
wglCreateContext | 建立新的轉譯內容。 |
wglMakeCurrent | 設定線程目前的轉譯內容。 |
wglGetCurrentContext | 取得線程目前轉譯內容的句柄。 |
wglGetCurrentDC | 取得與線程目前轉譯內容相關聯之裝置內容的句柄。 |
wglDeleteContext | 刪除轉譯內容。 |
wglCreateContext 函式會採用裝置內容句柄做為其參數,並傳迴轉譯內容句柄。 建立的轉譯內容適用於在裝置內容句柄所參考的裝置上繪製。 特別是其圖元格式與裝置內容的圖元格式相同。 建立轉譯內容之後,您可以釋放或處置裝置內容。 如需建立、取得、釋放和處置裝置內容的詳細資訊,請參閱 裝置內容 。
注意
傳送至 wglCreateContext 的裝置內容必須是顯示裝置內容、記憶體裝置內容,或每圖元使用四個以上位的彩色印表機裝置內容。 裝置內容不能是單色印表機裝置內容。
wglMakeCurrent 函式會採用轉譯內容句柄和裝置內容句柄做為參數。 線程進行的所有後續 OpenGL 呼叫都是透過該轉譯內容進行,而且會繪製在該裝置內容所參考的裝置上。 當建立轉譯內容時,裝置內容不一定要是傳遞至 wglCreateContext 的相同內容,但它必須位於相同的裝置上且具有相同圖元格式。 對 wglMakeCurrent 的呼叫會建立所提供轉譯內容與裝置內容之間的關聯。 在使轉譯內容不是目前之後,您無法釋放或處置與目前轉譯內容相關聯的裝置內容。
一旦線程有目前的轉譯內容,就可以進行OpenGL圖形呼叫。 所有呼叫都必須通過轉譯內容。 如果您從缺少目前轉譯內容的線程進行 OpenGL 圖形呼叫,則不會發生任何事。
wglGetCurrentContext 函式不接受任何參數,並將句柄傳回給呼叫線程目前的轉譯內容。 如果線程沒有目前的轉譯內容,則傳回值為 NULL。
當您透過呼叫 wglGetCurrentDC 來取得與線程目前轉譯內容相關聯之裝置內容的句柄時,會在呈現內容成為目前時建立關聯。
您可以使用兩個句柄之一呼叫 wglMakeCurrent ,以中斷目前轉譯內容與線程之間的關聯:
- Null 轉譯內容句柄
- 一個原本呼叫的句柄
呼叫 wglMakeCurrent 並設定為 NULL 的轉譯內容句柄參數之後,呼叫線程就沒有目前的轉譯內容。 轉譯內容會從與線程的連線釋放,而轉譯內容與裝置內容的關聯就會結束。 OpenGL 會排清所有繪圖命令,並可能會釋放某些資源。 在下一次呼叫 wglMakeCurrent 之前,不會執行 OpenGL 繪圖,因為線程在重新取得目前的轉譯內容之前,無法進行 OpenGL 圖形呼叫。
中斷轉譯內容與線程之間關聯的第二種方式,是使用不同的轉譯內容呼叫 wglMakeCurrent 。 在這類呼叫之後,呼叫端線程會有新的目前轉譯內容、先前目前的轉譯內容會從與線程的連線釋放,而先前目前的轉譯內容與裝置內容之間的關聯就會結束。
wglDeleteContext 函式會採用單一參數,這是要刪除之轉譯內容的句柄。 呼叫 wglDeleteContext 之前,請呼叫 wglMakeCurrent 使轉譯內容不是最新的,並視需要呼叫 DeleteDC 或 ReleaseDC 來刪除或釋放相關聯的裝置內容。
線程刪除另一個線程目前轉譯內容時發生錯誤。 不過,如果轉譯內容是呼叫線程的目前轉譯內容, wglDeleteContext 會排清所有 OpenGL 繪圖命令,並使轉譯內容在刪除之前不是最新的。 在此情況下,依賴 wglDeleteContext 讓轉譯內容不是最新的,因此程式設計人員必須刪除或釋放相關聯的裝置內容。