// -*- glsl -*-

// File containing GLSL shaders used to generate shaders.h.

// At the start of each shader, write // followed by two equals signs,
// followed by a space, the name of the shader and a newline.
// Following that, write the shader code.

// To terminate a shader, write // followed by another two equals
// signs, this time without a trailing name or whitespace.

//== Clear Rectangle Vertex Shader
attribute vec2 pos;

void
main (void)
{
  gl_Position = vec4 (pos.x, pos.y, 1.0, 1.0);
}
//==

//== Clear Rectangle Fragment Shader
void
main (void)
{
  gl_FragColor = vec4 (0.0, 0.0, 0.0, 0.0);
}
//==

//== Composite Rectangle Vertex Shader
attribute vec2 pos;
attribute vec2 texcoord;
varying vec2 v_texcoord;
uniform mat3 source;

void
main (void)
{
  gl_Position = vec4 (pos.x, pos.y, 1.0, 1.0);
  v_texcoord = (source * vec3 (texcoord, 1.0)).xy;
}
//==

//== Composite Rectangle Fragment Shader RGBA
precision mediump float;
uniform sampler2D texture;
uniform bool invert_y;
varying vec2 v_texcoord;

void
main (void)
{
  vec2 texcoord;

  texcoord = v_texcoord;

  if (invert_y)
    texcoord = vec2 (texcoord.x, 1.0 - texcoord.y);

  gl_FragColor = texture2D (texture, texcoord);
}
//==

//== Composite Rectangle Fragment Shader RGBX
precision mediump float;
uniform sampler2D texture;
uniform mat3 source;
uniform bool invert_y;
varying vec2 v_texcoord;

void
main (void)
{
  vec2 texcoord;

  texcoord = v_texcoord;

  if (invert_y)
    texcoord = vec2 (texcoord.x, 1.0 - texcoord.y);

  gl_FragColor = vec4 (texture2D (texture, texcoord).rgb, 1.0);
}
//==

//== Composite Rectangle Fragment Shader External
#extension GL_OES_EGL_image_external : require

precision mediump float;
uniform samplerExternalOES texture;
uniform mat3 source;
uniform bool invert_y;
varying vec2 v_texcoord;

void
main (void)
{
  vec2 texcoord;

  texcoord = v_texcoord;

  if (invert_y)
    texcoord = vec2 (texcoord.x, 1.0 - texcoord.y);

  gl_FragColor = texture2D (texture, texcoord);
}
//==

//== Composite Rectangle Fragment Shader Single Pixel
#extension GL_OES_EGL_image_external : require

precision mediump float;
uniform vec4 source_color;
uniform mat3 source;
uniform bool invert_y;
varying vec2 v_texcoord;

void
main (void)
{
  vec2 texcoord;

  texcoord = v_texcoord;

  if (invert_y)
    texcoord = vec2 (texcoord.x, 1.0 - texcoord.y);

  if (texcoord.x < 0.0 || texcoord.y < 0.0
      || texcoord.x > 1.0 || texcoord.y > 1.0)
    gl_FragColor = vec4 (0.0, 0.0, 0.0, 0.0);
  else
    gl_FragColor = source_color;
}
//==
