在Android上的单独线程上获取GL10实例

Ale*_*llo 3 java multithreading android synchronization opengl-es

我正在制作一个游戏,我已经创建了一个单独的线程来加载资产,3d模型等.这样UI线程在加载时就不会锁定.但是,加载的线程需要GL10的实例才能正确加载和映射纹理.

下面是对问题的概述,以便您更好地理解我的困境:
1.我的Renderer类创建并启动"加载"线程.
2.加载线程从资源
3 加载模型和纹理.'glGenTextures'是加载纹理所必需的,加载线程没有GL10的实例

我试着给加载线程提供由Renderers onSurfaceCreated方法给出的GL10实例,但是它不起作用.(我想它会被删除,或搞砸了,或者当函数结束时)

那么,我怎样才能将GL10的工作实例传递给我的加载线程?

Jas*_*ers 5

答案是你不能.

在opengl android中,gl对象/上下文仅存在于呈现循环中.据我所知,你不能在该线程之外使用gl函数.

原因很简单,opengl是一个不是线程证明的状态机 - 一个主要原因是,如果你确实添加了测试状态机,当你想要绘制一些东西并且你改变一个像在同一时间混合-...

你想要做的是在你的渲染循环中完成线程中非gl相关的所有工作(打开位图读取点文件...),你添加一个if(与gl相关的东西){...}当你的线程准备就绪时,更改标志,让渲染循环知道你想要加载一些东西

  • 我很好奇,你是设法让它在一个线程中工作还是你让它像我解释的那样工作? (2认同)