在没有纹理或着色器的情况下绘制OpenGLES原语会导致错误

时间:2012-01-14 11:13:15

标签: opengl-es cocos2d-iphone

我正试图在我的iPhone游戏中画一个简单的盒子。

以下是呈现框的代码:

- (void)render {
  const SHAPE_TYPE * shape = dynamic_cast<SHAPE_TYPE *>(fixture->GetShape());

  if (!shape)
    return;

  GLfloat vertices[shape->m_vertexCount][2];
  for (int i = 0; i < shape->m_vertexCount; ++i) {
    vertices[i][0] = shape->m_vertices[i].x;
    vertices[i][1] = shape->m_vertices[i].y;
  }

  glPushMatrix();
  glLoadIdentity();
  CHECK_GL_ERROR();
  glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  CHECK_GL_ERROR();
  glDisableClientState(GL_COLOR_ARRAY);
  CHECK_GL_ERROR();
  glEnableClientState(GL_VERTEX_ARRAY);
  CHECK_GL_ERROR();

  glVertexPointer(2, GL_FLOAT, 0, vertices);
  glDrawArrays(GL_LINE_LOOP, 0, (GLsizei)shape->m_vertexCount);

  glDisableClientState(GL_VERTEX_ARRAY);
  glEnableClientState(GL_COLOR_ARRAY);
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);

  glPopMatrix();

  CHECK_GL_ERROR();
}

我在第二个CHECK_GL_ERROR上收到错误 错误为OpenGL error 0x0502 in -[MyApp render] 97

除了你所看到的,我没有opengl设置。 我认为它与cocos2d启用的某个状态有关,但不知道哪个状态。

1 个答案:

答案 0 :(得分:0)

尝试使用ccDrawPoly

ccDrawPoly(vertices, shape->m_vertexCount, YES);

另外,如果您使用的是cocos2d 2.0,请记住您必须编写OpenGL ES 2.0代码。如果没有cocos2d 2.0中的OpenGL错误,您发布的代码将无效。

相关问题