2013-05-31 4 views
3

я захватываемых this multi window тестовый код, изменил его использовать D3DXCreateTeapot вместо D3DXLoadMeshFromX (я не мог найти файл teapot.x), переместил EndScene вызов ниже DrawText вызова и установить NUM_WINDOWS 1. С эти незначительные изменения, тест работает и создает два окна, каждый со своим чайником.аппаратное ускорение с несколькими мониторами

Я построил тест и развернул его на машине с графическим процессором Intel HD Graphics с двумя головками, каждый из которых прикреплен к монитору. Затем я переместил одно окно на каждый монитор и увеличил оба окна до примерно 80% каждого пространства монитора.

С помощью этой настройки, которая очень близка к тому, что нужно моему приложению, окно на вторичном мониторе всегда идет слишком медленно. Если я обмениваю окна, это то же самое: во втором мониторе начинает сканирование и замедляется вся система.

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

Неужели невозможно получить аппаратное ускорение для обоих мониторов в оконном режиме? Унаследованная версия нашего приложения использует MFC + DirectDraw и позволяет выполнять достаточно быстро, но это устаревшие технологии, и мы перестали возвращаться туда.

ответ

2

У вас есть 3 варианта:

  1. Try много комбинаций, как: D3DPRESENT_INTERVAL_IMMEDIATE + (D3DSWAPEFFECT_FLIP или D3DSWAPEFFECT_COPY) + D3DCREATE_ADAPTERGROUP_DEVICE. Возможно, некоторые из них будут предлагать лучшее качество .

  2. Извлечь поверхность, преобразовать в растровое изображение и использовать его, как и любое другое растровое изображение в вашей форме. Что-то вроде этого D3DXSaveSurfaceToFileInMemory.

  3. Измените свой код на DirectX11. У вас больше возможностей для взаимодействия с GDI. Улучшение поведения рендеринга. Возможно, лучшие водители.

Несколько лет назад я сделал несколько оконных кодов, а также несколько устройств, используя DirectX10/11. Я не могу сказать о DirectX9, имеющем эту проблему, кажется абсурдной для меня, но может быть вашей версией Windows или драйвером Intel.

+0

О пункте 1, независимо от того, какие параметры я устанавливаю, вторичный монитор всегда медленный. Как будто он не может включить аппаратное ускорение вообще. Точка 3 не является опцией из-за ограничений по времени (код Direct3d9 слишком велик и не изолирован должным образом для порта Dx11, насколько я бы хотел это сделать). Попробуем попробовать 2. В то же время +1 –