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