我正在做一个游戏,并且创建了一个单独的线程来加载资产,3D模型等.这样,UI线程在加载时不会锁定.但是,用于加载的线程需要GL10实例才能正确加载和映射纹理.
这里是问题的概述,以便您可以更好地了解我的困境:
1.我的Renderer类创建并启动“加载”线程.
2.加载线程从资产加载模型和纹理
3.需要’glGenTextures’来加载纹理,但是加载线程没有GL10的实例
我尝试只给加载线程提供由Renderers onSurfaceCreated方法提供的GL10实例,但是它不起作用(我猜想它会被删除或弄乱,或者在函数结束时出现错误)
那么,如何将GL10的工作实例传递给加载线程?
解决方法:
答案是你做不到.
在opengl android中,gl对象/上下文仅存在于渲染循环中.
据我所知,您不能在该线程之外使用gl函数.
原因很简单,opengl是状态处理程序,不是线程证明的
-一个主要原因是,如果您确实添加了测试,它将减慢渲染速度
-作为状态机,当您想要绘制某些东西并且同时更改状态(例如混合)时会发生什么
-…
您要做的是完成与线程无关的所有工作(打开位图读取点文件…)
在渲染循环中添加一个if(与gl相关的操作){…}
当线程准备就绪时,请更改标志,以使渲染循环知道您要加载某些内容