如何使用特定的图形驱动程序创建OpenGL上下文?

Mas*_*ler 5 windows opengl winapi

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

我在使用具有Intel和Nvidia图形硬件的笔记本电脑系统时遇到了麻烦.英特尔的驱动程序在OpenGL支持方面非常糟糕,我的代码遇到了一个无法解释的渲染错误,因为在创建渲染上下文时,它似乎默认为Intel系统,而不是Nvidia系统.

有没有办法在启动时避免这种情况?要说"对所有可用的图形驱动程序进行轮询,尽可能避免使用英特尔驱动程序,并使用可行的驱动程序构建一个OpenGL渲染上下文"?

Gre*_*ent 2

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

\n\n
http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf\n
Run Code Online (Sandbox Code Playgroud)\n\n

具体请参考“全局变量 NvOptimusEnablement(Driver\nRelease 302 中新增)”一节,其中说道:

\n\n
\n

从版本 302 驱动程序开始,应用程序开发人员可以在运行时指示 Optimus 驱动程序使用高性能图形来渲染任何应用程序\xe2\x80\x93,甚至是那些没有现有应用程序配置文件的应用程序。他们可以通过导出名为 NvOptimusEnablement 的全局变量来完成此操作。Optimus\n 驱动程序会查找导出是否存在及其值。此时只有 DWORD 的 LSB\n 重要。值 0x00000001 表示应使用高性能图形执行渲染。\n 值为 0x00000000 表示应忽略此方法。

\n
\n\n

用法示例:

\n\n
extern "C" {\n    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt\n
Run Code Online (Sandbox Code Playgroud)\n