- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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 上的单个线程进行。本文对此提供了更多详细信息:
关于Android OpenGL 应用程序在几次 onDrawFrame 调用后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18238998/
在android-opengles中,我们知道任何图元都可以通过OnDrawFrame(GL10 gl){.......}这是不断呈现的。就好像我们想画一个在 triangle 类中定义的三角形我们用
我遇到了 GLSurfaceView 的不同行为。据我所知,程序有责任清除每一帧的缓冲区(颜色和深度)。这意味着如果我不清除缓冲区,我会得到最后一帧的内容(或之前的双缓冲帧)。 似乎无论在某些设备上如
我在 OpenGL ES 2.0 中为 android 编写小应用程序。一切都很顺利,但今天我实现了 2D 文本绘图。我只是创建普通的 Canvas ,在上面写文字,然后我只是将这个位图加载为 2D
我有一个使用 GLSurfaceView.Renderer 的 Activity, 在渲染器中,我使用 onDrawFrame 使用 glTexImage2D 在每个触摸事件上绘制新图像,一切都很好,
我在为我的第一个游戏创建游戏循环时遇到了问题。我已经阅读了很多有关它的内容,但仍然无法弄清楚。它基于 OpenGL,所以我将 onDrawFrame 用作游戏循环,它在我的手机上运行良好。问题是 on
我遇到了渲染器对象似乎根本没有调用其 onDrawFrame 的问题。调试器永远不会在函数内部遇到断点。因此,我的方 block 没有绘图。这是代码,如果您需要其他任何东西,请告诉我: public
我正在创建一个游戏循环,我需要能够调用 onDrawFrame(从渲染器内部手动调用)以便在我发现我落后于进程时“跳过帧”。 目前我有一个调用的 GLSurfaceView 类 setRenderer
我刚刚注意到一件奇怪的事情 - 看起来我的 GlSurfaceView.Renderer::onDrawFrame() 很少被调用。至少我希望它是另一种方式: 当前渲染器的 renderMode 设置
我有一个 UI,它有一个显示多边形的 GLSurfaceView。 UI 还有两个按钮 ZoomIn 和 ZoomOut。当用户按下这些按钮时,将调用 myGLSurfaceView 的 zoomIn
我正在 Android 上的 Open GLES 中使用 Java 设计一款游戏。 显然我使用了大量纹理,很快我就会耗尽内存。 我对 Android 和 Java 很陌生,但我认为解决这个问题的最简单
在我的 openGL 游戏中,我通常使用 onDrawFrame() 中的 GLSurfaceView.Renderer 类绘制我的场景。但是,当我显示加载屏幕时,我想在加载每项数据后强制屏幕绘制,以
我们正在构建一个可滚动的背景,目前有一个大的背景图像,我们将其分成 512x512 的图 block ,并希望在需要时加载这些图 block ,而不是在 onDrawFrame 中调用 GLUtils
我正在使用表面纹理作为 mediacodec 的输出,请参阅下面的一些日志,2 个问题: mediacodec多次发布,为什么onFrameAvailable和onDrawFrame只调用一次? 通过
我收到了 Fatal Signal 11 之后 GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); 在我的 OnDrawFrame 函数中调用。纹
一段时间以来,我的 Android 游戏中运动的 Sprite 间歇性“卡顿”。这是一款非常简单的 2D OpenGL ES 2.0 游戏。 (这是一个持续存在的问题,我已经多次重新访问过)。 在我的
我想控制 GLSurfaceView.Renderer 的渲染速率。我在扩展 GLSurfaceView 的类中实现了一个线程,并在 while(true) 循环中将其定期 hibernate ,这不
我是一名优秀的程序员,十分优秀!