OpenGL, рисование некоторых Rects (TriangleFan и LineLoop) занимает до 10 мс - PullRequest
0 голосов
/ 15 декабря 2011

В настоящее время меня интересует, почему OpenGl нужно так много времени для рисования некоторых простых TriangleFans с LineLoops вокруг (для сглаженных краев).

Этот цикл выполняется при каждом вызове 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 x 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 до 10 мс?Как я могу это исправить?

Результатами этого цикла являются некоторые ряды, которые не связаны друг с другом, но есть ли возможность поместить эти 40 прямоугольников в один объект?

Этот метод рисует часть моего фона, возможно ли определить объекты, которые будут отображаться только один раз на экране, например «Rendermode Dirty», но не для всего Renderer, я бы хотел избежать создания наложенных SurfaceViews,но в моем onDrawFrame есть динамические и статические объекты.Я хотел бы отображать только динамические объекты и сохранять статичные объекты на экране, отображая их только один раз (в начале).

1 Ответ

0 голосов
/ 15 декабря 2011

Почему вы зацикливаетесь на методе onDraw? Вы вращаете сетку 40 раз за каждый вызов. Просто увеличивайте угол после или перед каждым вызовом onDraw.

...