1 #pragma once 2 3 #include "FrameBuffer.h" 4 5 #include <GLES2/gl2.h> 6 7 #include <stdint.h> 8 #include <stdio.h> 9 #include <stdlib.h> 10 11 class Renderer { 12 public: 13 Renderer(); 14 virtual ~Renderer(); 15 16 // Initialize OpenGL resources 17 // @return true if successful 18 virtual bool InitializeGLProgram() = 0; 19 20 bool SetupGraphics(FrameBuffer* buffer); 21 bool SetupGraphics(int width, int height); 22 23 bool Clear(float r, float g, float b, float a); 24 25 int GetTextureName(); 26 void SetInputTextureName(GLuint textureName); 27 void SetInputTextureDimensions(int width, int height); 28 void SetInputTextureType(GLenum textureType); 29 30 void InitializeGLContext(); 31 32 protected: 33 34 GLuint loadShader(GLenum shaderType, const char* pSource); 35 GLuint createProgram(const char*, const char* ); 36 SurfaceWidth()37 int SurfaceWidth() const { return mSurfaceWidth; } SurfaceHeight()38 int SurfaceHeight() const { return mSurfaceHeight; } 39 40 // Source code for shaders. 41 virtual const char* VertexShaderSource() const = 0; 42 virtual const char* FragmentShaderSource() const = 0; 43 44 // Redefine this to use special texture types such as 45 // GL_TEXTURE_EXTERNAL_OES. InputTextureType()46 GLenum InputTextureType() const { return mInputTextureType; } 47 48 GLuint mGlProgram; 49 GLuint mInputTextureName; 50 GLenum mInputTextureType; 51 int mInputTextureWidth; 52 int mInputTextureHeight; 53 54 // Attribute locations 55 GLint mScalingtransLoc; 56 GLint maPositionHandle; 57 GLint maTextureHandle; 58 59 60 int mSurfaceWidth; // Width of target surface. 61 int mSurfaceHeight; // Height of target surface. 62 63 FrameBuffer *mFrameBuffer; 64 }; 65 66