私はメタルでシェーダモディファイアを使用しようとしています。ユニフォームを宣言することができません。
// 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
、問題はありません。私は私がフォローしていると思います 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
これはシェーダに渡されず、シェーダ内のヌル行列に解決されます。これは、反転されると白になる黒になります。
回答:
回答№1は2SceneKitはシェーダボディにvec3(1.0)があるため、glslを使用していると想定しました。これをfloat3(1.0)に変更すると、それはmetalを使用し、uniformキーワードなしで機能します。