我正在使用Java在Android上构建一个OpenGL ES 2游戏。
当前我有两个线程,一个是Android UI,另一个是OpenGL。
据我所知,为了获得最佳性能,我需要再加一个线程来处理游戏逻辑,以便OpenGL线程可以尽可能快地进行渲染。
这将使我拥有三个线程,分别为Android UI,OpenGL和游戏逻辑。(我们称它们为UI,OGL和GL)
请纠正我如果我错了:
UI启动后创建OGL和GL。OGL和GL运行并查询UI输入。GL将绘制调用发送到OGL中的队列中。
这里有两种情况。如果GL的循环时间比OGL长,那么下一次OGL循环需要等待GL完成,然后再开始下一次循环,以避免只呈现上一帧的一半呼叫。如果OGL的时间比GL长,那么GL需要等待OGL完成才能重新开始/发送更多的绘制调用。
要实现这一点:
当GL完成其循环时,它会检查OGL是否已经完成绘制当前的绘制调用队列。如果是,它会启动GL和OGL的下一个循环。否则,它会等待。
当OGL完成后,它会检查GL。如果GL也完成了,它会重新开始两个循环。如果没有完成,它会等待GL,当GL完成时将检查OGL,并重新开始两个循环。抱歉如果措辞有点混乱。
为了说明我的想法: diagram http://img840.imageshack.us/img840/2816/stackoverflowthredpictu.jpg 为了澄清我的问题: -这样布局会起作用吗? --如果不行,有什么更好的方法?
-我应该查找哪些具体的主题来实现这一点? --例如,我不知道如何创建线程或在它们之间发送信息。
这是我第一次在这里提问,希望我做得正确。 :) 谢谢!
AsyncTask
,而是使用标准的JavaRunnable
结合Android的Handler
。 - Todd Sjolander