2016-07-07 66 views
0

我正在構建一個工具包,用於使用Emscripten創建本機質量的移動應用程序。主要目標是使這些應用程序與使用iOS或Android SDK構建的應用程序在視覺上難以區分。該工具包大量使用WebGL來渲染視圖樹。在OpenGL中構建一個窗口系統

圖形性能是一個反覆出現的問題 - 據我所知我通常是填充式的 - 我經常發現自己希望我不必在每一幀都重繪整個視圖樹。理想情況下,我想以某種方式而不是在glSwapBuffers()之後丟失幀緩衝區內容,然後僅重繪在幀之間更改的視圖。 (好吧,重繪兩次,每次緩衝一次)。這樣的方法是否可行?據我所知,不是,無論如何,但我希望我錯了。

另外我猜我可以畫一個屏幕大小的FBO,並簡單地複製每一幀的整個事情......但如果有很多在屏幕上移動(全屏幕過渡效果,說)然後我只是加倍我的填充率。

對於這個問題的模糊性事先道歉,任何人都可以推薦一些在這種情況下可能有用的技術嗎?

回答

0

這些是典型的方法。

  • 將所有UI紋理數據(glphys,UI元素)放入紋理圖集中。用位置和texcoords生成一個頂點緩衝區。

OR

  • UI繪製一個紋理(可能使用以前的技術)。消除紋理。

不要阻止你,但使用emscripten用戶界面將是很多工作。您需要支持所有unicode的字體渲染,這意味着加載大字體,glphy緩存,表情符號的顏色渲染,從右到左渲染等。您還需要以某種方式支持文本輸入,如日語,中文,韓國語,泰語

+0

感謝您的回覆!我已經在使用一個相當有效的包裝算法的字形使用紋理圖集。我打算利用瀏覽器畫布API進行字形生成(目前我有FreeText做這件事),所以大字體不會成爲問題。 –

+0

FWIW該工具包還生成原生構建,因此您可以在不更改任何代碼的情況下在本機和Emscripten之間切換,並且這兩個構建的外觀和行爲完全相同。這使調試更容易。 –

0

我剛剛發現WebGLContextAttributes.preserveDrawingBuffer,它的工作原理是,正如我所希望的。你好可靠的60fps!