iOS openGLES1 glDrawArrays仅在设备上导致EXC_BAD_ACCESS

时间:2013-12-26 21:51:43

标签: ios iphone opengl-es 3d exc-bad-access

我正在使用OpenGLES1作为增强现实应用。

在应用程序中,我可以移动并查看使用一些简单几何方法绘制的一些3d形状:

void render()
{
    ....
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    drawCube(…);
    drawPyramid(…);
    for (int i = 0; i<10; i++) {
        drawLine(0, i, 100, i);
    }
    ....
}

方法的工作方式如下,顶点数组:

void drawLine(float x1,float y1,float x2,float y2) const
{
    const GLfloat line[] = {
        x1,y1,15,  //point A
        x2,y2,15  //point B
    };
    glColor4f(0.0f,0.0f,1.0f,1.0f); //line color
    glLineWidth(2.0f);
    glVertexPointer(3, GL_FLOAT, 0, line);
    glDrawArrays(GL_LINES, 0, 2);
    glColor4f(1, 1, 1, 1);
}

我的问题是这些方法在模拟器上工作正常,但在我的手机5上没有。每当我拨打以下两种低级方法中的一种时:

glDrawElements(GL_TRIANGLE_FAN, 3, GL_UNSIGNED_BYTE, &pyramidVertexFaces[i]);
glDrawArrays(GL_LINES, 0, 2);

该应用与EXC_BAD_ACCESS

崩溃

如果我删除这些3d形状,该应用程序可以正常工作。

任何想法为什么这些方法在模拟器上按预期工作但在设备上崩溃?

1 个答案:

答案 0 :(得分:0)

如果在该行[]上使用const将它放在某个奇怪的内存中,以至于openGL在设备上无法正常访问时,我不会感到惊讶。这是一个很长的镜头。