繁体   English   中英

使用sampler3D时在WebGL 2.0 GLSL中遇到语法错误

[英]Syntax error encountered in WebGL 2.0 GLSL when using sampler3D

我正在尝试使用WebGL 2.0在浏览器中渲染3D医疗数据。

WebGL 2.0现在支持AFAIK 3D纹理。

texImage3D()是可识别的函数调用。

我正在编写一个片段着色器,并声明一个统一的采样器:

uniform sampler3D samp;

当我在Firefox上运行它时,出现错误消息:

未捕获的异常:着色器编译错误:错误:0:19:'sampler3D':非法使用保留字错误:0:19:'sampler3D':语法错误

当我使用sampler2D时,效果很好(尽管不能解决我的目的)。

有人可以指出我在这里做错了什么吗?

尚不支持sampler3D吗? 但是在那种情况下,应该如何访问使用texImage3D()加载的任何纹理?

您是否更改了使用诸如sampler3D类的WebGL 2.0功能所需的所有更改?

要使用sampler3D您需要添加

#version 300 es

在着色器的顶部。 它必须是第一行,正面没有白色空间

请注意,从GLSL 1.0对GLSL 3.00进行了许多其他更改

在这里测试

 "use strict"; const vs = `#version 300 es in vec4 position; void main() { gl_Position = position; } `; const fs = `#version 300 es precision mediump float; precision lowp sampler3D; uniform sampler3D u_someTexture; out vec4 theColor; void main() { theColor = texture(u_someTexture, vec3(0,0,0)); } `; function main() { var m4 = twgl.m4; var gl = twgl.getContext(document.createElement("canvas")); log("using: " + gl.getParameter(gl.VERSION)); if (!twgl.isWebGL2(gl)) { log("Sorry, this example requires WebGL 2.0"); return; } var programInfo = twgl.createProgramInfo(gl, [vs, fs], (err) => { log("could not compile shader: " + err); }); if (programInfo) { log("compiled shader with sampler3D"); } } main(); function log() { var elem = document.createElement("pre"); elem.appendChild(document.createTextNode(Array.prototype.join.call(arguments, " "))); document.body.appendChild(elem); } 
 <script src="https://twgljs.org/dist/twgl-full.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM