XNAは、必要なものがすでにたくさん用意されているため、CPUで実行しているグラフィックス処理の簡単な基盤として使用しています。現在、私の「rendertarget」は、struct
R、G、Bの3つの浮動小数点フィールドで構成されるカスタムカラーの配列です。
これを画面に表示したい場合はstruct
、結果を0〜255のバイト範囲内にクランプするだけで、この配列をXNAが提供する色(チャネルあたりわずか8ビットの精度)に手動で変換します。次に、この新しい配列をのデータとして設定しTexture2D
(のを持っていSurfaceFormat
ますSurfaceFormat.Color
)、テクスチャを。でレンダリングしますSpriteBatch
。
私が探しているのは、CPUでのこの変換プロセスを取り除き、バックバッファーをある種のテクスチャとしてGPUに直接送信する方法です。ここで、基本的な後処理を行います。そして、私は実際に8ビットよりも少し高い精度が必要です(必ずしも32ビットである必要はありませんが、私が行っていることはGPUを集中的に使用しないため、害はないと思います)。
どうすればこれを行うことができますか?
Colorに32バイトの明示的なサイズ(つまり、3つのチャネルは24ビットしか埋めないため、8バイトのパディング)を指定して、にレンダリングされるテクスチャのを(32バイトの大きさ)StructLayout
に設定し、テクスチャを塗りつぶすと考えました。それでそれは多分うまくいくでしょう。しかし、私はこの例外を受け取ります:SurfaceFormat
SpriteBatch
SurfaceFormat.Vector4
SetData<Color>
このメソッドでTに使用しているタイプは、このリソースに対して無効なサイズです。
配置方法を指定することで、頂点を介して行うことができるように、任意に作成されたものを使用struct
して、GPUでテクスチャデータとして解釈することは可能VertexDeclaration
ですか?