0

次のようなコードがあります。

        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

(注:これは、私が実際に使用しているものではなく、最小限の再現コードに切り詰められています)

コードの 2 番目のブロックの前に aRegularTexture を画面にレンダリングすると、問題なく、そのままの状態で表示されます。しかし、コードの 2 番目のブロックの後にレンダリングすると、aModifiedTexture の内容に設定されます。なんで?(XNA 3.1 を使用)

4

1 に答える 1

1

ショーン・ハーグリーブス経由: 「GetTexture は、データの別のコピーではなく、レンダー ターゲット自体と同じサーフェス メモリのエイリアスを返します」

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

于 2011-11-04T17:26:58.153 に答える