我需要創建一個由多個PNG組成的具有透明度的圖像。我的解決方案在桌面上完美運行,但我想知道是否可以提高移動設備(iOS)的性能。提高多個PNG合成的性能
我當前的解決方案如下:
首先我所有的圖像加載到存儲器以ImageDecodingPolicy.ON_LOAD
,以避免任何的CPU和在加載和解碼的圖像滯後。
第二我加載所需的圖像到Sprite
這是永遠不會添加到顯示列表。
最後,我將所有圖像合成爲一個BitmapData
對象,並將新的合成圖像淡入前一個圖像。
bitmapData.draw(compositionBufferSprite,null,null,null,rect,false);
我需要構成整個圖像(而不必在舞臺上的所有的PNG無任何組合物),因爲我需要從先前圖像到新的一個儘可能無縫的過渡。
我試着直接使用圖像的像素數據等,但性能和花費在工作上的時間與使用draw()
完全相同。我也嘗試使用drawWithQuality()
與StageQuality.LOW
,並沒有任何區別。我當時的結論是,Air已經優化了所有的位圖工作,如果我是draw()
或者直接從BitmapData
構成,那真的沒有關係。
我想過創建一個ANE(原生擴展),但我不知道如果這將允許更高的性能。到目前爲止,似乎ANE僅用於訪問本地API而不共享工作負載。
你有什麼想法可以改善嗎?
所以你想說沒有任何組成你可以看到在桌面上的區別? ......我不確定這與剛剛創建像comboBufferSprite這樣的精靈並添加到舞臺上時沒有任何區別......因此,您只需在直接內存塊中創建所有圖像。你能否提供有關這一轉變的更多細節?也許你應該使用stage3D來使用gpu –
好吧,例如,如果你在顯示列表之外組成圖像,其中一個好處是有許多透明像素計算只能發生一次而不是每一幀。這也會影響性能,尤其是在移動設備中進行圖像淡入淡出時的性能。我不確定Stage3D會在計算合成圖像時提供任何好處,但如果您可以在答案中提供一些有關此證據的證據,我肯定會嘗試。 – Pier
那麼你可以將cacheAsBitmap設置爲true。所以我們的主要目的是過渡應該是無縫的。我不確定哪些設備是您的目標,但我認爲所有設備都有gpu。無縫過渡,全部關於渲染。與stage3D你會使用GPU。而gpu只有一個任務是「渲染」。 CPU是通用的,不僅僅用於渲染。你可以給它一個使用starling它容易看到的結果......你還有一件事你必須設置你的renderMode作爲直接使用stage3D的GPU渲染 –