Повторно использовать цель рендеринга "разливает краску"? - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть некоторый код, который выглядит следующим образом:

        GraphicsDevice.SetRenderTarget(0, myRenderTarget);
        GraphicsDevice.Clear(Color.Black);
        spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);
        myEffect.Begin();
        myEffectCurrentTechnique.Passes[0].Begin();
        spriteBatch.Draw(aRegularTexture, Vector2.Zero, Color.White);
        spriteBatch.End();
        myEffect.CurrentTechnique.Passes[0].End();
        myEffect.End();
        GraphicsDevice.SetRenderTarget(0, backBuffer);
        Texture2D bloomTexture = myRenderTarget.GetTexture();
        ...
        GraphicsDevice.SetRenderTarget(0, myRenderTarget);
        GraphicsDevice.Clear(Color.Black);
        spriteBatch.Begin();
        spriteBatch.Draw(aRegularTexture, Vector2.Zero, Color.White);
        spriteBatch.End();
        GraphicsDevice.SetRenderTarget(0, backBuffer);
        aRegularTexture = myRenderTarget.GetTexture(); 
        //SHOULD be doing nothing, since I'm just rendering said texture into a render target and pulling it back out

(примечание: это урезано до минимального кода воспроизведения, не совсем то, что я на самом деле использую)

Если я рендерингaRegularTexture на экран перед вторым блоком кода, он выглядит нормально и нетронутым.Но если я отрисовываю его после второго блока кода, он устанавливается на содержимое aModifiedTexture, хотя я никогда не делаю ничего, что могло бы привести к этому.Зачем?(С использованием XNA 3.1)

1 Ответ

1 голос
/ 04 ноября 2011

Через Шона Харгривза: «GetTexture возвращает псевдоним для той же памяти поверхности, что и сама цель рендеринга, а не отдельную копию данных»

http://blogs.msdn.com/b/shawnhar/archive/2010/03/26/rendertarget-changes-in-xna-game-studio-4-0.aspx

...