2015-10-16 77 views
3

我們有一個webgl/three.js應用程序,它大量使用紋理緩衝區來在通道之間傳遞數據並存儲數據數組。這些都沒有任何用於mipmap。我們很容易能夠防止生成mipmap:在three.js級別,我們將min和mag過濾器設置爲NearestFilter,並將generateMipmaps設置爲false。我可以在webgl中避免紋理漸變計算嗎?

但是,着色器不知道在編譯時間沒有mipmapping。使用ANGLE編譯時,我們會收到很多警告消息:

警告X4121:必須將基於梯度的操作移出流控制以防止發散。性能可以通過使用非梯度操作來改善

我已記錄,以便可以(可選地)避免圍繞此類查找的流程。 在我的Windows/NVidia機器上使用條件流提高了性能,並且不會導致任何視覺問題(但會引起消息)。

我不希望紋理查找是基於漸變的操作。我想要做的是編寫着色器,以便他們知道在編譯時間沒有做出決定;這應該(略微)提高性能,並使信息消失。然而,我看不出有什麼辦法可以在GLSL中爲GLES 2做這件事(如webgl所使用的)。它可以在更高版本中使用textureLodOffset()和其他各種方式完成。我能看到的第2級中唯一的控件是texture2D()上的偏置選項,但這是一個偏差而不是絕對值,因此不能解決問題。所以,最後...

問:你知道任何方式來防止WEBGL級GLSL着色器中的lod計算嗎?

回答

0

你可以嘗試確保:

  • 使用gl_FragCoord,而不是改變
  • NEARESTtexImage2d之前設置一個用戶,而不是後