#opengl-es #embedded
#opengl-es #встроенный
Вопрос:
Я использую следующий код для рисования символов на экране (каждый символ 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:
На самом деле я думаю, что вы должны попытаться ограничить количество вызовов viewport
, glBindTexture
и glDrawArrays
.
Технически, вы должны упаковать всех своих персонажей в одну текстуру, чтобы вы могли привязать ее один раз.
Затем вы могли бы вычислять вершины и текстовые строки в цикле, как вы это делаете на самом деле, но самостоятельно выполняете математику окна просмотра и накапливаете результаты в массиве ЦП. После того, как ваш массив сформирован, вы должны отправить вызов рисования один раз, предоставив этот массив.
Вероятно, вы можете найти здесь inpiration: