首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在紫色屏幕中更改RenderTarget结果?

在紫色屏幕中更改RenderTarget结果?
EN

Stack Overflow用户
提问于 2010-07-17 14:31:48
回答 3查看 2.7K关注 0票数 5

我试图在运行时更改RenderTargets,这样我就可以在运行时绘制一些元素,对它们进行操作,最后将纹理绘制到屏幕上。问题是,如果我在运行时更改RenderTarget,屏幕会变成紫色。这是我在Draw中得到的代码:

代码语言:javascript
复制
        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在它们上绘制),它会产生一个完全紫色的屏幕。我能做些什么来解决这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-17 14:51:07

看起来最好的选择是创建RenderTarget而不是绘制,在更新期间绘制到它,保存产生的纹理(并根据需要进行操作),然后在绘制期间绘制该纹理。

票数 3
EN

Stack Overflow用户

发布于 2013-02-01 01:47:53

我知道现在为时已晚,但解决方案是在清除屏幕并开始绘制其他项目之前写入RenderTarget。

代码语言:javascript
复制
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方法中呈现,这在许多方面都是违反直觉的。

票数 2
EN

Stack Overflow用户

发布于 2011-07-09 04:49:51

spritebatch.End()被调用时,对象被写到后台缓冲区,或者在你的例子中写到tempTarget。要制作纹理,

  • 将目标
  • call begin
  • call all
  • end spritebatch
  • set目标改回null

然后使用render2d

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3270507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档