1eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#pragma once
2eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
3eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include "FrameBuffer.h"
41e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal#include "Renderer.h"
5eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
6eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <GLES2/gl2.h>
7eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
8eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <stdint.h>
9eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <stdio.h>
10eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal#include <stdlib.h>
11eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
121e762b1f935c9d4a06af6dd56121590ca81d48b1mbansalclass WarpRenderer: public Renderer {
13eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal  public:
14eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    WarpRenderer();
15eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    virtual ~WarpRenderer();
16eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
17eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    // Initialize OpenGL resources
18eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    // @return true if successful
19eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    bool InitializeGLProgram();
20eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
21eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    void SetViewportMatrix(int w, int h, int W, int H);
22eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    void SetScalingMatrix(float xscale, float yscale);
23eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
241e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal    bool DrawTexture(GLfloat *affine);
25eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
26eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal private:
27eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    // Source code for shaders.
281e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal    const char* VertexShaderSource() const;
291e762b1f935c9d4a06af6dd56121590ca81d48b1mbansal    const char* FragmentShaderSource() const;
30eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
31eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLuint mTexHandle;                  // Handle to s_texture.
32eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLuint mTexCoordHandle;             // Handle to a_texCoord.
33eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLuint mTriangleVerticesHandle;     // Handle to vPosition.
34eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
35eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    // Attribute locations
36eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLint  mPositionLoc;
37eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLint  mAffinetransLoc;
38eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLint  mViewporttransLoc;
39eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLint  mScalingtransLoc;
40eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLint  mTexCoordLoc;
41eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
42eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLfloat mViewportMatrix[16];
43eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLfloat mScalingMatrix[16];
44eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
45eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    // Sampler location
46eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    GLint mSamplerLoc;
47eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal};
48eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
49