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

时间:2011-07-01 09:53:50

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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