【问题标题】:Why would glDrawArrays result in EXC_BAD_ACCESS (code=2, address=0x0)?为什么 glDrawArrays 会导致 EXC_BAD_ACCESS (code=2, address=0x0)?
【发布时间】: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 绑定。

标签: opengl cocos2d-x


【解决方案1】:

根据我找到的 cocos2d-x 文档 (http://www.cocos2d-x.org/reference/native-cpp/V3.0beta2/d4/d83/group__shaders.html),GL::VERTEX_ATTRIB_FLAG_POSITIONGL::VERTEX_ATTRIB_FLAG_TEX_COORD 是位掩码值,其值为 1 和 4。但是您将它们用作 glVertexAttribPointer() 的第一个参数:

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);

这里的第一个参数需要是顶点属性的位置,不太可能是 1 和 4。按照我解释文档的方式,您需要使用这些值来代替:

glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinates);

【讨论】:

  • 解决了问题!不过,您的代码中有一个小错误。它应该是 GLProgram::VERTEX_ATTRIB_POSITION 和 GLProgram::VERTEX_ATTRIB_TEX_COORDS
猜你喜欢
  • 1970-01-01
  • 2014-01-01
  • 2014-09-19
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多