Windows 용과 Linux 용으로 다시 구현해야하는 Linux 용 코드가 있습니다. 현재 X-Windows, GLX 및 OpenGL 2.1이며 GLEW를 사용하는 SDL2 및 호환 OpenGL 확장을 사용하고 있습니다 (6 세 그래픽 카드가있는 최신 Windows뿐만 아니라 이전 (Centos 5.3) Linux 플랫폼에서도 실행 중입니다).glxMakeContextCurrent를 Windows로 변환
glXMakeContextCurrent를 대체하는 방법에 대해 고민하고 있습니다. 현재는 픽셀 버퍼 읽기 및 그리기 (GLXPbuffer)를 선택하고 컨텍스트와 연결하는 데 사용됩니다. GLXPbuffers를 대체하기 위해 Pixel Buffer Objects를 사용했지만 glXMakeContextCurrent의 기능을 복제하는 방법을 모르는 경우 나 더 나은 방법이있는 경우에 유용합니다.
기존 코드는 GLXPbuffer로 렌더링 한 다음 glCopyPixels를 사용하여 지정한 컨텍스트를 사용하여 Drawable 및 Draw 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 (...) 등을 읽는 것을 의미한다.) 그런 다음 이것에 대해 걱정한다. –