我有一个非常简单的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上却没有?
答案 0 :(得分:4)
问题是由于默认情况下,在Nexus One(或2.1 / 2.2)上启用了GL_VERTEX_ARRAY,但默认情况下它在G1上被禁用。要修复,我只是添加了这个调用:
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);