Opengl es 在没有纹理或着色器的情况下绘制OpenGLES基本体会导致错误

Opengl es 在没有纹理或着色器的情况下绘制OpenGLES基本体会导致错误,opengl-es,cocos2d-iphone,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->

我想在我的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();
}
-(无效)渲染{
const SHAPE_TYPE*SHAPE=dynamic_cast(fixture->GetShape());
如果(!形状)
回来
GLfloat顶点[shape->m_vertexCount][2];
对于(int i=0;im_vertexCount;++i){
顶点[i][0]=形状->m_顶点[i].x;
顶点[i][1]=形状->m_顶点[i].y;
}
glPushMatrix();
glLoadIdentity();
检查_GL_ERROR();
glDisableClientState(GL_纹理_坐标_数组);
检查_GL_ERROR();
glDisableClientState(GL_颜色_数组);
检查_GL_ERROR();
glEnableClientState(GL_顶点_数组);
检查_GL_ERROR();
glVertexPointer(2,GLU浮点,0,顶点);
glDrawArrays(GL\U LINE\U LOOP,0,(GLsizei)形状->m\U顶点计数);
glDisableClientState(GL_顶点_数组);
glEnableClientState(GL_颜色_阵列);
glEnableClientState(GL_纹理_坐标_阵列);
glPopMatrix();
检查_GL_ERROR();
}
我在第二个
CHECK\u GL\u error
错误是-[MyApp render]97中的OpenGL错误0x0502

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

尝试使用:


此外,为了防止您使用CoCoS2D2.0,请记住您必须编写OpenGLES2.0代码。如果COCOS2D2.0中没有OpenGL错误,您发布的代码将无法工作。

因此,错误位于
glDisableClientState(GL\u纹理\u坐标\u数组)?可能是因为启用了
GL\u TEXTURE\u 2D
?在我的应用程序中,我禁用了
GL\u TEXTURE\u 2D
,即使启用了
GL\u TEXTURE\u COORD\u ARRAY
,它在draw调用中也会被忽略。这没有任何区别。这是OpenGL ES 1.x还是OpenGL ES 2.0?太棒了,它可以工作了!我还必须使用
kmGLPushMatrix
ccDrawPoly(vertices, shape->m_vertexCount, YES);