我想更改我在SpriteBatch.Begin
和SpriteBatch.End
之间的RenderTargets。我已经知道这个工程:在哪里调用SetRenderTarget?
GraphicsDevice.SetRenderTarget(target1);
SpriteBatch.Begin()
SpriteBatch.Draw(...)
SpriteBatch.End()
GraphicsDevice.SetRenderTarget(target2);
SpriteBatch.Begin()
Spritebatch.Draw(...)
SPriteBatch.End()
但我真的很想来完成这项工作:
SpriteBatch.Begin()
GraphicsDevice.SetRenderTarget(target1);
SpriteBatch.Draw(...)
GraphicsDevice.SetRenderTarget(target2);
Spritebatch.Draw(...)
SpriteBatch.End()
我见过有人这样做,但我没有找到任何理由。
编辑:一点关于我为什么要这么做:
在我的项目,我用SpriteSortMode.Immediate(能够改变时,我想的BlendState),我只是通过遍历排序精灵列表,并绘制它们。 但是现在我想对一些精灵应用mutli通过着色器,但不是全部!我对着色器相当陌生,但根据我的理解,我必须使用第一遍在中间的一个绘制我的精灵,然后使用第二遍在最终的渲染目标上绘制中间精灵。 (我正在使用高斯模糊像素着色器)。 这就是为什么我想用我想要的目标,使用所需的着色器,而不必做出新的开始/结束。
那么,第二个代码块是否工作?如果是这样,它是否与第一个一样快? – user1306322 2013-03-01 15:19:22
@ user1306322不,它不起作用......结果有点怪异,就像我的第一次绘制调用终于在当前的RenderTarget上绘制了 – s0ubap 2013-03-01 15:21:18
然后你发现它不起作用的原因。当你调用'SptireBatch.End()'从'Begin'调用累积到现在的整批精灵被发送到当前的渲染目标。假设它有望像那样工作。 – user1306322 2013-03-01 15:23:43