Opengl ES - 有没有办法加快渲染速度?

时间:2011-01-23 12:08:43

标签: 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 Legend上获得48 FPS,Galaxy S获得60 FPS。

当我在HTC Legend上放置10 + 10 + 40纹理(和动画,混合)方格时,我得到14-20 FPS,Galaxy S再次获得60 FPS。

有没有办法加快我的应用程序(和FPS)?或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

优化的最基本方法是最小化状态变化,在这种情况下切换纹理很昂贵,因此对绘制调用进行排序,以便最小化纹理开关的数量(绑定纹理A,使用该纹理绘制所有正方形,然后切换纹理B,使用该纹理绘制所有正方形等。)

同样适用于混合。