【问题标题】:iOS openGLES1 glDrawArrays causes EXC_BAD_ACCESS on device onlyiOS openGLES1 glDrawArrays 仅在设备上导致 EXC_BAD_ACCESS
【发布时间】:2013-12-26 21:51:42
【问题描述】:

我正在将 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);
}

我的问题是这些方法在模拟器上运行良好,但在我的手机上却不行。每次我调用以下 2 个低级方法之一时:

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

应用程序因 EXC_BAD_ACCESS 而崩溃

如果我删除那些 3d 形状,应用程序就会工作。

知道为什么这些方法在模拟器上按预期工作,但在设备上崩溃?

【问题讨论】:

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


    【解决方案1】:

    如果在该 line[] 上使用 const 将其放入一些奇怪的内存中,openGL 在设备上无法正确访问,我不会感到惊讶。虽然这是一个很长的镜头。

    【讨论】:

    • 我不认为这是 const 的问题,但可能是因为他使用了一个局部变量,该变量将在 OpenGL 绘制数组之前被销毁
    • 这就是我在 opengl 绘制之前的任何时间的想法。那么,作为 const 并不会真正产生任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多