Здравствуйте. Сначала опишу как обстоят дела. Код из OgreD3D11RenderSystem:
BOOL D3D11VideoModeList::enumerate() { UINT adapter = mpDriver->getAdapterNumber( ); HRESULT hr; IDXGIOutput *pOutput; for( int iOutput = 0; ; ++iOutput ) { // AIZTODO: one output for a single monitor ,to be handled for mulimon if ( adapter == 1) { IDXGIAdapter1 *ptAdapter = mpDriver->getDeviceAdapter( ); hr = ptAdapter->EnumOutputs( iOutput, &pOutput ); } else { hr = mpDriver->getDeviceAdapter( )->EnumOutputs( iOutput, &pOutput ); } if( DXGI_ERROR_NOT_FOUND == hr ) { return false; }
У меня Acer Aspire V3. На нем стоит встроенная видеокарта Intel HD Graphics 4000 и выделенная NVidia 650m. Обе поддерживают DirectX 11, причем как я понял, первая на начальном уровне. Мне нужно задействовать выделенную, а не выходит. Или проблема в самом Ogre(приведенный код), или в моей системе(Windows 8). Удается запустить DirectX 9 на встроенном адаптере, поскольку он выбирается по умолчанию. В первый раз output находится нормально. Когда дело доходит до адаптера с номером 1, DXGI_NOT_FOUND. Функция тут же завершается. Output - это выход видеокарты на монитор? Мне советовали подключить второй монитор к другому физическому порту, но второго монитора у меня нет. В настройках NVidia Control Panel в качестве предпочтительного адаптера стоит выделенный. Информация с MSDN: причина ошибки - выход индекса output за пределы диапазона. Что это значит? Еще было подозрение, что нужно делать pOutput->release(ага, тоже с MSDN инфа), но это не помогло. Посоветуйте что-нибудь.
В Win8 не знаю, но в Win7 есть клик правой кнопкой\запустить с графическим процессором\высокопроизводительный процессор NVIDIA. Вдруг установка по умолчанию почему-то не срабатывает.
А из программы и должен быть только один адаптер доступен, второй не удастся выбрать.
Что-то начинает проясняться. Вероятно, я ошибся и проблемы не было. Как бы мне узнать, на какой видеокарте оно по умолчанию запускается. Всем спасибо, помощи больше не нужно.
TheOrca
> Как бы мне узнать, на какой видеокарте оно по умолчанию запускается.
А никак, зависит от настроек драйвера
В Огре такой порядок работы:
- Создаются подсистемы рендера(как плагины), при этом создается устройство по умолчанию.
- Читается файл настроек, выводится диалог, где можно выбрать подсистему рендера и адаптер, настройки пишутся в файл
- Устройство удаляется нафиг и создается заново на нужном адаптере. Есть функция EnumAdapters, принадлежащая фабрике DXGI, которая их перечисляет.
Поясните вами написанное. Зачем городить этот огород, если доступен один адаптер?
ну кстати можно заставить, чтобы драйвер автоматически перенаправлял приложение на NVIDIA видеокарту (ссылка: http://developer.download.nvidia.com/devzone/devcenter/gamegraphi… gPolicies.pdf )
вкратце: заэкспортить из бинарника переменную unsigned int NvOptimusEnablement = 1
TheOrca
> Зачем городить этот огород, если доступен один адаптер?
Ну так он же не для Optimus сделан, а просто для случая когда у нас несколько видеокарт в системе.
Тема в архиве.
Тема закрыта.