我试图在运行时更改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在它们上绘制),它会产生一个完全紫色的屏幕。我能做些什么来解决这个问题呢?
发布于 2010-07-17 14:51:07
看起来最好的选择是创建RenderTarget而不是绘制,在更新期间绘制到它,保存产生的纹理(并根据需要进行操作),然后在绘制期间绘制该纹理。
发布于 2013-02-01 01:47:53
我知道现在为时已晚,但解决方案是在清除屏幕并开始绘制其他项目之前写入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方法中呈现,这在许多方面都是违反直觉的。
发布于 2011-07-09 04:49:51
当spritebatch.End()被调用时,对象被写到后台缓冲区,或者在你的例子中写到tempTarget。要制作纹理,
然后使用render2d
https://stackoverflow.com/questions/3270507
复制相似问题