1

我有一个非常简单的 GLRenderer 子类,它在屏幕上绘制一堆多边形。在我安装了 2.1 的 Nexus One 上,我看到了我所期望的。在安装了 1.6 的 G1 上,我只显示 glClearColor。我可以改变颜色,并看到我的 onDrawFrame 函数至少部分起作用。

我无法理解一个很好的解释,所以我粘贴了我的 onDrawFrame 代码:

public void onDrawFrame(GL10 gl) {
    gl.glClearColor(1.0f, 1.00f, 1.0f, 1.0f);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    gl.glLoadIdentity();
    gl.glScalef(zoomLevel, zoomLevel, 1.0f);
    gl.glTranslatef(offsetX, offsetY, -1);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, boothVerticies);
    int i = 0;
    for (Polygon b : allPolygons) {
        if (b.indicies != null) {
            gl.glColor4f(0.6f, 0.6f, 0.6f, 1.0f);
            gl.glDrawElements(GL10.GL_TRIANGLE_FAN, b.numberOfVerticies, GL10.GL_UNSIGNED_SHORT, b.indicies);
            gl.glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
            gl.glDrawElements(GL10.GL_LINE_LOOP, b.numberOfVerticies, GL10.GL_UNSIGNED_SHORT, b.indicies);
            if (i++ > 20) break;
        }
    }
}

我的 Polygon 结构有一个名为 indicies 的 ShortBuffer,numberOfVerticies 跟踪多边形中的点数。

有谁知道为什么这可能在我的 Nexus One 上运行良好,但在 G1 上却不行?

4

1 回答 1

4

问题是因为默认情况下,GL_VERTEX_ARRAY 在 Nexus One(或 2.1/2.2)上启用,但在 G1 上默认禁用。为了解决这个问题,我简单地添加了这个调用:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
于 2010-05-24T17:40:49.830 回答