2010-05-23 81 views
1

我有一個非常簡單的GLRenderer子類,它在屏幕上繪製一堆多邊形。在安裝了2.1的Nexus One上,我確切地看到了我的期望。在安裝了1.6的我的G1上,我只顯示glClearColor。我可以改變顏色,並看到我的onDrawFrame函數至少部分功能。Android OpenGL glDrawElements適用於2.1,但不適用於1.6

我無法捉摸一個很好的解釋,所以我貼我的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; 
     } 
    } 
} 

我的多邊形結構具有ShortBuffer叫indicies,並numberOfVerticies跟蹤多邊形點的數量。

有沒有人有任何想法,爲什麼這可能適用於我的Nexus One,但不是在G1?

回答

4

問題是由於默認情況下,在Nexus One(或2.1/2.2)上啓用了GL_VERTEX_ARRAY,但在G1上默認情況下它被禁用。爲了解決這個問題,我簡單地加了這個電話:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
相關問題