diff options
Diffstat (limited to 'opengl/libs')
| -rw-r--r-- | opengl/libs/Android.mk | 9 | ||||
| -rw-r--r-- | opengl/libs/EGL/egl.cpp | 371 | ||||
| -rw-r--r-- | opengl/libs/EGL/getProcAddress.cpp | 122 | ||||
| -rw-r--r-- | opengl/libs/GLES2/gl2_api.in | 40 | ||||
| -rw-r--r-- | opengl/libs/GLES2/gl2ext_api.in | 97 | ||||
| -rw-r--r-- | opengl/libs/GLES_CM/gl_api.in | 2 | ||||
| -rw-r--r-- | opengl/libs/GLES_CM/glext_api.in | 110 | ||||
| -rw-r--r-- | opengl/libs/egl_impl.h | 1 | ||||
| -rw-r--r-- | opengl/libs/entries.in | 77 | ||||
| -rw-r--r-- | opengl/libs/hooks.h | 4 | 
10 files changed, 600 insertions, 233 deletions
| diff --git a/opengl/libs/Android.mk b/opengl/libs/Android.mk index 6b7020ff0a62..ae924cd6e5ba 100644 --- a/opengl/libs/Android.mk +++ b/opengl/libs/Android.mk @@ -6,10 +6,11 @@ LOCAL_PATH:= $(call my-dir)  include $(CLEAR_VARS) -LOCAL_SRC_FILES:= 	\ -	EGL/egl.cpp 	\ -	EGL/hooks.cpp 	\ -	EGL/Loader.cpp 	\ +LOCAL_SRC_FILES:= 	       \ +	EGL/egl.cpp 	       \ +	EGL/getProcAddress.cpp.arm \ +	EGL/hooks.cpp 	       \ +	EGL/Loader.cpp 	       \  #  LOCAL_SHARED_LIBRARIES += libcutils libutils diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp index 89b3e1f2abca..df21358dc784 100644 --- a/opengl/libs/EGL/egl.cpp +++ b/opengl/libs/EGL/egl.cpp @@ -37,12 +37,13 @@  #include <cutils/memory.h>  #include <utils/SortedVector.h> +#include <utils/KeyedVector.h> +#include <utils/String8.h>  #include "hooks.h"  #include "egl_impl.h"  #include "Loader.h" -#define MAKE_CONFIG(_impl, _index)  ((EGLConfig)(((_impl)<<24) | (_index)))  #define setError(_e, _r) setErrorEtc(__FUNCTION__, __LINE__, _e, _r)  // ---------------------------------------------------------------------------- @@ -60,7 +61,6 @@ static char const * const gExtensionString  =          "EGL_KHR_image_pixmap "          "EGL_ANDROID_image_native_buffer "          "EGL_ANDROID_swap_rectangle " -        "EGL_ANDROID_get_render_buffer "          ;  // ---------------------------------------------------------------------------- @@ -143,6 +143,22 @@ public:  SortedVector<egl_object_t*> egl_object_t::sObjects;  Mutex egl_object_t::sLock; + +struct egl_config_t { +    egl_config_t() {} +    egl_config_t(int impl, EGLConfig config) +        : impl(impl), config(config), configId(0), implConfigId(0) { } +    int         impl;           // the implementation this config is for +    EGLConfig   config;         // the implementation's EGLConfig +    EGLint      configId;       // our CONFIG_ID +    EGLint      implConfigId;   // the implementation's CONFIG_ID +    inline bool operator < (const egl_config_t& rhs) const { +        if (impl < rhs.impl) return true; +        if (impl > rhs.impl) return false; +        return config < rhs.config; +    } +}; +  struct egl_display_t {      enum { NOT_INITIALIZED, INITIALIZED, TERMINATED }; @@ -163,13 +179,14 @@ struct egl_display_t {          strings_t   queryString;      }; -    uint32_t    magic; -    DisplayImpl disp[IMPL_NUM_IMPLEMENTATIONS]; -    EGLint      numTotalConfigs; -    uint32_t    refs; -    Mutex       lock; +    uint32_t        magic; +    DisplayImpl     disp[IMPL_NUM_IMPLEMENTATIONS]; +    EGLint          numTotalConfigs; +    egl_config_t*   configs; +    uint32_t        refs; +    Mutex           lock; -    egl_display_t() : magic('_dpy'), numTotalConfigs(0) { } +    egl_display_t() : magic('_dpy'), numTotalConfigs(0), configs(0) { }      ~egl_display_t() { magic = 0; }      inline bool isValid() const { return magic == '_dpy'; }      inline bool isAlive() const { return isValid(); } @@ -179,14 +196,15 @@ struct egl_surface_t : public egl_object_t  {      typedef egl_object_t::LocalRef<egl_surface_t, EGLSurface> Ref; -    egl_surface_t(EGLDisplay dpy, EGLSurface surface, +    egl_surface_t(EGLDisplay dpy, EGLSurface surface, EGLConfig config,              int impl, egl_connection_t const* cnx)  -    : dpy(dpy), surface(surface), impl(impl), cnx(cnx) { +    : dpy(dpy), surface(surface), config(config), impl(impl), cnx(cnx) {      }      ~egl_surface_t() {      }      EGLDisplay                  dpy;      EGLSurface                  surface; +    EGLConfig                   config;      int                         impl;      egl_connection_t const*     cnx;  }; @@ -195,7 +213,7 @@ struct egl_context_t : public egl_object_t  {      typedef egl_object_t::LocalRef<egl_context_t, EGLContext> Ref; -    egl_context_t(EGLDisplay dpy, EGLContext context, +    egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config,              int impl, egl_connection_t const* cnx, int version)       : dpy(dpy), context(context), read(0), draw(0), impl(impl), cnx(cnx),        version(version) @@ -203,6 +221,7 @@ struct egl_context_t : public egl_object_t      }      EGLDisplay                  dpy;      EGLContext                  context; +    EGLConfig                   config;      EGLSurface                  read;      EGLSurface                  draw;      int                         impl; @@ -220,7 +239,7 @@ struct egl_image_t : public egl_object_t          memset(images, 0, sizeof(images));      }      EGLDisplay dpy; -    EGLConfig context; +    EGLContext context;      EGLImageKHR images[IMPL_NUM_IMPLEMENTATIONS];  }; @@ -239,7 +258,7 @@ struct tls_t  // ---------------------------------------------------------------------------- -egl_connection_t gEGLImpl[IMPL_NUM_IMPLEMENTATIONS]; +static egl_connection_t gEGLImpl[IMPL_NUM_IMPLEMENTATIONS];  static egl_display_t gDisplay[NUM_DISPLAYS];  static pthread_mutex_t gThreadLocalStorageKeyMutex = PTHREAD_MUTEX_INITIALIZER;  static pthread_key_t gEGLThreadLocalStorageKey = -1; @@ -354,7 +373,7 @@ int binarySearch(  {      while (first <= last) {          int mid = (first + last) / 2; -        if (key > sortedArray[mid]) {  +        if (sortedArray[mid] < key) {              first = mid + 1;          } else if (key < sortedArray[mid]) {               last = mid - 1; @@ -365,26 +384,11 @@ int binarySearch(      return -1;  } -static EGLint configToUniqueId(egl_display_t const* dp, int i, int index)  -{ -    // NOTE: this mapping works only if we have no more than two EGLimpl -    return (i>0 ? dp->disp[0].numConfigs : 0) + index; -} - -static void uniqueIdToConfig(egl_display_t const* dp, EGLint configId, -        int& i, int& index)  -{ -    // NOTE: this mapping works only if we have no more than two EGLimpl -    size_t numConfigs = dp->disp[0].numConfigs; -    i = configId / numConfigs; -    index = configId % numConfigs; -} -  static int cmp_configs(const void* a, const void *b)  { -    EGLConfig c0 = *(EGLConfig const *)a; -    EGLConfig c1 = *(EGLConfig const *)b; -    return c0<c1 ? -1 : (c0>c1 ? 1 : 0); +    const egl_config_t& c0 = *(egl_config_t const *)a; +    const egl_config_t& c1 = *(egl_config_t const *)b; +    return c0<c1 ? -1 : (c1<c0 ? 1 : 0);  }  struct extention_map_t { @@ -403,11 +407,13 @@ static const extention_map_t gExtentionMap[] = {              (__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR },       { "eglSetSwapRectangleANDROID",               (__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID },  -    { "eglGetRenderBufferANDROID",  -            (__eglMustCastToProperFunctionPointerType)&eglGetRenderBufferANDROID },   }; -static extention_map_t gGLExtentionMap[MAX_NUMBER_OF_GL_EXTENSIONS]; +extern const __eglMustCastToProperFunctionPointerType gExtensionForwarders[MAX_NUMBER_OF_GL_EXTENSIONS]; + +// accesses protected by gInitDriverMutex +static DefaultKeyedVector<String8, __eglMustCastToProperFunctionPointerType> gGLExtentionMap; +static int gGLExtentionSlot = 0;  static void(*findProcAddress(const char* name,          const extention_map_t* map, size_t n))()  @@ -477,20 +483,15 @@ egl_image_t* get_image(EGLImageKHR image) {  static egl_connection_t* validate_display_config(          EGLDisplay dpy, EGLConfig config, -        egl_display_t const*& dp, int& impl, int& index) +        egl_display_t const*& dp)  {      dp = get_display(dpy);      if (!dp) return setError(EGL_BAD_DISPLAY, (egl_connection_t*)NULL); -    impl = uintptr_t(config)>>24; -    if (uint32_t(impl) >= IMPL_NUM_IMPLEMENTATIONS) { -        return setError(EGL_BAD_CONFIG, (egl_connection_t*)NULL); -    }  -    index = uintptr_t(config) & 0xFFFFFF; -    if (index >= dp->disp[impl].numConfigs) { +    if (intptr_t(config) >= dp->numTotalConfigs) {          return setError(EGL_BAD_CONFIG, (egl_connection_t*)NULL);      } -    egl_connection_t* const cnx = &gEGLImpl[impl]; +    egl_connection_t* const cnx = &gEGLImpl[dp->configs[intptr_t(config)].impl];      if (cnx->dso == 0) {          return setError(EGL_BAD_CONFIG, (egl_connection_t*)NULL);      } @@ -718,11 +719,6 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)                              dp->disp[i].dpy, dp->disp[i].config, n,                              &dp->disp[i].numConfigs))                      { -                        // sort the configurations so we can do binary searches -                        qsort(  dp->disp[i].config, -                                dp->disp[i].numConfigs, -                                sizeof(EGLConfig), cmp_configs); -                          dp->numTotalConfigs += n;                          res = EGL_TRUE;                      } @@ -732,6 +728,30 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)      }      if (res == EGL_TRUE) { +        dp->configs = new egl_config_t[ dp->numTotalConfigs ]; +        for (int i=0, k=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) { +            egl_connection_t* const cnx = &gEGLImpl[i]; +            if (cnx->dso && cnx->major>=0 && cnx->minor>=0) { +                for (int j=0 ; j<dp->disp[i].numConfigs ; j++) { +                    dp->configs[k].impl = i; +                    dp->configs[k].config = dp->disp[i].config[j]; +                    dp->configs[k].configId = k + 1; // CONFIG_ID start at 1 +                    // store the implementation's CONFIG_ID +                    cnx->egl.eglGetConfigAttrib( +                            dp->disp[i].dpy, +                            dp->disp[i].config[j], +                            EGL_CONFIG_ID, +                            &dp->configs[k].implConfigId); +                    k++; +                } +            } +        } + +        // sort our configurations so we can do binary-searches +        qsort(  dp->configs, +                dp->numTotalConfigs, +                sizeof(egl_config_t), cmp_configs); +          dp->refs++;          if (major != NULL) *major = VERSION_MAJOR;          if (minor != NULL) *minor = VERSION_MINOR; @@ -784,6 +804,7 @@ EGLBoolean eglTerminate(EGLDisplay dpy)      dp->refs--;      dp->numTotalConfigs = 0; +    delete [] dp->configs;      clearTLS();      return res;  } @@ -804,14 +825,13 @@ EGLBoolean eglGetConfigs(   EGLDisplay dpy,          *num_config = numConfigs;          return EGL_TRUE;      } +      GLint n = 0; -    for (int j=0 ; j<IMPL_NUM_IMPLEMENTATIONS ; j++) { -        for (int i=0 ; i<dp->disp[j].numConfigs && config_size ; i++) { -            *configs++ = MAKE_CONFIG(j, i); -            config_size--; -            n++; -        } -    }     +    for (intptr_t i=0 ; i<dp->numTotalConfigs && config_size ; i++) { +        *configs++ = EGLConfig(i); +        config_size--; +        n++; +    }      *num_config = n;      return EGL_TRUE; @@ -834,7 +854,7 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,      // It is unfortunate, but we need to remap the EGL_CONFIG_IDs,  -    // to do  this, we have to go through the attrib_list array once +    // to do this, we have to go through the attrib_list array once      // to figure out both its size and if it contains an EGL_CONFIG_ID      // key. If so, the full array is copied and patched.      // NOTE: we assume that there can be only one occurrence @@ -843,10 +863,12 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,      EGLint patch_index = -1;      GLint attr;      size_t size = 0; -    while ((attr=attrib_list[size]) != EGL_NONE) { -        if (attr == EGL_CONFIG_ID) -            patch_index = size; -        size += 2; +    if (attrib_list) { +        while ((attr=attrib_list[size]) != EGL_NONE) { +            if (attr == EGL_CONFIG_ID) +                patch_index = size; +            size += 2; +        }      }      if (patch_index >= 0) {          size += 2; // we need copy the sentinel as well @@ -856,16 +878,20 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,          memcpy(new_list, attrib_list, size*sizeof(EGLint));          // patch the requested EGL_CONFIG_ID -        int i, index; +        bool found = false; +        EGLConfig ourConfig(0);          EGLint& configId(new_list[patch_index+1]); -        uniqueIdToConfig(dp, configId, i, index); -         -        egl_connection_t* const cnx = &gEGLImpl[i]; -        if (cnx->dso) { -            cnx->egl.eglGetConfigAttrib( -                    dp->disp[i].dpy, dp->disp[i].config[index],  -                    EGL_CONFIG_ID, &configId); +        for (intptr_t i=0 ; i<dp->numTotalConfigs ; i++) { +            if (dp->configs[i].configId == configId) { +                ourConfig = EGLConfig(i); +                configId = dp->configs[i].implConfigId; +                found = true; +                break; +            } +        } +        egl_connection_t* const cnx = &gEGLImpl[dp->configs[intptr_t(ourConfig)].impl]; +        if (found && cnx->dso) {              // and switch to the new list              attrib_list = const_cast<const EGLint *>(new_list); @@ -878,12 +904,13 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,              // which one.              res = cnx->egl.eglChooseConfig( -                    dp->disp[i].dpy, attrib_list, configs, config_size, &n); +                    dp->disp[ dp->configs[intptr_t(ourConfig)].impl ].dpy, +                    attrib_list, configs, config_size, &n);              if (res && n>0) {                  // n has to be 0 or 1, by construction, and we already know                  // which config it will return (since there can be only one).                  if (configs) { -                    configs[0] = MAKE_CONFIG(i, index); +                    configs[0] = ourConfig;                  }                  *num_config = 1;              } @@ -893,6 +920,7 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,          return res;      } +      for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {          egl_connection_t* const cnx = &gEGLImpl[i];          if (cnx->dso) { @@ -900,15 +928,14 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,                      dp->disp[i].dpy, attrib_list, configs, config_size, &n)) {                  if (configs) {                      // now we need to convert these client EGLConfig to our -                    // internal EGLConfig format. This is done in O(n log n). +                    // internal EGLConfig format. +                    // This is done in O(n Log(n)) time.                      for (int j=0 ; j<n ; j++) { -                        int index = binarySearch<EGLConfig>( -                                dp->disp[i].config, 0, -                                dp->disp[i].numConfigs-1, configs[j]); +                        egl_config_t key(i, configs[j]); +                        intptr_t index = binarySearch<egl_config_t>( +                                dp->configs, 0, dp->numTotalConfigs, key);                          if (index >= 0) { -                            if (configs) { -                                configs[j] = MAKE_CONFIG(i, index); -                            } +                            configs[j] = EGLConfig(index);                          } else {                              return setError(EGL_BAD_CONFIG, EGL_FALSE);                          } @@ -928,18 +955,16 @@ EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,          EGLint attribute, EGLint *value)  {      egl_display_t const* dp = 0; -    int i=0, index=0; -    egl_connection_t* cnx = validate_display_config(dpy, config, dp, i, index); +    egl_connection_t* cnx = validate_display_config(dpy, config, dp);      if (!cnx) return EGL_FALSE;      if (attribute == EGL_CONFIG_ID) { -        // EGL_CONFIG_IDs must be unique, just use the order of the selected -        // EGLConfig. -        *value = configToUniqueId(dp, i, index); +        *value = dp->configs[intptr_t(config)].configId;          return EGL_TRUE;      }      return cnx->egl.eglGetConfigAttrib( -            dp->disp[i].dpy, dp->disp[i].config[index], attribute, value); +            dp->disp[ dp->configs[intptr_t(config)].impl ].dpy, +            dp->configs[intptr_t(config)].config, attribute, value);  }  // ---------------------------------------------------------------------------- @@ -951,13 +976,14 @@ EGLSurface eglCreateWindowSurface(  EGLDisplay dpy, EGLConfig config,                                      const EGLint *attrib_list)  {      egl_display_t const* dp = 0; -    int i=0, index=0; -    egl_connection_t* cnx = validate_display_config(dpy, config, dp, i, index); +    egl_connection_t* cnx = validate_display_config(dpy, config, dp);      if (cnx) {          EGLSurface surface = cnx->egl.eglCreateWindowSurface( -                dp->disp[i].dpy, dp->disp[i].config[index], window, attrib_list);        +                dp->disp[ dp->configs[intptr_t(config)].impl ].dpy, +                dp->configs[intptr_t(config)].config, window, attrib_list);          if (surface != EGL_NO_SURFACE) { -            egl_surface_t* s = new egl_surface_t(dpy, surface, i, cnx); +            egl_surface_t* s = new egl_surface_t(dpy, surface, config, +                    dp->configs[intptr_t(config)].impl, cnx);              return s;          }      } @@ -969,13 +995,14 @@ EGLSurface eglCreatePixmapSurface(  EGLDisplay dpy, EGLConfig config,                                      const EGLint *attrib_list)  {      egl_display_t const* dp = 0; -    int i=0, index=0; -    egl_connection_t* cnx = validate_display_config(dpy, config, dp, i, index); +    egl_connection_t* cnx = validate_display_config(dpy, config, dp);      if (cnx) {          EGLSurface surface = cnx->egl.eglCreatePixmapSurface( -                dp->disp[i].dpy, dp->disp[i].config[index], pixmap, attrib_list); +                dp->disp[ dp->configs[intptr_t(config)].impl ].dpy, +                dp->configs[intptr_t(config)].config, pixmap, attrib_list);          if (surface != EGL_NO_SURFACE) { -            egl_surface_t* s = new egl_surface_t(dpy, surface, i, cnx); +            egl_surface_t* s = new egl_surface_t(dpy, surface, config, +                    dp->configs[intptr_t(config)].impl, cnx);              return s;          }      } @@ -986,13 +1013,14 @@ EGLSurface eglCreatePbufferSurface( EGLDisplay dpy, EGLConfig config,                                      const EGLint *attrib_list)  {      egl_display_t const* dp = 0; -    int i=0, index=0; -    egl_connection_t* cnx = validate_display_config(dpy, config, dp, i, index); +    egl_connection_t* cnx = validate_display_config(dpy, config, dp);      if (cnx) {          EGLSurface surface = cnx->egl.eglCreatePbufferSurface( -                dp->disp[i].dpy, dp->disp[i].config[index], attrib_list); +                dp->disp[ dp->configs[intptr_t(config)].impl ].dpy, +                dp->configs[intptr_t(config)].config, attrib_list);          if (surface != EGL_NO_SURFACE) { -            egl_surface_t* s = new egl_surface_t(dpy, surface, i, cnx); +            egl_surface_t* s = new egl_surface_t(dpy, surface, config, +                    dp->configs[intptr_t(config)].impl, cnx);              return s;          }      } @@ -1028,23 +1056,35 @@ EGLBoolean eglQuerySurface( EGLDisplay dpy, EGLSurface surface,      egl_display_t const * const dp = get_display(dpy);      egl_surface_t const * const s = get_surface(surface); -    return s->cnx->egl.eglQuerySurface( -            dp->disp[s->impl].dpy, s->surface, attribute, value); +    EGLBoolean result(EGL_TRUE); +    if (attribute == EGL_CONFIG_ID) { +        // We need to remap EGL_CONFIG_IDs +        *value = dp->configs[intptr_t(s->config)].configId; +    } else { +        result = s->cnx->egl.eglQuerySurface( +                dp->disp[s->impl].dpy, s->surface, attribute, value); +    } + +    return result;  }  // ---------------------------------------------------------------------------- -// contextes +// Contexts  // ----------------------------------------------------------------------------  EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config,                              EGLContext share_list, const EGLint *attrib_list)  {      egl_display_t const* dp = 0; -    int i=0, index=0; -    egl_connection_t* cnx = validate_display_config(dpy, config, dp, i, index); +    egl_connection_t* cnx = validate_display_config(dpy, config, dp);      if (cnx) { +        if (share_list != EGL_NO_CONTEXT) { +            egl_context_t* const c = get_context(share_list); +            share_list = c->context; +        }          EGLContext context = cnx->egl.eglCreateContext( -                dp->disp[i].dpy, dp->disp[i].config[index], +                dp->disp[ dp->configs[intptr_t(config)].impl ].dpy, +                dp->configs[intptr_t(config)].config,                  share_list, attrib_list);          if (context != EGL_NO_CONTEXT) {              // figure out if it's a GLESv1 or GLESv2 @@ -1062,7 +1102,8 @@ EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config,                      }                  };              } -            egl_context_t* c = new egl_context_t(dpy, context, i, cnx, version); +            egl_context_t* c = new egl_context_t(dpy, context, config, +                    dp->configs[intptr_t(config)].impl, cnx, version);              return c;          }      } @@ -1207,8 +1248,16 @@ EGLBoolean eglQueryContext( EGLDisplay dpy, EGLContext ctx,      egl_display_t const * const dp = get_display(dpy);      egl_context_t * const c = get_context(ctx); -    return c->cnx->egl.eglQueryContext( -            dp->disp[c->impl].dpy, c->context, attribute, value); +    EGLBoolean result(EGL_TRUE); +    if (attribute == EGL_CONFIG_ID) { +        *value = dp->configs[intptr_t(c->config)].configId; +    } else { +        // We need to remap EGL_CONFIG_IDs +        result = c->cnx->egl.eglQueryContext( +                dp->disp[c->impl].dpy, c->context, attribute, value); +    } + +    return result;  }  EGLContext eglGetCurrentContext(void) @@ -1323,55 +1372,55 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)      addr = findProcAddress(procname, gExtentionMap, NELEM(gExtentionMap));      if (addr) return addr; -    return NULL; // TODO: finish implementation below +    // this protects accesses to gGLExtentionMap and gGLExtentionSlot +    pthread_mutex_lock(&gInitDriverMutex); -    addr = findProcAddress(procname, gGLExtentionMap, NELEM(gGLExtentionMap)); -    if (addr) return addr; -     -    addr = 0; -    int slot = -1; -    for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) { -        egl_connection_t* const cnx = &gEGLImpl[i]; -        if (cnx->dso) { -            if (cnx->egl.eglGetProcAddress) { -                addr = cnx->egl.eglGetProcAddress(procname); -                if (addr) { -                    if (slot == -1) { -                        slot = 0; // XXX: find free slot -                        if (slot == -1) { -                            addr = 0; -                            break; -                        } -                    } -                    //cnx->hooks->ext.extensions[slot] = addr; +        /* +         * Since eglGetProcAddress() is not associated to anything, it needs +         * to return a function pointer that "works" regardless of what +         * the current context is. +         * +         * For this reason, we return a "forwarder", a small stub that takes +         * care of calling the function associated with the context +         * currently bound. +         * +         * We first look for extensions we've already resolved, if we're seeing +         * this extension for the first time, we go through all our +         * implementations and call eglGetProcAddress() and record the +         * result in the appropriate implementation hooks and return the +         * address of the forwarder corresponding to that hook set. +         * +         */ + +        const String8 name(procname); +        addr = gGLExtentionMap.valueFor(name); +        const int slot = gGLExtentionSlot; + +        LOGE_IF(slot >= MAX_NUMBER_OF_GL_EXTENSIONS, +                "no more slots for eglGetProcAddress(\"%s\")", +                procname); + +        if (!addr && (slot < MAX_NUMBER_OF_GL_EXTENSIONS)) { +            bool found = false; +            for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) { +                egl_connection_t* const cnx = &gEGLImpl[i]; +                if (cnx->dso && cnx->egl.eglGetProcAddress) { +                    found = true; +                    // Extensions are independent of the bound context +                    cnx->hooks[GLESv1_INDEX]->ext.extensions[slot] = +                    cnx->hooks[GLESv2_INDEX]->ext.extensions[slot] = +                            cnx->egl.eglGetProcAddress(procname);                  }              } +            if (found) { +                addr = gExtensionForwarders[slot]; +                gGLExtentionMap.add(name, addr); +                gGLExtentionSlot++; +            }          } -    } -     -    if (slot >= 0) { -        addr = 0; // XXX: address of stub 'slot' -        gGLExtentionMap[slot].name = strdup(procname); -        gGLExtentionMap[slot].address = addr; -    } -     -    return addr; -     -    /* -     *  TODO: For OpenGL ES extensions, we must generate a stub -     *  that looks like -     *      mov     r12, #0xFFFF0FFF -     *      ldr     r12, [r12, #-15] -     *      ldr     r12, [r12, #TLS_SLOT_OPENGL_API*4] -     *      mov     r12, [r12, #api_offset] -     *      ldrne   pc, r12 -     *      mov     pc, #unsupported_extension -     *  -     *  and write the address of the extension in *all* -     *  gl_hooks_t::gl_ext_t at offset "api_offset" from gl_hooks_t -     *  -     */ +    pthread_mutex_unlock(&gInitDriverMutex); +    return addr;  }  EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface draw) @@ -1580,13 +1629,13 @@ EGLSurface eglCreatePbufferFromClientBuffer(            EGLConfig config, const EGLint *attrib_list)  {      egl_display_t const* dp = 0; -    int i=0, index=0; -    egl_connection_t* cnx = validate_display_config(dpy, config, dp, i, index); +    egl_connection_t* cnx = validate_display_config(dpy, config, dp);      if (!cnx) return EGL_FALSE;      if (cnx->egl.eglCreatePbufferFromClientBuffer) {          return cnx->egl.eglCreatePbufferFromClientBuffer( -                dp->disp[i].dpy, buftype, buffer,  -                dp->disp[i].config[index], attrib_list); +                dp->disp[ dp->configs[intptr_t(config)].impl ].dpy, +                buftype, buffer, +                dp->configs[intptr_t(config)].config, attrib_list);      }      return setError(EGL_BAD_CONFIG, EGL_NO_SURFACE);  } @@ -1720,7 +1769,7 @@ EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img)           egl_connection_t* const cnx = &gEGLImpl[i];           if (image->images[i] != EGL_NO_IMAGE_KHR) {               if (cnx->dso) { -                 if (cnx->egl.eglCreateImageKHR) { +                 if (cnx->egl.eglDestroyImageKHR) {                       if (cnx->egl.eglDestroyImageKHR(                               dp->disp[i].dpy, image->images[i])) {                           success = true; @@ -1758,19 +1807,3 @@ EGLBoolean eglSetSwapRectangleANDROID(EGLDisplay dpy, EGLSurface draw,      }      return setError(EGL_BAD_DISPLAY, NULL);  } - -EGLClientBuffer eglGetRenderBufferANDROID(EGLDisplay dpy, EGLSurface draw) -{ -    SurfaceRef _s(draw); -    if (!_s.get()) return setError(EGL_BAD_SURFACE, (EGLClientBuffer*)0); - -    if (!validate_display_surface(dpy, draw)) -        return 0;     -    egl_display_t const * const dp = get_display(dpy); -    egl_surface_t const * const s = get_surface(draw); -    if (s->cnx->egl.eglGetRenderBufferANDROID) { -        return s->cnx->egl.eglGetRenderBufferANDROID( -                dp->disp[s->impl].dpy, s->surface); -    } -    return setError(EGL_BAD_DISPLAY, (EGLClientBuffer*)0); -} diff --git a/opengl/libs/EGL/getProcAddress.cpp b/opengl/libs/EGL/getProcAddress.cpp new file mode 100644 index 000000000000..dcf8735c634d --- /dev/null +++ b/opengl/libs/EGL/getProcAddress.cpp @@ -0,0 +1,122 @@ +/* + ** Copyright 2009, The Android Open Source Project + ** + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** + **     http://www.apache.org/licenses/LICENSE-2.0 + ** + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + */ + +#include <ctype.h> +#include <stdlib.h> +#include <errno.h> + +#include <cutils/log.h> + +#include "hooks.h" + +// ---------------------------------------------------------------------------- +namespace android { +// ---------------------------------------------------------------------------- + +#undef API_ENTRY +#undef CALL_GL_EXTENSION_API +#undef GL_EXTENSION +#undef GL_EXTENSION_NAME +#undef GL_EXTENSION_ARRAY +#undef GL_EXTENSION_LIST +#undef GET_TLS + +#if defined(__arm__) + +    #ifdef HAVE_ARM_TLS_REGISTER +        #define GET_TLS(reg) \ +            "mrc p15, 0, " #reg ", c13, c0, 3 \n" +    #else +        #define GET_TLS(reg) \ +            "mov   " #reg ", #0xFFFF0FFF      \n"  \ +            "ldr   " #reg ", [" #reg ", #-15] \n" +    #endif + +    #define API_ENTRY(_api) __attribute__((naked)) _api + +    #define CALL_GL_EXTENSION_API(_api)                         \ +         asm volatile(                                          \ +            GET_TLS(r12)                                        \ +            "ldr   r12, [r12, %[tls]] \n"                       \ +            "cmp   r12, #0            \n"                       \ +            "ldrne r12, [r12, %[api]] \n"                       \ +            "cmpne r12, #0            \n"                       \ +            "bxne  r12                \n"                       \ +            "bx    lr                 \n"                       \ +            :                                                   \ +            : [tls] "J"(TLS_SLOT_OPENGL_API*4),                 \ +              [api] "J"(__builtin_offsetof(gl_hooks_t,          \ +                                      ext.extensions[_api]))    \ +            :                                                   \ +            ); + +    #define GL_EXTENSION_NAME(_n)   __glExtFwd##_n + +    #define GL_EXTENSION(_n)                         \ +        void API_ENTRY(GL_EXTENSION_NAME(_n))() {    \ +            CALL_GL_EXTENSION_API(_n);               \ +        } + + +#else + +    #define GL_EXTENSION_NAME(_n) NULL + +    #define GL_EXTENSION(_n) + +    #warning "eglGetProcAddress() partially supported on this architecture" + +#endif + +#define GL_EXTENSION_LIST(name) \ +        name(0)   name(1)   name(2)   name(3)   \ +        name(4)   name(5)   name(6)   name(7)   \ +        name(8)   name(9)   name(10)  name(11)  \ +        name(12)  name(13)  name(14)  name(15)  \ +        name(16)  name(17)  name(18)  name(19)  \ +        name(20)  name(21)  name(22)  name(23)  \ +        name(24)  name(25)  name(26)  name(27)  \ +        name(28)  name(29)  name(30)  name(31)  \ +        name(32)  name(33)  name(34)  name(35)  \ +        name(36)  name(37)  name(38)  name(39)  \ +        name(40)  name(41)  name(42)  name(43)  \ +        name(44)  name(45)  name(46)  name(47)  \ +        name(48)  name(49)  name(50)  name(51)  \ +        name(52)  name(53)  name(54)  name(55)  \ +        name(56)  name(57)  name(58)  name(59)  \ +        name(60)  name(61)  name(62)  name(63) + + +GL_EXTENSION_LIST( GL_EXTENSION ) + +#define GL_EXTENSION_ARRAY(_n)  GL_EXTENSION_NAME(_n), + +extern const __eglMustCastToProperFunctionPointerType gExtensionForwarders[MAX_NUMBER_OF_GL_EXTENSIONS] = { +        GL_EXTENSION_LIST( GL_EXTENSION_ARRAY ) + }; + +#undef GET_TLS +#undef GL_EXTENSION_LIST +#undef GL_EXTENSION_ARRAY +#undef GL_EXTENSION_NAME +#undef GL_EXTENSION +#undef API_ENTRY +#undef CALL_GL_EXTENSION_API + +// ---------------------------------------------------------------------------- +}; // namespace android +// ---------------------------------------------------------------------------- + diff --git a/opengl/libs/GLES2/gl2_api.in b/opengl/libs/GLES2/gl2_api.in index 9c2e69aea0a3..5164450ba99f 100644 --- a/opengl/libs/GLES2/gl2_api.in +++ b/opengl/libs/GLES2/gl2_api.in @@ -4,7 +4,7 @@ void API_ENTRY(glActiveTexture)(GLenum texture) {  void API_ENTRY(glAttachShader)(GLuint program, GLuint shader) {      CALL_GL_API(glAttachShader, program, shader);  } -void API_ENTRY(glBindAttribLocation)(GLuint program, GLuint index, const char* name) { +void API_ENTRY(glBindAttribLocation)(GLuint program, GLuint index, const GLchar* name) {      CALL_GL_API(glBindAttribLocation, program, index, name);  }  void API_ENTRY(glBindBuffer)(GLenum target, GLuint buffer) { @@ -34,10 +34,10 @@ void API_ENTRY(glBlendFunc)(GLenum sfactor, GLenum dfactor) {  void API_ENTRY(glBlendFuncSeparate)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {      CALL_GL_API(glBlendFuncSeparate, srcRGB, dstRGB, srcAlpha, dstAlpha);  } -void API_ENTRY(glBufferData)(GLenum target, GLsizeiptr size, const void* data, GLenum usage) { +void API_ENTRY(glBufferData)(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) {      CALL_GL_API(glBufferData, target, size, data, usage);  } -void API_ENTRY(glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const void* data) { +void API_ENTRY(glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) {      CALL_GL_API(glBufferSubData, target, offset, size, data);  }  GLenum API_ENTRY(glCheckFramebufferStatus)(GLenum target) { @@ -61,10 +61,10 @@ void API_ENTRY(glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLbo  void API_ENTRY(glCompileShader)(GLuint shader) {      CALL_GL_API(glCompileShader, shader);  } -void API_ENTRY(glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) { +void API_ENTRY(glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) {      CALL_GL_API(glCompressedTexImage2D, target, level, internalformat, width, height, border, imageSize, data);  } -void API_ENTRY(glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) { +void API_ENTRY(glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) {      CALL_GL_API(glCompressedTexSubImage2D, target, level, xoffset, yoffset, width, height, format, imageSize, data);  }  void API_ENTRY(glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { @@ -121,7 +121,7 @@ void API_ENTRY(glDisableVertexAttribArray)(GLuint index) {  void API_ENTRY(glDrawArrays)(GLenum mode, GLint first, GLsizei count) {      CALL_GL_API(glDrawArrays, mode, first, count);  } -void API_ENTRY(glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void* indices) { +void API_ENTRY(glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) {      CALL_GL_API(glDrawElements, mode, count, type, indices);  }  void API_ENTRY(glEnable)(GLenum cap) { @@ -160,16 +160,16 @@ void API_ENTRY(glGenRenderbuffers)(GLsizei n, GLuint* renderbuffers) {  void API_ENTRY(glGenTextures)(GLsizei n, GLuint* textures) {      CALL_GL_API(glGenTextures, n, textures);  } -void API_ENTRY(glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) { +void API_ENTRY(glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) {      CALL_GL_API(glGetActiveAttrib, program, index, bufsize, length, size, type, name);  } -void API_ENTRY(glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) { +void API_ENTRY(glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) {      CALL_GL_API(glGetActiveUniform, program, index, bufsize, length, size, type, name);  }  void API_ENTRY(glGetAttachedShaders)(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) {      CALL_GL_API(glGetAttachedShaders, program, maxcount, count, shaders);  } -int API_ENTRY(glGetAttribLocation)(GLuint program, const char* name) { +int API_ENTRY(glGetAttribLocation)(GLuint program, const GLchar* name) {      CALL_GL_API_RETURN(glGetAttribLocation, program, name);  }  void API_ENTRY(glGetBooleanv)(GLenum pname, GLboolean* params) { @@ -193,7 +193,7 @@ void API_ENTRY(glGetIntegerv)(GLenum pname, GLint* params) {  void API_ENTRY(glGetProgramiv)(GLuint program, GLenum pname, GLint* params) {      CALL_GL_API(glGetProgramiv, program, pname, params);  } -void API_ENTRY(glGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) { +void API_ENTRY(glGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog) {      CALL_GL_API(glGetProgramInfoLog, program, bufsize, length, infolog);  }  void API_ENTRY(glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint* params) { @@ -202,13 +202,13 @@ void API_ENTRY(glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint*  void API_ENTRY(glGetShaderiv)(GLuint shader, GLenum pname, GLint* params) {      CALL_GL_API(glGetShaderiv, shader, pname, params);  } -void API_ENTRY(glGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) { +void API_ENTRY(glGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog) {      CALL_GL_API(glGetShaderInfoLog, shader, bufsize, length, infolog);  }  void API_ENTRY(glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) {      CALL_GL_API(glGetShaderPrecisionFormat, shadertype, precisiontype, range, precision);  } -void API_ENTRY(glGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) { +void API_ENTRY(glGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source) {      CALL_GL_API(glGetShaderSource, shader, bufsize, length, source);  }  const GLubyte* API_ENTRY(glGetString)(GLenum name) { @@ -226,7 +226,7 @@ void API_ENTRY(glGetUniformfv)(GLuint program, GLint location, GLfloat* params)  void API_ENTRY(glGetUniformiv)(GLuint program, GLint location, GLint* params) {      CALL_GL_API(glGetUniformiv, program, location, params);  } -int API_ENTRY(glGetUniformLocation)(GLuint program, const char* name) { +int API_ENTRY(glGetUniformLocation)(GLuint program, const GLchar* name) {      CALL_GL_API_RETURN(glGetUniformLocation, program, name);  }  void API_ENTRY(glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat* params) { @@ -235,7 +235,7 @@ void API_ENTRY(glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat* params)  void API_ENTRY(glGetVertexAttribiv)(GLuint index, GLenum pname, GLint* params) {      CALL_GL_API(glGetVertexAttribiv, index, pname, params);  } -void API_ENTRY(glGetVertexAttribPointerv)(GLuint index, GLenum pname, void** pointer) { +void API_ENTRY(glGetVertexAttribPointerv)(GLuint index, GLenum pname, GLvoid** pointer) {      CALL_GL_API(glGetVertexAttribPointerv, index, pname, pointer);  }  void API_ENTRY(glHint)(GLenum target, GLenum mode) { @@ -274,7 +274,7 @@ void API_ENTRY(glPixelStorei)(GLenum pname, GLint param) {  void API_ENTRY(glPolygonOffset)(GLfloat factor, GLfloat units) {      CALL_GL_API(glPolygonOffset, factor, units);  } -void API_ENTRY(glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) { +void API_ENTRY(glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) {      CALL_GL_API(glReadPixels, x, y, width, height, format, type, pixels);  }  void API_ENTRY(glReleaseShaderCompiler)(void) { @@ -289,10 +289,10 @@ void API_ENTRY(glSampleCoverage)(GLclampf value, GLboolean invert) {  void API_ENTRY(glScissor)(GLint x, GLint y, GLsizei width, GLsizei height) {      CALL_GL_API(glScissor, x, y, width, height);  } -void API_ENTRY(glShaderBinary)(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length) { +void API_ENTRY(glShaderBinary)(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length) {      CALL_GL_API(glShaderBinary, n, shaders, binaryformat, binary, length);  } -void API_ENTRY(glShaderSource)(GLuint shader, GLsizei count, const char** string, const GLint* length) { +void API_ENTRY(glShaderSource)(GLuint shader, GLsizei count, const GLchar** string, const GLint* length) {      CALL_GL_API(glShaderSource, shader, count, string, length);  }  void API_ENTRY(glStencilFunc)(GLenum func, GLint ref, GLuint mask) { @@ -313,7 +313,7 @@ void API_ENTRY(glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass) {  void API_ENTRY(glStencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {      CALL_GL_API(glStencilOpSeparate, face, fail, zfail, zpass);  } -void API_ENTRY(glTexImage2D)(GLenum target, GLint level, GLint internalformat,  GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) { +void API_ENTRY(glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) {      CALL_GL_API(glTexImage2D, target, level, internalformat, width, height, border, format, type, pixels);  }  void API_ENTRY(glTexParameterf)(GLenum target, GLenum pname, GLfloat param) { @@ -328,7 +328,7 @@ void API_ENTRY(glTexParameteri)(GLenum target, GLenum pname, GLint param) {  void API_ENTRY(glTexParameteriv)(GLenum target, GLenum pname, const GLint* params) {      CALL_GL_API(glTexParameteriv, target, pname, params);  } -void API_ENTRY(glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { +void API_ENTRY(glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) {      CALL_GL_API(glTexSubImage2D, target, level, xoffset, yoffset, width, height, format, type, pixels);  }  void API_ENTRY(glUniform1f)(GLint location, GLfloat x) { @@ -418,7 +418,7 @@ void API_ENTRY(glVertexAttrib4f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z, G  void API_ENTRY(glVertexAttrib4fv)(GLuint indx, const GLfloat* values) {      CALL_GL_API(glVertexAttrib4fv, indx, values);  } -void API_ENTRY(glVertexAttribPointer)(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) { +void API_ENTRY(glVertexAttribPointer)(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr) {      CALL_GL_API(glVertexAttribPointer, indx, size, type, normalized, stride, ptr);  }  void API_ENTRY(glViewport)(GLint x, GLint y, GLsizei width, GLsizei height) { diff --git a/opengl/libs/GLES2/gl2ext_api.in b/opengl/libs/GLES2/gl2ext_api.in index 6eeecb33dc19..e965625178ee 100644 --- a/opengl/libs/GLES2/gl2ext_api.in +++ b/opengl/libs/GLES2/gl2ext_api.in @@ -4,10 +4,10 @@ void API_ENTRY(__glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES imag  void API_ENTRY(__glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image) {      CALL_GL_API(glEGLImageTargetRenderbufferStorageOES, target, image);  } -void API_ENTRY(glGetProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary) { +void API_ENTRY(glGetProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary) {      CALL_GL_API(glGetProgramBinaryOES, program, bufSize, length, binaryFormat, binary);  } -void API_ENTRY(glProgramBinaryOES)(GLuint program, GLenum binaryFormat, const void *binary, GLint length) { +void API_ENTRY(glProgramBinaryOES)(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length) {      CALL_GL_API(glProgramBinaryOES, program, binaryFormat, binary, length);  }  void* API_ENTRY(glMapBufferOES)(GLenum target, GLenum access) { @@ -16,40 +16,52 @@ void* API_ENTRY(glMapBufferOES)(GLenum target, GLenum access) {  GLboolean API_ENTRY(glUnmapBufferOES)(GLenum target) {      CALL_GL_API_RETURN(glUnmapBufferOES, target);  } -void API_ENTRY(glGetBufferPointervOES)(GLenum target, GLenum pname, void** params) { +void API_ENTRY(glGetBufferPointervOES)(GLenum target, GLenum pname, GLvoid** params) {      CALL_GL_API(glGetBufferPointervOES, target, pname, params);  } -void API_ENTRY(glTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) { +void API_ENTRY(glTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels) {      CALL_GL_API(glTexImage3DOES, target, level, internalformat, width, height, depth, border, format, type, pixels);  } -void API_ENTRY(glTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) { +void API_ENTRY(glTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels) {      CALL_GL_API(glTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);  }  void API_ENTRY(glCopyTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {      CALL_GL_API(glCopyTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, x, y, width, height);  } -void API_ENTRY(glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data) { +void API_ENTRY(glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) {      CALL_GL_API(glCompressedTexImage3DOES, target, level, internalformat, width, height, depth, border, imageSize, data);  } -void API_ENTRY(glCompressedTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data) { +void API_ENTRY(glCompressedTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) {      CALL_GL_API(glCompressedTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);  }  void API_ENTRY(glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {      CALL_GL_API(glFramebufferTexture3DOES, target, attachment, textarget, texture, level, zoffset);  } +void API_ENTRY(glBindVertexArrayOES)(GLuint array) { +    CALL_GL_API(glBindVertexArrayOES, array); +} +void API_ENTRY(glDeleteVertexArraysOES)(GLsizei n, const GLuint *arrays) { +    CALL_GL_API(glDeleteVertexArraysOES, n, arrays); +} +void API_ENTRY(glGenVertexArraysOES)(GLsizei n, GLuint *arrays) { +    CALL_GL_API(glGenVertexArraysOES, n, arrays); +} +GLboolean API_ENTRY(glIsVertexArrayOES)(GLuint array) { +    CALL_GL_API_RETURN(glIsVertexArrayOES, array); +}  void API_ENTRY(glGetPerfMonitorGroupsAMD)(GLint *numGroups, GLsizei groupsSize, GLuint *groups) {      CALL_GL_API(glGetPerfMonitorGroupsAMD, numGroups, groupsSize, groups);  }  void API_ENTRY(glGetPerfMonitorCountersAMD)(GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters) {      CALL_GL_API(glGetPerfMonitorCountersAMD, group, numCounters, maxActiveCounters, counterSize, counters);  } -void API_ENTRY(glGetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei *length, char *groupString) { +void API_ENTRY(glGetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString) {      CALL_GL_API(glGetPerfMonitorGroupStringAMD, group, bufSize, length, groupString);  } -void API_ENTRY(glGetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, char *counterString) { +void API_ENTRY(glGetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString) {      CALL_GL_API(glGetPerfMonitorCounterStringAMD, group, counter, bufSize, length, counterString);  } -void API_ENTRY(glGetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, void *data) { +void API_ENTRY(glGetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, GLvoid *data) {      CALL_GL_API(glGetPerfMonitorCounterInfoAMD, group, counter, pname, data);  }  void API_ENTRY(glGenPerfMonitorsAMD)(GLsizei n, GLuint *monitors) { @@ -70,6 +82,21 @@ void API_ENTRY(glEndPerfMonitorAMD)(GLuint monitor) {  void API_ENTRY(glGetPerfMonitorCounterDataAMD)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten) {      CALL_GL_API(glGetPerfMonitorCounterDataAMD, monitor, pname, dataSize, data, bytesWritten);  } +void API_ENTRY(glDiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum *attachments) { +    CALL_GL_API(glDiscardFramebufferEXT, target, numAttachments, attachments); +} +void API_ENTRY(glMultiDrawArraysEXT)(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount) { +    CALL_GL_API(glMultiDrawArraysEXT, mode, first, count, primcount); +} +void API_ENTRY(glMultiDrawElementsEXT)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) { +    CALL_GL_API(glMultiDrawElementsEXT, mode, count, type, indices, primcount); +} +void API_ENTRY(glRenderbufferStorageMultisampleIMG)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { +    CALL_GL_API(glRenderbufferStorageMultisampleIMG, target, samples, internalformat, width, height); +} +void API_ENTRY(glFramebufferTexture2DMultisampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) { +    CALL_GL_API(glFramebufferTexture2DMultisampleIMG, target, attachment, textarget, texture, level, samples); +}  void API_ENTRY(glDeleteFencesNV)(GLsizei n, const GLuint *fences) {      CALL_GL_API(glDeleteFencesNV, n, fences);  } @@ -91,10 +118,16 @@ void API_ENTRY(glFinishFenceNV)(GLuint fence) {  void API_ENTRY(glSetFenceNV)(GLuint fence, GLenum condition) {      CALL_GL_API(glSetFenceNV, fence, condition);  } +void API_ENTRY(glCoverageMaskNV)(GLboolean mask) { +    CALL_GL_API(glCoverageMaskNV, mask); +} +void API_ENTRY(glCoverageOperationNV)(GLenum operation) { +    CALL_GL_API(glCoverageOperationNV, operation); +}  void API_ENTRY(glGetDriverControlsQCOM)(GLint *num, GLsizei size, GLuint *driverControls) {      CALL_GL_API(glGetDriverControlsQCOM, num, size, driverControls);  } -void API_ENTRY(glGetDriverControlStringQCOM)(GLuint driverControl, GLsizei bufSize, GLsizei *length, char *driverControlString) { +void API_ENTRY(glGetDriverControlStringQCOM)(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString) {      CALL_GL_API(glGetDriverControlStringQCOM, driverControl, bufSize, length, driverControlString);  }  void API_ENTRY(glEnableDriverControlQCOM)(GLuint driverControl) { @@ -103,3 +136,45 @@ void API_ENTRY(glEnableDriverControlQCOM)(GLuint driverControl) {  void API_ENTRY(glDisableDriverControlQCOM)(GLuint driverControl) {      CALL_GL_API(glDisableDriverControlQCOM, driverControl);  } +void API_ENTRY(glExtGetTexturesQCOM)(GLuint *textures, GLint maxTextures, GLint *numTextures) { +    CALL_GL_API(glExtGetTexturesQCOM, textures, maxTextures, numTextures); +} +void API_ENTRY(glExtGetBuffersQCOM)(GLuint *buffers, GLint maxBuffers, GLint *numBuffers) { +    CALL_GL_API(glExtGetBuffersQCOM, buffers, maxBuffers, numBuffers); +} +void API_ENTRY(glExtGetRenderbuffersQCOM)(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers) { +    CALL_GL_API(glExtGetRenderbuffersQCOM, renderbuffers, maxRenderbuffers, numRenderbuffers); +} +void API_ENTRY(glExtGetFramebuffersQCOM)(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers) { +    CALL_GL_API(glExtGetFramebuffersQCOM, framebuffers, maxFramebuffers, numFramebuffers); +} +void API_ENTRY(glExtGetTexLevelParameterivQCOM)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params) { +    CALL_GL_API(glExtGetTexLevelParameterivQCOM, texture, face, level, pname, params); +} +void API_ENTRY(glExtTexObjectStateOverrideiQCOM)(GLenum target, GLenum pname, GLint param) { +    CALL_GL_API(glExtTexObjectStateOverrideiQCOM, target, pname, param); +} +void API_ENTRY(glExtGetTexSubImageQCOM)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels) { +    CALL_GL_API(glExtGetTexSubImageQCOM, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels); +} +void API_ENTRY(glExtGetBufferPointervQCOM)(GLenum target, GLvoid **params) { +    CALL_GL_API(glExtGetBufferPointervQCOM, target, params); +} +void API_ENTRY(glExtGetShadersQCOM)(GLuint *shaders, GLint maxShaders, GLint *numShaders) { +    CALL_GL_API(glExtGetShadersQCOM, shaders, maxShaders, numShaders); +} +void API_ENTRY(glExtGetProgramsQCOM)(GLuint *programs, GLint maxPrograms, GLint *numPrograms) { +    CALL_GL_API(glExtGetProgramsQCOM, programs, maxPrograms, numPrograms); +} +GLboolean API_ENTRY(glExtIsProgramBinaryQCOM)(GLuint program) { +    CALL_GL_API_RETURN(glExtIsProgramBinaryQCOM, program); +} +void API_ENTRY(glExtGetProgramBinarySourceQCOM)(GLuint program, GLenum shadertype, GLchar *source, GLint *length) { +    CALL_GL_API(glExtGetProgramBinarySourceQCOM, program, shadertype, source, length); +} +void API_ENTRY(glStartTilingQCOM)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) { +    CALL_GL_API(glStartTilingQCOM, x, y, width, height, preserveMask); +} +void API_ENTRY(glEndTilingQCOM)(GLbitfield preserveMask) { +    CALL_GL_API(glEndTilingQCOM, preserveMask); +} diff --git a/opengl/libs/GLES_CM/gl_api.in b/opengl/libs/GLES_CM/gl_api.in index 5437d47f20ff..7f20c4fda493 100644 --- a/opengl/libs/GLES_CM/gl_api.in +++ b/opengl/libs/GLES_CM/gl_api.in @@ -259,7 +259,7 @@ void API_ENTRY(glGetLightxv)(GLenum light, GLenum pname, GLfixed *params) {  void API_ENTRY(glGetMaterialxv)(GLenum face, GLenum pname, GLfixed *params) {      CALL_GL_API(glGetMaterialxv, face, pname, params);  } -void API_ENTRY(glGetPointerv)(GLenum pname, void **params) { +void API_ENTRY(glGetPointerv)(GLenum pname, GLvoid **params) {      CALL_GL_API(glGetPointerv, pname, params);  }  const GLubyte * API_ENTRY(glGetString)(GLenum name) { diff --git a/opengl/libs/GLES_CM/glext_api.in b/opengl/libs/GLES_CM/glext_api.in index 2c8648e259ba..5393fa61a056 100644 --- a/opengl/libs/GLES_CM/glext_api.in +++ b/opengl/libs/GLES_CM/glext_api.in @@ -205,7 +205,7 @@ void* API_ENTRY(glMapBufferOES)(GLenum target, GLenum access) {  GLboolean API_ENTRY(glUnmapBufferOES)(GLenum target) {      CALL_GL_API_RETURN(glUnmapBufferOES, target);  } -void API_ENTRY(glGetBufferPointervOES)(GLenum target, GLenum pname, void** params) { +void API_ENTRY(glGetBufferPointervOES)(GLenum target, GLenum pname, GLvoid ** params) {      CALL_GL_API(glGetBufferPointervOES, target, pname, params);  }  void API_ENTRY(glCurrentPaletteMatrixOES)(GLuint matrixpaletteindex) { @@ -268,3 +268,111 @@ void API_ENTRY(glGetTexGenivOES)(GLenum coord, GLenum pname, GLint *params) {  void API_ENTRY(glGetTexGenxvOES)(GLenum coord, GLenum pname, GLfixed *params) {      CALL_GL_API(glGetTexGenxvOES, coord, pname, params);  } +void API_ENTRY(glBindVertexArrayOES)(GLuint array) { +    CALL_GL_API(glBindVertexArrayOES, array); +} +void API_ENTRY(glDeleteVertexArraysOES)(GLsizei n, const GLuint *arrays) { +    CALL_GL_API(glDeleteVertexArraysOES, n, arrays); +} +void API_ENTRY(glGenVertexArraysOES)(GLsizei n, GLuint *arrays) { +    CALL_GL_API(glGenVertexArraysOES, n, arrays); +} +GLboolean API_ENTRY(glIsVertexArrayOES)(GLuint array) { +    CALL_GL_API_RETURN(glIsVertexArrayOES, array); +} +void API_ENTRY(glDiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum *attachments) { +    CALL_GL_API(glDiscardFramebufferEXT, target, numAttachments, attachments); +} +void API_ENTRY(glMultiDrawArraysEXT)(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount) { +    CALL_GL_API(glMultiDrawArraysEXT, mode, first, count, primcount); +} +void API_ENTRY(glMultiDrawElementsEXT)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) { +    CALL_GL_API(glMultiDrawElementsEXT, mode, count, type, indices, primcount); +} +void API_ENTRY(glClipPlanefIMG)(GLenum p, const GLfloat *eqn) { +    CALL_GL_API(glClipPlanefIMG, p, eqn); +} +void API_ENTRY(glClipPlanexIMG)(GLenum p, const GLfixed *eqn) { +    CALL_GL_API(glClipPlanexIMG, p, eqn); +} +void API_ENTRY(glRenderbufferStorageMultisampleIMG)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { +    CALL_GL_API(glRenderbufferStorageMultisampleIMG, target, samples, internalformat, width, height); +} +void API_ENTRY(glFramebufferTexture2DMultisampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) { +    CALL_GL_API(glFramebufferTexture2DMultisampleIMG, target, attachment, textarget, texture, level, samples); +} +void API_ENTRY(glDeleteFencesNV)(GLsizei n, const GLuint *fences) { +    CALL_GL_API(glDeleteFencesNV, n, fences); +} +void API_ENTRY(glGenFencesNV)(GLsizei n, GLuint *fences) { +    CALL_GL_API(glGenFencesNV, n, fences); +} +GLboolean API_ENTRY(glIsFenceNV)(GLuint fence) { +    CALL_GL_API_RETURN(glIsFenceNV, fence); +} +GLboolean API_ENTRY(glTestFenceNV)(GLuint fence) { +    CALL_GL_API_RETURN(glTestFenceNV, fence); +} +void API_ENTRY(glGetFenceivNV)(GLuint fence, GLenum pname, GLint *params) { +    CALL_GL_API(glGetFenceivNV, fence, pname, params); +} +void API_ENTRY(glFinishFenceNV)(GLuint fence) { +    CALL_GL_API(glFinishFenceNV, fence); +} +void API_ENTRY(glSetFenceNV)(GLuint fence, GLenum condition) { +    CALL_GL_API(glSetFenceNV, fence, condition); +} +void API_ENTRY(glGetDriverControlsQCOM)(GLint *num, GLsizei size, GLuint *driverControls) { +    CALL_GL_API(glGetDriverControlsQCOM, num, size, driverControls); +} +void API_ENTRY(glGetDriverControlStringQCOM)(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString) { +    CALL_GL_API(glGetDriverControlStringQCOM, driverControl, bufSize, length, driverControlString); +} +void API_ENTRY(glEnableDriverControlQCOM)(GLuint driverControl) { +    CALL_GL_API(glEnableDriverControlQCOM, driverControl); +} +void API_ENTRY(glDisableDriverControlQCOM)(GLuint driverControl) { +    CALL_GL_API(glDisableDriverControlQCOM, driverControl); +} +void API_ENTRY(glExtGetTexturesQCOM)(GLuint *textures, GLint maxTextures, GLint *numTextures) { +    CALL_GL_API(glExtGetTexturesQCOM, textures, maxTextures, numTextures); +} +void API_ENTRY(glExtGetBuffersQCOM)(GLuint *buffers, GLint maxBuffers, GLint *numBuffers) { +    CALL_GL_API(glExtGetBuffersQCOM, buffers, maxBuffers, numBuffers); +} +void API_ENTRY(glExtGetRenderbuffersQCOM)(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers) { +    CALL_GL_API(glExtGetRenderbuffersQCOM, renderbuffers, maxRenderbuffers, numRenderbuffers); +} +void API_ENTRY(glExtGetFramebuffersQCOM)(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers) { +    CALL_GL_API(glExtGetFramebuffersQCOM, framebuffers, maxFramebuffers, numFramebuffers); +} +void API_ENTRY(glExtGetTexLevelParameterivQCOM)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params) { +    CALL_GL_API(glExtGetTexLevelParameterivQCOM, texture, face, level, pname, params); +} +void API_ENTRY(glExtTexObjectStateOverrideiQCOM)(GLenum target, GLenum pname, GLint param) { +    CALL_GL_API(glExtTexObjectStateOverrideiQCOM, target, pname, param); +} +void API_ENTRY(glExtGetTexSubImageQCOM)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels) { +    CALL_GL_API(glExtGetTexSubImageQCOM, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels); +} +void API_ENTRY(glExtGetBufferPointervQCOM)(GLenum target, GLvoid **params) { +    CALL_GL_API(glExtGetBufferPointervQCOM, target, params); +} +void API_ENTRY(glExtGetShadersQCOM)(GLuint *shaders, GLint maxShaders, GLint *numShaders) { +    CALL_GL_API(glExtGetShadersQCOM, shaders, maxShaders, numShaders); +} +void API_ENTRY(glExtGetProgramsQCOM)(GLuint *programs, GLint maxPrograms, GLint *numPrograms) { +    CALL_GL_API(glExtGetProgramsQCOM, programs, maxPrograms, numPrograms); +} +GLboolean API_ENTRY(glExtIsProgramBinaryQCOM)(GLuint program) { +    CALL_GL_API_RETURN(glExtIsProgramBinaryQCOM, program); +} +void API_ENTRY(glExtGetProgramBinarySourceQCOM)(GLuint program, GLenum shadertype, GLchar *source, GLint *length) { +    CALL_GL_API(glExtGetProgramBinarySourceQCOM, program, shadertype, source, length); +} +void API_ENTRY(glStartTilingQCOM)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) { +    CALL_GL_API(glStartTilingQCOM, x, y, width, height, preserveMask); +} +void API_ENTRY(glEndTilingQCOM)(GLbitfield preserveMask) { +    CALL_GL_API(glEndTilingQCOM, preserveMask); +} diff --git a/opengl/libs/egl_impl.h b/opengl/libs/egl_impl.h index 1fba209f7707..c8f529ac0569 100644 --- a/opengl/libs/egl_impl.h +++ b/opengl/libs/egl_impl.h @@ -31,6 +31,7 @@ namespace android {  struct egl_connection_t  { +    inline egl_connection_t() : dso(0) { }      void *              dso;      gl_hooks_t *        hooks[2];      EGLint              major; diff --git a/opengl/libs/entries.in b/opengl/libs/entries.in index bbe3e236b2d6..61acb5f09eed 100644 --- a/opengl/libs/entries.in +++ b/opengl/libs/entries.in @@ -4,13 +4,14 @@ GL_ENTRY(void, glAlphaFuncx, GLenum func, GLclampx ref)  GL_ENTRY(void, glAlphaFuncxOES, GLenum func, GLclampx ref)  GL_ENTRY(void, glAttachShader, GLuint program, GLuint shader)  GL_ENTRY(void, glBeginPerfMonitorAMD, GLuint monitor) -GL_ENTRY(void, glBindAttribLocation, GLuint program, GLuint index, const char* name) +GL_ENTRY(void, glBindAttribLocation, GLuint program, GLuint index, const GLchar* name)  GL_ENTRY(void, glBindBuffer, GLenum target, GLuint buffer)  GL_ENTRY(void, glBindFramebuffer, GLenum target, GLuint framebuffer)  GL_ENTRY(void, glBindFramebufferOES, GLenum target, GLuint framebuffer)  GL_ENTRY(void, glBindRenderbuffer, GLenum target, GLuint renderbuffer)  GL_ENTRY(void, glBindRenderbufferOES, GLenum target, GLuint renderbuffer)  GL_ENTRY(void, glBindTexture, GLenum target, GLuint texture) +GL_ENTRY(void, glBindVertexArrayOES, GLuint array)  GL_ENTRY(void, glBlendColor, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)  GL_ENTRY(void, glBlendEquation,  GLenum mode )  GL_ENTRY(void, glBlendEquationOES, GLenum mode) @@ -34,8 +35,10 @@ GL_ENTRY(void, glClearDepthxOES, GLclampx depth)  GL_ENTRY(void, glClearStencil, GLint s)  GL_ENTRY(void, glClientActiveTexture, GLenum texture)  GL_ENTRY(void, glClipPlanef, GLenum plane, const GLfloat *equation) +GL_ENTRY(void, glClipPlanefIMG, GLenum p, const GLfloat *eqn)  GL_ENTRY(void, glClipPlanefOES, GLenum plane, const GLfloat *equation)  GL_ENTRY(void, glClipPlanex, GLenum plane, const GLfixed *equation) +GL_ENTRY(void, glClipPlanexIMG, GLenum p, const GLfixed *eqn)  GL_ENTRY(void, glClipPlanexOES, GLenum plane, const GLfixed *equation)  GL_ENTRY(void, glColor4f, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)  GL_ENTRY(void, glColor4ub, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) @@ -45,12 +48,14 @@ GL_ENTRY(void, glColorMask, GLboolean red, GLboolean green, GLboolean blue, GLbo  GL_ENTRY(void, glColorPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)  GL_ENTRY(void, glCompileShader, GLuint shader)  GL_ENTRY(void, glCompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) -GL_ENTRY(void, glCompressedTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data) +GL_ENTRY(void, glCompressedTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)  GL_ENTRY(void, glCompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) -GL_ENTRY(void, glCompressedTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data) +GL_ENTRY(void, glCompressedTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)  GL_ENTRY(void, glCopyTexImage2D, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)  GL_ENTRY(void, glCopyTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)  GL_ENTRY(void, glCopyTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) +GL_ENTRY(void, glCoverageMaskNV, GLboolean mask) +GL_ENTRY(void, glCoverageOperationNV, GLenum operation)  GL_ENTRY(GLuint, glCreateProgram, void)  GL_ENTRY(GLuint, glCreateShader, GLenum type)  GL_ENTRY(void, glCullFace, GLenum mode) @@ -65,6 +70,7 @@ GL_ENTRY(void, glDeleteRenderbuffers, GLsizei n, const GLuint* renderbuffers)  GL_ENTRY(void, glDeleteRenderbuffersOES, GLsizei n, const GLuint* renderbuffers)  GL_ENTRY(void, glDeleteShader, GLuint shader)  GL_ENTRY(void, glDeleteTextures, GLsizei n, const GLuint *textures) +GL_ENTRY(void, glDeleteVertexArraysOES, GLsizei n, const GLuint *arrays)  GL_ENTRY(void, glDepthFunc, GLenum func)  GL_ENTRY(void, glDepthMask, GLboolean flag)  GL_ENTRY(void, glDepthRangef, GLclampf zNear, GLclampf zFar) @@ -76,6 +82,7 @@ GL_ENTRY(void, glDisable, GLenum cap)  GL_ENTRY(void, glDisableClientState, GLenum array)  GL_ENTRY(void, glDisableDriverControlQCOM, GLuint driverControl)  GL_ENTRY(void, glDisableVertexAttribArray, GLuint index) +GL_ENTRY(void, glDiscardFramebufferEXT, GLenum target, GLsizei numAttachments, const GLenum *attachments)  GL_ENTRY(void, glDrawArrays, GLenum mode, GLint first, GLsizei count)  GL_ENTRY(void, glDrawElements, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)  GL_ENTRY(void, glDrawTexfOES, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) @@ -93,6 +100,19 @@ GL_ENTRY(void, glEnableClientState, GLenum array)  GL_ENTRY(void, glEnableDriverControlQCOM, GLuint driverControl)  GL_ENTRY(void, glEnableVertexAttribArray, GLuint index)  GL_ENTRY(void, glEndPerfMonitorAMD, GLuint monitor) +GL_ENTRY(void, glEndTilingQCOM, GLbitfield preserveMask) +GL_ENTRY(void, glExtGetBufferPointervQCOM, GLenum target, GLvoid **params) +GL_ENTRY(void, glExtGetBuffersQCOM, GLuint *buffers, GLint maxBuffers, GLint *numBuffers) +GL_ENTRY(void, glExtGetFramebuffersQCOM, GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers) +GL_ENTRY(void, glExtGetProgramBinarySourceQCOM, GLuint program, GLenum shadertype, GLchar *source, GLint *length) +GL_ENTRY(void, glExtGetProgramsQCOM, GLuint *programs, GLint maxPrograms, GLint *numPrograms) +GL_ENTRY(void, glExtGetRenderbuffersQCOM, GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers) +GL_ENTRY(void, glExtGetShadersQCOM, GLuint *shaders, GLint maxShaders, GLint *numShaders) +GL_ENTRY(void, glExtGetTexLevelParameterivQCOM, GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params) +GL_ENTRY(void, glExtGetTexSubImageQCOM, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels) +GL_ENTRY(void, glExtGetTexturesQCOM, GLuint *textures, GLint maxTextures, GLint *numTextures) +GL_ENTRY(GLboolean, glExtIsProgramBinaryQCOM, GLuint program) +GL_ENTRY(void, glExtTexObjectStateOverrideiQCOM, GLenum target, GLenum pname, GLint param)  GL_ENTRY(void, glFinish, void)  GL_ENTRY(void, glFinishFenceNV, GLuint fence)  GL_ENTRY(void, glFlush, void) @@ -105,6 +125,7 @@ GL_ENTRY(void, glFogxvOES, GLenum pname, const GLfixed *params)  GL_ENTRY(void, glFramebufferRenderbuffer, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)  GL_ENTRY(void, glFramebufferRenderbufferOES, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)  GL_ENTRY(void, glFramebufferTexture2D, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +GL_ENTRY(void, glFramebufferTexture2DMultisampleIMG, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)  GL_ENTRY(void, glFramebufferTexture2DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)  GL_ENTRY(void, glFramebufferTexture3DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)  GL_ENTRY(void, glFrontFace, GLenum mode) @@ -120,20 +141,21 @@ GL_ENTRY(void, glGenPerfMonitorsAMD, GLsizei n, GLuint *monitors)  GL_ENTRY(void, glGenRenderbuffers, GLsizei n, GLuint* renderbuffers)  GL_ENTRY(void, glGenRenderbuffersOES, GLsizei n, GLuint* renderbuffers)  GL_ENTRY(void, glGenTextures, GLsizei n, GLuint *textures) +GL_ENTRY(void, glGenVertexArraysOES, GLsizei n, GLuint *arrays)  GL_ENTRY(void, glGenerateMipmap, GLenum target)  GL_ENTRY(void, glGenerateMipmapOES, GLenum target) -GL_ENTRY(void, glGetActiveAttrib, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) -GL_ENTRY(void, glGetActiveUniform, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) +GL_ENTRY(void, glGetActiveAttrib, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) +GL_ENTRY(void, glGetActiveUniform, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)  GL_ENTRY(void, glGetAttachedShaders, GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) -GL_ENTRY(int, glGetAttribLocation, GLuint program, const char* name) +GL_ENTRY(int, glGetAttribLocation, GLuint program, const GLchar* name)  GL_ENTRY(void, glGetBooleanv, GLenum pname, GLboolean *params)  GL_ENTRY(void, glGetBufferParameteriv, GLenum target, GLenum pname, GLint *params) -GL_ENTRY(void, glGetBufferPointervOES, GLenum target, GLenum pname, void** params) +GL_ENTRY(void, glGetBufferPointervOES, GLenum target, GLenum pname, GLvoid ** params)  GL_ENTRY(void, glGetClipPlanef, GLenum pname, GLfloat eqn[4])  GL_ENTRY(void, glGetClipPlanefOES, GLenum pname, GLfloat eqn[4])  GL_ENTRY(void, glGetClipPlanex, GLenum pname, GLfixed eqn[4])  GL_ENTRY(void, glGetClipPlanexOES, GLenum pname, GLfixed eqn[4]) -GL_ENTRY(void, glGetDriverControlStringQCOM, GLuint driverControl, GLsizei bufSize, GLsizei *length, char *driverControlString) +GL_ENTRY(void, glGetDriverControlStringQCOM, GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString)  GL_ENTRY(void, glGetDriverControlsQCOM, GLint *num, GLsizei size, GLuint *driverControls)  GL_ENTRY(GLenum, glGetError, void)  GL_ENTRY(void, glGetFenceivNV, GLuint fence, GLenum pname, GLint *params) @@ -150,20 +172,20 @@ GL_ENTRY(void, glGetMaterialfv, GLenum face, GLenum pname, GLfloat *params)  GL_ENTRY(void, glGetMaterialxv, GLenum face, GLenum pname, GLfixed *params)  GL_ENTRY(void, glGetMaterialxvOES, GLenum face, GLenum pname, GLfixed *params)  GL_ENTRY(void, glGetPerfMonitorCounterDataAMD, GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten) -GL_ENTRY(void, glGetPerfMonitorCounterInfoAMD, GLuint group, GLuint counter, GLenum pname, void *data) -GL_ENTRY(void, glGetPerfMonitorCounterStringAMD, GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, char *counterString) +GL_ENTRY(void, glGetPerfMonitorCounterInfoAMD, GLuint group, GLuint counter, GLenum pname, GLvoid *data) +GL_ENTRY(void, glGetPerfMonitorCounterStringAMD, GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString)  GL_ENTRY(void, glGetPerfMonitorCountersAMD, GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters) -GL_ENTRY(void, glGetPerfMonitorGroupStringAMD, GLuint group, GLsizei bufSize, GLsizei *length, char *groupString) +GL_ENTRY(void, glGetPerfMonitorGroupStringAMD, GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString)  GL_ENTRY(void, glGetPerfMonitorGroupsAMD, GLint *numGroups, GLsizei groupsSize, GLuint *groups) -GL_ENTRY(void, glGetPointerv, GLenum pname, void **params) -GL_ENTRY(void, glGetProgramBinaryOES, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary) -GL_ENTRY(void, glGetProgramInfoLog, GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) +GL_ENTRY(void, glGetPointerv, GLenum pname, GLvoid **params) +GL_ENTRY(void, glGetProgramBinaryOES, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary) +GL_ENTRY(void, glGetProgramInfoLog, GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)  GL_ENTRY(void, glGetProgramiv, GLuint program, GLenum pname, GLint* params)  GL_ENTRY(void, glGetRenderbufferParameteriv, GLenum target, GLenum pname, GLint* params)  GL_ENTRY(void, glGetRenderbufferParameterivOES, GLenum target, GLenum pname, GLint* params) -GL_ENTRY(void, glGetShaderInfoLog, GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) +GL_ENTRY(void, glGetShaderInfoLog, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)  GL_ENTRY(void, glGetShaderPrecisionFormat, GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) -GL_ENTRY(void, glGetShaderSource, GLuint shader, GLsizei bufsize, GLsizei* length, char* source) +GL_ENTRY(void, glGetShaderSource, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)  GL_ENTRY(void, glGetShaderiv, GLuint shader, GLenum pname, GLint* params)  GL_ENTRY(const GLubyte *, glGetString, GLenum name)  GL_ENTRY(void, glGetTexEnvfv, GLenum env, GLenum pname, GLfloat *params) @@ -177,10 +199,10 @@ GL_ENTRY(void, glGetTexParameterfv, GLenum target, GLenum pname, GLfloat *params  GL_ENTRY(void, glGetTexParameteriv, GLenum target, GLenum pname, GLint *params)  GL_ENTRY(void, glGetTexParameterxv, GLenum target, GLenum pname, GLfixed *params)  GL_ENTRY(void, glGetTexParameterxvOES, GLenum target, GLenum pname, GLfixed *params) -GL_ENTRY(int, glGetUniformLocation, GLuint program, const char* name) +GL_ENTRY(int, glGetUniformLocation, GLuint program, const GLchar* name)  GL_ENTRY(void, glGetUniformfv, GLuint program, GLint location, GLfloat* params)  GL_ENTRY(void, glGetUniformiv, GLuint program, GLint location, GLint* params) -GL_ENTRY(void, glGetVertexAttribPointerv, GLuint index, GLenum pname, void** pointer) +GL_ENTRY(void, glGetVertexAttribPointerv, GLuint index, GLenum pname, GLvoid** pointer)  GL_ENTRY(void, glGetVertexAttribfv, GLuint index, GLenum pname, GLfloat* params)  GL_ENTRY(void, glGetVertexAttribiv, GLuint index, GLenum pname, GLint* params)  GL_ENTRY(void, glHint, GLenum target, GLenum mode) @@ -194,6 +216,7 @@ GL_ENTRY(GLboolean, glIsRenderbuffer, GLuint renderbuffer)  GL_ENTRY(GLboolean, glIsRenderbufferOES, GLuint renderbuffer)  GL_ENTRY(GLboolean, glIsShader, GLuint shader)  GL_ENTRY(GLboolean, glIsTexture, GLuint texture) +GL_ENTRY(GLboolean, glIsVertexArrayOES, GLuint array)  GL_ENTRY(void, glLightModelf, GLenum pname, GLfloat param)  GL_ENTRY(void, glLightModelfv, GLenum pname, const GLfloat *params)  GL_ENTRY(void, glLightModelx, GLenum pname, GLfixed param) @@ -228,6 +251,8 @@ GL_ENTRY(void, glMatrixMode, GLenum mode)  GL_ENTRY(void, glMultMatrixf, const GLfloat *m)  GL_ENTRY(void, glMultMatrixx, const GLfixed *m)  GL_ENTRY(void, glMultMatrixxOES, const GLfixed *m) +GL_ENTRY(void, glMultiDrawArraysEXT, GLenum mode, GLint *first, GLsizei *count, GLsizei primcount) +GL_ENTRY(void, glMultiDrawElementsEXT, GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount)  GL_ENTRY(void, glMultiTexCoord4f, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)  GL_ENTRY(void, glMultiTexCoord4x, GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)  GL_ENTRY(void, glMultiTexCoord4xOES, GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) @@ -254,12 +279,13 @@ GL_ENTRY(void, glPolygonOffset, GLfloat factor, GLfloat units)  GL_ENTRY(void, glPolygonOffsetx, GLfixed factor, GLfixed units)  GL_ENTRY(void, glPolygonOffsetxOES, GLfixed factor, GLfixed units)  GL_ENTRY(void, glPopMatrix, void) -GL_ENTRY(void, glProgramBinaryOES, GLuint program, GLenum binaryFormat, const void *binary, GLint length) +GL_ENTRY(void, glProgramBinaryOES, GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length)  GL_ENTRY(void, glPushMatrix, void)  GL_ENTRY(GLbitfield, glQueryMatrixxOES, GLfixed mantissa[16], GLint exponent[16])  GL_ENTRY(void, glReadPixels, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)  GL_ENTRY(void, glReleaseShaderCompiler, void)  GL_ENTRY(void, glRenderbufferStorage, GLenum target, GLenum internalformat, GLsizei width, GLsizei height) +GL_ENTRY(void, glRenderbufferStorageMultisampleIMG, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)  GL_ENTRY(void, glRenderbufferStorageOES, GLenum target, GLenum internalformat, GLsizei width, GLsizei height)  GL_ENTRY(void, glRotatef, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)  GL_ENTRY(void, glRotatex, GLfixed angle, GLfixed x, GLfixed y, GLfixed z) @@ -274,8 +300,9 @@ GL_ENTRY(void, glScissor, GLint x, GLint y, GLsizei width, GLsizei height)  GL_ENTRY(void, glSelectPerfMonitorCountersAMD, GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList)  GL_ENTRY(void, glSetFenceNV, GLuint fence, GLenum condition)  GL_ENTRY(void, glShadeModel, GLenum mode) -GL_ENTRY(void, glShaderBinary, GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length) -GL_ENTRY(void, glShaderSource, GLuint shader, GLsizei count, const char** string, const GLint* length) +GL_ENTRY(void, glShaderBinary, GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length) +GL_ENTRY(void, glShaderSource, GLuint shader, GLsizei count, const GLchar** string, const GLint* length) +GL_ENTRY(void, glStartTilingQCOM, GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)  GL_ENTRY(void, glStencilFunc, GLenum func, GLint ref, GLuint mask)  GL_ENTRY(void, glStencilFuncSeparate, GLenum face, GLenum func, GLint ref, GLuint mask)  GL_ENTRY(void, glStencilMask, GLuint mask) @@ -298,8 +325,8 @@ GL_ENTRY(void, glTexGeniOES, GLenum coord, GLenum pname, GLint param)  GL_ENTRY(void, glTexGenivOES, GLenum coord, GLenum pname, const GLint *params)  GL_ENTRY(void, glTexGenxOES, GLenum coord, GLenum pname, GLfixed param)  GL_ENTRY(void, glTexGenxvOES, GLenum coord, GLenum pname, const GLfixed *params) -GL_ENTRY(void, glTexImage2D, GLenum target, GLint level, GLint internalformat,  GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) -GL_ENTRY(void, glTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) +GL_ENTRY(void, glTexImage2D, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) +GL_ENTRY(void, glTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)  GL_ENTRY(void, glTexParameterf, GLenum target, GLenum pname, GLfloat param)  GL_ENTRY(void, glTexParameterfv, GLenum target, GLenum pname, const GLfloat *params)  GL_ENTRY(void, glTexParameteri, GLenum target, GLenum pname, GLint param) @@ -309,7 +336,7 @@ GL_ENTRY(void, glTexParameterxOES, GLenum target, GLenum pname, GLfixed param)  GL_ENTRY(void, glTexParameterxv, GLenum target, GLenum pname, const GLfixed *params)  GL_ENTRY(void, glTexParameterxvOES, GLenum target, GLenum pname, const GLfixed *params)  GL_ENTRY(void, glTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) -GL_ENTRY(void, glTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) +GL_ENTRY(void, glTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)  GL_ENTRY(void, glTranslatef, GLfloat x, GLfloat y, GLfloat z)  GL_ENTRY(void, glTranslatex, GLfixed x, GLfixed y, GLfixed z)  GL_ENTRY(void, glTranslatexOES, GLfixed x, GLfixed y, GLfixed z) @@ -343,7 +370,7 @@ GL_ENTRY(void, glVertexAttrib3f, GLuint indx, GLfloat x, GLfloat y, GLfloat z)  GL_ENTRY(void, glVertexAttrib3fv, GLuint indx, const GLfloat* values)  GL_ENTRY(void, glVertexAttrib4f, GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)  GL_ENTRY(void, glVertexAttrib4fv, GLuint indx, const GLfloat* values) -GL_ENTRY(void, glVertexAttribPointer, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) +GL_ENTRY(void, glVertexAttribPointer, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)  GL_ENTRY(void, glVertexPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)  GL_ENTRY(void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height)  GL_ENTRY(void, glWeightPointerOES, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/opengl/libs/hooks.h b/opengl/libs/hooks.h index f47f0930ba52..1ab58cc83349 100644 --- a/opengl/libs/hooks.h +++ b/opengl/libs/hooks.h @@ -37,7 +37,7 @@  #endif  #undef NELEM  #define NELEM(x)                    (sizeof(x)/sizeof(*(x))) -#define MAX_NUMBER_OF_GL_EXTENSIONS 32 +#define MAX_NUMBER_OF_GL_EXTENSIONS 64  #if defined(HAVE_ANDROID_OS) && !USE_SLOW_BINDING && __OPTIMIZE__ @@ -86,7 +86,7 @@ struct gl_hooks_t {          #include "entries.in"      } gl;      struct gl_ext_t { -        void (*extensions[MAX_NUMBER_OF_GL_EXTENSIONS])(void); +        __eglMustCastToProperFunctionPointerType extensions[MAX_NUMBER_OF_GL_EXTENSIONS];      } ext;  };  #undef GL_ENTRY | 
