「定数バッファ」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
'''コンスタントバッファ'''([[英語]]:Constant Buffer、通称:cbuffer)とは、[[CPU]]で動く[[プログラム]]の[[変数]]群を、[[GPU]]で動く[[プログラマブルシェーダー]]に[[定数]]群としてドスンと送り込むバッファ、機構をいう。 | '''コンスタントバッファ'''([[英語]]:Constant Buffer、通称:cbuffer)とは、[[CPU]]で動く[[プログラム]]の[[変数]]群を、[[GPU]]で動く[[プログラマブルシェーダー]]に[[定数]]群としてドスンと送り込むバッファ、機構をいう。 | ||
+ | |||
+ | [[OpenGL]]界隈では「[[Uniform Buffer Object]]」という方言が使われている。意味はほぼ同じである。 | ||
== 概要 == | == 概要 == |
2020年3月10日 (火) 07:06時点における版
コンスタントバッファ(英語:Constant Buffer、通称:cbuffer)とは、CPUで動くプログラムの変数群を、GPUで動くプログラマブルシェーダーに定数群としてドスンと送り込むバッファ、機構をいう。
OpenGL界隈では「Uniform Buffer Object」という方言が使われている。意味はほぼ同じである。
概要
CPU側で動くプログラムの変数を、GPU側で動くプログラマブルシェーダーに定数として送り込むには、
- Direct3D 9ではSetVertexShaderConstantとSetPixelShaderConstantを使って1個1個送り込んでいた。
- Direct3D 10からはコンスタントバッファ(Constant Buffer、cbuffer)を使用してドスンと送信するようになった。
Direct3D 9ではドローコールの直前で毎回1個1個変数単位で設定していたが、 Direct3D 10からはコンスタントバッファを1個設定するだけでよい。 つまりバーテックスバッファやインデックスバッファなどと同様に再利用できるわけだ。
シェーダー定数には主にディレクショナルライトやポイントライトの座標や明るさなどを格納していることが多い。これらはゲームシーンの中でそんなに勢いよく変化するものではない。ゲーム内で時間経過とともに昼から夜に、夜から昼になるものでもフレームレート単位でみたら変化などないに等しい。何千回、何万回というドローコールで1回変化するくらいのものである。 ならば定数はコンスタントバッファとしてGPU内のVRAMに格納しておいて再利用すれば効率が良くなるということのようだ。