質問

XNAは、必要な多くの機能をすでに提供しているため、CPUで実行しているグラフィックス処理の簡単な基盤として使用します。現在、私の<!> quot; rendertarget <!> quot;は、R、G、Bの3つの浮動小数点フィールドで構成されるカスタムカラーstructの配列です。

これを画面上でレンダリングする場合、0〜255のバイト範囲内で結果を単純にクランプすることにより、XNAが提供するColor Texture2Dにこの配列を手動で変換します(チャネルごとに8ビットの精度のみ)。次に、この新しい配列をSurfaceFormatSurfaceFormat.ColorSpriteBatchを持つ)のデータとして設定し、テクスチャをStructLayoutでレンダリングします。

私が探しているのは、CPU上のこの変換プロセスを取り除き、何らかのバックグラウンド処理を行いたいバックグラウンドを何らかのテクスチャとしてGPUに直接送信する方法です。そして、実際には8ビットよりも少し高い精度が必要です(必ずしも32ビットである必要はありませんが、私がしていることはGPU集約型ではないので、害はないでしょう)。

これを行うにはどうすればよいですか?

Colorに32バイトの明示的なサイズを指定すると(つまり、3つのチャネルは24ビットしか埋められないため、8バイトのパディング)、SurfaceFormat.Vector4を介してレンダリングされるテクスチャのSetData<Color>を設定すると=>からVertexDeclaration(32バイトの大きさ)に設定し、テクスチャを<=>で塗りつぶして、動作する可能性があります。しかし、私はこの例外を受け取ります:

  

このメソッドでTに使用している型は、このリソースに対して無効なサイズです。

任意に構成された<=>を使用し、レイアウト方法を指定することで、<=>を介した頂点でできるように、GPUでテクスチャデータとして解釈できますか?

役に立ちましたか?

解決

作成した色structをダンプして、色情報にVector4を使用することで、必要なものがあると思います。これは、テクスチャのSurfaceFormatも<=>に設定されている場合に機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top