存储从RenderTarget2D到Color Array Error的渲染

时间:2012-06-28 02:44:50

标签: c# xna render rendertarget

所以我试图将渲染目标的结果存储到一个Colors数组中,这样我就可以使用迭代器单独操作它们。由于某种原因,下面的代码将数组中的每个值设置为R = 0,G = 0,B = 0,A = 0。好像从未初始化过。 GetData方法使用不正确吗?还有别的吗?它应该是一个非常丰富多彩的图像,绝对不是透明的。

问题不在于纹理没有正确绘制,我执行了没有设置渲染目标的代码(使用默认的后备缓冲区),游戏运行得非常好。

            //Creating a new render target and setting it
        RenderTarget2D unprocessed = new RenderTarget2D(graphics.GraphicsDevice, Window.ClientBounds.Width, Window.ClientBounds.Height,false,SurfaceFormat.Color,DepthFormat.Depth24,4,RenderTargetUsage.PreserveContents);
        graphics.GraphicsDevice.SetRenderTarget(unprocessed);

        //Drawing background and main player
        spriteBatch.Draw(bgTex,new Rectangle(0,0,Window.ClientBounds.Width,Window.ClientBounds.Height),Color.White);
        mainPlayer.Draw(spriteBatch);

        //resetting render target
        graphics.GraphicsDevice.SetRenderTarget(null);

        //creating array of Color to copy render to
        Color[] baseImage = new Color[Window.ClientBounds.Width * Window.ClientBounds.Height];
        //I pause the program here and baseImage is an array of black transparent colors
        unprocessed.GetData<Color>(baseImage);

        spriteBatch.End();

2 个答案:

答案 0 :(得分:0)

问题解决了。 基本上它是黑色的原因是因为spograbatch需要在渲染目标“获取”数据之前先结束。这就是为什么在spograbatch过程中颜色值仍然是黑色的原因。我做了什么来修复它是我在绘图发生之前和之后使spritebatch开始和结束,并立即修复了问题。

答案 1 :(得分:0)

我相信有几个问题。第一个是你需要在获取渲染目标之前调用spriteBatch.End()。我也注意到没有调用spriteBatch.Begin()。

RenderTarget2D unprocessed = new RenderTarget2D( /*...*/);
graphics.GraphicsDevice.SetRenderTarget(unprocessed);
graphics.GraphicsDevice.Clear(Color.Black);

//Drawing
spriteBatch.Begin();
spriteBatch.Draw(/*...*/);
spriteBatch.End();

//Getting
graphics.GraphicsDevice.SetRenderTarget(null);

你刚刚回答了自己的问题,所以......没关系。