【发布时间】:2014-06-21 05:31:45
【问题描述】:
为什么会出现以下行:
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)numberOfVertices);
结果:EXC_BAD_ACCESS (code=2, address=0x0)
void Earth::onDraw(const cocos2d::Mat4 &transform, bool transformUpdated){
Sprite *stripes = Sprite::create("stripes.png");
this->setGLProgram(GLProgramCache::getInstance()->getGLProgram(GLProgram::GLProgram::SHADER_NAME_POSITION_TEXTURE));
CC_NODE_DRAW_SETUP();
GL::bindTexture2D(stripes->getTexture()->getName());
GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_TEX_COORD);
DrawPrimitives::setDrawColor4F(1.0f, 1.0f, 1.0f, 1.0f);
glVertexAttribPointer(GL::VERTEX_ATTRIB_FLAG_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(GL::VERTEX_ATTRIB_FLAG_TEX_COORD, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)numberOfVertices);
}
地球是一个 cocos2d::Node。
【问题讨论】:
-
您确定您的上下文支持从客户端内存中绘制(例如,没有 VBO)吗?核心上下文没有。
-
我对OpenGL或者cocos2d-x不是很了解。我只是想将在 cocos2d-iphone 上工作的代码移植到 cocos2d-x
-
好吧,如果它试图从地址 0 读取,这通常表明你正在尝试做一些涉及 VBO 的事情,但实际上并没有一个界限你设置你的顶点指针。只是看看你的代码,我也没有看到 VBO 绑定。