2013-01-18 87 views
0

在我的軟件中,我生成一個虛擬窗口,以查詢Windows各種像素格式,然後銷燬該窗口,然後在選擇適當的格式後創建一個新窗口。使用glewInit正確初始化GLEW?

初始化第一個窗口後,我使用glewInit()初始化glew以使用wglChoosePixelFormatARB函數。雖然在銷燬虛擬窗口後,擴展繼續運行,但我知道這在技術上並不「正確」,理論上兩個窗口可能有兩組不同的函數指針。因此,我想在創建第二個窗口後第二次初始化glew。

當我這樣做,我從普通功能出現錯誤後,像這樣的:

GLint viewport[4]; 

::glGetIntegerv(GL_VIEWPORT, viewport); 

,與glError是1280 - 但奇怪的是,當我檢查視,似乎包含正確的值(I查看glGetError()來查看前面的命令是否導致錯誤)。所以,我的問題是這樣的:在Windows中需要兩個狀態OpenGL初始化(創建虛擬窗口,初始化擴展,使用擴展,破壞虛擬窗口,創建實際窗口),你如何初始化第二個新窗口是當前上下文的時間?

回答

1

我推薦在創建主窗口後才銷燬虛擬窗口/上下文。另外,正如Slicedpan建議的那樣,你只需要一個擴展函數,所以我會手動加載它們而不依賴於GLEW。你也確定,你的第二次調用glewInit()是在你已經創建了正確的OpenGL上下文之後創建了,使得當前線程上的GLEW函數即將被使用?

+0

我做到了,是的。它絕對活躍。我認爲你自己正確地獲取擴展。在任何情況下查看我需要在每個窗口中存儲它們的內容(以確定它是正確的)。 GLEW支持glewContextInit,但這看起來也很痛苦。 – Robinson

1

你可以先檢索wglChoosePixelFormatARB的函數指針(使用wglGetProcAddress,我想),然後在創建第二個窗口後初始化glew。