java - OpenGLES 在其他线程中预加载纹理

标签 java c++ android android-ndk opengl-es-2.0

我需要在 OpenGLES 应用程序的非主线程中预加载一些纹理。我读到这个:Can't call glGenTextures on multithreaded android app但它更多的是我需要的 Java 版本。我如何告诉我的加载线程将纹理上传/创建到主循环中?我读了一些关于创建上下文并以某种方式与主要上下文共享的内容。怎么办?

最佳答案

从资源/磁盘获取纹理到在 GL 中渲染有两个步骤,它们可以分开以允许工作线程上的大部分加载和计算工作。

第一步是在 Java 级别实际创建位图,这将使用类似 BitmapFactory.decodeResouce() 的方法。这部分可以在任何你喜欢的线程上完成,当你完成加载时,你将该位图放入 ArrayList 或队列或其他任何东西。确保用同步块(synchronized block)包围列表的访问。

第二步是调用glGenTextures,必须在GL线程中完成。因此,在 drawFrame() 方法的开头,检查要将位图保存到的 ArrayList 的大小,如果大小大于 0,则调用 glGenTexures 并从数组中删除和回收位图。

关于java - OpenGLES 在其他线程中预加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546396/

相关文章:

java - 为什么相等运算符适用于整数值直到 128 数字?

java - 安卓 : Firebase Realtime database

java - 属性 java.protocol.handler.pkgs

c++ - 在 Opengl 中使用矩阵的正确顺序是什么?

java - 在java中保存所有时区的日期时间

java - 如何避免堆栈溢出错误

c++ - 具有可变参数模板的递归继承和继承参数问题

c++ - C++单例模式代码无法运行,不知道为什么?

java - 如何随机加载多个 .txt 文件中的任何一个

java - Android 的奇怪问题,程序可以编译但无法运行