私は知っています、それはかなりイライラします。OpenGLアプリケーションに何も表示されません。表示されるのは空のビューポートだけです。
私が最初にアプリケーションを書き始めたとき、私は手動で頂点を描画していました(を使用してGL_QUADS
)、そしてすべてがうまくいきました。次に、 VBO(V ertex B uffer Object)に切り替えることにしました。今は何も機能しません。
頂点の構造は次のとおりです。
struct SimpleVertex
{
GLfloat x, y;
GLbyte r, g, b, a;
};
ご覧のとおり、これは非常に単純です。頂点とRGBAカラーデータのx座標とy座標です。頂点とインデックスバッファを埋めるコードは次のとおりです。
const SimpleVertex rect_vertices[] = {
{ -0.8, 0.8, 0, 255, 0, 128 },
{ 0.8, 0.8, 0, 255, 0, 128 },
{ 0.8, -0.8, 0, 255, 0, 128 },
{ -0.8, -0.8, 0, 255, 0, 128 }
};
const GLuint rect_indices[] = {
0, 1, 2, 3
};
GLuint vertices;
GLuint indices;
glGenBuffers(1, &vertices);
glBindBuffer(GL_ARRAY_BUFFER, vertices);
glBufferData(GL_ARRAY_BUFFER,
sizeof(rect_vertices),
rect_vertices,
GL_STATIC_DRAW);
glGenBuffers(1, &indices);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
sizeof(rect_indices),
rect_indices,
GL_STATIC_DRAW);
最後になりましたが、間違いなく重要なことですが、長方形を描画するためのコードは次のとおりです。
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindBuffer(GL_ARRAY_BUFFER, vertices);
glVertexPointer(2, GL_FLOAT, 0, NULL);
glColorPointer(4, GL_BYTE, 0,
(const GLvoid *)(sizeof(GLfloat) * 2));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices);
glDrawElements(GL_QUADS, 4, GL_UNSIGNED_INT, NULL);
glDisable(GL_BLEND);
何もレンダリングされていない理由がわかりません。頂点とカラーのデータは、を使用していた以前のバージョンから基本的に変更されていませんglVertex2f()
。