glDrawElementsBaseVertex

gldrawelementsbasevertex.png
void glDrawElementsBaseVertex(GLenum mode, GLsizei count,
GLenum type,
const GLvoid *indices,
GLint basevertex);

glDrawElementsとの違いは最後のbaseVertexという引数です。
i番目の頂点インデックスはindices[i]+basevertexとなります。
つまり、頂点の位置を好きな位置にずらしてはじめることができるのです。

表紙の絵で、青い三角形だけglDrawElementsBaseVertexで描画しました。
他の3つは同じ頂点をつかって平行移動させただけです。
たとえば頂点を

static const GLfloat vertex_positions[] =
    {
        -1.0f, -1.0f, 0.0f, 1.0f,
        1.0f, -1.0f, 0.0f, 1.0f,
        -1.0f, 1.0f, 0.0f, 1.0f,
        1.0f, 1.0f, 0.0f, 1.0f,//glDrawElementsBaseVertexの実験のため
    };

渡したとします。
頂点インデックスデータはこうです
static const GLushort vertex_indices[] =
    {
        0, 1, 2
    };

そして描画するとき
// DrawElementsBaseVertexで1つ頂点インデックスをずらして描画(0,1,2)->(1,2,3)になります
    model_matrix = glm::translate(glm::mat4(), glm::vec3(1.0f, 0.0f, -0.0f));
    glUniform4f(color_loc, 85.0 / 255.0, 85.0 / 255.0, 221.0 / 255.0, 1.0);//blue
    glUniformMatrix4fv(render_model_matrix_loc, 4, GL_FALSE, glm::value_ptr(model_matrix));
    glDrawElementsBaseVertex(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, NULL, 1);

とすると、上の絵の青い三角形のようになります。
インデックス0,1,2で描画すると他の3つの三角形の形になります
フルサンプルソースコード

drawing-command gl opengl3

サポートサイト Wikidot.com drawing-commandglopengl3