c# – XNA何时放弃渲染目标内容?

我知道XNA中的渲染目标是不稳定的,但它们有多么不稳定?我找不到任何文件来告诉他们的内容何时被丢弃.是在你开始吸引他们的时候,还是在任何时候?

我想简单地绘制一个渲染目标,然后无限期地将其用作Texture2D.这可能吗?我是否需要启用RenderTargetUsage.PreserveContents才能使其正常工作?我已经读过PreserveContents在Xbox和手机硬件上非常慢.

解决方法:

Jonathan给出了RenderTargetUsage的一个很好的解释,但是我想澄清一些关于原始问题的事情,包括使用RenderTarget2D作为Texture2D:

简而言之,RenderTargetUsage控制表面在设备上设置为渲染目标时的行为.如果未将其设置为保留内容,则会将其清除.在Xbox 360上,这恰好是硬件的一个怪癖(性能).在Windows上,只需在设置表面时清除表面即可模拟匹配Xbox 360.

但是,如果你将它用作纹理,这是无关紧要的.当您想要多次渲染到一个表面(每次将其设置为设备)而不丢失先前的内容时,这只是一个问题.

如果你只将它设置为渲染目标一次,在游戏开始时,保留设置是什么并不重要,因为它永远不会再被设置为渲染目标.

您关心的是IsContentLost属性(MSDN)或ContentLost事件(MSDN).如果渲染到渲染目标的内容丢失(由于设备更改,例如:全屏显示),将设置/引发这些内容.

如果您每帧重新渲染渲染目标,则无需检查内容丢失.但是,如果您希望在游戏开始时创建渲染目标并继续使用它们,则需要确保它们在创建它们的帧之后没有丢失.

(请注意,您不必担心在Draw调用中会发生内容丢失的情况.我有理由相信它只能在帧之间发生.)

上一篇:c – 如何在相机朝向的方向上正确移动相机


下一篇:【DirectX 12 GJ的龙书学习笔记 一】前言与配置环境