我用spine::SkeletonAnimation::createWithFile方法创建了若干skeletonAnimation对象,然后add到cocos2d::ui::Widget对象上
因为我需要自己排序所有对象的显示层级,所以调用了skeletonAnimation对象的setLocalZOrder方法进行排序,程序运行后出现opengl error 0502,报错的是
spine/PolygonBatch.cpp中的
void PolygonBatch::flush () {
if (!verticesCount) return;
GL::bindTexture2D(texture->getName());
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_POSITION);
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_COLOR);
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_TEX_COORDS);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(V2F_C4B_T2F), &vertices.vertices);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(V2F_C4B_T2F), &vertices.colors);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, sizeof(V2F_C4B_T2F), &vertices.texCoords);
glDrawElements(GL_TRIANGLES, trianglesCount, GL_UNSIGNED_SHORT, triangles);
verticesCount = 0;
trianglesCount = 0;
CHECK_GL_ERROR_DEBUG();
}
如果不调用setLocalZOrder就没有问题。求解啊
又测了下,结果是
1.报错的是glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, sizeof(V2F_C4B_T2F), &vertices.vertices);
2.把skeletonAnimation对象加到一个node上,再把node加到widget上,调整node的localzorder,报同样的错误。。