首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化OpenGL ES操作?

优化OpenGL ES操作?
EN

Stack Overflow用户
提问于 2011-10-23 20:49:15
回答 1查看 95关注 0票数 0

我使用以下代码在屏幕上绘制字符(每个UTF8字符都是一个纹理):

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-23 21:04:15

实际上,我认为您应该尝试限制对viewportglBindTextureglDrawArrays的调用量。

从技术上讲,您应该将所有字符打包在一个单一的纹理中,这样您就可以绑定它一次。

然后,您可以像实际一样计算循环中的顶点和纹理,但是自己进行视口运算,并在CPU数组中积累结果。一旦您的数组组成,您应该提交一个抽签调用一次,提供这个数组。

你可能会在这里找到灵感:

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7869088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档