AFrame-片段着色器中的sampler3D

时间:2019-07-06 14:40:34

标签: three.js webgl aframe fragment-shader

aframe支持webgl2吗?我正在尝试使用

precision mediump sampler3D 

在片段着色器中,出现此错误:

THREE.WebGLShader: gl.getShaderInfoLog() fragment ERROR: 0:106: 'sampler3D' : Illegal use of reserved word
ERROR: 0:106: 'sampler3D' : syntax error

默认情况下,我读到threejs支持webgl1,并且我必须在html中添加脚本标签以支持webgl2。

<script src="/path/to/WebGL.js"></script>

此外,我尝试在文件的开头添加着色器版本,但随后显示:

'version' : #version directive must occur before anything else, except for comments and white space

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

好的,我做到了(至少这是一个里程碑)。

问题在于Aframe用来初始化场景的webgl上下文。默认情况下,它是webgl,而不是webgl2。保留字“ sampler3D”仅在webgl2中可用,这就是我收到错误的原因。 我必须克隆aframe存储库,在文件src \ core \ scene \ a-scene.js中修改方法setupCanvas并添加对webgl2的支持:

canvasEl = document.createElement('canvas');
var contextEl = canvasEl.getContext( 'webgl2' );
sceneEl.context = contextEl;

,然后在setupRenderer()方法中添加属性:

context: this.context,

到rendererConfig映射。

这使我的着色器上运行了“ precision mediump sampler3D”行。