Карта 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_VERSION: 4.3.0
Версия GLSL: 4.30 NVIDIA через компилятор Cg
Означает ли это, что мои видеокарты поддерживают только некоторые функции OpenGL 4.3.0, и я не могу создать контекст 4.3?
1 ответ
Ваша видеокарта является картой NVIDIA Optimus. Это означает, что он "автоматически" выбирает между встроенной графикой Intel и выделенным графическим процессором. Графика Intel поддерживает только до 3.1, в то время как выделенный графический процессор поддерживает 4.3. В зависимости от того, какой из них выбран, у вас будет поддержка только до этой версии. Единственная проблема с Optimus состоит в том, что он будет автоматически выбирать только DirectX, CUDA, C++ AMP и OpenCL.
Это вызвало много путаницы и разочарования.
Существует несколько решений для использования выделенного графического процессора:
- Самое простое - заставить ваше приложение использовать выделенный графический процессор через панель управления NVIDIA. Как правило, это временное решение, так как оно будет работать только на вашей машине.
- Вызвать небольшой кусочек (или ссылку на) CUDA или OpenCL в начале вашей программы, чтобы заставить его переключиться на выделенную карту. Это добавляет зависимость к CUDA или OpenCL, однако.
- Экспорт глобальной переменной
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
, Как правило, это лучшее решение, однако, в зависимости от того, какой язык вы используете, вы не сможете экспортировать глобальные переменные.
NVIDIA выпустила документ об этом: http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf