[英]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.