Opengl es 优化OpenGL ES操作?
我使用以下代码在屏幕上绘制字符(每个UTF8字符都是纹理):Opengl es 优化OpenGL ES操作?,opengl-es,embedded,Opengl Es,Embedded,我使用以下代码在屏幕上绘制字符(每个UTF8字符都是纹理): int行=0; glTexCoordPointer(2,GL_浮点,0,texCoords); glVertexPointer(2,GLU浮点,0,顶点); 用于(StdStr*行输入_行){ const char*str=[line cString]; 对于(int i=0;i视口(C_宽度*i, C_高度*行, C_宽度, C_高度); glColor4f(1.0,1.0,1.0,1.0); glBindTexture(GL_纹理
int行=0;
glTexCoordPointer(2,GL_浮点,0,texCoords);
glVertexPointer(2,GLU浮点,0,顶点);
用于(StdStr*行输入_行){
const char*str=[line cString];
对于(int i=0;i视口(C_宽度*i,
C_高度*行,
C_宽度,
C_高度);
glColor4f(1.0,1.0,1.0,1.0);
glBindTexture(GL_纹理_2D,_纹理[0]+*(str+i));
gldrawArray(GL_三角带,0,4);
}
行++;
}
当有很多字符时,代码需要更长的时间来运行。在这种情况下,几乎99%的时间花费在
glDrawArrays
例程中。是否可以最大限度地减少对gldrawArray
的调用量?OpenGL ES版本是1.1。实际上,我认为您应该尝试限制对视口
、glBindTexture
和glDrawArrays
的调用量
从技术上讲,您应该将所有角色打包到一个纹理中,以便可以绑定一次
然后,您可以像实际操作一样在循环中计算顶点和texcoords,但自己进行视口数学运算,并在CPU阵列中累积结果。一旦你的数组组成,你应该提交一次draw调用,提供这个数组
您可能可以在这里找到:
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++;
}