2015-10-16 64 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之前设置一个用户,而不是后