2014-05-24 91 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); 

現在全屏似乎沒有問題的工作。