- Home /
Shader fails on iOS
I've started to learn to write shaders in Cg, and I've written a few relatively straight-forward shaders, such as Lambertian, Toon and Rim-Lit. When I try to run on my iPhone6, the Lambertian and Toon shaders work just fine, but the Rim-Lit fails, with a warning in xcode saying
Warning: Creation of shader 'Awesome/EdgeLitNormal' failed.WARNING: Shader Unsupported: 'Awesome/EdgeLitNormal' - Pass '' shader state not supported WARNING: Shader Unsupported: 'Awesome/EdgeLitNormal' - Setting to default shader.
All the shaders work just fine in the editor. The code for my shader is
Shader "Awesome/EdgeLitNormal" {
Properties {
_Color ("Color", Color) = (0.3, 1.0, 0.2, 1.0)
_EdgeColor ("Edge color", Color) = (1.0, 1.0, 1.0, 1.0)
_EdgePower ("Edge power", Range (0.0, 10.0)) = 1.0
}
SubShader {
Pass {
Tags {
"LightMode" = "ForwardBase"
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
uniform float4 _Color;
uniform float4 _EdgeColor;
uniform float _EdgePower;
uniform float4 _LightColor0;
// input-output structs between shader stages
struct vertexInput {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct vertexOutput {
float4 pos : SV_POSITION; // SV_ is for DX11
float3 normalDir;
float3 viewDir;
};
// vertex shader
vertexOutput vert(vertexInput v) {
vertexOutput o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.normalDir = normalize(mul(float4(v.normal, 0.0), _World2Object)).xyz;
o.viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(_Object2World, v.vertex));
return o;
}
// fragment shader
float4 frag(vertexOutput i) : COLOR {
//Lambertian
float3 lightDir = normalize(_WorldSpaceLightPos0).xyz;
float3 diffuseAmount = max(0.0, dot(i.normalDir, lightDir));
float3 finalDiffuse = _LightColor0.xyz * diffuseAmount + UNITY_LIGHTMODEL_AMBIENT;
//Edge lighting
half edgeAmount = 1 - saturate(dot(i.viewDir, i.normalDir));
float3 finalEdge = pow(edgeAmount, _EdgePower) * _EdgeColor;
return float4(finalDiffuse * _Color + finalEdge, 1.0);
}
ENDCG
}
}
//Fallback "Diffuse"
}
I've tried to look around for info about what's going on, but with so little information in the error-message, it's kind of hard to even know where to start. Does anyone know why this shader wouldn't run on iOS?
Your answer
Follow this Question
Related Questions
Multiple tex2D commands in fragment shader needed, is there a workaround? 0 Answers
What rules govern backface culling on IOS hardware? 0 Answers
Why does this IOS / OGLES shader not match PC version? 0 Answers
Shader no longer working on iOS 1 Answer
How to force the compilation of a shader in Unity? 5 Answers