У меня простой вопрос относительно производительности рендеринга в OpenGL ES.
Предположим, я рендерил простую 2D систему частиц, скажем, 1000 частиц, на мобильном устройстве, таком как iPhone или Samsung Galaxy S.
Все частицы визуализируются с одинаковыми текстурами.
Частицы масштабируются и вращаются в течение их жизненного цикла.
Мы говорим об OpenGL ES здесь.
Какой способ более практичен:
1) Установите пакет вершин и преобразуйте каждую частицу в нее (используя процессор для выполнения требуемого преобразования), затем выполните один единственный вызов glDrawArrays, чтобы нарисовать все частицы одновременно.
2) Нарисуйте каждую отдельную частицу, используя (псевдо!) Код, подобный следующему:
glPushMatrix();
glColor4f(_act_color.r, _act_color.g, _act_color.b, _act_color.a);
glTranslatef(_pos.x, _pos.y, 0.0f);
glRotatef(_rot, 0, 0, 1);
glVertexPointer(2, GL_FLOAT, sizeof(vertexVT), &verBuf[0].v[0]);
glTexCoordPointer(2, GL_FLOAT, sizeof(vertexVT), &verBuf[0].t[0]);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glPopMatrix();
Какой путь лучше. При выборе первого способа требуется больше ресурсов процессора, но он должен вести себя одинаково на всех устройствах. Один из выводов первого способа будет то, что я получу некоторые издержки на вершину, потому что я должен использовать «вырожденные» вершины между каждой частицей.
Второй способ - преобразование в HW, но будут ли все коммандос Open GL вести себя одинаково на разных платформах?
Что вы думаете о каждой реализации? Я хотел бы показать плюсы и минусы каждого пути.