Рендеринг треугольника с использованием VBO в Android и EGL
Я мог бы использовать вершинный и фрагментный шейдеры, чтобы нарисовать треугольник. Мне нужно попробовать VBO сейчас. Я строю на существующем коде, присутствующем в
$Mydroid/frameworks/base/opengl/tests/gl2_basic/
Я изменил мою функцию setupgraphics, как показано ниже
bool setupGraphics(int w, int h) {
MyVertex pvertex[3];
//VERTEX 0
pvertex[0].x = 0.0;
pvertex[0].y = 0.0;
pvertex[0].z = 0.0;
pvertex[0].nx = 0.0;
pvertex[0].ny = 0.0;
pvertex[0].nz = 1.0;
pvertex[0].s0 = 0.0;
pvertex[0].t0 = 0.0;
//VERTEX 1
pvertex[1].x = 1.0;
pvertex[1].y = 0.0;
pvertex[1].z = 0.0;
pvertex[1].nx = 0.0;
pvertex[1].ny = 0.0;
pvertex[1].nz = 1.0;
pvertex[1].s0 = 1.0;
pvertex[1].t0 = 0.0;
//VERTEX 2
pvertex[2].x = 0.0;
pvertex[2].y = 1.0;
pvertex[2].z = 0.0;
pvertex[2].nx = 0.0;
pvertex[2].ny = 0.0;
pvertex[2].nz = 1.0;
pvertex[2].s0 = 0.0;
pvertex[2].t0 = 1.0;
glGenBuffers(1, &VertexVBOID);
checkGlError("glGenBuffers");
glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
checkGlError("glBindBuffer");
glBufferData(GL_ARRAY_BUFFER, sizeof(MyVertex)*3, &pvertex[0].x, GL_STATIC_DRAW);
checkGlError("glBufferData");
short pindices[3];
pindices[0] = 0;
pindices[1] = 1;
pindices[2] = 2;
glGenBuffers(1, &IndexVBOID);
checkGlError("glGenBuffers");
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);
checkGlError("glBindBuffer");
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(short)*3, pindices, GL_STATIC_DRAW);
checkGlError("glBufferData");
glViewport(0, 0, w, h);
checkGlError("glViewport");
return true;
}
Я изменил свою функцию рендеринга кадров, как показано ниже
void renderFrame() {
glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(MyVertex),BUFFER_OFFSET(0));
glEnableVertexAttribArray(1);
glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,sizeof(MyVertex),BUFFER_OFFSET(12));
glEnableVertexAttribArray(2);
glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,sizeof(MyVertex),BUFFER_OFFSET(24));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0));
}
Я не получаю никакой ошибки ни от одного из вызовов API, но не вижу треугольника.