src/opengl/qglextensions.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 37 758a864f9613
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
   189 #endif
   189 #endif
   190 
   190 
   191 
   191 
   192 bool qt_resolve_buffer_extensions(QGLContext *ctx)
   192 bool qt_resolve_buffer_extensions(QGLContext *ctx)
   193 {
   193 {
   194     if (glMapBufferARB && glUnmapBufferARB
   194 #if defined(QGL_RESOLVE_BUFFER_FUNCS)
   195 #if !defined(QT_OPENGL_ES_2)
   195     if (glBindBuffer && glDeleteBuffers && glGenBuffers && glBufferData
   196         && glBindBuffer && glDeleteBuffers && glGenBuffers && glBufferData
   196             && glBufferSubData && glGetBufferParameteriv)
   197 #endif
   197         return true;
   198         )
   198 #endif
   199         return true;
   199 
   200 
   200 #if defined(QGL_RESOLVE_BUFFER_FUNCS)
   201 #if !defined(QT_OPENGL_ES_2)
       
   202     glBindBuffer = (_glBindBuffer) qt_gl_getProcAddressARB(ctx, "glBindBuffer");
   201     glBindBuffer = (_glBindBuffer) qt_gl_getProcAddressARB(ctx, "glBindBuffer");
   203     glDeleteBuffers = (_glDeleteBuffers) qt_gl_getProcAddressARB(ctx, "glDeleteBuffers");
   202     glDeleteBuffers = (_glDeleteBuffers) qt_gl_getProcAddressARB(ctx, "glDeleteBuffers");
   204     glGenBuffers = (_glGenBuffers) qt_gl_getProcAddressARB(ctx, "glGenBuffers");
   203     glGenBuffers = (_glGenBuffers) qt_gl_getProcAddressARB(ctx, "glGenBuffers");
   205     glBufferData = (_glBufferData) qt_gl_getProcAddressARB(ctx, "glBufferData");
   204     glBufferData = (_glBufferData) qt_gl_getProcAddressARB(ctx, "glBufferData");
       
   205     glBufferSubData = (_glBufferSubData) qt_gl_getProcAddressARB(ctx, "glBufferSubData");
       
   206     glGetBufferSubData = (_glGetBufferSubData) qt_gl_getProcAddressARB(ctx, "glGetBufferSubData");
       
   207     glGetBufferParameteriv = (_glGetBufferParameteriv) qt_gl_getProcAddressARB(ctx, "glGetBufferParameteriv");
   206 #endif
   208 #endif
   207     glMapBufferARB = (_glMapBufferARB) qt_gl_getProcAddressARB(ctx, "glMapBuffer");
   209     glMapBufferARB = (_glMapBufferARB) qt_gl_getProcAddressARB(ctx, "glMapBuffer");
   208     glUnmapBufferARB = (_glUnmapBufferARB) qt_gl_getProcAddressARB(ctx, "glUnmapBuffer");
   210     glUnmapBufferARB = (_glUnmapBufferARB) qt_gl_getProcAddressARB(ctx, "glUnmapBuffer");
   209 
   211 
   210     return glMapBufferARB
   212 #if defined(QGL_RESOLVE_BUFFER_FUNCS)
   211         && glUnmapBufferARB
   213     return glBindBuffer
   212 #if !defined(QT_OPENGL_ES_2)
       
   213         && glBindBuffer
       
   214         && glDeleteBuffers
   214         && glDeleteBuffers
   215         && glGenBuffers
   215         && glGenBuffers
   216         && glBufferData
   216         && glBufferData
   217 #endif
   217         && glBufferSubData
   218         ;
   218         && glGetBufferParameteriv;
   219 }
   219         // glGetBufferSubData() is optional
       
   220 #else
       
   221     return true;
       
   222 #endif
       
   223 }
       
   224 
       
   225 #ifndef QT_NO_EGL
       
   226 bool qt_resolve_eglimage_gl_extensions(QGLContext *ctx)
       
   227 {
       
   228     if (glEGLImageTargetTexture2DOES || glEGLImageTargetRenderbufferStorageOES)
       
   229         return true;
       
   230     glEGLImageTargetTexture2DOES = (_glEGLImageTargetTexture2DOES) ctx->getProcAddress(QLatin1String("glEGLImageTargetTexture2DOES"));
       
   231     glEGLImageTargetRenderbufferStorageOES = (_glEGLImageTargetRenderbufferStorageOES) ctx->getProcAddress(QLatin1String("glEGLImageTargetRenderbufferStorageOES"));
       
   232     return glEGLImageTargetTexture2DOES && glEGLImageTargetRenderbufferStorageOES;
       
   233 }
       
   234 #endif
   220 
   235 
   221 bool qt_resolve_glsl_extensions(QGLContext *ctx)
   236 bool qt_resolve_glsl_extensions(QGLContext *ctx)
   222 {
   237 {
       
   238 
   223 #if defined(QT_OPENGL_ES_2)
   239 #if defined(QT_OPENGL_ES_2)
   224     // The GLSL shader functions are always present in OpenGL/ES 2.0.
   240     // The GLSL shader functions are always present in OpenGL/ES 2.0.
   225     // The only exceptions are glGetProgramBinaryOES and glProgramBinaryOES.
   241     // The only exceptions are glGetProgramBinaryOES and glProgramBinaryOES.
   226     if (!QGLContextPrivate::extensionFuncs(ctx).qt_glslResolved) {
   242     if (!QGLContextPrivate::extensionFuncs(ctx).qt_glslResolved) {
   227         glGetProgramBinaryOES = (_glGetProgramBinaryOES) ctx->getProcAddress(QLatin1String("glGetProgramBinaryOES"));
   243         glGetProgramBinaryOES = (_glGetProgramBinaryOES) ctx->getProcAddress(QLatin1String("glGetProgramBinaryOES"));
   230     }
   246     }
   231     return true;
   247     return true;
   232 #else
   248 #else
   233     if (glCreateShader)
   249     if (glCreateShader)
   234         return true;
   250         return true;
       
   251 
       
   252     // Geometry shaders are optional...
       
   253     glProgramParameteriEXT = (_glProgramParameteriEXT) ctx->getProcAddress(QLatin1String("glProgramParameteriEXT"));
       
   254     glFramebufferTextureEXT = (_glFramebufferTextureEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureEXT"));
       
   255     glFramebufferTextureLayerEXT = (_glFramebufferTextureLayerEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureLayerEXT"));
       
   256     glFramebufferTextureFaceEXT = (_glFramebufferTextureFaceEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureFaceEXT"));
   235 
   257 
   236     glCreateShader = (_glCreateShader) ctx->getProcAddress(QLatin1String("glCreateShader"));
   258     glCreateShader = (_glCreateShader) ctx->getProcAddress(QLatin1String("glCreateShader"));
   237     if (glCreateShader) {
   259     if (glCreateShader) {
   238         glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSource"));
   260         glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSource"));
   239         glShaderBinary = (_glShaderBinary) ctx->getProcAddress(QLatin1String("glShaderBinary"));
   261         glShaderBinary = (_glShaderBinary) ctx->getProcAddress(QLatin1String("glShaderBinary"));