Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 优化OpenGL ES操作?_Opengl Es_Embedded - Fatal编程技术网

Opengl es 优化OpenGL ES操作?

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_纹理

我使用以下代码在屏幕上绘制字符(每个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_纹理_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++;
}