【问题标题】:Enumerating devices and display modes for OpenGL rendering枚举 OpenGL 渲染的设备和显示模式
【发布时间】:2010-12-17 20:41:41
【问题描述】:

我目前正在编写一个 OpenGL 渲染器,并且正在编写一些用于枚举下拉列表中使用的显示适配器、设备和模式的类。

我使用 EnumDisplayDevices 获取适配器,然后为每个设备获取 EnumDisplaySettings,为我提供 bpp、宽度、高度和刷新率。但是我不确定如何找出全屏可用的模式(在 DEVMODE 结构中似乎没有它的标志)。我可以假设列出的所有模式原则上都可以全屏实例化吗?

作为后续问题,这种设备枚举方法通常是在 Windows 上获取所需信息的最佳方式吗?

【问题讨论】:

    标签: windows opengl enumerate


    【解决方案1】:

    OpenGL 在窗口模式和全屏模式之间没有这种区别。如果您希望 OpenGL 程序是全屏的,您只需将窗口设置为顶层、无边框、无装饰、保持在顶部和最大尺寸。

    【讨论】:

    • 全屏与填满整个屏幕的窗口不同!
    • @Dudeson:对于 OpenGL 来说是这样。在 Windows 和 X11 中是这样。在 MacOS X 上,有一个专用的独家全屏访问模式,但从那以后它也被淘汰了。
    • @datenwolf:这非常令人惊讶。我的意思是全屏运行的应用程序通常会更改桌面分辨率。在窗口全屏模式下,这不是必需的。示例:glfw.org/docs/latest/window.html#window_full_screen 不过我可能会误解。
    • @Dudeson:分辨率变化与 OpenGL 中专用的“全屏”模式无关。它只是使用 Windows 控制面板使用的相同 API 来切换显示分辨率。首先切换分辨率的原因是为了减少要绘制的像素数量,如果需要的话,以提高帧率。 GLFW 是开源的,所以我建议你看看负责的代码。
    • @Dudeson:那些 Alt+Tab 存在问题的应用程序通常不使用 OpenGL,而是使用 Direct3D(旧版本)。 Direct3D确实有专属的全屏模式,切换回桌面时所有的图形资源都会丢失,返回时必须重新加载;这种管理会导致某些应用程序出现问题,这就是为什么独占图形访问是一个坏主意的原因。 OpenGL 不这样做,基于 OpenGL 的游戏(少数)通常不会出现 Alt+Tab 问题。
    【解决方案2】:

    上面其实是一个愚蠢的问题。根据定义,窗口模式必须是当前显示设置。所有其他模式必须全屏可用(只要操作系统支持它们,即在 Vista/7 中不建议使用 640x480)。

    【讨论】:

      【解决方案3】:

      嗯,一点都不对,态度也不好。您可以使用多种功能。

      SetPixelFormat、ChoosePixelFormat、ChangeDisplaySettings。

      PixelFormat 函数可让您枚举可用模式。 ChangeDisplaySettings 允许您设置应用程序想要的任何屏幕模式(包括位深度)。在 MSDN 中查找它们。

      【讨论】:

      • 我认为对自己的问题有态度是可以的:p。
      • 我没有注意到你在回答你自己的问题。我想我可以原谅这种情况下的态度:oP
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多