11e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal#pragma once 21e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 31e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal#include "FrameBuffer.h" 41e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 51e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal#include <GLES2/gl2.h> 61e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 71e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal#include <stdint.h> 81e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal#include <stdio.h> 91e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal#include <stdlib.h> 101e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 111e762b1f935c9d4a06af6dd56121590ca81d48b1mbansalclass Renderer { 121e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal public: 131e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal Renderer(); 141e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal virtual ~Renderer(); 151e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 161e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal // Initialize OpenGL resources 171e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal // @return true if successful 181e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal virtual bool InitializeGLProgram() = 0; 191e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 201e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal bool SetupGraphics(FrameBuffer* buffer); 211e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal bool SetupGraphics(int width, int height); 221e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 231e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal bool Clear(float r, float g, float b, float a); 241e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 251e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal int GetTextureName(); 261e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal void SetInputTextureName(GLuint textureName); 271e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal void SetInputTextureDimensions(int width, int height); 281e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal void SetInputTextureType(GLenum textureType); 291e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 301e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal void InitializeGLContext(); 311e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 321e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal protected: 331e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 341e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLuint loadShader(GLenum shaderType, const char* pSource); 351e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLuint createProgram(const char*, const char* ); 361e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 371e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal int SurfaceWidth() const { return mSurfaceWidth; } 381e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal int SurfaceHeight() const { return mSurfaceHeight; } 391e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 401e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal // Source code for shaders. 411e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal virtual const char* VertexShaderSource() const = 0; 421e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal virtual const char* FragmentShaderSource() const = 0; 431e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 441e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal // Redefine this to use special texture types such as 451e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal // GL_TEXTURE_EXTERNAL_OES. 461e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLenum InputTextureType() const { return mInputTextureType; } 471e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 481e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLuint mGlProgram; 491e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLuint mInputTextureName; 501e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLenum mInputTextureType; 511e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal int mInputTextureWidth; 521e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal int mInputTextureHeight; 531e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 541e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal // Attribute locations 551e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLint mScalingtransLoc; 561e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLint maPositionHandle; 571e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal GLint maTextureHandle; 581e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 591e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 601e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal int mSurfaceWidth; // Width of target surface. 611e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal int mSurfaceHeight; // Height of target surface. 621e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 631e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal FrameBuffer *mFrameBuffer; 641e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal}; 651e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal 66