gpt4 book ai didi

Android OpenGL 应用程序在几次 onDrawFrame 调用后崩溃

转载 作者:行者123 更新时间:2023-11-30 03:26:01 25 4
gpt4 key购买 nike

我在 OpenGL ES 2.0 中为 android 编写小应用程序。一切都很顺利,但今天我实现了 2D 文本绘图。我只是创建普通的 Canvas ,在上面写文字,然后我只是将这个位图加载为 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);从内存中释放不必要的纹理,但它没有改变任何东西。

有什么想法可能有问题吗?

谢谢唐克斯

最佳答案

如果调用 setText() 的线程与其余 OpenGL ES 代码不同,那么这就是问题所在。对 OpenGL ES 的所有调用都必须从 Android 上的单个线程进行。本文对此提供了更多详细信息:

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1

关于Android OpenGL 应用程序在几次 onDrawFrame 调用后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18238998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com