質問: 「VBOは頂点データをGPUで持つので描画が高速」 「CPUからコピーが発生しないので高速」 と聞いたのですが VBOで扱う頂点データはどの道、作成する際にCPUからGPUへのコピーが発生しているのではないのですか? ``` 頂点データ作成時:glBufferData(CPUからバッファを転送) 頂点データ更新時:glMapBuffer(バッファのポインタを取得し、CPU側でデータの変更) ``` データをいじる度にCPUからGPUへ値を転送しているように見えるのですが なぜ高速なのでしょうか? CPU側でデータを更新しても、バッファポインタ経由なので転送コピーが発生せず高速なのですか? それとも、頂点データの更新頻度が少ない場合にのみ意味のある仕組みなのでしょうか?
回答: > > 「VBOは頂点データをGPUで持つので描画が高速」 > > 「CPUからコピーが発生しないので高速」 > > > 言いたいことはなんとなく分かりますが、言葉通りに受け取ると、この説明は誤りです。 VBO(Vertex Buffer Object)でなくても頂点データを GPU で持ちますし、CPU からのコピーも発生します。 > > CPU側でデータを更新しても、バッファポインタ経由なので転送コピーが発生せず高速なのですか? > > それとも、頂点データの更新頻度が少ない場合にのみ意味のある仕組みなのでしょうか? > > > 「頂点データの更新頻度が少ない場合にのみ意味のある仕組み」という理解で正しいと思います。 ただし、一つ注意してほしいのは、一般的にこの**「頂点データの更新頻度が少ない場合」が非常に多い**ということです。 例えば、3Dゲームを思い浮かべてみてください。 背景や建物などほとんどの3Dモデルが全く動いていないと思います。 また、頂点データを変更することになったとしても、部分的な更新をすることで、VBO への転送量を最小限に減らすことができます。