opengl - NVIDIA Optimus 卡无法在 OpenGL 下切换

标签 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”时,它显示我的显卡(NVS 4200M)的OpenGL版本是

GL_VERSION:4.3.0

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

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

最佳答案

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

这引起了很多confusion and frustration .

有几种解决方案可以强制使用专用 GPU:

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

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

    关于opengl - NVIDIA Optimus 卡无法在 OpenGL 下切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18071669/

    相关文章:

    linux - 在 Linux 的多个平台上启用 OpenCL?如何处理 ICD 文件?

    nvidia - Xubuntu 12.04 显示器(带大黄蜂)升级后搞砸了

    c++ - GL_TEXTURE_MIN_FILTER 采样附近纹素的最大值

    java - 是否可以在 Nvidia 3D Vision 硬件上运行 Java3D 应用程序?

    c++ - 为什么基于 Dear ImGui 的渲染器这么慢?

    cudamemcpyasync 和流行为理解

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

    android - 在设备上退出 system.img

    OpenGL 碰撞检测

    c++ - 了解现代 OpenGL 中的代码绘制 .obj 并设置不同的位置