2012-01-23 3 views
0

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

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

ответ

0

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

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

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

+0

Я думал это тоже может испортить стили окон в полноэкранном окне. Я дам SetActiveWindow, и нет, я не использую второе устройство для какого-либо рендеринга. Мне просто нужен IDirect3DDevice9 (и его виртуальная таблица) – dreijer

+0

Это не имело никакого отношения, к сожалению – dreijer

+0

Ну, после некоторого более подробного описания создания нескольких устройств есть еще одна идея: второе устройство устанавливает уровень сотрудничества, несовместимый с первым. Вы можете избежать этого, указав D3DCREATE_NOWINDOWCHANGES в создание второго устройства или e xclicit вызов SetCooperativeLevel при уничтожении второго устройства. – real4x

0

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

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

+0

Ниже приведена статья MSDN. Будь то решение проблемы заявителя - другое дело! [Работа с несколькими системами мониторов (Direct3D 9)] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb206364 (v = vs.85) .aspx) – simonobo

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