java - 使用 OpenGL ES 2.0 在 Android 中高效绘制许多纹理

标签 java android bitmap opengl-es-2.0

我正在编写一个Android应用程序,它需要绘制大量在网格中对齐的图片。计划绘制约2000幅图画(建立马赛克)。每张图片的尺寸均为 1024x1024。当然,我在那里遇到了严重的效率问题。

现在我正在使用 OpenGL ES 2.0 进行绘图。我有一个线程将图像从资源加载到位图对象中,并将它们传递到中央池。然后,OpenGL 的渲染线程从该池中获取图像,将图像数据从位图加载到 GPU,并将其绘制在构建的网格的右侧单元格上。

这太慢了。我使用 Android 模拟器对这个过程进行了一些测量。将资源加载到位图对象中大约需要 60 毫秒。将位图加载到 GPU + 绘图大约需要 15ms。

我不清楚如何加快速度并以至少 30 FPS 的速度完成此操作。我目前的想法是使用外部库来加载位图,并且可能使用 NDK 来加快速度。我还了解纹理图集和批处理我的绘图。我可以实现这个,但由于我的问题是在运行时从资源加载图像,所以我现在没有尝试。

也许有人可以给我关于如何有效地做到这一点的建议。

谢谢大家。

最佳答案

首先,我只想澄清一下,因为我认为您的标题具有误导性 - 根据您的描述,您真正的问题不是绘图而是加载。您并没有真正说您是否有绘图问题(您提到了加载和绘图的 fps)。

您没有提及所有要求,例如 - 您需要多长时间绘制所有要求?例如,也许您可​​以将第一个 X 作为应用程序加载的一部分加载,因此当应用程序加载时,纹理已经创建并可以绘制,同时在专用线程中加载另一个 X,依此类推...... 另一种方法是拥有低分辨率图像和高分辨率图像,首先加载低分辨率图像,然后再替换(例如,按需)。我不确定这对于 2000 张图像来说在内存方面是否合理,但您可以检查一下。

另外,我建议看一下 Rajawali - 这是一个很好的框架,有很好的示例,包括多个纹理(Google Play 中也有示例应用程序)。也许它会有所帮助。

关于java - 使用 OpenGL ES 2.0 在 Android 中高效绘制许多纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551154/

相关文章:

java - onTouchEvent、状态栏和 Canvas ——坐标系的差异

c# - 从双二维数组创建位图

c++ - 如何在c++ win32中制作一个可点击的按钮

Android:FaceDetector 不工作。 findface 始终检测零面;

java - 使用 Spring Hibernate 在 Java 中处理并发

java - 下面的代码有什么问题?

java - Mockito - 使用预期参数验证方法调用但忽略某些字段

java - 第一次连接到 Netbeans SQL 数据库 - java.sql.SQLException : No suitable driver found 0 08001

java - 启动画面 - 触摸即可跳过

android - 制作签名 APK 后应用程序崩溃?