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

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

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

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

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

Вопрос, который, кажется, имеет ту же проблему, но не имеет решения: Как отобразить полноэкранный кадр с разрешением, отличным от моего дисплея?

0

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]