gl_FragDepthEXT 是否受 Three.js 支持?

Is gl_FragDepthEXT supported by Three.js?

我试图在着色器中使用 gl_FragDepthEXT 但 运行 出现问题。我需要做些什么才能启用此扩展程序吗?

扩展是否受支持是由您的硬件决定的。所以你可以做的是查询硬件以查看是否支持扩展。如果你查看 three.js (src/renderers/webgl/WebGLExtensions.js) 的源代码,有帮助函数来确定是否支持扩展:

// assuming here that _gl is the webgl context

var extensions = new THREE.WebGLExtensions( _gl );

// the return value is null if the extension is not supported,
// or otherwise an extension object 
extensions.get( "gl_FragDepthEXT" );

或在纯 webGL 中:

// returns an array of strings, one for each supported extension
// for informational purposes only
var available_extensions = _gl.getSupportedExtensions();

// the return value is null if the extension is not supported,
// or otherwise an extension object 
var object_ext = _gl.getExtension( "gl_FragDepthEXT" );

根据上面的评论回答您的问题,回复:扩展的支持程度。您可以检查 http://webglstats.com/ 以了解 Devices/OS/Browser 当前支持的 webgl 扩展。数据仅来自参与网站的访问者,但它应该能让您有一个大概的了解。

是的,您缺少一个要求,当您使用原始着色器时,您必须在着色器代码中使用以下字符串启用:

"#extension GL_EXT_frag_depth : 启用"

当使用 THREE.ShaderMaterial 时,程序字符串的一部分是 auto-generated,因此无法在您的着色器字符串中尽早添加上述字符串以避免着色器编译器错误,因此您启用:

material.extensions.fragDepth = 真

如果支持扩展,这将使 gl_FragDepthEXT 可用作片段着色器输出。