2013-02-06 70 views
0

WebGL非常慢。每幀PlayN WebGL性能畫布

100個精靈 - 確定,每幀

千精靈 - 需要優化,

10000精靈,從FPS 40落下到20fps。

我根本不需要3D。我不需要濾鏡,着色器,燈光和其他3D素材。我只需要快速的二維畫布(無像素平滑),能夠渲染png和呈現調試形狀(線條,條形,圓形)。有沒有可能從PlayN引擎中排除WebGL並切換到HTML5 Canvas? (我想它會比WebGL快得多)。

+1

當您聲稱自己存在性能問題時,最好有一些數據進行分析。你如何衡量你的表現?有一些你可以發佈的測試代碼? – Chii

+0

我猜測它很慢,因爲它是在單獨的WebGL繪製調用中繪製每個10,000個精靈... –

回答

1

這與WebGL無關。 WebGL速度很快。它也不是與PlayN有關。您正在要求使用SUV參加Indy 500比賽。 SUV永遠不會與專業賽車相媲美。然而,如果你必須駕駛未知的地形,帶孩子去足球比賽,並在回家的路上購買雜貨,SUV將是一個更好的選擇。

在你描述的情況下,緩慢既不是WebGL調用,也不是Canvas.drawImage調用,事實上PlayN會執行完全仿射變換乘法來計算每個幀上每個精靈的當前變換。這是99%的時間,因爲大多數遊戲在屏幕上同時擁有少於1000個精靈,並且更喜歡靈活地以任何他們喜歡的方式操縱這些精靈。

如果您確實需要10,000個精靈,並且您不只是嘗試使用場景圖形引擎作爲粒子系統,那麼請使用ImmediateLayer圖層並調用Surface.drawImage將您的圖像繪製到他們需要的位置,並將決定其位置的數學保持在最低限度。

+0

例如,我可以使用WebGL輕鬆地在Mac筆記本電腦上以60 FPS的速度以60 FPS的速度繪製10,000個精靈(來自單個紋理) ,只要我使用Surface並且不創建10,000個圖層。如果你使用圖層,它會陷入大約1200個精靈。在這裏嘗試一下:http://samskivert.com/playn/perf-test/ – samskivert