我們的遊戲要求我們不斷加載並創建新圖像,然後將其放到紋理頁上,然後用於渲染。我們使用glTexSubImage2d上傳來修改部分紋理頁面。我們不保留系統副本。每當我們這樣做時,我們在glTexSubImage2d調用中有六幀延遲。我們在遊戲開始之前將大部分圖像加載到紋理上,但有些事情必然是動態的。在Android上上傳紋理時避免出現攤位
我假設整個渲染流水線,無論是雙緩衝還是三倍緩衝,都是因爲我想修改它正在使用的紋理,或者有一個引用。即使如此,六幀加上(0.1秒)似乎過度。我們在IOS上完全一樣,並且在紋理被修改時幾乎沒有注意到任何延遲。遊戲通常運行在1或2幀。
任何人都知道發生了什麼事?這是在三星Galaxy Note GTN7000上運行。我們正在使用SurfaceView類。你可以「關閉這個停車場」。我知道這可能意味着一個框架左右的文物,因爲渲染可能沒有更新的紋理。
此外,任何想法如何知道或設置內部是否是雙重或三重緩衝。
我也讀過,大多數桌面/ PC OpenGL驅動程序通過擁有兩個或三個紋理副本並更新僅當前未使用的那些副本,然後及時更新這些副本。我們根本沒有這個記憶!
感謝
肖恩
感謝您的支持!我試過CPU拷貝的東西。這使得整體速度略微下降,但卻消除了巨大的峯值,代價是內存使用量幾乎翻了一番。我也嘗試製作「更多」但「更小」的紋理 - 我們試圖避免的,因爲在IOS上紋理交換越少渲染速度越快。有8 @ 2kx2k,但32 @ 1kx1k使尖峯更小,暗示驅動程序下載/轉換/重新上傳glTexSubImage2d上的整個紋理。無論哪種方式可以幫助取決於芯片組兩個簡單的選項,所以再次感謝! – user3162134