WarpRenderer.h revision eeb94d4de94bfd4e01f3a716803f77a530f5b92c
1eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#pragma once 2eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 3eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include "FrameBuffer.h" 4eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 5eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <GLES2/gl2.h> 6eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 7eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <stdint.h> 8eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <stdio.h> 9eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <stdlib.h> 10eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 11eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansalclass WarpRenderer { 12eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal public: 13eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal WarpRenderer(); 14eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal virtual ~WarpRenderer(); 15eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 16eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal // Initialize OpenGL resources 17eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal // @return true if successful 18eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal bool InitializeGLProgram(); 19eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 20eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal bool SetupGraphics(FrameBuffer* buffer); 21eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal bool SetupGraphics(int width, int height); 22eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 23eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal bool Clear(float r, float g, float b, float a); 24eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 25eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal void SetViewportMatrix(int w, int h, int W, int H); 26eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal void SetScalingMatrix(float xscale, float yscale); 27eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal bool DrawTexture(GLfloat *affine); 28eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 29eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal int GetTextureName(); 30eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal void SetInputTextureName(GLuint textureName); 31eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal void SetInputTextureDimensions(int width, int height); 32eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 33eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal void InitializeGLContext(); 34eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 35eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal protected: 36eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 37eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLuint loadShader(GLenum shaderType, const char* pSource); 38eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLuint createProgram(const char*, const char* ); 39eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 40eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal int SurfaceWidth() const { return mSurfaceWidth; } 41eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal int SurfaceHeight() const { return mSurfaceHeight; } 42eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 43eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal private: 44eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal // Source code for shaders. 45eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal virtual const char* VertexShaderSource() const; 46eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal virtual const char* FragmentShaderSource() const; 47eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 48eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal // Redefine this to use special texture types such as 49eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal // GL_TEXTURE_EXTERNAL_OES. 50eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal virtual GLenum InputTextureType() const { return GL_TEXTURE_2D; } 51eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 52eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 53eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLuint mGlProgram; 54eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLuint mInputTextureName; 55eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal int mInputTextureWidth; 56eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal int mInputTextureHeight; 57eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 58eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLuint mTexHandle; // Handle to s_texture. 59eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLuint mTexCoordHandle; // Handle to a_texCoord. 60eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLuint mTriangleVerticesHandle; // Handle to vPosition. 61eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 62eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal // Attribute locations 63eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLint mPositionLoc; 64eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLint mAffinetransLoc; 65eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLint mViewporttransLoc; 66eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLint mScalingtransLoc; 67eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLint mTexCoordLoc; 68eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 69eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLfloat mViewportMatrix[16]; 70eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLfloat mScalingMatrix[16]; 71eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 72eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal // Sampler location 73eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal GLint mSamplerLoc; 74eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 75eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal int mSurfaceWidth; // Width of target surface. 76eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal int mSurfaceHeight; // Height of target surface. 77eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 78eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal FrameBuffer *mFrameBuffer; 79eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal}; 80eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 81