Оптимизация работы OpenGL ES? - PullRequest
0 голосов
/ 24 октября 2011

Я использую следующий код для рисования символов на экране (каждый символ UTF8 является текстурой):

int row = 0;

glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glVertexPointer(2, GL_FLOAT, 0, vertices);

for (StdStr* line in _lines) {
    const char* str = [line cString];

    for (int i = 0; i < strlen(str); i++) {
        ((XX::OGL::GLESContext*)context)->viewport(C_WIDTH*i,
                                                   C_HEIGHT*row,
                                                   C_WIDTH,
                                                   C_HEIGHT);

        glColor4f(1.0, 1.0, 1.0, 1.0);

        glBindTexture(GL_TEXTURE_2D, _textures[0] + *(str + i));
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);  
    }

    row++;
}

Когда символов много, выполнение кода занимает больше времени.В этом случае почти 99% времени расходуется на процедуру glDrawArrays.Можно ли минимизировать количество звонков до glDrawArrays? Версия OpenGL ES - 1.1.

1 Ответ

2 голосов
/ 24 октября 2011

На самом деле я думаю, что вы должны попытаться ограничить количество вызовов до viewport, glBindTexture и glDrawArrays.

Технически вы должны упаковать всех своих персонажей в одну текстуру, чтобыВы можете привязать его один раз.

Затем вы можете вычислять вершины и текстовые координаты в цикле, как вы это делаете на самом деле, но сами выполняете математические вычисления в области просмотра и накапливаете результаты в массиве ЦП.После того, как ваш массив сформирован, вы должны один раз отправить запрос на отрисовку, предоставив этот массив.

Возможно, вы найдете вдохновение здесь:

http://www.angelcode.com/products/bmfont/

http://sourceforge.net/projects/oglbmfont/

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