2014-01-07 63 views
0

我的iOS應用程序在opengles視圖中繪製2D曲線。場景渲染非常昂貴(可能需要1-2秒),這意味着,AFAIK,我無法更改比例,重繪和重新渲染以適應比例尺的增量變化(由於捏和 - 放大)。我目前直接在渲染到屏幕上的緩衝區中繪製。OpenGL ES 2.0以多種分辨率縮放

我認爲我可以實現縮放的一種方法是渲染到給定分辨率的紋理,然後使用該紋理的一部分渲染四邊形(可能以不同的比例和平移)。我的猜測是,它會使我當前使用的內存翻倍(如果我當然保持紋理的分辨率與屏幕相同)。有人可以證實嗎?有沒有另外一種方法可以在不重繪的情況下進行縮放,而不會使圖形內存使用量加倍?

現在,如果我想保持一個像樣的質量,我將不得不以不同的分辨率重新渲染。我最初的想法是「手動」創建一個mipmap,例如2級(1個紋理,100-150%變焦,另一個150-200%變焦)。這一次,我會有1個緩衝區+ 2個紋理。我當然可以在平移時重新渲染,但我認爲用戶體驗不會很好。關於如何從用戶體驗和/或內存角度改進這些想法的任何想法?

回答

1

由於您已經需要很長時間來繪製場景,所以我建議您創建平鋪。您可以在加載時以不同的分辨率繪製場景,並將輸出保存爲一些圖像(將圖像文件保存到某個臨時目錄中)。採用這種方法你應該有最小的內存消耗,用戶體驗應該很好。

如果你這樣做,你還應該考慮如果你甚至想使用openGL來呈現場景,因爲你有一些非常好的方法來在圖像視圖,滾動視圖上呈現大圖像。這樣做,你可以實際跳過所有的GL - UIView綁定和呈現。您可以將所有GL工作移至某個單獨的線程,這意味着如果場景發生變化,您可以在後臺執行此操作,以允許用戶在不中斷的情況下處理當前場景。此外,如果您希望用戶在場景之間「交換」,則可以保存它們並重新使用它們,而不會對性能造成任何影響。

+0

在我的場景中,我將無法使用平鋪(此外,場景是動態的)。感謝您的回答,雖然 – user1727274

+0

作爲一個方面說明,我有全功能的OpenGL代碼。在我的情況下使用UIView沒有任何意義。從輔助線程以精確的幀速率渲染也是不方便的。 – user1727274

+0

如果您的渲染需要1-2秒,則無法重新繪製場景並獲得良好的用戶體驗。如果你有多個繪圖級別,你的內存將增加更多的x2(150%縮放將意味着225%的內存增加,導致325%)。消除內存消耗並保留所有數據的唯一方法是將其放入某個文件中。一旦你在一些本地磁盤上使用它,你仍然可以使用你的「功能齊全的OpenGL代碼」,這只是需要考慮的一點。長篇小說:我認爲沒有其他辦法可以解決您的情況,滿足您發佈但平鋪的所有要求。 –