我目前正在使用受Replica Island启发的设计在安卓上写一款游戏。也就是说,双线程方法,一个逻辑线程和一个渲染线程。
我在逻辑线程中设置了一个轻量级的渲染模块,它基本上只处理想要渲染的游戏对象。它将渲染命令发送到渲染线程,如"render sprite f at x,y“。
我喜欢这个设计,但我目前的问题在于资源创建。比方说sprite f需要一个纹理,这将由它在加载时在逻辑线程中请求。问题是,因为OpenGL上下文在渲染线程中,所以只能在渲染器线程中创建纹理。目前,逻辑线程和渲染线程之间唯一的同步点是当它们在帧的末尾交换渲染队列时,我希望保持这种状态。
我如何才能解决想要在逻辑线程上创建纹理,vbo等的问题,同时仍然只在渲染线程上渲染东西?共享OpenGL上下文是一种好方法吗?或者是引擎的其他设计?
编辑:另一种选择是使用另一个队列,您可以在其中放置来自逻辑线程的请求。比如"create texture“等。渲染线程会迭代这个队列,并在开始渲染另一个队列之前处理它。我开始喜欢这个解决方案了。
发布于 2010-11-29 05:04:11
OpenGL要求从渲染线程调用glBindTexture。我强烈建议您从GLSurfaceView.Renderer onSurfaceCreated方法(由render线程调用)进行绑定。如果重新创建了GL上下文,将再次调用它来重新绑定所有内容。
如果选择从另一个线程驱动它,请通过在GLSurfaceView对象上调用queueEvent来向渲染线程传递一个runnable。注意onSurfaceCreated还没有被调用的竞争。
祝你的游戏好运!
https://stackoverflow.com/questions/4296828
复制相似问题