// This may look like C code, but it's really -*- C++ -*-
/*
 * Copyright (C) 2013 Emweb bvba, Leuven, Belgium.
 *
 * See the LICENSE file for terms of use.
 */

const std::string vertexShaderSrc = 
  "attribute vec3 aVertexPosition;\n"
  "attribute float aPointSize;\n"
  "\n"
  "uniform mat4 uMVMatrix;\n"
  "uniform mat4 uPMatrix;\n"
  "uniform mat4 uCMatrix;\n"
  "\n"
  "varying float z;\n"
  "\n"
  "void main(void) {\n"
  "  gl_Position = uPMatrix * uCMatrix * uMVMatrix * vec4(aVertexPosition.xyz, 1.0);\n"
  "  gl_PointSize = aPointSize;\n"
  "  z = aVertexPosition.z;\n"
  "}\n";

const std::string fragmentShaderSrc =
  "#ifdef GL_ES\n"
  "precision highp float;\n"
  "#endif"
  "\n"
  "varying float z;\n"
  "\n"
  "uniform sampler2D uSampler;\n"
  "uniform float uOffset;\n"
  "uniform float uScaleFactor;\n"
  "\n"
  "void main(void) {\n"
  "  gl_FragColor =  texture2D(uSampler, vec2(0.0, uScaleFactor * (z - uOffset) ));\n"
  "}\n";

// // make round points (z-buffer issues)
//   "  gl_FragColor =  vec4(texture2D(uSampler, vec2(0.0, zNorm )).rgb, (1.0 - smoothstep(0.4, 0.6, distance(vec2(0.5,0.5), gl_PointCoord))) * texture2D(uSampler, vec2(0.0, zNorm )).a);\n"


const std::string colVertexShaderSrc = 
  "attribute vec3 aVertexPosition;\n"
  "attribute float aPointSize;\n"
  "attribute vec4 aColor;\n"
  "\n"
  "uniform mat4 uMVMatrix;\n"
  "uniform mat4 uPMatrix;\n"
  "uniform mat4 uCMatrix;\n"
  "\n"
  "varying vec4 vColor;\n"
  "\n"
  "void main(void) {\n"
  "  gl_Position = uPMatrix * uCMatrix * uMVMatrix * vec4(aVertexPosition.xyz, 1.0);\n"
  "  gl_PointSize = aPointSize;\n"
  "  vColor = aColor;\n"
  "}\n";

const std::string colFragmentShaderSrc =
  "#ifdef GL_ES\n"
  "precision highp float;\n"
  "#ifdef GL_ES\n"
  "\n"
  "varying vec4 vColor;\n"
  "\n"
  "void main(void) {\n"
  "  gl_FragColor =  vColor;\n"
  "}\n";
