2013-02-11 209 views
3

我一直在尋找關於WebGL和紋理的最大數量/可以分配用於渲染的內存量的信息。這顯然是硬件/設備特定的,所以我正在尋找一種智能處理紋理的方法。紋理的最大數量WebGL

我目前擁有512x512 RGBA8格式的紋理。潛在地,用戶可以將270個紋理加載到內存中。我知道它在每個像素4個字節乘以4/3的mip地圖上運行。因此,單紋理加mip貼圖將在4 * 512 * 512 * 1.33 = 1.33MB的區域內。總共總共359.1MB將紋理加載到內存中。

這是一種最糟糕的情況,在中高端機器上會很好,但我也想在移動設備和低規格機器上廣泛使用WebGL時優化移動設備。

如果我將紋理減少到256x256我注意到質量損失,但這可能是低端設備的選項。這導致每個紋理總共4 * 256 * 256 * 1.33 = 0.33MB,總共89.1MB。

在嘗試將紋理加載到WebGL上下文之前,是否有API來確定總可用紋理內存?

此外,還可以同時加載到內存中的紋理總數上限?

我想要使用上述兩個參數在用戶加載我的頁面時具有合理的默認值。

回答

1

據我所知,沒有辦法做到這一點。從Toji的answer,這聽起來像是出於安全原因。

我會考慮誰將會使用你的應用程序,如果這組用戶除了嚴格限制桌面上專用顯卡的用戶以外的任何其他用戶,那麼可以縮小每個人的紋理大小。也許你可以允許更高級別的圖形作爲選項,但意識到這可能會導致一些/大多數人的內存不足例外。

如果碰巧你沒有同時使用所有這些紋理,你可以試着跟蹤你正在使用的那些紋理,並只將它們加載到內存中(並使用gl.deleteTextures卸載紋理)。我猜想在運行時刪除並加載這麼多紋理,而不是在啓動時全部花費很多時間,因此仔細地進行這樣的操作(只有少數幾次)才能保持幀速率。不知道你是否甚至可以在一幀中加載1.33MB的紋理,或者如果這甚至適用於你的應用程序。

+1

謝謝,雖然不是我想聽到的是我所害怕的。有問題的應用程序是一款遊戲,因此用戶期待豐富的體驗。我只需要構建一些系統,以便在第一次訪問時提示用戶選擇喜或者喜歡的版本,指出爲什麼你可以選擇一個。再次感謝。 – fungus1487 2013-02-12 09:26:08

+0

即使在桌面OpenGL和DirectX上也無法做到這一點。 OpenGL有一些供應商特定的擴展,但他們知道撒謊。 DirectX也有一些,但或已知也在說謊 – gman 2013-02-12 22:07:29

+0

@gman:修復了這個問題。 – 2013-02-12 22:17:59