我想在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中的文本的最佳方法是什么?
答案 0 :(得分:2)
每帧的工作太多了。
我将2D API用于Canvas.drawText()
(或drawBitmap
,如果您不使用真实字体)400个字符到私有Bitmap
,并将其用作我的纹理。
答案 1 :(得分:0)
你正在重复每一帧和文本中每个角色的大量工作。您应该计算给定字符串的所有顶点和三角形数据,然后在一个批处理中将其提交给opengl。只要字符串保持不变,就重复使用数据。