Android opengl-es快速渲染文本的方法

时间:2011-02-11 16:18:21

标签: android opengl-es

我想在opengl ES中显示一些文字。我有一个512 * 512字体纹理(纹理图集),这里所有字母都是32 * 32像素。

我的文字长度约为400个字符。

我的算法

    opengl.setClearTransparentBGEnabled();

    float y2=0;
    float j =0;

    for (int i=0; i<text.length(); i++) {

        int ch  =(int)text.charAt(i);
        float x2=((float)j*16*scale/50);

        j++;
        if ((text.charAt(i)+"").equals("\n")) {
            y2+=(16*scale*2)/50;
            j=0;
            x2=0;
        }

        opengl.saveMatrix();
            Sprites.selectVertex("font"+name)
                    .setSprite(ch)
                    .translate(x-x2, y+y2, -9)
                    .scale(scale, scale, scale)
                    .rotate(90, 0, 0, 1)
                    .draw(true);
        opengl.loadMatrix();
    }

    opengl.setClearTransparentBGDisabled();

我唯一的问题,这个方法很慢:在此之后我得到15-20 FPS。

动态渲染opengl-es中的文本的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

每帧的工作太多了。

我将2D API用于Canvas.drawText()(或drawBitmap,如果您不使用真实字体)400个字符到私有Bitmap,并将其用作我的纹理。

答案 1 :(得分:0)

你正在重复每一帧和文本中每个角色的大量工作。您应该计算给定字符串的所有顶点和三角形数据,然后在一个批处理中将其提交给opengl。只要字符串保持不变,就重复使用数据。