我有一些像这样的代码:
let myShader =
"#pragma arguments\n" +
"sampler uMaskTex;\n" +
"uniform sampler2D uMaskTex;\n" +
"#pragma body\n" +
//none of these work
"vec3 mask = texture2D( uMaskTex , vec2(1.,1.) ).xyz;\n" +
//"vec3 mask = texture2d( uMaskTex , vec2(1.,1.) ).xyz;\n" +
//"vec3 mask = texture( uMaskTex , vec2(1.,1.) ).xyz;\n" +
"_output.color.rgb = vec3(1.);"
我得到一个粉红色的网格。如果我注释掉纹理2D线,着色器工作。我在控制台中没有错误。制服不打破它,所以我认为他们正在工作(虽然我真的很困惑为什么我需要两个,一个用于opengl另一个用于金属)。
使用此SCNShadable机制从着色器读取均匀sampler2D的正确方法是什么?
答案 0 :(得分:3)
这似乎是由着色器交叉编译器的空白灵敏度引起的。具体来说,如果我改变
vec3 mask = texture2D( uMaskTex , vec2(1.,1.) ).xyz;
到
vec3 mask = texture2D( uMaskTex, vec2(1.,1.) ).xyz;
(注意第一个参数后没有空格),它似乎有效。
这可能值filing a bug report。解析器应丢弃该空格,而不是将其视为标识符的一部分。