wglMakeCurrent多線程問題

wglMakeCurrent

wglMakeCurrent 函數設定OpenGL當前線程的渲染環境。以後這個線程所有的OpenGL調用都是在這個hdc標識的設備上繪製。你也可以使用wglMakeCurrent 函數來改變調用線程的當前渲染環境,使之不再是當前的渲染環境。

BOOL wglMakeCurrent(
HDC hdc, // device context of device that OpenGL calls are
// to be drawn on
HGLRC hglrc // OpenGL rendering context to be made the calling
// thread’s current rendering context
);

參數:

hdc

設備環境的句柄。調用這個函數的線程接下來的所有OpenGL調用都將在這個hdc所標識的設備上繪製。

hglrc

函數設定的OpenGL渲染環境的句柄,作爲當前線程的渲染環境。

如果hglrc爲NULL,函數將使調用線程的當前渲染環境不再作爲當前的渲染環境,並釋放這個渲染環境所使用的設備環境。這種情況下hdc參數將被忽略。

返回值:

當wglMakeCurrent 函數調用成功,將返回TRUE,否則返回FALSE,要想得到更多的信息,請調用

GetLastError。

注意:

hdc參數的繪製表面必須是支持OpenGL的。它不需是wglCreateContext 創建hglrc時所傳進來的hdc,但它必須是相同的設備並具有相同的像素格式。GDI轉換的hdc將不被渲染環境所支持。當前的渲染環境將一直使用hdc設備環境直到它不再是當前渲染環境。

在切換到新的渲染環境之前,OpenGL將沖刷掉當前調用線程之前的所有渲染環境。

一個線程可以有一個渲染環境。所以一個多線程進程可以有多個渲染環境。一個線程在調用任何OpenGL函數之前必須設置一個當前渲染環境。否則所有OpenGL調用都將忽略。

在某一時刻渲染環境只能屬於一個線程,你不能使一個渲染環境同時屬於多個線程。

一個應用程序可以通過不同線程中的不同的當前渲染環境產生多個繪圖,它支持各個線程都擁有自己的渲染環境的設備環境。

如果有錯誤發生,wglMakeCurrent 函數在返回之前將使渲染環境不作爲線程當前的渲染環境。

如果在多個窗口使用OpenGL進行渲染,在每次渲染結束後使用wglMakeCurrent(NULL, NULL),如果不這樣操作,涉及到多線程時會出現異常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章