2011-02-10 5 views
0

誰かが私に説明できることを望んでいるレンダーターゲットを使用する際に問題があります。 レンダーターゲットを使用してスプライトをレンダリングしようとしていて、レンダリングターゲットを通常のバックバッファに50%不透明(null)に描画しようとしています。描画呼び出しでターゲットを複数回使用する場合を除いて、素晴らしい結果が得られます。その場合は、スプライトの最後のグループのみが画面に表示されます。XNAとRenderTargets

ここにいくつかの擬似コードがあります。

// Normal Sprite Drawing. 
DrawSomeSprites(); 

SetRenderTarget(CompositeTarget); 

// These go on the render target. 
DrawSomeMoreSprites(); 

SetRenderTarget(null); 

// And now I draw onto the back buffer. 
DrawSprite(CompositeTarget); 


// So now I want to draw another bunch of sprites via my render target using the same approach. 
SetRenderTarget(CompositeTarget); 

// These are the only sprites that I can see on the screen. 
DrawSomeMoreSprites();    
SetRenderTarget(null); 
DrawSprite(CompositeTarget); 

私はそれが合理的であることを望みます。私がレンダーターゲットを変更するたびに、何らかの理由で以前のレンダーターゲット(null)がクリアされているようです。ターゲットを交換する前にスプライトのバッチをすべて終了していますが、エラーは発生していないので、ここで何をすべきか分かりません。明らかに、目標は同時にすべてのスプライトグループを画面上で見ることができるようにすることです。何が私はここで行方不明ですか?

答えて

2

This article explains why your render targets are being cleared

基本的には、XBoxグラフィックスシステムの仕組みのクールです。 XBox GPUがレンダリングできるメモリ領域は1つだけですが、それはかなり小さいです。レンダリングターゲットを変更すると、そのメモリが詰まってしまいます。 XNA 2.0(記事で説明されているように)では、Xbox 360の動作に合わせてWindowsのデフォルトの動作が変更され、プラットフォーム間での一貫性と高速性が維持されていました。

目的の動作を選択するパラメータはRenderTargetUsageです。 XBoxのコンテンツを保存するとが遅いであることにご注意ください。

この問題に遭遇しないように、レンダリングの順序を変更することができます。

+0

ラット!私は最終的に昨夜働いていたPIXのコピーを手に入れました。そしてはい、私は明らかに問題のある場所のすべての異なるクリアを見ました。私は実際のレンダリングの仕方を変えることはできません。なぜなら、私は現在のアプローチではまったく動かないレイヤリングシステムを持っているからです。代わりに私が望む効果を得るためにピクセルシェーダーを使用できると思いますか? –

+0

@ A.R。レンダーターゲット(またはバックバッファ)のRenterTargetUsageを変更して修正できませんでしたか? (または、Xboxをターゲットにしていますか?) –

+0

レンダーターゲットの変更を行うことはできますが、最終的にはXBOXをエンジンで最終的にターゲットにするため、よりエキサイティングな方法で足を撃ちます。 =)とにかく、Pixel Shaderのアイデアについてどう思いますか?私が知っている人の中には、うまくいくと思う人もいますが、彼らはまったくプロではありません –