我正在为 OpenGL ES 2.0 中的 android 编写小应用程序。一切都很顺利,但今天我实现了 2D 文本绘图。我只是创建普通画布,在上面写文字,然后我只是将这个位图加载为 2D 纹理并绘制它。这是我用来更改文本值的方法。
public void setText(String text){
if(!this.text.equals(text)){
this.text = text;
Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
bitmap.eraseColor(0);
Paint textPaint = new Paint();
textPaint.setTextSize(32);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff, 0x00, 0x00, 0x00);
textPaint.getTextBounds(text, 0, text.length(), bounds);
canvas.drawText(text, 0, bounds.height(), textPaint);
GLES20.glDeleteTextures(1, new int[]{textureHandle}, 0);
this.setTexture(bitmap);
bitmap.recycle();
}
}
我想尝试一下,所以我开始计算 onDrawFrame 调用的数量。它运行良好,但在第 1045 次调用时它会冻结,然后它会继续运行几帧,然后应用程序就会崩溃。
我得出结论,这可能是由于缺少可用内存而发生的,所以我添加了 GLES20.glDeleteTextures(1, new int[]{textureHandle}, 0); 从内存中释放不必要的纹理,但它没有改变任何东西。
有什么想法可能有问题吗?
谢谢 Toneks