2016-11-23 3 views
-5

私はユニティを使用しています、そして、私はバイト配列をHLSLを使ってGPUに送りたいと思います。私はByteAddressBufferについて知っていますが、私はそれをどのように使用するか考えていません。私はちょうど "バイト"をGPUに送る方法を知りたがっています。私は計算シェーダにStructuredBuffer<byte>を持っています。バイト[]をGPUに送信していますか?

+0

なぜ私はあまりにも多くのダウン票を得ましたか?私が逃したものはありますか? – None

+0

あなたの質問では、あなたの問題を解決しようとしたことは実際には表示されません。 (私はそれが理由だと思う) – TheDjentleman

答えて

1

シェーダ部分では、StructuredBufferを使用できます。 HLSLにバイトデータ型があるかどうかは正確に分かりませんので、この例では整数だけを使用します。

シェーダコード:C#の側で

Shader "Name" { 
    SubShader { 
     ... 
     StructuredBuffer<int> _Data; 
     ... 
    } 
} 

、あなたのシェーダに対応素材を持っている、matそれを呼び出すと、あなたのバイト配列bArrすることができます。さらに、gpuバッファを作成してシェーダにバインドする必要があります:ComputeBuffer dataBuf = new ComputeBuffer(bArr.Length, sizeof(int))

最後に、GPU dataBuf.SetData(bArr)にあなたの配列をロードし、私は私のコンピュートシェーダでStructuredBuffer <バイト>を持つようにしたいあなたのシェーダmat.SetBuffer("_Data", dataBuf);

編集

にバッファをバインドします。

私が読んだことから、あなたはできません。 HLSLにはbyteというデータ型はありません(また、1つの単位で使用されるCGもありません)。上記の例は、標準的な頂点/フラグメントシェーダです。計算シェーダを使用する場合は、他の質問でanswerを参照してください。それをあなたの必要に応えてください。すでにコメントに書いてあるとおり、byteデータにintを使用しないようにして24ビットを無駄にしないようにするには、ビットシフタで1 intに4 bytesをパンチングできます。シェーダモデル4(DX10.1など)を使用している場合、シフト操作はシェーダで使用可能になるはずです

+0

構造化バッファの使い方を知っていて、intをGPUに送る方法を知っています。私はGPUに "byte"を送る方法を知りたい@xyLe_ – None

+0

HLSLにもCGにも(バイト単位ではない)データ型はありません。 CGでは 'char'と一緒に行くことができますが、' int'だけで行くことはできませんか? – TheDjentleman

+0

あなたが実際に使用されていたスペースを持っている場合は、1バイトに4バイトをパックし、ビットシフトを使用してください – TheDjentleman

関連する問題