/**
 * @type {{type: string, source: string}}
 */
export const vertexQuad = {
  type: 'x-shader/x-vertex',
  source: `
  precision mediump float;

  uniform mat4 u_projection;
  attribute vec2 a_position;
  attribute vec2 a_texCoord;
  varying vec2 v_texCoord;
  void main(){
      v_texCoord = a_texCoord;
      gl_Position = u_projection * vec4(a_position, 0.0, 1.0);
  }
`
}

/**
 * @type {{type: string, source: string}}
 */
export const fragmentYUV = {
  type: 'x-shader/x-fragment',
  source: `
  precision lowp float;
  
  varying vec2 v_texCoord;
  
  uniform sampler2D yTexture;
  uniform sampler2D uTexture;
  uniform sampler2D vTexture;
    
  const mat4 conversion = mat4(
    1.0,     0.0,     1.402,  -0.701,
    1.0,    -0.344,  -0.714,   0.529,
    1.0,     1.772,   0.0,    -0.886,
    0.0,     0.0,     0.0,     0.0
  );

  void main(void) {
    float yChannel = texture2D(yTexture, v_texCoord).x;
    float uChannel = texture2D(uTexture, v_texCoord).x;
    float vChannel = texture2D(vTexture, v_texCoord).x;
    vec4 channels = vec4(yChannel, uChannel, vChannel, 1.0);
    vec3 rgb = (channels * conversion).xyz;
    gl_FragColor = vec4(rgb, 1.0);
  }
`
}
