用OpenGL和DirectX实现SDL窗口管理

用OpenGL和DirectX实现SDL窗口管理,opengl,directx,sdl,sdl-2,Opengl,Directx,Sdl,Sdl 2,我正在将一个小型图形引擎从DirectX 9移植到OpenGL。引擎使用SDL(现在移植到2.0)来管理输入和窗口创建 我想知道如何正确处理OpenGL和DirectX的窗口事件。我对这些桌面平台(linux、OSX和windows)感兴趣 窗口分辨率更改 全屏到窗口/窗口到全屏处理 Alt+tab处理- 我试着在网上搜索,但信息并不是集中在一个地方。我想很多其他人以前也遇到过同样的问题 是否有任何资源可以阅读有关我的发动机的此类处理的指南? 在OpenGL和DirectX中,是否可以在不丢

我正在将一个小型图形引擎从DirectX 9移植到OpenGL。引擎使用SDL(现在移植到2.0)来管理输入和窗口创建

我想知道如何正确处理OpenGL和DirectX的窗口事件。我对这些桌面平台(linux、OSX和windows)感兴趣

  • 窗口分辨率更改
  • 全屏到窗口/窗口到全屏处理
  • Alt+tab处理-
我试着在网上搜索,但信息并不是集中在一个地方。我想很多其他人以前也遇到过同样的问题

是否有任何资源可以阅读有关我的发动机的此类处理的指南? 在OpenGL和DirectX中,是否可以在不丢失传输到渲染器系统的资源的情况下处理分辨率更改

  • 窗口分辨率更改
OpenGL本身不需要对此进行特殊处理。不幸的是,SDL经历了完整的窗口重新初始化,包括窗口大小更改时的OpenGL上下文,这意味着所有OpenGL状态对象(即纹理、顶点缓冲区、着色器等)都将丢失

然而,这是SDL的一个限制

因此,我个人更喜欢GLFW来创建OpenGL窗口和上下文。您仍然可以将SDL用于其他用途(如音频、网络、图像加载等)

  • 全屏到窗口/窗口到全屏处理
这实际上也是一个窗口大小的更改。见上文

  • Alt+tab处理-

OpenGL对此不需要特别的努力。当Alt+Tab退出并停止游戏循环时,只需最小化窗口。当窗口恢复后,继续游戏循环。

至于您的问题之一,iirc,SDL OpenGL上下文的任何大小调整都将导致无效上下文。这是SDL的一个限制。我不知道它是否有2.0的改进谢谢你的回答。我认为SDL2.0也在改变这一点。在使用新API切换到全屏时,我设法不丢失上下文:SDL_SetWindowFullscreen(..)