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 而不是将其视为标识符的一部分。