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

时间:2011-01-17 00:06:18

标签: java android multithreading synchronization opengl-es

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

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

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

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

2 个答案:

答案 0 :(得分:5)

答案是你能做的。

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

原因很简单,opengl是一个不支持线程的状态机 - 一个主要原因是,如果您添加了测试,它会降低渲染速度 - 当你想要绘制某些东西并且同时改变混合状态时会发生什么状态机 -...

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

答案 1 :(得分:0)

这在iOS和OSX上非常可行,并且只要您同步对GL状态机的访问,除非Android在其实现中创建了限制,否则没有理论上的问题。我刚刚尝试上传纹理,但我没有成像,事情也不起作用。就像我说的,这种技术在其他方面都很好用......

相关问题