下記記事の実例。
ググればいくらでも出てくる内容だけど、整理しておきたかったので。
http://akasuku.blog.jp/archives/44623464.html

○単純な四角形の描画
以下が置き換え前。
GLdouble vertices[sizeOfVertices] = {
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0,
1.0, 1.0, 0.0,
-1.0, 1.0, 0.0
};

void scene()
{
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_QUADS);
for (int i = 0; i < vertexNum; ++i) {
glVertex3d(vertices[i * dimNum], vertices[i * dimNum + 1],
vertices[i * dimNum + 2]);
}
glEnd();
}
VBOで置き換えると以下のようになる。
GLdouble vertices[sizeOfVertices] = {
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0,
1.0, 1.0, 0.0,
-1.0, 1.0, 0.0
};
GLuint vrtVBO;

void init()
{
// バッファの生成
glGenBuffers(1, &vrtVBO);

// 頂点位置の転送
glBindBuffer(GL_ARRAY_BUFFER, vrtVBO);
glBufferData(GL_ARRAY_BUFFER, sizeOfVertices * sizeof(GLdouble),
vertices, GL_STATIC_DRAW);

glBindBuffer(GL_ARRAY_BUFFER, 0);
}

void scene()
{
// 頂点位置のデータ位置の指定
glBindBuffer(GL_ARRAY_BUFFER, vrtVBO);
glVertexPointer(dimNum, GL_DOUBLE, 0, 0);

// 描画
glEnableClientState(GL_VERTEX_ARRAY);
  glColor3f(1.0f, 0.0f, 0.0f);
 glDrawArrays(GL_QUADS, 0, vertexNum);
glDisableClientState(GL_VERTEX_ARRAY);

glBindBuffer(GL_ARRAY_BUFFER, 0);
}

○テクスチャマッピング
以下が置き換え前。
GLdouble vertices[sizeOfVertices] = {
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0,
1.0, 1.0, 0.0,
-1.0, 1.0, 0.0
};
GLdouble texCoords[sizeOfTexCoords] = {
0.0, 1.0,
1.0, 1.0,
1.0, 0.0,
0.0, 0.0
};

void scene()
{
glEnable(GL_TEXTURE_2D);

glBegin(GL_QUADS);
for (int i = 0; i < vertexNum; ++i) {
glTexCoord2d(texCoords[i * 2], texCoords[i * 2 + 1]);
glVertex3d(vertices[i * dimNum], vertices[i * dimNum + 1],
vertices[i * dimNum + 2]);
}
glEnd();

glDisable(GL_TEXTURE_2D);
}
VBOで置き換えると以下のようになる。
GLdouble vertices[sizeOfVertices] = {
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0,
1.0, 1.0, 0.0,
-1.0, 1.0, 0.0
};
GLdouble texCoords[sizeOfTexCoords] = {
0.0, 1.0,
1.0, 1.0,
1.0, 0.0,
0.0, 0.0
};
GLuint vrtVBO;
GLuint uvVBO;

void init()
{
// バッファの生成
glGenBuffers(1, &vrtVBO);
glGenBuffers(1, &uvVBO);

// 頂点位置の転送
glBindBuffer(GL_ARRAY_BUFFER, vrtVBO);
glBufferData(GL_ARRAY_BUFFER, sizeOfVertices * sizeof(GLdouble),
vertices, GL_STATIC_DRAW);

// UV座標の転送
glBindBuffer(GL_ARRAY_BUFFER, uvVBO);
glBufferData(GL_ARRAY_BUFFER, sizeOfTexCoords * sizeof(GLdouble),
texCoords, GL_STATIC_DRAW);

glBindBuffer(GL_ARRAY_BUFFER, 0);
}

void scene()
{
// 頂点位置のデータ位置の指定
glBindBuffer(GL_ARRAY_BUFFER, vrtVBO);
glVertexPointer(dimNum, GL_DOUBLE, 0, 0);

// UV座標のデータ位置の指定
glBindBuffer(GL_ARRAY_BUFFER, uvVBO);
glTexCoordPointer(2, GL_DOUBLE, 0, 0);

// 描画
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDrawArrays(GL_QUADS, 0, vertexNum);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

glBindBuffer(GL_ARRAY_BUFFER, 0);
}
○VAO
ついでに、VAOへ置き換えると以下のようになる。
GLdouble vertices[sizeOfVertices] = {
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0,
1.0, 1.0, 0.0,
-1.0, 1.0, 0.0
};
GLdouble texCoords[sizeOfTexCoords] = {
0.0, 1.0,
1.0, 1.0,
1.0, 0.0,
0.0, 0.0
};
GLuint vrtVBO;
GLuint uvVBO;
GLuint vao;

void init()
{
// VAOの生成
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

// VBOの生成
glGenBuffers(1, &vrtVBO);
glGenBuffers(1, &uvVBO);

// 頂点の位置と設定の転送
glBindBuffer(GL_ARRAY_BUFFER, vrtVBO);
glBufferData(GL_ARRAY_BUFFER, sizeOfVertices * sizeof(GLdouble),
vertices, GL_STATIC_DRAW);
glVertexPointer(dimNum, GL_DOUBLE, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);

// UV座標の転送
glBindBuffer(GL_ARRAY_BUFFER, uvVBO);
glBufferData(GL_ARRAY_BUFFER, sizeOfTexCoords * sizeof(GLdouble),
texCoords, GL_STATIC_DRAW);
glTexCoordPointer(2, GL_DOUBLE, 0, 0);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}

void scene()
{
glBindVertexArray(vao);
glDrawArrays(GL_QUADS, 0, vertexNum);
glBindVertexArray(vao);
}