Scenekit SCNShadable texture2D 不工作
Scenekit SCNShadable texture2D not working
我有一些这样的代码:
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.);"
我得到一个粉红色的网格。如果我注释掉 texture2D 线,着色器就会工作。我在控制台中没有收到任何错误。制服也不会破坏它,所以我认为它们正在工作(尽管我真的很困惑为什么我需要两个,一个用于 opengl,另一个用于金属)。
使用此 SCNShadable 机制从着色器读取统一采样器 2D 的正确方法是什么?
这好像是shader交叉编译器的whitespace敏感度造成的。具体来说,如果我改变
vec3 mask = texture2D( uMaskTex , vec2(1.,1.) ).xyz;
到
vec3 mask = texture2D( uMaskTex, vec2(1.,1.) ).xyz;
(注意第一个参数后没有 space),它似乎有效。
这可能值得 filing a bug report。解析器应该丢弃 whitespace 而不是将其视为标识符的一部分。
我有一些这样的代码:
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.);"
我得到一个粉红色的网格。如果我注释掉 texture2D 线,着色器就会工作。我在控制台中没有收到任何错误。制服也不会破坏它,所以我认为它们正在工作(尽管我真的很困惑为什么我需要两个,一个用于 opengl,另一个用于金属)。
使用此 SCNShadable 机制从着色器读取统一采样器 2D 的正确方法是什么?
这好像是shader交叉编译器的whitespace敏感度造成的。具体来说,如果我改变
vec3 mask = texture2D( uMaskTex , vec2(1.,1.) ).xyz;
到
vec3 mask = texture2D( uMaskTex, vec2(1.,1.) ).xyz;
(注意第一个参数后没有 space),它似乎有效。
这可能值得 filing a bug report。解析器应该丢弃 whitespace 而不是将其视为标识符的一部分。