text: /*
   * Copyright (c) 2013, Hernan Saez
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are met:
   *     * Redistributions of source code must retain the above copyright
   *       notice, this list of conditions and the following disclaimer.
   *     * Redistributions in binary form must reproduce the above copyright
   *       notice, this list of conditions and the following disclaimer in the
   *       documentation and/or other materials provided with the distribution.
   *     * Neither the name of the <organization> nor the
   *       names of its contributors may be used to endorse or promote products
   *       derived from this software without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
   * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  
  #include "DeferredPositionShaderProgram.hpp"
  
  #include "Rendering/OpenGLUtils.hpp"
  
  using namespace crimild;
  using namespace crimild::opengl;
  
  const char *deferred_position_vs = { CRIMILD_TO_STRING(
      in vec3 aPosition;
      in vec2 aTextureCoord;
  
      out vec2 vTextureCoord;
  
      void main ()
      {
          gl_Position = vec4( aPosition.x, aPosition.y, 0.0, 1.0 );
          vTextureCoord = aTextureCoord;
      }
  )};
  
  const char *deferred_position_fs = {
  CRIMILD_TO_STRING(
      in vec2 vTextureCoord;
  
      uniform sampler2D uPositionMap;
                    
      out vec4 vFragColor;
  
      void main( void )
      {
          vFragColor.rgb = texture( uPositionMap, vTextureCoord ).rgb;
          vFragColor.a = 1.0;
      }
  )};
  
  DeferredPositionShaderProgram::DeferredPositionShaderProgram( void )
      : ShaderProgram( OpenGLUtils::getVertexShaderInstance( deferred_position_vs ), OpenGLUtils::getFragmentShaderInstance( deferred_position_fs ) )
  { 
  	registerStandardLocation( ShaderLocation::Type::ATTRIBUTE, ShaderProgram::StandardLocation::POSITION_ATTRIBUTE, "aPosition" );
  	registerStandardLocation( ShaderLocation::Type::ATTRIBUTE, ShaderProgram::StandardLocation::TEXTURE_COORD_ATTRIBUTE, "aTextureCoord" );
      
  	registerStandardLocation( ShaderLocation::Type::UNIFORM, ShaderProgram::StandardLocation::G_BUFFER_POSITION_MAP_UNIFORM, "uPositionMap" );
  }
  
  DeferredPositionShaderProgram::~DeferredPositionShaderProgram( void )
  {
      
  }
  
  