在Three.js着色器上启用扩展

时间:2012-06-17 13:37:45

标签: glsl shader webgl three.js

如何在Three.js着色器上启用扩展程序?

到目前为止我的代码:

获得扩展名:

var domElement = document.createElement( 'canvas' );
var gl = domElement.getContext('webgl') || domElement.getContext('experimental-webgl');
gl.getExtension('OES_standard_derivatives');

在我的着色器上:

fragmentShader: [
    "#extension GL_OES_standard_derivatives : enable",
    "code..."
]...

控制台输出:
警告:0:26:不支持扩展“GL_OES_standard_derivatives”
错误:0:32:'dFdx':找不到匹配的重载函数
错误:0:32:'=':无法从'const mediump float'转换为'浮动的2分量向量'
错误:0:33:'dFdy':找不到匹配的重载函数
错误:0:33:'=':无法从'const mediump float'转换为'浮动的双组分向量'

阅读this issue on github后,我尝试了这个例子:从http://jsfiddle.net/VJca4/我收到了这些错误

警告:0:27:不支持扩展“GL_OES_standard_derivatives”
错误:0:30:'=':无法从'const mediump float'转换为'浮动的双组分向量'
错误:0:31:'dFdx':找不到匹配的重载函数
错误:0:31:'=':无法从'const mediump float'转换为'浮动的双组分向量'

2 个答案:

答案 0 :(得分:7)

你也应该能够这样做:

renderer.context.getExtension('OES_standard_derivatives');

答案 1 :(得分:1)

发现错误。您必须使用渲染器的dom元素:

var gl = renderer.domElement.getContext('webgl') ||
            renderer.domElement.getContext('experimental-webgl');
gl.getExtension('OES_standard_derivatives');