Карта NVIDIA Optimus не переключается под OpenGL

Когда я использовал "glGetString(GL_VERSION)" и "glGetString(GL_SHADING_LANGUAGE_VERSION)" для проверки версии OpenGL на моем компьютере, я получил следующую информацию:

3.1.0 — Сборка 8.15.10.2538 для GL_VERSION

1.40 — Intel Build 8.15.10.2538 для GL_SHADING_LANGUAGE_VERSION

Когда я запустил Geeks3D GPU Caps Viewer, он показал версию OpenGL моих видеокарт (NVS 4200M).

GL_ВЕРСИЯ: 4.3.0

Версия GLSL: 4.30 NVIDIA через компилятор Cg

Означает ли это, что мои видеокарты поддерживают только некоторые функции OpenGL 4.3.0, и я не могу создать контекст 4.3?


person Amy    schedule 06.08.2013    source источник
comment
Это проблема с тем, что ваш ноутбук не может переключиться на использование чипа NVIDIA; вместо этого используется чип Intel. Найдите OpenGL и Optimus.   -  person Nicol Bolas    schedule 06.08.2013
comment
@Nicol Bolas Большое спасибо! Я меняю настройки в панели управления NVIDIA.   -  person Amy    schedule 06.08.2013


Ответы (1)


Ваша графическая карта представляет собой карту NVIDIA Optimus. Это означает, что он «автоматически» выбирает между встроенной графикой Intel и выделенным графическим процессором. Графика Intel поддерживает только до 3.1, а выделенный графический процессор поддерживает 4.3. В зависимости от того, какой из них выбран, у вас будет поддержка только до этой версии. Единственная проблема с Optimus заключается в том, что он автоматически подхватывает только DirectX, CUDA, C++ AMP и OpenCL.

Это вызвало много замешательства. и разочарование.

Есть несколько решений, позволяющих принудительно использовать выделенный графический процессор:

  1. Самый простой способ — заставить ваше приложение использовать выделенный графический процессор через панель управления NVIDIA. Как правило, это временное решение, поскольку оно будет работать только на вашем компьютере.
  2. Вызовите небольшой фрагмент (или ссылку на) CUDA или OpenCL в начале вашей программы, чтобы он активировал переключение на выделенную карту. Однако это добавляет зависимость от CUDA или OpenCL.
  3. Экспортируйте глобальную переменную _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;. Как правило, это лучшее решение, однако в зависимости от используемого языка вы не сможете экспортировать глобальные переменные.

NVIDIA выпустила документ об этом: http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf

person Robert Rouhani    schedule 06.08.2013
comment
Большое тебе спасибо! Я решаю проблему, следуя вашему первому предложению. Я прочитаю документ и проверю другие решения позже. - person Amy; 06.08.2013