我有使用渲染目标的问题,我希望有人可以向我解释。 我试图使用渲染目标渲染一些精灵,然后将所述渲染目标绘制到正常的后缓冲区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)。我在交换目标之前结束了所有精灵批次,我没有收到任何错误,所以我不知道该怎么做。显然,目标是能够同时在屏幕上看到我的所有精灵组。我在这里想念的是什么?
答案 0 :(得分:2)
This article explains why your render targets are being cleared
基本上这是XBox图形系统工作方式的一个怪癖。 XBox GPU只能渲染一个内存区域,而且它非常小。当您更改渲染目标时,该内存会被破坏。在XNA 2.0中(正如文章所解释的),Windows的默认行为已更改为与Xbox 360行为相匹配,以保持跨平台的一致性和快速性。
用于选择所需行为的参数是RenderTargetUsage
。请注意,保留XBox上的内容慢。
或者,您可以更改渲染的顺序,这样就不会遇到此问题。