AFrame - 片段着色器中的 sampler3D

AFrame - sampler3D in 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

有没有办法在框架中做到这一点?

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

问题是 webgl 上下文 Aframe 用来初始化场景。默认情况下它是 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" 线。