是否由Three.js支持gl_FragDepthEXT?

时间:2015-05-06 04:07:34

标签: three.js

我试图在着色器中使用gl_FragDepthEXT,但遇到了问题。我是否需要做些什么才能启用此扩展程序?

3 个答案:

答案 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扩展。数据仅来自参与网站上的访问者,但它应该为您提供一般概念。