我们有一个webgl / three.js应用程序,它广泛使用纹理缓冲区在传递之间传递数据和存储数据数组。这些都没有用于mipmap。我们很容易阻止mipmap生成:在three.js级别,我们将min和mag过滤器设置为NearestFilter,并将generateMipmaps设置为false。
但是,着色器在编译时间不知道没有mipmapping。当使用ANGLE编译时,我们会收到很多警告信息:
警告X4121:必须将基于梯度的操作移出流控制以防止发散。使用非渐变操作可以提高性能
我已重新编码,以便(可选)避免此类查找的流程。 在我的Windows / NVidia机器上使用条件流可以提高性能并且不会导致任何视觉问题(但会导致消息)。
我不希望纹理查找是基于梯度的操作。我想做的是以这样的方式编写着色器,使得他们在编译时知道没有做出决定;应该(略微)提高性能并使消息消失。但是,我无法在GLSL for GLES 2中看到任何方法(由webgl使用)。它可以在更高版本中使用textureLodOffset()和其他各种方式完成。我可以看到第2级中唯一的控件是texture2D()上的偏置选项,但这是偏差而不是绝对值,所以不能解决问题。所以,最后......
问题:您知道如何防止WEBGL级GLSL着色器中的lod计算吗?
答案 0 :(得分:0)
您可以尝试确保:
gl_FragCoord
代替用户改变NEAREST
设置在texImage2d
之前,而不是