在紫色屏幕中更改RenderTarget结果?
我试图在运行时更改RenderTargets,因此我可以在运行时绘制一些元素,操纵它们,然后最终将纹理绘制到屏幕上。 问题是,如果我在运行时更改RenderTarget,屏幕会变为紫色。 这是我在Draw中得到的代码:
RenderTarget2D tempTarget = new RenderTarget2D(GraphicsDevice, 128, 128, 1, GraphicsDevice.DisplayMode.Format, GraphicsDevice.PresentationParameters.MultiSampleType, GraphicsDevice.PresentationParameters.MultiSampleQuality, RenderTargetUsage.PreserveContents); GraphicsDevice.SetRenderTarget(0, tempTarget); GraphicsDevice.Clear(ClearOptions.Target, Color.SpringGreen, 0, 0); GraphicsDevice.SetRenderTarget(0, null);
如果我在运行时创建RenderTarget似乎并不重要(我确实需要在运行时创建内存中的纹理并使用SpriteBatch绘制它们),这会导致完全紫色的屏幕。 我该怎么做才能解决这个问题?
看起来最好的选择是在Draw之外的某处创建RenderTarget,在Update期间绘制它,保存生成的纹理(并根据需要进行操作),然后在Draw期间绘制该纹理。
我知道这已经很晚了,但解决方案是在清除屏幕并开始绘制其他项目之前写入RenderTarget。
protected override void Draw(GameTime gameTime) { GraphicsDevice.SetRenderTarget(_renderTarget); //... //Perform Rendering to the specified target //... GraphicsDevice.SetRenderTarget(null); GraphicsDevice.Clear(Color.CornflowerBlue); //... //Code that draws to the users screen goes here //... }
这应该会阻止您按照其他人的建议在Update方法中呈现,这在许多方面都是违反直觉的。
当spritebatch.End()
被调用时,对象被写入后备缓冲区或者你的情况下写入tempTarget
。 要制作纹理,
- 改变目标
- 打电话开始
- 打电话给所有的抽奖
- 结束spritebatch
- 将目标设置为null
然后使用render2d