據我所知,沒有跨平臺的方式來創建上下文,您將不得不創建自己的抽象,然後爲每個平臺實現它。
在Windows下我用下面的代碼來創建第二個方面做的內容加載在後臺線程(使用GLFW這個計劃,但認爲不應該的問題):
void Program::someFunction()
{
HDC hdc = wglGetCurrentDC();
HGLRC hglrc = wglGetCurrentContext();
HGLRC hglrc_new = wglCreateContext(hdc);
wglShareLists(hglrc, hglrc_new);
loadThread = boost::thread(&Program::loadFunc, this, hdc, hglrc_new);
}
/**
* Imports all our assets. Supposed to run in its own thread with its own OpenGL context.
* @param hdc The current device context.
* @param hglrc A OpenGL context thats shares its display list with the main rendering context.
*/
void Program::loadFunc(HDC hdc, HGLRC hglrc)
{
wglMakeCurrent(hdc, hglrc);
//Do stuff...
wglMakeCurrent(NULL, NULL);
wglDeleteContext(hglrc);
}
這是對的,我假設使用FBO。但FBO不會創建GL環境,這就是爲什麼我問這個問題。 –
如果您想要硬件加速,至少在Windows上,您不能創建一個OpenGL上下文,而無需先創建(隱藏)窗口。這是因爲[wglCreateContext](http://msdn.microsoft.com/en-us/library/windows/desktop/dd374379(v = vs.85).aspx)需要Device Context(DC),並且只有一個窗口的DC可以分配硬件加速像素格式。尤其是,[無法使用硬件加速OpenGL將其渲染到內存DC中](http://www.opengl.org/discussion_boards/showthread.php/161374-Why-can-ti-write-to-a-memory-device -context p = 1143832&viewfull = 1#post1143832)。 – sschuberth
那麼你是說LWJGL中的Windows版本的PBuffer會創建窗口,然後刪除它? –