Ignore:
Timestamp:
Feb 11, 2010, 11:19:06 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.1 sources.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/opengl/qglextensions.cpp

    r2 r561  
    22**
    33** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    4 ** Contact: Qt Software Information (qt-info@nokia.com)
     4** All rights reserved.
     5** Contact: Nokia Corporation (qt-info@nokia.com)
    56**
    67** This file is part of the QtOpenGL module of the Qt Toolkit.
     
    2122** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    2223**
    23 ** In addition, as a special exception, Nokia gives you certain
    24 ** additional rights. These rights are described in the Nokia Qt LGPL
    25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
    26 ** package.
     24** In addition, as a special exception, Nokia gives you certain additional
     25** rights.  These rights are described in the Nokia Qt LGPL Exception
     26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    2727**
    2828** GNU General Public License Usage
     
    3434** met: http://www.gnu.org/copyleft/gpl.html.
    3535**
    36 ** If you are unsure which license is appropriate for your use, please
    37 ** contact the sales department at qt-sales@nokia.com.
     36** If you have questions regarding the use of this file, please contact
     37** Nokia at qt-info@nokia.com.
    3838** $QT_END_LICENSE$
    3939**
     
    4444QT_BEGIN_NAMESPACE
    4545
     46static void *qt_gl_getProcAddress_search
     47    (QGLContext *ctx, const char *name1, const char *name2,
     48     const char *name3, const char *name4)
     49{
     50    void *addr;
     51
     52    addr = ctx->getProcAddress(QLatin1String(name1));
     53    if (addr)
     54        return addr;
     55
     56    addr = ctx->getProcAddress(QLatin1String(name2));
     57    if (addr)
     58        return addr;
     59
     60    addr = ctx->getProcAddress(QLatin1String(name3));
     61    if (addr)
     62        return addr;
     63
     64    if (name4)
     65        return ctx->getProcAddress(QLatin1String(name4));
     66
     67    return 0;
     68}
     69
     70// Search for an extension function starting with the most likely
     71// function suffix first, and then trying the other variations.
     72#if defined(QT_OPENGL_ES)
     73#define qt_gl_getProcAddress(ctx,name) \
     74    qt_gl_getProcAddress_search((ctx), name, name "OES", name "EXT", name "ARB")
     75#define qt_gl_getProcAddressEXT(ctx,name) \
     76    qt_gl_getProcAddress_search((ctx), name "OES", name, name "EXT", name "ARB")
     77#define qt_gl_getProcAddressARB(ctx,name) \
     78    qt_gl_getProcAddress_search((ctx), name "OES", name, name "ARB", name "EXT")
     79#define qt_gl_getProcAddressOES(ctx,name) \
     80    qt_gl_getProcAddress_search((ctx), name "OES", name, name "EXT", name "ARB")
     81#else
     82#define qt_gl_getProcAddress(ctx,name) \
     83    qt_gl_getProcAddress_search((ctx), name, name "ARB", name "EXT", 0)
     84#define qt_gl_getProcAddressEXT(ctx,name) \
     85    qt_gl_getProcAddress_search((ctx), name "EXT", name, name "ARB", 0)
     86#define qt_gl_getProcAddressARB(ctx,name) \
     87    qt_gl_getProcAddress_search((ctx), name "ARB", name, name "EXT", 0)
     88#define qt_gl_getProcAddressOES(ctx,name) \
     89    qt_gl_getProcAddress_search((ctx), name "OES", name, name "EXT", name "ARB")
     90#endif
     91
    4692bool qt_resolve_framebufferobject_extensions(QGLContext *ctx)
    4793{
    48 #if !defined(QT_OPENGL_ES_2)
    49     if (glIsRenderbufferEXT != 0)
    50         return true;
     94#if defined(QT_OPENGL_ES_2)
     95    static bool have_resolved = false;
     96    if (have_resolved)
     97        return true;
     98    have_resolved = true;
     99#else
     100    if (glIsRenderbuffer != 0)
     101        return true;
     102#endif
    51103
    52104    if (ctx == 0) {
     
    56108    }
    57109
    58     glIsRenderbufferEXT = (_glIsRenderbufferEXT) ctx->getProcAddress(QLatin1String("glIsRenderbufferEXT"));
    59     glBindRenderbufferEXT = (_glBindRenderbufferEXT) ctx->getProcAddress(QLatin1String("glBindRenderbufferEXT"));
    60     glDeleteRenderbuffersEXT = (_glDeleteRenderbuffersEXT) ctx->getProcAddress(QLatin1String("glDeleteRenderbuffersEXT"));
    61     glGenRenderbuffersEXT = (_glGenRenderbuffersEXT) ctx->getProcAddress(QLatin1String("glGenRenderbuffersEXT"));
    62     glRenderbufferStorageEXT = (_glRenderbufferStorageEXT) ctx->getProcAddress(QLatin1String("glRenderbufferStorageEXT"));
    63     glGetRenderbufferParameterivEXT =
    64         (_glGetRenderbufferParameterivEXT) ctx->getProcAddress(QLatin1String("glGetRenderbufferParameterivEXT"));
    65     glIsFramebufferEXT = (_glIsFramebufferEXT) ctx->getProcAddress(QLatin1String("glIsFramebufferEXT"));
    66     glBindFramebufferEXT = (_glBindFramebufferEXT) ctx->getProcAddress(QLatin1String("glBindFramebufferEXT"));
    67     glDeleteFramebuffersEXT = (_glDeleteFramebuffersEXT) ctx->getProcAddress(QLatin1String("glDeleteFramebuffersEXT"));
    68     glGenFramebuffersEXT = (_glGenFramebuffersEXT) ctx->getProcAddress(QLatin1String("glGenFramebuffersEXT"));
    69     glCheckFramebufferStatusEXT = (_glCheckFramebufferStatusEXT) ctx->getProcAddress(QLatin1String("glCheckFramebufferStatusEXT"));
    70     glFramebufferTexture1DEXT = (_glFramebufferTexture1DEXT) ctx->getProcAddress(QLatin1String("glFramebufferTexture1DEXT"));
    71     glFramebufferTexture2DEXT = (_glFramebufferTexture2DEXT) ctx->getProcAddress(QLatin1String("glFramebufferTexture2DEXT"));
    72     glFramebufferTexture3DEXT = (_glFramebufferTexture3DEXT) ctx->getProcAddress(QLatin1String("glFramebufferTexture3DEXT"));
    73     glFramebufferRenderbufferEXT = (_glFramebufferRenderbufferEXT) ctx->getProcAddress(QLatin1String("glFramebufferRenderbufferEXT"));
    74     glGetFramebufferAttachmentParameterivEXT =
    75         (_glGetFramebufferAttachmentParameterivEXT) ctx->getProcAddress(QLatin1String("glGetFramebufferAttachmentParameterivEXT"));
    76     glGenerateMipmapEXT = (_glGenerateMipmapEXT) ctx->getProcAddress(QLatin1String("glGenerateMipmapEXT"));
    77     return glIsRenderbufferEXT;
     110
     111    glBlitFramebufferEXT = (_glBlitFramebufferEXT) qt_gl_getProcAddressEXT(ctx, "glBlitFramebuffer");
     112    glRenderbufferStorageMultisampleEXT =
     113        (_glRenderbufferStorageMultisampleEXT) qt_gl_getProcAddressEXT(ctx, "glRenderbufferStorageMultisample");
     114
     115#if !defined(QT_OPENGL_ES_2)
     116    glIsRenderbuffer = (_glIsRenderbuffer) qt_gl_getProcAddressEXT(ctx, "glIsRenderbuffer");
     117    if (!glIsRenderbuffer)
     118        return false;   // Not much point searching for anything else.
     119    glBindRenderbuffer = (_glBindRenderbuffer) qt_gl_getProcAddressEXT(ctx, "glBindRenderbuffer");
     120    glDeleteRenderbuffers = (_glDeleteRenderbuffers) qt_gl_getProcAddressEXT(ctx, "glDeleteRenderbuffers");
     121    glGenRenderbuffers = (_glGenRenderbuffers) qt_gl_getProcAddressEXT(ctx, "glGenRenderbuffers");
     122    glRenderbufferStorage = (_glRenderbufferStorage) qt_gl_getProcAddressEXT(ctx, "glRenderbufferStorage");
     123    glGetRenderbufferParameteriv =
     124        (_glGetRenderbufferParameteriv) qt_gl_getProcAddressEXT(ctx, "glGetRenderbufferParameteriv");
     125    glIsFramebuffer = (_glIsFramebuffer) qt_gl_getProcAddressEXT(ctx, "glIsFramebuffer");
     126    glBindFramebuffer = (_glBindFramebuffer) qt_gl_getProcAddressEXT(ctx, "glBindFramebuffer");
     127    glDeleteFramebuffers = (_glDeleteFramebuffers) qt_gl_getProcAddressEXT(ctx, "glDeleteFramebuffers");
     128    glGenFramebuffers = (_glGenFramebuffers) qt_gl_getProcAddressEXT(ctx, "glGenFramebuffers");
     129    glCheckFramebufferStatus = (_glCheckFramebufferStatus) qt_gl_getProcAddressEXT(ctx, "glCheckFramebufferStatus");
     130    glFramebufferTexture2D = (_glFramebufferTexture2D) qt_gl_getProcAddressEXT(ctx, "glFramebufferTexture2D");
     131    glFramebufferRenderbuffer = (_glFramebufferRenderbuffer) qt_gl_getProcAddressEXT(ctx, "glFramebufferRenderbuffer");
     132    glGetFramebufferAttachmentParameteriv =
     133        (_glGetFramebufferAttachmentParameteriv) qt_gl_getProcAddressEXT(ctx, "glGetFramebufferAttachmentParameteriv");
     134    glGenerateMipmap = (_glGenerateMipmap) qt_gl_getProcAddressEXT(ctx, "glGenerateMipmap");
     135
     136    return glIsRenderbuffer != 0;
    78137#else
    79     Q_UNUSED(ctx);
    80138    return true;
    81139#endif
    82140}
    83141
     142#if !defined(QT_OPENGL_ES_2)
    84143bool qt_resolve_version_1_3_functions(QGLContext *ctx)
    85144{
     
    90149    glMultiTexCoord4f = (_glMultiTexCoord4f) ctx->getProcAddress(QLatin1String("glMultiTexCoord4f"));
    91150
    92 #if defined(QT_OPENGL_ES_2)
    93     return glMultiTexCoord4f;
    94 #else
    95151    glActiveTexture = (_glActiveTexture) ctx->getProcAddress(QLatin1String("glActiveTexture"));
    96152    return glMultiTexCoord4f && glActiveTexture;
    97 #endif
    98 }
    99 
     153}
     154#endif
     155
     156#if !defined(QT_OPENGL_ES_2)
    100157bool qt_resolve_stencil_face_extension(QGLContext *ctx)
    101158{
     
    108165    return glActiveStencilFaceEXT;
    109166}
    110 
     167#endif
     168
     169
     170#if !defined(QT_OPENGL_ES_2)
    111171bool qt_resolve_frag_program_extensions(QGLContext *ctx)
    112172{
     
    127187        && glProgramLocalParameter4fvARB;
    128188}
     189#endif
     190
    129191
    130192bool qt_resolve_buffer_extensions(QGLContext *ctx)
    131193{
    132     if (glBindBufferARB && glDeleteBuffersARB && glGenBuffersARB && glBufferDataARB
    133         && glMapBufferARB && glUnmapBufferARB)
    134         return true;
    135 
    136     glBindBufferARB = (_glBindBufferARB) ctx->getProcAddress(QLatin1String("glBindBufferARB"));
    137     glDeleteBuffersARB = (_glDeleteBuffersARB) ctx->getProcAddress(QLatin1String("glDeleteBuffersARB"));
    138     glGenBuffersARB = (_glGenBuffersARB) ctx->getProcAddress(QLatin1String("glGenBuffersARB"));
    139     glBufferDataARB = (_glBufferDataARB) ctx->getProcAddress(QLatin1String("glBufferDataARB"));
    140     glMapBufferARB = (_glMapBufferARB) ctx->getProcAddress(QLatin1String("glMapBufferARB"));
    141     glUnmapBufferARB = (_glUnmapBufferARB) ctx->getProcAddress(QLatin1String("glUnmapBufferARB"));
    142 
    143     return glBindBufferARB
    144         && glDeleteBuffersARB
    145         && glGenBuffersARB
    146         && glBufferDataARB
    147         && glMapBufferARB
    148         && glUnmapBufferARB;
     194    if (glMapBufferARB && glUnmapBufferARB
     195#if !defined(QT_OPENGL_ES_2)
     196        && glBindBuffer && glDeleteBuffers && glGenBuffers && glBufferData
     197#endif
     198        )
     199        return true;
     200
     201#if !defined(QT_OPENGL_ES_2)
     202    glBindBuffer = (_glBindBuffer) qt_gl_getProcAddressARB(ctx, "glBindBuffer");
     203    glDeleteBuffers = (_glDeleteBuffers) qt_gl_getProcAddressARB(ctx, "glDeleteBuffers");
     204    glGenBuffers = (_glGenBuffers) qt_gl_getProcAddressARB(ctx, "glGenBuffers");
     205    glBufferData = (_glBufferData) qt_gl_getProcAddressARB(ctx, "glBufferData");
     206#endif
     207    glMapBufferARB = (_glMapBufferARB) qt_gl_getProcAddressARB(ctx, "glMapBuffer");
     208    glUnmapBufferARB = (_glUnmapBufferARB) qt_gl_getProcAddressARB(ctx, "glUnmapBuffer");
     209
     210    return glMapBufferARB
     211        && glUnmapBufferARB
     212#if !defined(QT_OPENGL_ES_2)
     213        && glBindBuffer
     214        && glDeleteBuffers
     215        && glGenBuffers
     216        && glBufferData
     217#endif
     218        ;
    149219}
    150220
    151221bool qt_resolve_glsl_extensions(QGLContext *ctx)
    152222{
     223#if defined(QT_OPENGL_ES_2)
     224    // The GLSL shader functions are always present in OpenGL/ES 2.0.
     225    // The only exceptions are glGetProgramBinaryOES and glProgramBinaryOES.
     226    if (!QGLContextPrivate::extensionFuncs(ctx).qt_glslResolved) {
     227        glGetProgramBinaryOES = (_glGetProgramBinaryOES) ctx->getProcAddress(QLatin1String("glGetProgramBinaryOES"));
     228        glProgramBinaryOES = (_glProgramBinaryOES) ctx->getProcAddress(QLatin1String("glProgramBinaryOES"));
     229        QGLContextPrivate::extensionFuncs(ctx).qt_glslResolved = true;
     230    }
     231    return true;
     232#else
    153233    if (glCreateShader)
    154234        return true;
    155235
    156236    glCreateShader = (_glCreateShader) ctx->getProcAddress(QLatin1String("glCreateShader"));
    157     glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSource"));
    158     glCompileShader = (_glCompileShader) ctx->getProcAddress(QLatin1String("glCompileShader"));
    159     glDeleteShader = (_glDeleteShader) ctx->getProcAddress(QLatin1String("glDeleteShader"));
    160 
    161     glCreateProgram = (_glCreateProgram) ctx->getProcAddress(QLatin1String("glCreateProgram"));
    162     glAttachShader = (_glAttachShader) ctx->getProcAddress(QLatin1String("glAttachShader"));
    163     glDetachShader = (_glDetachShader) ctx->getProcAddress(QLatin1String("glDetachShader"));
    164     glLinkProgram = (_glLinkProgram) ctx->getProcAddress(QLatin1String("glLinkProgram"));
    165     glUseProgram = (_glUseProgram) ctx->getProcAddress(QLatin1String("glUseProgram"));
    166     glDeleteProgram = (_glDeleteProgram) ctx->getProcAddress(QLatin1String("glDeleteProgram"));
    167 
    168     glGetShaderInfoLog = (_glGetShaderInfoLog) ctx->getProcAddress(QLatin1String("glGetShaderInfoLog"));
    169     glGetShaderiv = (_glGetShaderiv) ctx->getProcAddress(QLatin1String("glGetShaderiv"));
    170     glGetProgramiv = (_glGetProgramiv) ctx->getProcAddress(QLatin1String("glGetProgramiv"));
    171 
    172     glGetUniformLocation = (_glGetUniformLocation) ctx->getProcAddress(QLatin1String("glGetUniformLocation"));
    173     glUniform4fv = (_glUniform4fv) ctx->getProcAddress(QLatin1String("glUniform4fv"));
    174     glUniform3fv = (_glUniform3fv) ctx->getProcAddress(QLatin1String("glUniform3fv"));
    175     glUniform2fv = (_glUniform2fv) ctx->getProcAddress(QLatin1String("glUniform2fv"));
    176     glUniform1fv = (_glUniform1fv) ctx->getProcAddress(QLatin1String("glUniform1fv"));
    177     glUniform1i = (_glUniform1i) ctx->getProcAddress(QLatin1String("glUniform1i"));
    178 
    179     return glCreateShader && glShaderSource && glCompileShader && glDeleteProgram &&
    180         glCreateProgram && glAttachShader && glDetachShader && glLinkProgram && glUseProgram &&
    181         glDeleteProgram && glGetShaderInfoLog && glGetShaderiv && glGetProgramiv && glGetUniformLocation &&
    182         glUniform1i && glUniform1fv && glUniform2fv && glUniform3fv && glUniform4fv;
    183 }
     237    if (glCreateShader) {
     238        glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSource"));
     239        glShaderBinary = (_glShaderBinary) ctx->getProcAddress(QLatin1String("glShaderBinary"));
     240        glCompileShader = (_glCompileShader) ctx->getProcAddress(QLatin1String("glCompileShader"));
     241        glDeleteShader = (_glDeleteShader) ctx->getProcAddress(QLatin1String("glDeleteShader"));
     242        glIsShader = (_glIsShader) ctx->getProcAddress(QLatin1String("glIsShader"));
     243
     244        glCreateProgram = (_glCreateProgram) ctx->getProcAddress(QLatin1String("glCreateProgram"));
     245        glAttachShader = (_glAttachShader) ctx->getProcAddress(QLatin1String("glAttachShader"));
     246        glDetachShader = (_glDetachShader) ctx->getProcAddress(QLatin1String("glDetachShader"));
     247        glLinkProgram = (_glLinkProgram) ctx->getProcAddress(QLatin1String("glLinkProgram"));
     248        glUseProgram = (_glUseProgram) ctx->getProcAddress(QLatin1String("glUseProgram"));
     249        glDeleteProgram = (_glDeleteProgram) ctx->getProcAddress(QLatin1String("glDeleteProgram"));
     250        glIsProgram = (_glIsProgram) ctx->getProcAddress(QLatin1String("glIsProgram"));
     251
     252        glGetShaderInfoLog = (_glGetShaderInfoLog) ctx->getProcAddress(QLatin1String("glGetShaderInfoLog"));
     253        glGetShaderiv = (_glGetShaderiv) ctx->getProcAddress(QLatin1String("glGetShaderiv"));
     254        glGetShaderSource = (_glGetShaderSource) ctx->getProcAddress(QLatin1String("glGetShaderSource"));
     255        glGetProgramiv = (_glGetProgramiv) ctx->getProcAddress(QLatin1String("glGetProgramiv"));
     256        glGetProgramInfoLog = (_glGetProgramInfoLog) ctx->getProcAddress(QLatin1String("glGetProgramInfoLog"));
     257
     258        glGetUniformLocation = (_glGetUniformLocation) ctx->getProcAddress(QLatin1String("glGetUniformLocation"));
     259        glUniform4fv = (_glUniform4fv) ctx->getProcAddress(QLatin1String("glUniform4fv"));
     260        glUniform3fv = (_glUniform3fv) ctx->getProcAddress(QLatin1String("glUniform3fv"));
     261        glUniform2fv = (_glUniform2fv) ctx->getProcAddress(QLatin1String("glUniform2fv"));
     262        glUniform1fv = (_glUniform1fv) ctx->getProcAddress(QLatin1String("glUniform1fv"));
     263        glUniform1i = (_glUniform1i) ctx->getProcAddress(QLatin1String("glUniform1i"));
     264        glUniform1iv = (_glUniform1iv) ctx->getProcAddress(QLatin1String("glUniform1iv"));
     265        glUniformMatrix2fv = (_glUniformMatrix2fv) ctx->getProcAddress(QLatin1String("glUniformMatrix2fv"));
     266        glUniformMatrix3fv = (_glUniformMatrix3fv) ctx->getProcAddress(QLatin1String("glUniformMatrix3fv"));
     267        glUniformMatrix4fv = (_glUniformMatrix4fv) ctx->getProcAddress(QLatin1String("glUniformMatrix4fv"));
     268        glUniformMatrix2x3fv = (_glUniformMatrix2x3fv) ctx->getProcAddress(QLatin1String("glUniformMatrix2x3fv"));
     269        glUniformMatrix2x4fv = (_glUniformMatrix2x4fv) ctx->getProcAddress(QLatin1String("glUniformMatrix2x4fv"));
     270        glUniformMatrix3x2fv = (_glUniformMatrix3x2fv) ctx->getProcAddress(QLatin1String("glUniformMatrix3x2fv"));
     271        glUniformMatrix3x4fv = (_glUniformMatrix3x4fv) ctx->getProcAddress(QLatin1String("glUniformMatrix3x4fv"));
     272        glUniformMatrix4x2fv = (_glUniformMatrix4x2fv) ctx->getProcAddress(QLatin1String("glUniformMatrix4x2fv"));
     273        glUniformMatrix4x3fv = (_glUniformMatrix4x3fv) ctx->getProcAddress(QLatin1String("glUniformMatrix4x3fv"));
     274
     275        glBindAttribLocation = (_glBindAttribLocation) ctx->getProcAddress(QLatin1String("glBindAttribLocation"));
     276        glGetAttribLocation = (_glGetAttribLocation) ctx->getProcAddress(QLatin1String("glGetAttribLocation"));
     277        glVertexAttrib1fv = (_glVertexAttrib1fv) ctx->getProcAddress(QLatin1String("glVertexAttrib1fv"));
     278        glVertexAttrib2fv = (_glVertexAttrib2fv) ctx->getProcAddress(QLatin1String("glVertexAttrib2fv"));
     279        glVertexAttrib3fv = (_glVertexAttrib3fv) ctx->getProcAddress(QLatin1String("glVertexAttrib3fv"));
     280        glVertexAttrib4fv = (_glVertexAttrib4fv) ctx->getProcAddress(QLatin1String("glVertexAttrib4fv"));
     281        glVertexAttribPointer = (_glVertexAttribPointer) ctx->getProcAddress(QLatin1String("glVertexAttribPointer"));
     282        glDisableVertexAttribArray = (_glDisableVertexAttribArray) ctx->getProcAddress(QLatin1String("glDisableVertexAttribArray"));
     283        glEnableVertexAttribArray = (_glEnableVertexAttribArray) ctx->getProcAddress(QLatin1String("glEnableVertexAttribArray"));
     284
     285    } else {
     286        // We may not have the standard shader functions, but we might
     287        // have the older ARB functions instead.
     288        glCreateShader = (_glCreateShader) ctx->getProcAddress(QLatin1String("glCreateShaderObjectARB"));
     289        glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSourceARB"));
     290        glShaderBinary = (_glShaderBinary) ctx->getProcAddress(QLatin1String("glShaderBinaryARB"));
     291        glCompileShader = (_glCompileShader) ctx->getProcAddress(QLatin1String("glCompileShaderARB"));
     292        glDeleteShader = (_glDeleteShader) ctx->getProcAddress(QLatin1String("glDeleteObjectARB"));
     293        glIsShader = 0;
     294
     295        glCreateProgram = (_glCreateProgram) ctx->getProcAddress(QLatin1String("glCreateProgramObjectARB"));
     296        glAttachShader = (_glAttachShader) ctx->getProcAddress(QLatin1String("glAttachObjectARB"));
     297        glDetachShader = (_glDetachShader) ctx->getProcAddress(QLatin1String("glDetachObjectARB"));
     298        glLinkProgram = (_glLinkProgram) ctx->getProcAddress(QLatin1String("glLinkProgramARB"));
     299        glUseProgram = (_glUseProgram) ctx->getProcAddress(QLatin1String("glUseProgramObjectARB"));
     300        glDeleteProgram = (_glDeleteProgram) ctx->getProcAddress(QLatin1String("glDeleteObjectARB"));
     301        glIsProgram = 0;
     302
     303        glGetShaderInfoLog = (_glGetShaderInfoLog) ctx->getProcAddress(QLatin1String("glGetInfoLogARB"));
     304        glGetShaderiv = (_glGetShaderiv) ctx->getProcAddress(QLatin1String("glGetObjectParameterivARB"));
     305        glGetShaderSource = (_glGetShaderSource) ctx->getProcAddress(QLatin1String("glGetShaderSourceARB"));
     306        glGetProgramiv = (_glGetProgramiv) ctx->getProcAddress(QLatin1String("glGetObjectParameterivARB"));
     307        glGetProgramInfoLog = (_glGetProgramInfoLog) ctx->getProcAddress(QLatin1String("glGetInfoLogARB"));
     308
     309        glGetUniformLocation = (_glGetUniformLocation) ctx->getProcAddress(QLatin1String("glGetUniformLocationARB"));
     310        glUniform4fv = (_glUniform4fv) ctx->getProcAddress(QLatin1String("glUniform4fvARB"));
     311        glUniform3fv = (_glUniform3fv) ctx->getProcAddress(QLatin1String("glUniform3fvARB"));
     312        glUniform2fv = (_glUniform2fv) ctx->getProcAddress(QLatin1String("glUniform2fvARB"));
     313        glUniform1fv = (_glUniform1fv) ctx->getProcAddress(QLatin1String("glUniform1fvARB"));
     314        glUniform1i = (_glUniform1i) ctx->getProcAddress(QLatin1String("glUniform1iARB"));
     315        glUniform1iv = (_glUniform1iv) ctx->getProcAddress(QLatin1String("glUniform1ivARB"));
     316        glUniformMatrix2fv = (_glUniformMatrix2fv) ctx->getProcAddress(QLatin1String("glUniformMatrix2fvARB"));
     317        glUniformMatrix3fv = (_glUniformMatrix3fv) ctx->getProcAddress(QLatin1String("glUniformMatrix3fvARB"));
     318        glUniformMatrix4fv = (_glUniformMatrix4fv) ctx->getProcAddress(QLatin1String("glUniformMatrix4fvARB"));
     319        glUniformMatrix2x3fv = (_glUniformMatrix2x3fv) ctx->getProcAddress(QLatin1String("glUniformMatrix2x3fvARB"));
     320        glUniformMatrix2x4fv = (_glUniformMatrix2x4fv) ctx->getProcAddress(QLatin1String("glUniformMatrix2x4fvARB"));
     321        glUniformMatrix3x2fv = (_glUniformMatrix3x2fv) ctx->getProcAddress(QLatin1String("glUniformMatrix3x2fvARB"));
     322        glUniformMatrix3x4fv = (_glUniformMatrix3x4fv) ctx->getProcAddress(QLatin1String("glUniformMatrix3x4fvARB"));
     323        glUniformMatrix4x2fv = (_glUniformMatrix4x2fv) ctx->getProcAddress(QLatin1String("glUniformMatrix4x2fvARB"));
     324        glUniformMatrix4x3fv = (_glUniformMatrix4x3fv) ctx->getProcAddress(QLatin1String("glUniformMatrix4x3fvARB"));
     325
     326        glBindAttribLocation = (_glBindAttribLocation) ctx->getProcAddress(QLatin1String("glBindAttribLocationARB"));
     327        glGetAttribLocation = (_glGetAttribLocation) ctx->getProcAddress(QLatin1String("glGetAttribLocationARB"));
     328        glVertexAttrib1fv = (_glVertexAttrib1fv) ctx->getProcAddress(QLatin1String("glVertexAttrib1fvARB"));
     329        glVertexAttrib2fv = (_glVertexAttrib2fv) ctx->getProcAddress(QLatin1String("glVertexAttrib2fvARB"));
     330        glVertexAttrib3fv = (_glVertexAttrib3fv) ctx->getProcAddress(QLatin1String("glVertexAttrib3fvARB"));
     331        glVertexAttrib4fv = (_glVertexAttrib4fv) ctx->getProcAddress(QLatin1String("glVertexAttrib4fvARB"));
     332        glVertexAttribPointer = (_glVertexAttribPointer) ctx->getProcAddress(QLatin1String("glVertexAttribPointerARB"));
     333        glDisableVertexAttribArray = (_glDisableVertexAttribArray) ctx->getProcAddress(QLatin1String("glDisableVertexAttribArrayARB"));
     334        glEnableVertexAttribArray = (_glEnableVertexAttribArray) ctx->getProcAddress(QLatin1String("glEnableVertexAttribArrayARB"));
     335    }
     336
     337    // Note: glShaderBinary(), glIsShader(), glIsProgram(), and
     338    // glUniformMatrixNxMfv() are optional, but all other functions
     339    // are required.
     340
     341    return glCreateShader &&
     342        glShaderSource &&
     343        glCompileShader &&
     344        glDeleteProgram &&
     345        glCreateProgram &&
     346        glAttachShader &&
     347        glDetachShader &&
     348        glLinkProgram &&
     349        glUseProgram &&
     350        glDeleteProgram &&
     351        glGetShaderInfoLog &&
     352        glGetShaderiv &&
     353        glGetShaderSource &&
     354        glGetProgramiv &&
     355        glGetProgramInfoLog &&
     356        glGetUniformLocation &&
     357        glUniform1fv &&
     358        glUniform2fv &&
     359        glUniform3fv &&
     360        glUniform4fv &&
     361        glUniform1i &&
     362        glUniform1iv &&
     363        glUniformMatrix2fv &&
     364        glUniformMatrix3fv &&
     365        glUniformMatrix4fv &&
     366        glBindAttribLocation &&
     367        glGetAttribLocation &&
     368        glVertexAttrib1fv &&
     369        glVertexAttrib2fv &&
     370        glVertexAttrib3fv &&
     371        glVertexAttrib4fv &&
     372        glVertexAttribPointer &&
     373        glDisableVertexAttribArray &&
     374        glEnableVertexAttribArray;
     375#endif
     376}
     377
     378#if !defined(QT_OPENGL_ES_2)
     379bool qt_resolve_version_2_0_functions(QGLContext *ctx)
     380{
     381    bool gl2supported = true;
     382    if (!qt_resolve_glsl_extensions(ctx))
     383        gl2supported = false;
     384
     385    if (!qt_resolve_version_1_3_functions(ctx))
     386        gl2supported = false;
     387
     388    if (!qt_resolve_framebufferobject_extensions(ctx))
     389        gl2supported = false;
     390
     391    if (glStencilOpSeparate)
     392        return gl2supported;
     393
     394    glBlendColor = (_glBlendColor) ctx->getProcAddress(QLatin1String("glBlendColor"));
     395    glStencilOpSeparate = (_glStencilOpSeparate) ctx->getProcAddress(QLatin1String("glStencilOpSeparate"));
     396    if (!glBlendColor || !glStencilOpSeparate)
     397        gl2supported = false;
     398
     399    return gl2supported;
     400}
     401#endif
     402
    184403
    185404QT_END_NAMESPACE
Note: See TracChangeset for help on using the changeset viewer.