Opengl ES - Есть ли способ ускорить мой рендеринг? - PullRequest
0 голосов
/ 23 января 2011

У меня текстурированный квадрат.Я рисую это следующим способом:

    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.

Когда я кладу 10 + 10 + 40 текстурированных (и анимированных, смешанных) квадратов, в HTC Legend я получаю 14-20 FPS, Galaxy S снова получает 60 FPS.

Есть ли способ ускорить мое приложение (и FPS)?Или я что-то не так делаю?

1 Ответ

0 голосов
/ 23 января 2011

Самый простой способ оптимизации - минимизировать изменения состояния, в этом случае переключение текстур обходится дорого, поэтому сортируйте вызовы отрисовки, чтобы они минимизировали количество переключателей текстуры (свяжите текстуру A, нарисуйте все квадраты, используя эту текстуру, затем переключитек текстуре B нарисуйте все квадраты, используя эту текстуру и т. д.).

То же самое относится к смешиванию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...