NVIDIA Optimus 卡在 OpenGL 下不切换

Posted

技术标签:

【中文标题】NVIDIA Optimus 卡在 OpenGL 下不切换【英文标题】:NVIDIA Optimus card not switching under OpenGL 【发布时间】:2013-08-06 22:58:40 【问题描述】:

当我使用“glGetString(GL_VERSION)”和“glGetString(GL_SHADING_LANGUAGE_VERSION)”检查计算机上的OpenGL版本时,我得到了以下信息:

3.1.0 - 为 GL_VERSION 构建 8.15.10.2538

1.40 - 用于 GL_SHADING_LANGUAGE_VERSION 的英特尔内部版本 8.15.10.2538

当我运行“Geeks3D GPU Caps Viewer”时,它显示我的显卡(NVS 4200M)的 OpenGL 版本是

GL_VERSION:4.3.0

GLSL 版本:4.30 NVIDIA 通过 Cg 编译器

这是否意味着我的显卡只支持部分 OpenGL 4.3.0 功能,无法创建 4.3 上下文?

【问题讨论】:

这是您的笔记本电脑无法切换到使用NVIDIA芯片的问题;它改为使用英特尔芯片。搜索“OpenGL”和“Optimus”。 @Nicol Bolas 非常感谢!我更改了 NVIDIA 控制面板上的设置。 【参考方案1】:

您的显卡是NVIDIA Optimus 卡。这意味着它“自动”在集成英特尔显卡和专用 GPU 之间进行选择。英特尔显卡最高仅支持 3.1,而专用 GPU 支持 4.3。根据选择的版本,您最多只能支持该版本。 Optimus 的唯一问题是它只会自动选择 DirectX、CUDA、C++ AMP 和 OpenCL。

这引起了很多confusionandfrustration。

有一些解决方案可以强制使用专用 GPU:

    最简单的方法是通过 NVIDIA 控制面板强制您的应用程序使用专用 GPU。这通常是权宜之计,因为它只适用于您的机器。 在程序开始时调用一小部分(或链接到)CUDA 或 OpenCL 以触发切换到专用卡。但是,这会增加对 CUDA 或 OpenCL 的依赖。 导出全局变量_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;。这通常是最好的解决方案,但是,根据您使用的语言,您可能无法导出全局变量。

NVIDIA 发布了一份关于这样做的文档:http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf

【讨论】:

非常感谢!我按照您的第一个建议解决了这个问题。稍后我会阅读文档并检查其他解决方案。

以上是关于NVIDIA Optimus 卡在 OpenGL 下不切换的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 3.3 两个 GPU 上的两个不同结果 nVidia Optimus 与阴影映射

在交流适配器上使用 NVidia optimus 有啥好处吗?

Android Studio / AVD with bumblebee / nvidia optimus

Per-monitor DPI-Aware:NVIDIA Optimus 出现黑窗故障

当我启用 NVidia Optimus 时,为啥在 D3D11 中我的纹理上会出现条纹

OpenGL 2 和 Primusrun 在单个缓冲区上无显示(透明窗口)