Как открыть аппаратное ускоренное окно DirectX на дополнительном экране - PullRequest
0 голосов
/ 07 января 2011

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

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

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

Спасибо

1 Ответ

2 голосов
/ 07 января 2011

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

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

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

...