定数バッファ
ナビゲーションに移動
検索に移動
コンスタントバッファ(英語:Constant Buffer、通称:cbuffer)とは、CPUで動くプログラムの変数群を、GPUで動くプログラマブルシェーダーに定数群としてドスンと送り込むバッファ、機構をいう。
概要
CPU側で動くプログラムの変数を、GPU側で動くプログラマブルシェーダーに定数として送り込むには、
- Direct3D 9ではSetVertexShaderConstantとSetPixelShaderConstantを使って1個1個送り込んでいた。
- Direct3D 10からはコンスタントバッファ(Constant Buffer、cbuffer)を使用してドスンと送信するようになった。
Direct3D 9ではドローコールの直前で毎回1個1個変数単位で設定していたが、 Direct3D 10からはコンスタントバッファを1個設定するだけでよい。 つまりバーテックスバッファやインデックスバッファなどと同様に再利用できるわけだ。
シェーダー定数には主にディレクショナルライトやポイントライトの座標や明るさなどを格納していることが多い。これらはゲームシーンの中でそんなに勢いよく変化するものではない。ゲーム内で時間経過とともに昼から夜に、夜から昼になるものでもフレームレート単位でみたら変化などないに等しい。何千回、何万回というドローコールで1回変化するくらいのものである。 ならば定数はコンスタントバッファとしてGPU内のVRAMに格納しておいて再利用すれば効率が良くなるということのようだ。