mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-25 09:08:22 -05:00
54 lines
1.5 KiB
Text
54 lines
1.5 KiB
Text
|
#version 300 es
|
||
|
|
||
|
// Metal translation was producing a wrong typecast
|
||
|
// on o.backContrib[j] = (backContrib * 2.0) expression;
|
||
|
// was thinking LHS is a float3
|
||
|
|
||
|
#define gl_Vertex _glesVertex
|
||
|
in vec4 _glesVertex;
|
||
|
#define gl_Normal _glesNormal
|
||
|
in vec3 _glesNormal;
|
||
|
float xll_saturate_f( float x) {
|
||
|
return clamp( x, 0.0, 1.0);
|
||
|
}
|
||
|
struct appdata_full {
|
||
|
highp vec4 vertex;
|
||
|
highp vec3 normal;
|
||
|
};
|
||
|
struct v2f {
|
||
|
highp vec4 pos;
|
||
|
highp vec3 backContrib;
|
||
|
};
|
||
|
uniform highp vec3 _WorldSpaceCameraPos;
|
||
|
uniform highp mat4 glstate_matrix_mvp;
|
||
|
uniform highp mat4 _World2Object;
|
||
|
uniform highp vec3 _TerrainTreeLightDirections[4];
|
||
|
highp vec3 ObjSpaceViewDir( in highp vec4 v ) {
|
||
|
highp vec3 objSpaceCameraPos = (_World2Object * vec4( _WorldSpaceCameraPos.xyz, 1.0)).xyz;
|
||
|
return (objSpaceCameraPos - v.xyz);
|
||
|
}
|
||
|
v2f vert( in appdata_full v ) {
|
||
|
v2f o;
|
||
|
o.pos = (glstate_matrix_mvp * v.vertex);
|
||
|
highp vec3 viewDir = normalize(ObjSpaceViewDir( v.vertex));
|
||
|
highp int j = 0;
|
||
|
for ( ; (j < 3); (j++)) {
|
||
|
highp vec3 lightDir = _TerrainTreeLightDirections[j];
|
||
|
mediump float nl = dot( v.normal, lightDir);
|
||
|
mediump float backContrib = xll_saturate_f(dot( viewDir, (-lightDir)));
|
||
|
o.backContrib[j] = (backContrib * 2.0);
|
||
|
}
|
||
|
return o;
|
||
|
}
|
||
|
|
||
|
out highp vec3 xlv_TEXCOORD2;
|
||
|
void main() {
|
||
|
v2f xl_retval;
|
||
|
appdata_full xlt_v;
|
||
|
xlt_v.vertex = vec4(gl_Vertex);
|
||
|
xlt_v.normal = vec3(gl_Normal);
|
||
|
xl_retval = vert( xlt_v);
|
||
|
gl_Position = vec4(xl_retval.pos);
|
||
|
xlv_TEXCOORD2 = vec3(xl_retval.backContrib);
|
||
|
}
|