XNA и RenderTargets - PullRequest
       17

XNA и RenderTargets

0 голосов
/ 10 февраля 2011

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

Вот код псевдо.

// 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 Ответ

2 голосов
/ 10 февраля 2011

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

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

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

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

...