2012-03-05 120 views
1

我正在與OpenGL的Android遊戲,我有一個遊戲更新線程和一個opengl呈現線程。渲染/更新同步:每個可渲染一個鎖?

目前我讓他們同步,更新()和render()共享一個鎖,我基本上平/乒乓來回更新和渲染之間。這與連續運行更新和渲染基本相同,因爲人們總是在等待另一個人。

在我的遊戲中,每個對象都是可渲染的,所以我在想的是不用一個全局鎖,我可以讓每個可渲染對象都有自己的鎖。這樣,無論何時更新更新某個對象,渲染器都可以渲染任何其他對象,反之亦然。如果一個對象在渲染或更新線程嘗試訪問它時被鎖定,它可以跳過它並將其推送到隊列的後面(假設更新/渲染順序無關緊要)。

現在這個遊戲是我第一次處理同步問題,所以我想知道是否會有任何嚴重的性能問題,有這麼多的鎖不斷鎖定和解鎖在每一幀?這是一個正常的方式來同步更新和渲染線程,或者我忽略了一些明顯的缺陷?

我能想到的唯一缺陷就是渲染器可能會從遊戲的兩個不同「步驟」中繪製對象,因爲它正在繪製一些對象將在gamestep N上,而其他對象將被更新並且在第N + 1步,但我不知道這對我的特定遊戲是否會引人注目。

感謝您的任何想法。

回答

2

我不是一個遊戲開發商,但所遇到的這個帖子從副本島的製造者:Rendering With Two Threads

同樣在GameDev StackExchange這個線程可能會有所幫助:https://gamedev.stackexchange.com/questions/95/how-many-threads-should-an-android-game-use

+0

是的,我已經看到,ReplicaIsland博客,它似乎出現在我看到的每一個谷歌搜索或安卓遊戲線程討論:)。這似乎是一個有效的解決方案,但與我上面提到的有點不同。感謝您的輸入。 – Tim 2012-03-05 09:18:32

+0

希望我能幫助更多:) – Soham 2012-03-05 09:43:08