2013-04-22 1 views
5

На некоторых компьютерах установлено более одной видеокарты/набора микросхем, даже если (например, для ноутбуков) у них не более одного монитора.Как создать контекст OpenGL с определенным графическим драйвером?

У меня проблемы с системой ноутбуков, в которой есть графическое оборудование Intel и Nvidia. Драйверы Intel, как известно, ужасны в поддержке OpenGL, и мой код работает против необъяснимой ошибки рендеринга, потому что при создании контекста рендеринга, по-видимому, по умолчанию используется система Intel, а не Nvidia.

Есть ли способ предотвратить это при запуске? Чтобы сказать что-то вроде «опроса для всех доступных графических драйверов, избегайте драйверов Intel, если это возможно, и создайте мне контекст рендеринга OpenGL с драйвером, который будет работать»?

+0

На панели NVidia вы можете выбрать графический процессор по умолчанию –

+0

@MichaelIV: Спасибо, но это не то, о чем я прошу. –

+0

Речь идет не только о драйверах, но и о графическом процессоре. Многие современные ноутбуки имеют две карты: Intel и выделенные (NVidia или ATI). Поэтому вы должны сначала установить аппаратное обеспечение с помощью предубеждения или интерфейса Windows, например, панели NVidia. Если вы Переключение аппаратного обеспечения, сначала попытка выбрать разные драйверы, не имеет смысла. –

ответ

1

Там нет переносимого способа сделать то, что вы просите, но этот документ описывает, как заставить «График High Performance Рендер» на системы с поддержкой технологией NVIDIA Optimus:

http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf 

В частности, обратитесь к разделу " Глобальная переменная NvOptimusEnablement (новый в Driver Release 302)», в котором говорится:

Начиная с драйверами Release 302, разработчики приложений могут прямой драйвер Optimus во время выполнения использовать High Performance Графика для визуализации любого приложения - даже тех приложений, для которых нет существующего профиля приложения. Они могут сделать это с помощью , экспортируя глобальную переменную с именем NvOptimusEnablement. Драйвер Optimus ищет наличие и ценность экспорта. В настоящее время имеет значение только LSB DWORD. Значение 0x00000001 указывает , что рендеринг должен выполняться с использованием высокопроизводительной графики. Значение 0x00000000 указывает, что этот метод следует игнорировать.

Пример:

extern "C" { 
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; 
} 

Другой возможностью является расширение WGL_nv_gpu_affinity, но ваш контекст WGL должен поддерживать его, и я не уверен, если он работает на смешанных системах Intel/NVIDIA:

http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt