
CCEffect %{
  techniques:
  - passes:
    - vert: vs
      frag: fs
      blendState:
        targets:
        - blend: true
      rasterizerState:
        cullMode: none
      properties:
        texture: { value: white }
        alphaThreshold: { value: 0.5 }
}%

CCProgram vs %{

precision highp float;

#include <cc-global>
#include <cc-local>

in vec3 a_position;
in vec4 a_color;
#if USE_TINT
  in vec4 a_color0;
#endif

in vec2 a_uv0;
out vec2 v_uv0;

out vec4 v_light;
#if USE_TINT
  out vec4 v_dark;
#endif

void main () {
  mat4 mvp;
  
  #if CC_USE_MODEL
    mvp = cc_matViewProj * cc_matWorld;
  #else
    mvp = cc_matViewProj;
  #endif

  v_uv0 = a_uv0;

  v_light = a_color;
  #if USE_TINT
    v_dark = a_color0;
  #endif

  gl_Position = mvp * vec4(a_position, 1);
}

}%

CCProgram fs %{

precision highp float;

uniform sampler2D texture;
in vec2 v_uv0;

in vec4 v_light;
#if USE_TINT
  in vec4 v_dark;
#endif

#include <alpha-test>
#include <texture>

void main () {
  vec4 texColor = vec4(1.0);
  CCTexture(texture, v_uv0, texColor);
  vec4 finalColor;

  #if USE_TINT
    finalColor.a = v_light.a * texColor.a;
    finalColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;
  #else
    finalColor = texColor * v_light;
  #endif

  ALPHA_TEST(finalColor);

  float gray = 0.2126*finalColor.r + 0.7152*finalColor.g + 0.0722*finalColor.b;
  gl_FragColor = vec4(gray, gray, gray, finalColor.a);
}

}%
