| /* |
| * 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] = {{-0.5*flipx, -0.5*flipy}, |
| {-0.5*flipx, 0.5*flipy}, |
| { 0.5*flipx, 0.5*flipy}, |
| { 0.5*flipx, -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); |
| } |