android - 使用 OpenGL 在 Android 中使用 Canvas 的文本和字体

标签 android opengl-es canvas

我正在使用以下帖子中概述的代码:

Draw text in OpenGL ES

我想我可以使用这种技术来动态显示文本(比如 FPS 计数器)。我意识到调用资源来获取可绘制对象会大大减慢这个过程,而且我不需要位图背景,所以我将其删除。

该技术有效,但一段时间后(约 2000 帧)整个手机都锁定了。我怀疑这段代码中有一些内存没有被释放,但我不知道在哪里。我尝试卸载有效的 Canvas、Paint 和 Bitmap 对象创建(因此它们不是每一帧都创建的),但同样的问题仍然存在。

因此我怀疑生成的 GL 纹理是罪魁祸首,但我不确定如何删除它,或者是否确实如此。

如有任何帮助,我们将不胜感激。

编辑:作为替代方案,有人可以指出一种将文本动态呈现到屏幕的简单方法(例如,应该能够呈现自开始以来的帧数,例如,不断更新和增加)。我能想到的所有方法都非常乏味(为每个数字制作单独的四边形,将 0-9 的纹理存储在内存中,解析数字并将每个数字渲染到每个四边形上),无法及时更新(覆盖 View ) 或无法在 glSurfaceView 中获得所需的定位。

最佳答案

CBFG - http://www.codehead.co.uk/cbfg

这正是我一直想要的。您可以使用 CBFG 从字体文件构建位图文件,然后只需几行代码即可加载和显示该文件(在导入他的包之后)。它就像 fnt.PrintAt(gl,"Hello world!", 50, 160); 一样简单在 onDraw 中,更重要的是,它可以很好地处理动态文本。 我强烈建议任何有相同情况的人尝试这个。

关于android - 使用 OpenGL 在 Android 中使用 Canvas 的文本和字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461786/

相关文章:

javascript - 在 Facebook 上分享数据 uri 图片

java - 如何重构要从 React Native 调用的原生 Android Java 方法?

android - 在 Qt Android 中使用 C++17

Android OpenGL 扩展 GLSurfaceView 空指针异常

android - OpenGL ES Android 矩阵转换

javascript - Canvas 上的自定义字体仅适用于 safari

android - 我改变了重力,但按钮位置相同

java - Android 使用 java nullpointerException 接口(interface)传递值

iphone - iOS OpenGL ES 2.0 绘制3D线并设置颜色

javascript - 是否可以在 HTML5 Canvas 中使用多个图像?