3
我正在嘗試在Metal中使用着色器修改器。我想不出來聲明制服......到目前爲止,我的片段修改爲:SCN着色器金屬修改器 - 通過統一着色器
// color changes
#pragma arguments
float4x4 u_color_transformation;
#pragma body
_output.color.rgb = vec3(1.0) - (u_color_transformation * _output.color).rgb;
此輸出紫色質地的,沒有日誌。如果我只是_output.color.rgb = (u_color_transformation * _output.color).rgb
,一切都OK。我想我遵循doc但可能不是!
均勻設置有:
material.shaderModifiers =
[ SCNShaderModifierEntryPoint.fragment: theShaderAbove ]
material.setValue(NSValue(mat4: GLKMatrix4Identity), forKey: "u_color_transformation")
這一切工作正常使用OpenGL
更新:
顯然,SceneKit着色改性劑使用GLSL代碼,並把它轉化爲照顧金屬。所以我改變了着色器:
// color changes
#pragma arguments
uniform mat4 u_color_transformation;
#pragma body
_output.color.rgb = vec3(1.0) - (u_color_transformation * _output.color).rgb;
輸出現在是白色(這表明至少它編譯),這表明u_color_transformation
不傳遞給着色器,並決心在着色器零矩陣,黑色,一旦倒置,是白色的。