2011-01-07 3 views
0

Я ищу для создания аппаратного ускоренного окна DirectX (9 на данный момент) на дополнительном экране. Этот экран подключается к тому же графическому дисплею, что и основной экран (по крайней мере, на данный момент).Как открыть аппаратное ускоренное окно DirectX на вторичном экране

В настоящее время, когда я пытаюсь открыть окно на вторичном экране в зависимости от положения окна или перетаскивая его туда, загрузка процессора скачком примерно на 10%, что, по-видимому, указывает на то, что окна переключаются на резерв программного обеспечения, а не на аппаратное ускорение.

Машина - это Windows XP с графической картой NVIDIA (различные карты, как это работает на нескольких машинах), с последним драйвером. Он также запускает CUDA в то же время для создания изображений, если это имеет значение. Язык программирования C++, ручное окно и создание очереди сообщений, не tookbox используется в данный момент для управления графического интерфейса пользователя

Благодаря

ответ

1

Когда вы звоните CreateDevice, убедитесь, использовать индекс монитора вы ориентируетесь. Стандартное значение D3DADAPTER_DEFAULT равно 0, что является основным монитором. DirectX немного путается таким образом, но если окно находится на другом мониторе, чем указано в CreateDevice, то он будет без проблем отображать в фреймбуфере, ориентированном на первый монитор, а затем буферизировать копию на фреймбуфер на втором мониторе с помощью окна ОС менеджер.

Итак, быстрое и грязное решение состоит в том, чтобы использовать CreateDevice (1, ...), поскольку это почти всегда связано с индексацией установки двойного монитора.

Более надежное решение - использовать MonitorFromWindow (hwnd), чтобы найти монитор, который больше всего покрывает окно, а затем перебирать доступные адаптеры d3d, которые ищут тот, который возвращает тот же самый дескриптор монитора, используя GetAdapterMonitor(). Если у вас есть система с более чем двумя мониторами, или если вы не знаете заранее, какой монитор вы хотите и просто имеете HWND, вам нужен более длинный метод.

Смежные вопросы