NVIDIA Optimus卡不能在OpenGL下切换

时间:2013-08-06 04:10:35

标签: opengl nvidia optimus

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

3.1.0 - 为GL_VERSION构建8.15.10.2538

1.40 - 针对GL_SHADING_LANGUAGE_VERSION的英特尔Build 8.15.10.2538

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

GL_VERSION:4.3.0

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

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

1 个答案:

答案 0 :(得分:13)

您的显卡是NVIDIA Optimus卡。这意味着它在集成的英特尔图形和专用GPU之间“自动”选择。英特尔图形仅支持3.1,而专用GPU支持4.3。根据选择的那个,您将只支持该版本。 Optimus唯一的问题是它只能自动获取DirectX,CUDA,C ++ AMP和OpenCL。

这导致了很多confusion and frustration

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

  1. 最简单,强制您的应用程序通过NVIDIA控制面板使用专用GPU。这通常是一种临时解决方案,因为它只适用于您的机器。
  2. 在程序开头调用一小部分(或链接到)CUDA或OpenCL,以使其触发切换到专用卡。但是,这会增加对CUDA或OpenCL的依赖性。
  3. 导出全局变量_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;。这通常是最好的解决方案,但是,根据您使用的语言,您可能无法导出全局变量。
  4. NVIDIA发布了一份关于这样做的文件:http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf