00001 #ifndef MYTHRENDEROPENGL2_H
00002 #define MYTHRENDEROPENGL2_H
00003
00004 #include <QStack>
00005
00006 #include "mythrender_opengl.h"
00007 #include "mythrender_opengl_defs2.h"
00008
00009 typedef enum
00010 {
00011 kShaderSimple = 0,
00012 kShaderDefault,
00013 kShaderCircle,
00014 kShaderCircleEdge,
00015 kShaderVertLine,
00016 kShaderHorizLine,
00017 kShaderCount,
00018 } DefaultShaders;
00019
00020 class MythGLShaderObject;
00021 class GLMatrix;
00022
00023 class MUI_PUBLIC MythRenderOpenGL2 : public MythRenderOpenGL
00024 {
00025 public:
00026 MythRenderOpenGL2(const QGLFormat& format, QPaintDevice* device,
00027 RenderType type = kRenderOpenGL2);
00028 MythRenderOpenGL2(const QGLFormat& format, RenderType type = kRenderOpenGL2);
00029
00030 virtual uint CreateShaderObject(const QString &vert, const QString &frag);
00031 virtual void DeleteShaderObject(uint obj);
00032 virtual void EnableShaderObject(uint obj);
00033 virtual void SetShaderParams(uint obj, void* vals, const char* uniform);
00034
00035 virtual bool RectanglesAreAccelerated(void) { return true; }
00036
00037 virtual void PushTransformation(const UIEffects &fx, QPointF ¢er) ;
00038 virtual void PopTransformation(void);
00039
00040 protected:
00041 virtual ~MythRenderOpenGL2();
00042 virtual void DrawBitmapPriv(uint tex, const QRect *src, const QRect *dst,
00043 uint prog, int alpha,
00044 int red, int green, int blue);
00045 virtual void DrawBitmapPriv(uint *textures, uint texture_count,
00046 const QRectF *src, const QRectF *dst,
00047 uint prog);
00048 virtual void DrawRectPriv(const QRect &area, const QBrush &fillBrush,
00049 const QPen &linePen, int alpha);
00050 virtual void DrawRoundRectPriv(const QRect &area, int cornerRadius,
00051 const QBrush &fillBrush, const QPen &linePen,
00052 int alpha);
00053
00054 virtual void Init2DState(void);
00055 virtual void InitProcs(void);
00056 virtual void DeleteShaders(void);
00057 virtual bool InitFeatures(void);
00058 virtual void ResetVars(void);
00059 virtual void ResetProcs(void);
00060 virtual void DeleteOpenGLResources(void);
00061 virtual void SetMatrixView(void);
00062
00063 void CreateDefaultShaders(void);
00064 void DeleteDefaultShaders(void);
00065 uint CreateShader(int type, const QString &source);
00066 bool ValidateShaderObject(uint obj);
00067 bool CheckObjectStatus(uint obj);
00068 void OptimiseShaderSource(QString &source);
00069
00070
00071 QHash<GLuint, MythGLShaderObject> m_shader_objects;
00072 uint m_shaders[kShaderCount];
00073
00074
00075 uint m_active_obj;
00076 float m_projection[4][4];
00077 QStack<GLMatrix> m_transforms;
00078 float m_parameters[4][4];
00079 QString m_qualifiers;
00080 QString m_GLSLVersion;
00081
00082
00083 MYTH_GLGETSHADERIVPROC m_glGetShaderiv;
00084 MYTH_GLCREATESHADERPROC m_glCreateShader;
00085 MYTH_GLSHADERSOURCEPROC m_glShaderSource;
00086 MYTH_GLCOMPILESHADERPROC m_glCompileShader;
00087 MYTH_GLATTACHSHADERPROC m_glAttachShader;
00088 MYTH_GLGETSHADERINFOLOGPROC m_glGetShaderInfoLog;
00089 MYTH_GLDETACHSHADERPROC m_glDetachShader;
00090 MYTH_GLDELETESHADERPROC m_glDeleteShader;
00091
00092 MYTH_GLCREATEPROGRAMPROC m_glCreateProgram;
00093 MYTH_GLLINKPROGRAMPROC m_glLinkProgram;
00094 MYTH_GLUSEPROGRAMPROC m_glUseProgram;
00095 MYTH_GLDELETEPROGRAMPROC m_glDeleteProgram;
00096 MYTH_GLGETPROGRAMINFOLOGPROC m_glGetProgramInfoLog;
00097 MYTH_GLGETPROGRAMIVPROC m_glGetProgramiv;
00098
00099 MYTH_GLGETUNIFORMLOCATIONPROC m_glGetUniformLocation;
00100 MYTH_GLUNIFORM4FPROC m_glUniform4f;
00101 MYTH_GLUNIFORMMATRIX4FVPROC m_glUniformMatrix4fv;
00102 MYTH_GLVERTEXATTRIBPOINTERPROC m_glVertexAttribPointer;
00103 MYTH_GLENABLEVERTEXATTRIBARRAYPROC m_glEnableVertexAttribArray;
00104 MYTH_GLDISABLEVERTEXATTRIBARRAYPROC m_glDisableVertexAttribArray;
00105 MYTH_GLBINDATTRIBLOCATIONPROC m_glBindAttribLocation;
00106 MYTH_GLVERTEXATTRIB4FPROC m_glVertexAttrib4f;
00107 };
00108
00109 #endif // MYTHRENDEROPENGL2_H