1

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

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

  • 窗口分辨率更改
  • 全屏到窗口/窗口到全屏处理
  • Alt+tab 处理 -

我试图通过网络搜索,但信息并没有集中在一个地方。我想许多其他人以前也面临过同样的问题。

是否有任何资源可以阅读有关我的引擎的这种处理指南?是否可以在不丢失传输到 OpenGL 和 DirectX 中的渲染器系统的资源的情况下处理分辨率变化?

4

1 回答 1

3
  • 窗口分辨率更改

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

然而,这是 SDL 的限制。

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

  • 全屏到窗口/窗口到全屏处理

这实际上也是一个窗口大小的变化。往上看。

  • Alt+tab 处理 -

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

于 2012-06-29T12:13:11.940 回答