我正在使用OpenGL进行Android游戏,我有一个游戏更新线程和一个opengl渲染线程。
目前我让他们同步这样的update()和render()共享一个锁,我基本上在更新和渲染之间来回ping / pong。这与运行更新和串行渲染基本相同,因为一个人总是在等待另一个。
在我的游戏中,每个对象都是可渲染的,所以我在思考而不是拥有一个全局锁,我可以让每个可渲染对象都有自己的锁。这样,每当更新更新某个对象时,渲染器可以渲染任何其他对象,反之亦然。如果在渲染或更新线程尝试访问它时对象被锁定,它可以跳过它并将其推送到队列的后面(假设更新/渲染的顺序无关紧要)。
现在这个游戏是我第一次处理同步问题,所以我想知道在每一帧中如此多的锁定不断锁定和解锁会不会出现严重的性能问题?这是同步更新和渲染线程的常规方法,还是我忽略了一些明显的缺陷?
我能想到的唯一缺陷就是渲染器可以从游戏的两个不同“步骤”中绘制对象,因为它绘制的某些对象将在游戏步骤N上,而其他对象将被更新并且是在第N + 1步,但我不知道这对于我的特定游戏是否会引人注意。
感谢您的任何想法。
答案 0 :(得分:2)
我不是游戏开发者,但是从副本岛制造商那里发现了这篇文章:Rendering With Two Threads
GameDev StackExchange上的这个帖子也许会有所帮助:https://gamedev.stackexchange.com/questions/95/how-many-threads-should-an-android-game-use