Несколько устройств Direct3D 9 и Alt-tabbing - PullRequest
0 голосов
/ 23 января 2012

У меня есть приложение, которое создает устройство Direct3D 9 в полноэкранном режиме, а затем начинает представлять. Позже, после создания первого устройства, я временно создаю новое устройство Direct3D в оконном режиме (в том же потоке, но для другого окна). Я сразу же снова уничтожаю это устройство, но почему-то я больше не в состоянии выкинуть Alt-tab из полноэкранного приложения. Приложение просто остается сверху, а не опускается на задний план, хотя похоже, что приложение больше не в фокусе.

Если я создаю свое временное устройство как D3DDEVTYPE_NULLREF, я внезапно могу выйти из Alt-tab. У кого-нибудь есть идея, почему это так, и если да, то как я могу создать второе временное устройство, не испортив существующее устройство?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2013

Попробуйте сбросить первое устройство после создания второго.MSDN упомянул, что это правильный способ инициализации нескольких устройств.Однако я не могу найти статью об этом: (

Хотя мне никогда не приходилось делать полноэкранное и оконное устройство. Я пробовал только два полноэкранных устройства.

0 голосов
/ 24 января 2012

Когда вы создаете устройство D3D, вы указываете, к какому окну оно будет привязано (третий параметр вызова CreateDevice).Я могу предположить, что уничтожение второго устройства смещает фокус таким образом, который не виден первому устройству.Попробуйте явно вернуть фокус обратно в главное окно:

second_device->Release();
SetActiveWindow(hWnd);

Кстати, если вы используете параллельный рендеринг таким образом, рассмотрите возможность использования целей рендеринга или цепочек подкачки.В документах DX9 говорится, что переключение между устройствами значительно снижает производительность.

...