【问题标题】:How to create an OpenGL context with a specific graphics driver?如何使用特定的图形驱动程序创建 OpenGL 上下文?
【发布时间】:2013-04-15 19:35:05
【问题描述】:

有些计算机安装了多个显卡/芯片组,即使(例如笔记本电脑)它们没有多个显示器。

我在使用同时配备 Intel 和 Nvidia 图形硬件的笔记本电脑系统时遇到问题。众所周知,英特尔的驱动程序在 OpenGL 支持方面很糟糕,而且我的代码遇到了一个莫名其妙的渲染错误,因为在创建渲染上下文时,它似乎默认为英特尔系统,而不是 Nvidia 系统。

有没有办法在启动时避免这种情况?要说“轮询所有可用的图形驱动程序,尽可能避免使用 Intel 驱动程序,并使用可以工作的驱动程序为我构建一个 OpenGL 渲染上下文”?

【问题讨论】:

  • 在 NVidia 面板中您可以选择默认 GPU
  • @MichaelIV:谢谢,但这不是我要问的。
  • 不仅是驱动,还有GPU。现在很多笔记本都有2个卡:Intel和专用的(NVidia或ATI)。所以你必须先通过bias或windows界面设置硬件像 NVidia 面板。如果你不切换硬件首先尝试选择不同的驱动程序是没有意义的。
  • @MichaellV:这仍然不是我要问的。我想知道我的程序如何做到这一点。告诉我用户(不一定是我,也不一定具有我的技术知识水平)如何做到这一点毫无意义。
  • @MasonWheeler:没有标准的 API。您可以做的最好的事情是尝试模拟用户将执行的切换(Windows 注册表项)。

标签: windows winapi opengl


【解决方案1】:

没有可移植的方式来完成您的要求,但本文档描述了如何在采用 NVIDIA Optimus 技术的系统上强制“高性能图形渲染”:

http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf

具体可参考“全局变量NvOptimusEnablement(Driver中的new Release 302)”,其中写道:

从 Release 302 驱动程序开始,应用程序开发人员可以 在运行时指导 Optimus 驱动程序使用高性能 渲染任何应用程序的图形——即使是那些应用程序 没有现有的应用程序配置文件。他们可以通过 导出一个名为 NvOptimusEnablement 的全局变量。擎天柱 driver 寻找出口的存在和价值。只有 LSB DWORD 在这个时候很重要。值 0x00000001 表示 该渲染应使用高性能图形执行。一种 值为 0x00000000 表示应该忽略此方法。

示例用法:

extern "C" {
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}

另一种可能性是 WGL_nv_gpu_affinity 扩展,但您的 WGL 上下文需要支持它,我不确定它是否适用于混合的 Intel/NVIDIA 系统:

http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 2013-08-19
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多