2011-12-15 2 views
0

В настоящее время мне интересно, почему OpenGl требует столько времени на рисование простых TriangleFans с LineLoops вокруг (для гладких краев).OpenGL, рисование некоторых Rects (TriangleFan и LineLoop) занимает до 10 мс

Этот цикл выполняется при каждом вызове 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», но не для всего Renderer, я бы хотел избежать создания наложения SurfaceViews, но там являются динамическими и статическими объектами в моем onDrawFrame. Я хотел бы отображать только динамические объекты и сохранять статические объекты на экране, показывая их только один раз (в начале).

ответ

0

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

+0

Привет, я попробую это через минуту :) Но все прямоугольники должны быть видны одновременно, все они. Если я нарисую только один прямоугольник в одном вызове onDraw, я не думаю, что это кажется фоном, чем. – user983814

 Смежные вопросы

  • Нет связанных вопросов^_^