ResolveTexture2D - Кошмар в XNA 4 - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть следующая декларация:

ResolveTexture2D rightTex;

И я использую его в методе Draw так:

GraphicsDevice.ResolveBackBuffer(rightTex);

Теперь я вытягиваю его, используя SpriteBatch:

spriteBatch.Draw(rightTex, new Rectangle(0, 0, 800, 600), Color.Cyan);

Это прекрасно работает в XNA 3.1. Но теперь я конвертирую в XNA 4, ResolveTexture2D и метод ResolveBackBuffer были удалены. Как бы я перекодировал это, чтобы работать в XNA 4.0?

EDIT

Итак, вот еще немного кода, который может помочь. Здесь я инициализирую 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);

Затем, по моему 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();

Ответы [ 2 ]

6 голосов
/ 09 ноября 2010

Удаление ResolveTexture2D из XNA 4.0 объяснено здесь .

В основном вы должны использовать цели рендеринга. Суть процесса выглядит следующим образом:

Создание цели визуализации для использования.

RenderTarget2D renderTarget = new RenderTarget2D(graphicsDevice, width, height);

Затем установите его на устройство:

graphicsDevice.SetRenderTarget(renderTarget);

Затем просмотрите вашу сцену.

Затем снимите цель рендеринга:

graphicsDevice.SetRenderTarget(null);

Наконец, вы можете использовать RenderTarget2D в качестве Texture2D, например так:

spriteBatch.Draw(renderTarget, new Rectangle(0, 0, 800, 600), Color.Cyan);

Вы также можете найти этот обзор изменений RenderTarget в XNA 4.0 , который стоит прочитать.

3 голосов
/ 09 ноября 2010

ааа, вот и все: переместите GraphicsDevice.SetRenderTarget () до вызова GraphicsDevice.Clear ()

...