「定数バッファ」の版間の差分

編集の要約なし
5行目: 5行目:


== 概要 ==
== 概要 ==
[[CPU]]側で動く[[プログラム]]の[[変数]]を、[[GPU]]側で動く[[プログラマブルシェーダー]]に[[定数]]として送り込むには、
まず前提条件として[[シェーダー]]へ渡す[[変数]][[定数]])は[[ドローコール]]のたびに再設定するものであり、その変数(定数)は1回のドローコールが終わると自動的に消去される。
* Direct3D 9ではSetVertexShaderConstant命令とSetPixelShaderConstant命令を使って1個1個送り込んでいた。
* Direct3D 10からは定数バッファ(Constant Buffer、cbuffer)を使用してドスンと送信できるようになった。


まず、シェーダーへ渡す変数(定数)は[[ドローコール]]のたびに再設定するものである。
次に[[CPU]]側で動く[[プログラム]]の[[変数]]を[GPU]]側で動く[[プログラマブルシェーダー]]に[[定数]]として送り込むには、
変数(定数)は1回のドローコールが終わると自動消去される。


このためDirect3D 9では[[定数]]を描画の直前に毎回1個1個設定していた。
; Direct3D 9
描画のたびに[[メインメモリ]]から[[VRAM]]に小さな[[データ]]の転送を繰り返している感じである。
ドローコールの直前に毎回SetVertexShaderConstant命令やSetPixelShaderConstant命令を使って1個1個送り込んでいた。描画のたびに[[メインメモリ]]から[[VRAM]]に小さな[[データ]]の転送を繰り返していた。


一方、Direct3D 10も描画の直前に毎回設定するのは同じだが、定数バッファを1個設定するだけでよくなった。[[メインメモリ]]から[[VRAM]]に「定数バッファの[[ポインタ]]」だけが転送される感じである。つまり定数バッファを利用することで[[頂点バッファ]]や[[インデックスバッファ]]などと同様に再利用できるわけだ。
; Direct3D 10
定数バッファ(Constant Buffer、cbuffer)を作成してGPU(VRAM)に送信しておき、以後はドローコールの直前にその定数バッファの[[ポインタ]]だけを送り込むようになった。
 
つまり定数バッファを利用することで[[頂点バッファ]]や[[インデックスバッファ]]などと同様に再利用でき、かつ毎回送信するデータもポインタひとつで済むようになった。


== 利点 ==
== 利点 ==