我有一些爲Linux編寫的代碼,我需要重新實現,以便它可以在Windows和Linux上工作。目前它是X-Windows,GLX和OpenGL 2.1,我使用的是使用GLEW的SDL2和兼容的OpenGL擴展(它仍然運行在舊的(Centos 5.3)Linux平臺以及最近使用6年的圖形卡的Windows上)。將glxMakeContextCurrent轉換爲Windows
我被困在如何取代glXMakeContextCurrent。這當前用於選擇Read和Draw Pixel Buffers(GLXPbuffer)並與上下文關聯。我一直在尋找使用像素緩衝區對象來替換GLXPbuffers,但不知道如何使用這些技術來複制glXMakeContextCurrent的功能,或者如果有更好的方法來做到這一點。
現有代碼將其設置爲使其呈現爲GLXPbuffer,然後使用glCopyPixels使用指定的上下文將Draw和Read Drawables和Context指定爲從一個drawable(GLXPbuffer)複製到另一個(另一個GLXPbuffer)在glXMakeContextCurrent調用中。這主要是2D OpenGL應用程序。
如何在不使用GLX的情況下實現這種功能,即它可以在Windows(以及Linux)上工作?
這裏顯示了當前代碼所做的一個代碼段:
Display *dpy;
GLXContext osr_ctx;
GLXPbuffer pbuf2, osr_pbuf;
void sel_drc(GLXDrawable dst, GLXDrawable src, SDL_GLContext ctx)
{
if (!src)
{
if (!glXMakeCurrent(dpy, dst, ctx))
{
Error("glXMakeCurrent");
}
}
else
{
if (!glXMakeContextCurrent(dpy, dst, src, ctx))
{
Error("glXMakeContextCurrent");
}
}
}
// Display dpy is set up elsewhere.
// GLXContext and GLXPbuffers get created elsewhere and stored in osr_ctx, pbuf2, osr_pbuf
// The Display and GLXContexts are to be replaced by their SDL2 equivalents.
// GLXPbuffers are currently planned to be Pixel Buffer Objects:
// GLuint pboIds[2];
// glGenBuffers(2, pboIds);
// glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pboIds[0]);
// glBufferData(GL_PIXEL_UNPACK_BUFFER, DATA_SIZE, 0, GL_STREAM_DRAW);
// etc.
//
sel_drc(osr_pbuf, pbuf2, osr_ctx);
glRasterPos2f(0.1, 0.1);
glCopyPixels (0, 0, 576, 576, GL_COLOR);
不要直接使用OS API,而應考慮使用像GLFW或GLUT這樣的庫,它可以爲您處理所有跨平臺的東西。 –
這就是你卡住的地方?在渲染環境變爲當前之前,您無法調用'glXMakeCurrent(...)'。我首先移植上下文創建(這意味着閱讀'ChoosePixelFormat(...)','wglCreateContext(...)'等),然後擔心這樣的事情。 –