2013-12-21 5 views
0

С одним монитором моя программа работает как в оконном, так и в полноэкранном режиме (с использованием любого разрешения, выбранного из EnumAdapterModes), но когда я подключаю свой второй монитор (запуск одного и того же кода). Я могу создать полноэкранное устройство с любым разрешением от EnumAdapterModes, но только в собственном разрешении (1600 x 900) оно отображает сцену, иначе экран будет черным среди других проблем, перечисленных ниже.Полноэкранное устройство Direct3D9 отображается только при собственном разрешении, когда второй монитор подключен к

То, что я обнаружил, до сих пор:

  • Эта проблема не возникает в оконном или мультиголовочного режиме
  • Я все еще могу оказать текстуру (я должен был переключить режимы, чтобы отобразить его, хотя)
  • Все вызовы функций возвращают коды успеха (в том числе TestCooperativeLevel)
  • Если я попытаюсь провести обратный буфер с использованием функций Clear или DrawPrimitive или вызвать Present (который все еще оставляет черный экран), то вызовы GetRenderTargetData завершаются с ошибкой и пытаются заблокировать громкость текстура будет возвращать различные смолы ломтика на подуровней
  • Коммерческие игры, которые используют Direct3D9 (Portal) не имеют каких-либо проблем переключения между разрешением с моим вторым монитором подключенного к сети, так что должно быть решение

Проблема, кажется, чтобы быть связанным с обратным буфером, созданным временем выполнения Direct3D9, но единственным решением, которое я могу придумать, является принудительный режим multihead на устройствах с несколькими мониторами, любые идеи?

Вопрос, который, кажется, есть та же проблема, но не хватает решение: How do I render a fullscreen frame with a different resolution than my display?

ответ

0

Наконец понял это, кажется, ошибка драйвера в Windows Vista и более поздних версий и используя Direct3D9Ex исправили проблему.

Я не хотел использовать Direct3D9Ex, потому что он был введен только в Windows Vista, и я хотел как можно меньше поддерживать Windows XP, но MSDN имеет примерный пример того, как поддерживать оба, так что все хорошо.

+0

Я бы не беспокоился о том, что XP в апреле 2014 года не поддерживается. Также большинство геймеров находятся в Windows 7 и имеют аппаратное обеспечение для соответствия. – Mgetz

+0

Я в основном консольный геймер, поэтому у меня все еще есть XP (мой рабочий стол), и я знаю несколько человек, которые все еще имеют его, но я начинаю разработку игр для ПК, и в основном я использую свой ноутбук для разработки сейчас (Windows 7), но мой ноутбук - не совсем игровой автомат. – Alex

+0

Напомним, что Microsoft не будет исправлять XP после этого апреля, а DirectX 9 официально не рекомендуется в этом вопросе, я бы не ожидал, что он будет действовать так же надежно, как DirectX 10/11 – Mgetz