我的程序在编译着色器、加载纹理等时从加载窗口开始。然后我希望能够启动全屏应用程序并使用这些资源。我的理解是openGL上下文必须前后一致。我为此尝试了两种方法:首先,我尝试制作第二个全屏窗口,并在此窗口上使用 SDL_GL_makecurrent 命令来“传输”上下文(找不到我在哪里读到有关此方法的信息),其次尝试全屏显示加载窗口。这两种方法都导致加载屏幕被移动到屏幕的左上角。然而,opengl 命令不再在全屏下正常运行,包括清除缓冲区,这意味着该窗口包含我的桌面/后台应用程序的内容。
有没有正确的方法来做到这一点?或者这是 sdl/opengl 驱动程序中的一个奇怪错误?
全屏原始窗口的代码:
//opengl commands work fine up to here
//now to fullscreen
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
SDL_SetWindowSize(window, 1366, 768); //tried this on either side of line above and without either line
glViewport(0, 0, 1366, 768); //update viewport
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
//window should be whited, other draw commands tried and all fail or distort
SDL_GL_SwapWindow(window);
创建一个新窗口并使用以前的上下文:
//Fine up to here
window2 = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1366, 768, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_SHOWN);
SDL_GL_MakeCurrent(window2, glContext); //created with SDL_GL_CreateContext(oldwindow);
//draw commands dont work
PS:运行ubuntu
更新:在第二个代码中,在新窗口中重用上下文,它在失败时返回一个错误,说“无效窗口”,这是大多数情况下但并非总是如此。当它失败时,屏幕最终完全损坏(黑色带有奇怪的白色方块和图案),结束程序不会清除屏幕(虽然截图非常好?),但可以通过ctrl+f1到终端然后ctrl+恢复f7背部