Образец XNA Bloom - пустой фиолетовый экран

Я поместил два класса Bloom в свой проект из образца Bloom и выполнил те же действия, что и образец, хотя, когда я запускаю проект, все, что я сейчас получаю, это пустой фиолетовый экран?

Я не получаю сообщение об ошибке или что-то в этом роде. Все, что я сделал, это буквально включил два класса Блума из образца, добавил его в качестве компонента и поместил вызов начала рисования в мою основную функцию рисования, как в примере. У меня есть другие цели рендеринга в моем проекте, но они не обязательно используются сразу. Если я достану цветы, все будет нормально. Как только я вызываю функцию begindraw(), все, что я получаю, это печально известный пустой фиолетовый экран...

У кого-нибудь есть идея, почему я это получаю?

  • Джейми.

1 ответ

Решение

Лучший способ диагностировать проблему такого рода - использовать PIX (в DirectX SDK).

Фиолетовый цвет указывает, что целевое содержимое рендеринга было очищено каркасом. Этот пост объясняет почему и предлагает некоторые решения.

Проще говоря, вы не можете рисовать вещи в обратном буфере, переключаться на цель рендеринга, а затем снова переключаться на обратный буфер и ожидать, что нарисованное все еще будет там. По крайней мере, не на XBox 360 - и PC-версия платформы XNA эмулирует это поведение.

Если вы хотите иметь возможность переключиться обратно в буфер резервного копирования и оставить его невредимым, вы можете изменить RenderTargetUsage установка для заднего буфера (или цели рендеринга, в зависимости от того, как вы рендеринг) PreserveContents, как объясняется в этом сообщении в блоге. Имейте в виду, что на Xbox 360 это огромный удар по производительности.

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

( Ссылка на похожий, недавний вопрос / ответ.)

Другие вопросы по тегам