/*
 * VideoEcho.cpp
 *
 *  Created on: Jun 29, 2008
 *      Author: pete
 */

#include "Common.hpp"

#ifdef USE_GLES1
#include <GLES/gl.h>
#else
#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#endif
#endif

#include "VideoEcho.hpp"

VideoEcho::VideoEcho(): a(0), zoom(1), orientation(Normal)
{
	// TODO Auto-generated constructor stub

}

VideoEcho::~VideoEcho()
{
	// TODO Auto-generated destructor stub
}

void VideoEcho::Draw(RenderContext &context)
{


		glEnable(GL_TEXTURE_2D);


		float tex[4][2] = {{0, 1},
				   {0, 0},
				   {1, 0},
				   {1, 1}};

		float points[4][2] = {{-0.5, -0.5},
				      {-0.5,  0.5},
				      { 0.5,  0.5},
				      { 0.5,  -0.5}};

		glEnableClientState(GL_VERTEX_ARRAY);
		glDisableClientState(GL_COLOR_ARRAY);
		glEnableClientState(GL_TEXTURE_COORD_ARRAY);

		glVertexPointer(2,GL_FLOAT,0,points);
		glTexCoordPointer(2,GL_FLOAT,0,tex);

		//Now Blend the Video Echo
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

		glMatrixMode(GL_TEXTURE);

		//draw video echo
		glColor4f(1.0, 1.0, 1.0, a * masterAlpha);
		glTranslatef(.5, .5, 0);
		glScalef(1.0/zoom, 1.0/zoom, 1);
		glTranslatef(-.5, -.5, 0);

		int flipx=1, flipy=1;
		switch (orientation)
		{
			case Normal: flipx=1;flipy=1;break;
			case FlipX: flipx=-1;flipy=1;break;
			case FlipY: flipx=1;flipy=-1;break;
			case FlipXY: flipx=-1;flipy=-1;break;
			default: flipx=1;flipy=1; break;
		}

		float pointsFlip[4][2] = {{static_cast<float>(-0.5*flipx), static_cast<float>(-0.5*flipy)},
					  {static_cast<float>(-0.5*flipx),  static_cast<float>(0.5*flipy)},
					  { static_cast<float>(0.5*flipx),  static_cast<float>(0.5*flipy)},
					  { static_cast<float>(0.5*flipx), static_cast<float>(-0.5*flipy)}};

		glVertexPointer(2,GL_FLOAT,0,pointsFlip);
		glDrawArrays(GL_TRIANGLE_FAN,0,4);

		glDisable(GL_TEXTURE_2D);
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

		glDisableClientState(GL_TEXTURE_COORD_ARRAY);

}
