2011-12-15 13 views
0

目前我想知道爲什麼OpenGl需要這麼多時間用LineLoops繪製一些簡單的TriangleFans(用於平滑邊緣)。OpenGL,繪製一些Rects(TriangleFan和LineLoop)需要長達10ms

此循環在每個onDrawFrame()調用中執行。

for (int j = 0; j < 40; j++) { 
     float rotationAngle= (float) ((j * angle) + angleBegin 
       - plusAngle+ (angle/ 2f)); 
     GLES10.glPushMatrix(); 
     GLES10.glTranslatef(plusX, 0, 1f); 

     GLES10.glTranslatef(0.5f * height, 0.5f * height, 0.001f); 
     GLES10.glRotatef(rotationAngle, 0, 0, 0.9f); 

     rectObject.render(GL_Meshobject.PrimitiveType.TriangleFan); 
     rectObject.render(GL_Meshobject.PrimitiveType.LineLoop); 
     GLES10.glPopMatrix(); 
    } 

其呈現40×2(環路)次創建這樣的對象:

 rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f); 
    rectObject.addVertex(wert1[KOORDS_X], wert1[KOORDS_Y], 0); 
    rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f); 
    rectObject.addVertex(wert2[KOORDS_X], wert2[KOORDS_Y], 0); 
    rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f); 
    rectObject.addVertex(wert4[KOORDS_X], wert4[KOORDS_Y], 0); 
    rectObject.addColor(0.3f, 0.3f, 0.3f, 1.0f); 
    rectObject.addVertex(wert3[KOORDS_X], wert3[KOORDS_Y], 0); 

什麼是執行這個循環2-10ms之間持續時間的原因是什麼?我該如何解決它?

這個循環的結果是一些不互相連接的矩形,但是有沒有可能將這40個矩形放到一個對象中?

這種方法繪製了我的背景的一部分,是否有可能定義的對象只能在屏幕上渲染一次像「Rendermode Dirty」,但不是整個渲染器,我想避免創建疊加SurfaceViews,但在那裏是我的onDrawFrame中的動態和靜態對象。我只想渲染動態對象,並通過僅渲染一次(在開始處)將靜態內容保留在屏幕上。

回答

0

爲什麼你在onDraw方法中循環?您每輪調用40次網格。只需在每次onDraw調用之後或之前增加角度。

+0

嗨,我會在一會兒嘗試這個:)但是所有的矩形應該在同一時間看到,所有的矩形。如果我只在一個onDraw調用中繪製一個Rectangle,我不認爲它似乎是一個背景。 – user983814 2011-12-15 10:59:46