2012-06-29 37 views
1

我正在從DirectX 9向OpenGL移植一個小型圖形引擎。引擎使用SDL(現在移植到2.0)來管理輸入和窗口創建。使用OpenGL和DirectX進行SDL窗口管理

我想知道如何正確處理OpenGL和DirectX的窗口事件。我感興趣的是這些桌面平臺(Linux,OSX和Windows)

  • 窗口分辨率變化
  • 全屏窗/窗的切換到全屏模式處理
  • Alt + Tab處理 -

我試圖通過網絡搜索,但信息是不是集中在一個地方。我想過很多其他人面臨同樣的問題。

是否有任何資源可以閱讀有關我的引擎的這種處理準則? 在OpenGL和DirectX中,是否可以處理分辨率更改而不會丟失呈現器系統的轉發資源?

+1

對於您的一個問題,iirc,SDL OpenGL上下文的任何大小調整都將導致無效的上下文。這是SDL的限制。我不知道它是否已在2.0 – imallett

回答

3
  • 窗口分辨率變化

的OpenGL本身並不需要對此沒有特殊待遇。不幸的是,SDL經歷了一次完整的窗口重新初始化,包括OpenGL上下文對窗口大小的改變,這意味着所有OpenGL狀態對象(即紋理,頂點緩衝區,着色器等)都會丟失。

然而,這是SDL的限制。

我個人更喜歡GLFW來創建OpenGL窗口和上下文。儘管(如音頻,網絡,圖像加載等),您仍然可以使用SDL進行其他操作。

  • 全屏到窗/加窗到全屏處理

的是一個有效的窗口大小變化爲好。往上看。

  • Alt + Tab處理 -

的OpenGL需要對此沒有特別的努力。當Alt + Tab鍵退出並停止遊戲循環時,最小化窗口。當窗口恢復時,只需繼續遊戲循環。

+0

中有所改進感謝您的回答。另外我認爲這在SDL 2.0中正在發生變化。使用新的API切換到全屏時,我設法不會鬆動上下文:SDL_SetWindowFullscreen(..) – DarthMike