Instanced Rendering

instanced-rendering.png

インスタンスドレンダリングとは
同じ描画コマンドを何回もやってくれる機能です。
同じ物体をたくさん効率的に描画することができます。なので群集レンダリングとか。

glDrawArraysInstanced(GL_TRIANGLES, 0, 3, 1);

glDrawArraysInstanced(プリミティブ型, 最初のインデックス, インデックスの数, 図形を描画する個数)

この最後の図形を描画する個数てやつがあたらしいところ。
組み込み変数のgl_InstanceIDというものがこの図形を描画する個数回インクリメントされます。
このgl_InstanceIDをシェーダの中で使って違いをもたせてやればよいのです。

glDrawArraysInstanced(GL_TRIANGLES, 0, 3, 1);

これは、以下のことをするのと同じです
if ( mode or count is invalid )
        generate appropriate error
    else {
        for (int i = 0; i < primcount ; i++) {
            instanceID = i;
            glDrawArrays(mode, first, count);
        }
        instanceID = 0;
    }

サポートサイト Wikidot.com