Primitive Restart

primitive-restart.png

OpenGL ES2ではTRIANGLE_STRIPを使って離れた図形を描きたい時、 縮退三角形という、
余計な頂点インデックスを挿入するテクニックを使用することによって、離れた図形を実現していた。
OpenGL ES3では、特別な頂点インデックス値を使用することによって、ここが幾何図形の始まりですよ〜というのを明示することができます。
なので、これのおかげて、TRIANGLE_STRIPを使う時でも、縮退三角形を使う必要がなくなるのだ!

やり方

初期化時

まず、インデックスバッファが必須です。

 // Indices for the triangle strips
    static const GLushort cube_indices[] =
    {
        0, 1, 2, 3, 6, 7, 4, 5,         //最初のTRIANGLE_STRIP
        0xFFFF,                         // <<-- リスタートインデックスです
        2, 6, 0, 4, 1, 5, 3, 7          //2番目のTRIANGLE_STRIP
    };

描画するとき

    glEnable(GL_PRIMITIVE_RESTART);
    glPrimitiveRestartIndex(0xFFFF);//<-初期化時に指定したリスタートインデックスを指定します。どこで区切るかの印になります。
    glDrawElements(GL_TRIANGLE_STRIP, 17, GL_UNSIGNED_SHORT, NULL);

上のコードは、primitive restartなしで書くと以下のコードと同義になります
    glDrawElements(GL_TRIANGLE_STRIP, 8, GL_UNSIGNED_SHORT, NULL);
    glDrawElements(GL_TRIANGLE_STRIP, 8, GL_UNSIGNED_SHORT, (const GLvoid *)(9 * sizeof(GLushort)));

degenerate-triangles opengl3 opengl-accelerate

サポートサイト Wikidot.com degenerate-trianglesopengl3opengl-accelerate