我需要在 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/