【问题标题】:SDL window management with OpenGL and DirectX使用 OpenGL 和 DirectX 进行 SDL 窗口管理
【发布时间】:2012-06-29 08:32:03
【问题描述】:

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

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

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

我尝试在网上搜索,但信息并没有集中在一个地方。我想很多其他人以前也遇到过同样的问题。

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

【问题讨论】:

  • 关于您的一个问题,iirc,任何调整 SDL OpenGL 上下文的大小都会导致上下文无效。这是 SDL 的限制。不知道2.0有没有改进

标签: opengl directx sdl sdl-2


【解决方案1】:
  • 窗口分辨率变化

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

不过,这是 SDL 的限制。

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

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

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

  • Alt+tab 处理 -

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

【讨论】:

  • 感谢您的回答。我也认为这在 SDL 2.0 中发生了变化。我设法在使用新 API 切换到全屏时不丢失上下文:SDL_SetWindowFullscreen(..)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多