XNA и RenderTargets

У меня проблема с использованием целей рендеринга, и я надеюсь, что кто-нибудь сможет мне это объяснить. Я пытаюсь использовать цель рендеринга для рендеринга некоторых спрайтов, а затем нарисовать указанную цель рендеринга в нормальный задний буфер на 50% непрозрачным (нулевым). Это прекрасно работает, за исключением случаев, когда я использую цель более одного раза в вызове отрисовки, и в этом случае на экране появится только последняя группа спрайтов.

Вот некоторый код psuedo.

// Normal Sprite Drawing.  
DrawSomeSprites();

SetRenderTarget(CompositeTarget);

// These go on the render target.  
DrawSomeMoreSprites();

SetRenderTarget(null);

// And now I draw onto the back buffer.  
DrawSprite(CompositeTarget);


// So now I want to draw another bunch of sprites via my render target using the same approach.
SetRenderTarget(CompositeTarget);

// These are the only sprites that I can see on the screen.
DrawSomeMoreSprites();             
SetRenderTarget(null);
DrawSprite(CompositeTarget);

Я надеюсь, что в этом есть смысл. Мне кажется, что каждый раз, когда я меняю цель рендеринга, предыдущая цель рендеринга (ноль) по какой-то причине очищается. Я заканчиваю все свои партии спрайтов перед тем, как менять цели, и я не получаю никаких ошибок, поэтому я не знаю, что здесь делать. Очевидно, что цель состоит в том, чтобы иметь возможность видеть все мои группы спрайтов на экране одновременно. Что мне здесь не хватает??

1 ответ

Решение

Эта статья объясняет, почему ваши цели рендеринга очищаются.

По сути, это изюминка работы графической системы XBox. Есть только одна область памяти, в которую может рендерить XBox GPU, и она довольно маленькая. Когда вы меняете цели рендеринга, эта память забивается. В XNA 2.0 (как объясняется в статье) поведение Windows по умолчанию было изменено, чтобы соответствовать поведению Xbox 360, чтобы обеспечить согласованность и скорость на разных платформах.

Параметр для выбора поведения, которое вы хотите RenderTargetUsage, Просто имейте в виду, что сохранение содержимого на XBox происходит медленно.

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

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