ResolveTexture2D - XNA 4中的噩梦

Nei*_*ght 0 xna xna-4.0

我有以下声明:

ResolveTexture2D rightTex;
Run Code Online (Sandbox Code Playgroud)

我在这样的Draw方法中使用它:

GraphicsDevice.ResolveBackBuffer(rightTex);
Run Code Online (Sandbox Code Playgroud)

现在,我使用以下方法绘制出来SpriteBatch:

spriteBatch.Draw(rightTex, new Rectangle(0, 0, 800, 600), Color.Cyan);
Run Code Online (Sandbox Code Playgroud)

这在XNA 3.1中非常有用.但是,现在我正在转换为XNA 4,ResolveTexture2D并且该ResolveBackBuffer方法已被删除.为了在XNA 4.0中工作,我将如何重新编码?

编辑

所以,这里有一些可能有用的代码.在这里我初始化RenderTargets:

PresentationParameters pp = GraphicsDevice.PresentationParameters;
leftTex = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, true, pp.BackBufferFormat, pp.DepthStencilFormat);
rightTex = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, true, pp.BackBufferFormat, pp.DepthStencilFormat);
Run Code Online (Sandbox Code Playgroud)

然后,在我的Draw方法中,我做:

GraphicsDevice.Clear(Color.Gray);
rightCam.render(model, Matrix.CreateScale(0.1f), modelAbsTrans);
GraphicsDevice.SetRenderTarget(rightTex);
GraphicsDevice.SetRenderTarget(null);

GraphicsDevice.Clear(Color.Gray);
leftCam.render(model, Matrix.CreateScale(0.1f), modelAbsTrans);
GraphicsDevice.SetRenderTarget(leftTex);
GraphicsDevice.SetRenderTarget(null);

GraphicsDevice.Clear(Color.Black);

//start the SpriteBatch with Additive Blend Mode
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Additive);
    spriteBatch.Draw(rightTex, new Rectangle(0, 0, 800, 600), Color.Cyan);
    spriteBatch.Draw(leftTex, new Rectangle(0, 0, 800, 600), Color.Red);
spriteBatch.End();
Run Code Online (Sandbox Code Playgroud)

And*_*ell 6

这里解释ResolveTexture2D从XNA 4.0中删除.

基本上你应该使用渲染目标.这个过程的要点是这样的:

创建要使用的渲染目标.

RenderTarget2D renderTarget = new RenderTarget2D(graphicsDevice, width, height);
Run Code Online (Sandbox Code Playgroud)

然后将其设置到设备上:

graphicsDevice.SetRenderTarget(renderTarget);
Run Code Online (Sandbox Code Playgroud)

然后渲染你的场景.

然后取消设置渲染目标:

graphicsDevice.SetRenderTarget(null);
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用RenderTarget2D作为Texture2D,如下所示:

spriteBatch.Draw(renderTarget, new Rectangle(0, 0, 800, 600), Color.Cyan);
Run Code Online (Sandbox Code Playgroud)

您还可以在XNA 4.0中找到有关RenderTarget更改的概述.