我试图在着色器中使用gl_FragDepthEXT,但遇到了问题。我是否需要做些什么才能启用此扩展程序?
答案 0 :(得分:1)
是的,您缺少一项要求,当您使用原始着色器时,必须在着色器代码中启用以下字符串:
“#extension GL_EXT_frag_depth:启用”
使用THREE.ShaderMaterial时,程序字符串会部分自动生成,因此无法在着色器字符串中尽早添加上述字符串,以避免着色器编译器错误,因此可以使用以下方式启用:
material.extensions.fragDepth = true
如果支持扩展,这将使gl_FragDepthEXT可用作片段着色器输出。
答案 1 :(得分:0)
您的硬件决定是否支持扩展。因此,您可以查询硬件以查看是否支持扩展。如果查看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" );
答案 2 :(得分:0)
从上面的评论中回答你的问题,重新:支持扩展的程度。您可以查看http://webglstats.com/以了解Devices / OS / Browser当前支持的webgl扩展。数据仅来自参与网站上的访问者,但它应该为您提供一般概念。