当我使用"glGetString(GL_VERSION)"one_answers"glGetString(GL_SHADING_LANGUAGE_VERSION
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 Optimus卡。这意味着它"自动"在集成英特尔图形和专用GPU之间进行选择。英特尔图形处理器最多只支持3.1,而专用GPU支持4.3。根据所选的版本,您最多只能支持该版本。Optimus唯一的问题是它只能自动选择DirectX、CUDA、C++AMP和OpenCL。
这引起了很多困惑和沮丧。
有几个解决方案可以强制使用专用GPU:
- 最简单的方法是,通过NVIDIA控制面板强制应用程序使用专用GPU。这通常是一种权宜之计,因为它只适用于您的机器
- 在程序开始时调用CUDA或OpenCL的一小部分(或链接),使其触发切换到专用卡。然而,这增加了对CUDA或OpenCL的依赖
- 导出全局变量
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
。这通常是最好的解决方案,但是,根据您使用的语言,您可能无法导出全局变量
NVIDIA发布了一份相关文档:http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf