共用方式為


轉譯內容函式

五個 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 讓轉譯內容不是最新的,因此程式設計人員必須刪除或釋放相關聯的裝置內容。