2014-05-24 55 views
3

我的程序在编译着色器,加载纹理等时从加载窗口开始。然后,我希望能够启动全屏应用程序并使用这些资源。我的理解是openGL上下文在前后必须相同。我为此尝试了两种方法:首先,我尝试制作第二个全屏的窗口,并在此窗口上使用SDL_GL_makecurrent命令将上下文“转移”到(无法找到关于此方法的位置),其次试图只是全屏显示加载窗口。这两种方法都导致加载屏幕移动到屏幕的左上角。然而,opengl命令不再以全屏方式正常运行,包括清除缓冲区,这意味着窗口包含了我的桌面/后台应用程序的内容。使用openGL在SDL2中全屏显示一个窗口

有没有适当的方法来做到这一点?或者这是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

回答

0

我真的不知道,如果它是一个错误。我遇到了与sdl2和opengl相同的问题。

  • 创建一个普通窗口
  • 重视OpenGL上下文。
  • 全屏
  • BOOM。黑屏和坠毁的窗口。

我只在ubuntu中注意到这个问题。

Trought一些测试,我发现一个快速的方法来解决这个问题:

Uint32 flags = 0; 
flags |= SDL_WINDOW_RESIZABLE; 
//bla bla bla your tags 
flags |= SDL_WINDOW_OPENGL; 
m_window = SDL_CreateWindow("hello gl", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_screen.x, m_screen.y,flags); 
m_glContext = SDL_GL_CreateContext(m_window); 
//Set right the way the screen to fullscrene false 
SDL_SetWindowFullscreen(m_window, SDL_FALSE); 

现在全屏似乎没有问题的工作。