//////////////////////////////////////////////// // // grass shaders // //////////////////////////////////////////////// // grasstype: // b -> blendmap grassopt = [ >= (strstr $grasstype $arg1) 0 ] grassvariantshader = [ local grasstype grasstype = $arg2 variantshader 0 $arg1 (? (grassopt "b") 0 -1) [ in vec4 vvertex, vcolor; in vec2 vtexcoord0; uniform mat4 camprojmatrix; @(ginterpvert) out vec2 texcoord0; out vec4 colorscale; @(? (grassopt "b") [uniform vec4 blendmapparams; out vec2 texcoord1;]) void main(void) { gl_Position = camprojmatrix * vvertex; colorscale = vcolor; texcoord0 = vtexcoord0; @(? (grassopt "b") [ texcoord1 = (vvertex.xy - blendmapparams.xy)*blendmapparams.zw; ]) @(gdepthpackvert) } ] [ uniform sampler2D tex0; uniform float grasstest; @(ginterpfrag) in vec2 texcoord0; in vec4 colorscale; @(? (grassopt "b") [uniform sampler2D tex1; in vec2 texcoord1;]) void main(void) { vec4 color = texture(tex0, texcoord0) * colorscale; @(? (grassopt "b") [ color.a *= texture(tex1, texcoord1).r; ]) if(color.a <= grasstest) discard; gcolor = vec4(color.rgb, 0.0); @(gnormpack [vec3(0.5, 0.5, 1.0)]) @(gdepthpackfrag) } ] ] grassshader = [ shadername = (concatword "grass" $arg1) grassvariantshader $shadername $arg1 grassvariantshader $shadername (concatword $arg1 "b") ]