我已经从Bloom示例中将两个bloom类放入我的项目中,并按照与示例相同的步骤进行操作,但是当我启动项目时,我现在得到的只是一个空白的紫色屏幕?
我没有收到错误或其他任何内容,我所做的只是从示例中包含两个bloom类,将其作为一个组件添加,并在我的主绘制函数中放置begin draw调用,就像在示例中一样。我的项目中有其他渲染目标,但它们不一定会被立即使用。如果我拿出盛开的东西,一切都正常。一旦我调用begindraw()函数,我得到的就是臭名昭着的空白紫色屏幕......
有没有人知道我为什么会这样做?
答案 0 :(得分:1)
诊断此类问题的最佳方法是使用PIX(在DirectX SDK中)。
紫色表示框架已清除渲染目标内容。 This blog post explains why并提供一些解决方案。
简单地说,你不能将东西绘制到后台缓冲区,切换到渲染目标,然后再次切换到后台缓冲区,并期望绘制的内容仍然存在。至少不在XBox 360上 - 而且XNA框架的PC版模仿这种行为。
如果您希望能够切换回后缓冲区并使其无损伤,可以更改后缓冲区的RenderTargetUsage
设置(或渲染目标,具体取决于您的方式)渲染)到PreserveContents
,如博客文章中所述。请注意,在Xbox 360上,这是巨大的性能影响。
一种可能更好,更兼容的方法是调整绘图的顺序,这样你就不必“返回”表面。