我正在制作游戏,并且我已经创建了一个单独的线程来加载资源,3d模型等。因此UI线程在加载时不会锁定。但是,加载的线程需要一个GL10实例才能正确加载和映射纹理。
以下是对问题的概述,以便您更好地了解我的困境:
1.我的Renderer类创建并启动“加载”线程
2.加载线程从资产中加载模型和纹理
3.'glGenTextures'需要加载纹理, 但 加载线程没有GL10的实例
我尝试给加载线程提供由Renderers onSurfaceCreated方法给出的GL10实例,但它不起作用。(我猜它会被删除,或搞砸了,或者当函数结束时)
那么,我怎样才能将GL10的工作实例传递给我的加载线程?
答案 0 :(得分:5)
答案是你能做的。
在opengl android中,gl对象/上下文仅存在于渲染循环中。 据我所知,你不能在该线程之外使用gl函数。
原因很简单,opengl是一个不支持线程的状态机 - 一个主要原因是,如果您添加了测试,它会降低渲染速度 - 当你想要绘制某些东西并且同时改变混合状态时会发生什么状态机 -...
你想要做的是做你线程中所有与gl无关的工作(打开位图读取点文件...) 在渲染循环中添加一个if(与gl相关的东西){...} 当你的线程准备就绪时,更改标志以让渲染循环知道你想要加载某些东西
答案 1 :(得分:0)
这在iOS和OSX上非常可行,并且只要您同步对GL状态机的访问,除非Android在其实现中创建了限制,否则没有理论上的问题。我刚刚尝试上传纹理,但我没有成像,事情也不起作用。就像我说的,这种技术在其他方面都很好用......