Лучшие практики для Alt-Tab поддерживают в приложении DirectX?

В нашей команде мы используем механику рабочего пространства для совместного использования одних и тех же настроек рабочего пространства, помещая файлы предпочтений на общий диск. Небольшое введение можно прочитать здесь .

38
задан chaos 9 February 2011 в 18:43
поделиться

4 ответа

Я предполагаю, что вы используете C ++ для целей моих ответов, но если вы можете позволить себе использовать C #, XNA ( http://creators.xna.com/ ) - отличная игровая платформа, которая решает все эти проблемы за вас.

1]

Эта статья полезна для событий Windows в оконной процедуре, чтобы определить, когда окно теряет или получает фокус, вы можете справиться с этим на ваше главное окно: http://www.functionx.com/win32/Lesson05.htm . Также проверьте сообщение WM_ACTIVATEAPP здесь: http://msdn.microsoft.com/en-us/library/ms632614 (VS.85) .aspx

2]

3]

Я бы никогда не отключал Alt-Tab. Вероятно, вам нужна минимальная загрузка процессора, когда приложение неактивно, потому что пользователь, вероятно, использует Alt-Tab, потому что он хочет сделать что-то еще, чтобы вы могли полностью приостановить приложение или уменьшить количество кадров, отображаемых в секунду. Если приложение свернуто, вам, конечно, тоже ничего не нужно рендерить. Подумав о сетевой игре, мое лучшее решение состоит в том, что вы все равно должны уменьшить количество кадров, отображаемых в секунду, а также количество обрабатываемых сетевых пакетов, возможно, даже отбрасывая многие из входящих пакетов, пока игра не будет повторно активирована.

4]

Честно говоря, я бы просто придерживался DirectX 9.0c (или DirectX 10, если вы хотите ограничить целевую операционную систему Vista и новее), если это вообще возможно :)

Наконец, DirectX sdk содержит множество руководств и примеров: http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

43
ответ дан 27 November 2019 в 03:50
поделиться

В DX8 и 9 (и 10?), Если вы создаете свои ресурсы (в основном вершинные и индексные буферы и текстуры) с помощью D3DPOOL_MANAGED, они будут сохраняться на потерянных устройствах и не будут нуждаться в перезагрузке. Это потому, что они хранятся в системной памяти, а среда выполнения DX автоматически копирует в видеопамять. Однако существует снижение производительности из-за копирования, и это не рекомендуется для быстро меняющихся данных вершин. Конечно, сначала вы должны профилировать, чтобы определить, есть ли проблема со скоростью: -)

1
ответ дан 27 November 2019 в 03:50
поделиться

Все серьезные приложения D3D должны иметь возможность обрабатывать потерянные устройства, поскольку это может происходить по разным причинам.

В DX10 под Vista есть новая функция «Обнаружение и восстановление тайм-аута» "функция, которая, по моему опыту, делает сброс графических устройств обычным явлением, что может привести к потере устройства для вашего приложения. Кажется, что по мере развития драйверов ситуация улучшается, но вы все равно должны с этим справиться.

2
ответ дан 27 November 2019 в 03:50
поделиться

Мы решили эту проблему, вообще не используя полноэкранное устройство DirectX - вместо этого мы использовали полноэкранное окно с самым верхним флагом, чтобы скрыть панель задач. Если вы нажмете Alt-Tab вне этого, вы можете удалить флаг и свернуть окно. Ресурсы текстуры поддерживаются окном.

Однако этот подход не обрабатывает событие потери устройства из-за «блокировки экрана», Ctrl + Alt + Delete, подключений к удаленному рабочему столу, переключения пользователей и т.п. Но их не нужно обрабатывать очень быстро или эффективно (по крайней мере, так было в нашем приложении)

2
ответ дан 27 November 2019 в 03:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: