Scenekit SCNShadable texture2D无法正常工作

时间:2016-10-01 11:48:45

标签: opengl scenekit metal

我有一些像这样的代码:

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的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

这似乎是由着色器交叉编译器的空白灵敏度引起的。具体来说,如果我改变

vec3 mask = texture2D( uMaskTex , vec2(1.,1.) ).xyz;

vec3 mask = texture2D( uMaskTex, vec2(1.,1.) ).xyz;

(注意第一个参数后没有空格),它似乎有效。

这可能值filing a bug report。解析器应丢弃该空格,而不是将其视为标识符的一部分。