2011-01-23 110 views
0

我有一個質感的廣場。我用這種方法繪製:Opengl ES - 有沒有加快渲染速度的方法?

public void draw(GL10 gl) { 

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 

     if (mShouldLoadTexture) { 
      loadGLTexture(gl); 
      mShouldLoadTexture = false; 
     } 
     if (mTextureId != -1 && mTextureBuffer != null) { 
      gl.glEnable(GL10.GL_TEXTURE_2D); 
      gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 

      gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTextureBuffer); 
      gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureId); 
     } 
      gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4); 

     if (mTextureId != -1 && mTextureBuffer != null) { 
      gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
     } 

    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
} 




    public void onDrawFrame(GL10 gl) { 

     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
... 


for (int i=0; i<50; i++) { 
...loadidentity 
...translatef 
...rotatef 

...alphaenabled 

square1.draw(gl); 

...alphadisabled 
} 

...etc 

我只有10 + 10紋理化(和動畫,混紡)的正方形,上的HTC圖例我得到48 FPS,Galaxy S的得到60 FPS。

當我把10 + 10 + 40紋理化(和動畫,混紡)的正方形,上的HTC圖例我得到14-20 FPS,Galaxy S的再次得到60 FPS。

有沒有一種方法,以加快我的應用程序(FPS)?或者我做錯了什麼?

回答

0

優化的非常基本的方法是儘量減少狀態的變化,在這種情況下切換紋理是昂貴的,所以排序您的繪圖調用,使他們儘量減少質感開關(綁定紋理A的數量,使用紋理繪製所有方塊,然後切換到紋理B,使用該紋理繪製所有方塊等)。

這同樣適用於混合。

+0

這沒有幫助很多..我重寫了,但沒有什麼不同 – lacas 2011-01-23 16:03:53