XNA和RenderTargets

时间:2011-02-10 03:55:52

标签: c# xna rendering

我有使用渲染目标的问题,我希望有人可以向我解释。 我试图使用渲染目标渲染一些精灵,然后将所述渲染目标绘制到正常的后缓冲区50%opaque(null)上。它工作得很好,除非我在绘图调用中多次使用目标,在这种情况下,屏幕上只会出现最后一组精灵。

这是一些伪代码。

// 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);

我希望这是有道理的。在我看来,每次我更改渲染目标时,由于某种原因清除前一渲染目标(null)。我在交换目标之前结束了所有精灵批次,我没有收到任何错误,所以我不知道该怎么做。显然,目标是能够同时在屏幕上看到我的所有精灵组。我在这里想念的是什么?

1 个答案:

答案 0 :(得分:2)

This article explains why your render targets are being cleared

基本上这是XBox图形系统工作方式的一个怪癖。 XBox GPU只能渲染一个内存区域,而且它非常小。当您更改渲染目标时,该内存会被破坏。在XNA 2.0中(正如文章所解释的),Windows的默认行为已更改为与Xbox 360行为相匹配,以保持跨平台的一致性和快速性。

用于选择所需行为的参数是RenderTargetUsage。请注意,保留XBox上的内容

或者,您可以更改渲染的顺序,这样就不会遇到此问题。