Рендеринг треугольника с использованием 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, но не вижу треугольника.

0 ответов

Другие вопросы по тегам