2010-11-28 44 views
0

我目前正在使用靈感來自Replica Island的設計在Android上編寫遊戲。也就是說,雙線程方法,一個邏輯線程和一個渲染線程。Android併發渲染器設計

我設置了一個輕量級渲染模塊,它坐在邏輯線程中,它基本上只處理想要渲染的遊戲對象。它將渲染命令發送到渲染線程,如「在x,y渲染sprite f」。

我喜歡這種設計,但目前我的問題在於資源創建。說精靈f需要一個紋理,這將在加載時在邏輯線程中請求它。問題在於,因爲OpenGL上下文位於渲染線程中,所以紋理只能在渲染線程中創建。目前邏輯線程和渲染線程之間唯一的同步點是當它們在一幀的結尾交換渲染隊列時,我想保持這種狀態。

我該如何解決想在邏輯線程上創建紋理,vbo等的問題,同時仍然只渲染呈現線程上的東西?分享OpenGL上下文會是一個好方法嗎?或者引擎的其他設計可能?

編輯:一個替代方案將有另一個隊列,你會從邏輯線程請求。像「創建紋理」等。渲染線程將迭代此隊列並在開始渲染其他隊列之前對其進行處理。我開始喜歡這個解決方案。

回答

2

OpenGL要求從渲染線程調用glBindTexture。我強烈建議你從GLSurfaceView.Renderer onSurfaceCreated方法(由渲染線程調用)進行綁定。如果GL上下文被重新創建,則會再次調用以重新綁定所有內容。

如果您選擇從另一個線程驅動它,請通過調用GLSurfaceView對象上的queueEvent將渲染線程傳遞給一個可運行的線程。注意onSurfaceCreated尚未被調用的比賽。

祝您好運與您的遊戲!