00001 #ifndef MYTHRENDER_OPENGL2ES_H
00002 #define MYTHRENDER_OPENGL2ES_H
00003
00004 #include "mythrender_opengl2.h"
00005
00006 class MUI_PUBLIC MythRenderOpenGL2ES : public MythRenderOpenGL2
00007 {
00008 public:
00009 MythRenderOpenGL2ES(const QGLFormat& format, QPaintDevice* device)
00010 : MythRenderOpenGL2(format, device, kRenderOpenGL2ES)
00011 {
00012 }
00013
00014 MythRenderOpenGL2ES(const QGLFormat& format)
00015 : MythRenderOpenGL2(format, kRenderOpenGL2ES)
00016 {
00017 }
00018
00019 virtual void InitProcs(void)
00020 {
00021
00022 m_GLSLVersion = "#version 100\n";
00023
00024 m_qualifiers = "precision mediump float;\n";
00025
00026
00027 m_glCreateShader = (MYTH_GLCREATESHADERPROC)
00028 GetProcAddress("glCreateShader");
00029 m_glShaderSource = (MYTH_GLSHADERSOURCEPROC)
00030 GetProcAddress("glShaderSource");
00031 m_glCompileShader = (MYTH_GLCOMPILESHADERPROC)
00032 GetProcAddress("glCompileShader");
00033 m_glAttachShader = (MYTH_GLATTACHSHADERPROC)
00034 GetProcAddress("glAttachShader");
00035 m_glGetShaderiv = (MYTH_GLGETSHADERIVPROC)
00036 GetProcAddress("glGetShaderiv");
00037 m_glGetShaderInfoLog = (MYTH_GLGETSHADERINFOLOGPROC)
00038 GetProcAddress("glGetShaderInfoLog");
00039 m_glDetachShader = (MYTH_GLDETACHSHADERPROC)
00040 GetProcAddress("glDetachShader");
00041 m_glDeleteShader = (MYTH_GLDELETESHADERPROC)
00042 GetProcAddress("glDeleteShader");
00043
00044 m_glDeleteProgram = (MYTH_GLDELETEPROGRAMPROC)
00045 GetProcAddress("glDeleteProgram");
00046 m_glCreateProgram = (MYTH_GLCREATEPROGRAMPROC)
00047 GetProcAddress("glCreateProgram");
00048 m_glLinkProgram = (MYTH_GLLINKPROGRAMPROC)
00049 GetProcAddress("glLinkProgram");
00050 m_glUseProgram = (MYTH_GLUSEPROGRAMPROC)
00051 GetProcAddress("glUseProgram");
00052 m_glGetProgramInfoLog = (MYTH_GLGETPROGRAMINFOLOGPROC)
00053 GetProcAddress("glGetProgramInfoLog");
00054 m_glGetProgramiv = (MYTH_GLGETPROGRAMIVPROC)
00055 GetProcAddress("glGetProgramiv");
00056
00057 m_glGetUniformLocation = (MYTH_GLGETUNIFORMLOCATIONPROC)
00058 GetProcAddress("glGetUniformLocation");
00059 m_glUniform4f = (MYTH_GLUNIFORM4FPROC)
00060 GetProcAddress("glUniform4f");
00061 m_glUniformMatrix4fv = (MYTH_GLUNIFORMMATRIX4FVPROC)
00062 GetProcAddress("glUniformMatrix4fv");
00063 m_glVertexAttribPointer = (MYTH_GLVERTEXATTRIBPOINTERPROC)
00064 GetProcAddress("glVertexAttribPointer");
00065
00066 m_glEnableVertexAttribArray =
00067 (MYTH_GLENABLEVERTEXATTRIBARRAYPROC)
00068 GetProcAddress("glEnableVertexAttribArray");
00069 m_glDisableVertexAttribArray =
00070 (MYTH_GLDISABLEVERTEXATTRIBARRAYPROC)
00071 GetProcAddress("glDisableVertexAttribArray");
00072 m_glBindAttribLocation = (MYTH_GLBINDATTRIBLOCATIONPROC)
00073 GetProcAddress("glBindAttribLocation");
00074 m_glVertexAttrib4f = (MYTH_GLVERTEXATTRIB4FPROC)
00075 GetProcAddress("glVertexAttrib4f");
00076
00077 m_glGenBuffers = (MYTH_GLGENBUFFERSPROC)
00078 GetProcAddress("glGenBuffers");
00079 m_glBindBuffer = (MYTH_GLBINDBUFFERPROC)
00080 GetProcAddress("glBindBuffer");
00081 m_glDeleteBuffers = (MYTH_GLDELETEBUFFERSPROC)
00082 GetProcAddress("glDeleteBuffers");
00083 m_glBufferData = (MYTH_GLBUFFERDATAPROC)
00084 GetProcAddress("glBufferData");
00085
00086 m_glActiveTexture = (MYTH_GLACTIVETEXTUREPROC)
00087 GetProcAddress("glActiveTexture");
00088
00089
00090 m_glGenFramebuffers = (MYTH_GLGENFRAMEBUFFERSPROC)
00091 GetProcAddress("glGenFramebuffers");
00092 m_glBindFramebuffer = (MYTH_GLBINDFRAMEBUFFERPROC)
00093 GetProcAddress("glBindFramebuffer");
00094 m_glFramebufferTexture2D = (MYTH_GLFRAMEBUFFERTEXTURE2DPROC)
00095 GetProcAddress("glFramebufferTexture2D");
00096 m_glCheckFramebufferStatus = (MYTH_GLCHECKFRAMEBUFFERSTATUSPROC)
00097 GetProcAddress("glCheckFramebufferStatus");
00098 m_glDeleteFramebuffers = (MYTH_GLDELETEFRAMEBUFFERSPROC)
00099 GetProcAddress("glDeleteFramebuffers");
00100
00101 m_glMapBuffer = (MYTH_GLMAPBUFFERPROC)GetProcAddress("glMapBuffer");
00102 m_glUnmapBuffer = (MYTH_GLUNMAPBUFFERPROC)GetProcAddress("glUnmapBuffer");
00103 }
00104
00105 virtual bool InitFeatures(void)
00106 {
00107 m_exts_supported = kGLFeatNone;
00108
00109 GLint maxtexsz = 0;
00110 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxtexsz);
00111 m_max_tex_size = (maxtexsz) ? maxtexsz : 512;
00112
00113 static bool debugged = false;
00114 if (!debugged)
00115 {
00116 debugged = true;
00117 LOG(VB_GENERAL, LOG_INFO, LOC + QString("Vendor : %1")
00118 .arg((const char*) glGetString(GL_VENDOR)));
00119 LOG(VB_GENERAL, LOG_INFO, LOC + QString("Renderer: %1")
00120 .arg((const char*) glGetString(GL_RENDERER)));
00121 LOG(VB_GENERAL, LOG_INFO, LOC + QString("Version : %1")
00122 .arg((const char*) glGetString(GL_VERSION)));
00123 LOG(VB_GENERAL, LOG_INFO, LOC + QString("Max texture size: %1 x %2")
00124 .arg(m_max_tex_size).arg(m_max_tex_size));
00125 LOG(VB_GENERAL, LOG_INFO, LOC + QString("Direct rendering: %1")
00126 .arg((this->format().directRendering()) ? "Yes" : "No"));
00127 }
00128
00129 if (!(m_glCreateShader && m_glShaderSource && m_glCompileShader &&
00130 m_glAttachShader && m_glGetShaderiv && m_glGetShaderInfoLog &&
00131 m_glDetachShader && m_glDeleteShader && m_glDeleteProgram &&
00132 m_glCreateProgram && m_glLinkProgram && m_glUseProgram &&
00133 m_glGetProgramInfoLog && m_glGetProgramiv && m_glGetUniformLocation &&
00134 m_glUniform4f && m_glUniformMatrix4fv && m_glVertexAttribPointer &&
00135 m_glEnableVertexAttribArray && m_glDisableVertexAttribArray &&
00136 m_glBindAttribLocation && m_glVertexAttrib4f && m_glGenBuffers &&
00137 m_glBindBuffer && m_glDeleteBuffers && m_glBufferData &&
00138 m_glActiveTexture))
00139 {
00140 LOG(VB_GENERAL, LOG_ERR,
00141 "OpenGL2ES Error: Failed to find basic functionality.");
00142 return false;
00143 }
00144
00145 LOG(VB_GENERAL, LOG_INFO, "OpenGL2ES: Found default functionality.");
00146 m_exts_supported += kGLSL | kGLExtVBO | kGLVertexArray |
00147 kGLMultiTex;
00148 m_default_texture_type = GL_TEXTURE_2D;
00149
00150
00151 if (m_glGenFramebuffers && m_glBindFramebuffer &&
00152 m_glFramebufferTexture2D && m_glCheckFramebufferStatus &&
00153 m_glDeleteFramebuffers)
00154 {
00155 m_exts_supported += kGLExtFBufObj;
00156 LOG(VB_GENERAL, LOG_INFO,
00157 "OpenGL2ES: Framebuffer Objects available.");
00158 }
00159
00160
00161 m_extensions = (const char*) glGetString(GL_EXTENSIONS);
00162 if (m_extensions.contains("GL_OES_mapbuffer") &&
00163 m_glMapBuffer && m_glUnmapBuffer)
00164 {
00165 m_exts_supported += kGLExtPBufObj;
00166 LOG(VB_GENERAL, LOG_INFO,
00167 "OpenGL2ES: Pixel Buffer Objects available.");
00168 }
00169
00170 m_exts_used = m_exts_supported;
00171 DeleteDefaultShaders();
00172 CreateDefaultShaders();
00173
00174 return true;
00175 }
00176 };
00177
00178 #endif // MYTHRENDER_OPENGL2ES_H