egl: fix GetProcAddress for EGLimage extensions

Return wrappers from GetProcAddress for glEGLImageTargetTexture2DOES
and glEGLImageTargetRenderbufferStorageOES which unwrap the EGLimage
handle before calling through to the implementation.

Change-Id: I2f5b180ab3ccdb28a4f510a2bd8c2eee941a84df
This commit is contained in:
Michael I. Gold 2011-01-04 01:16:59 -08:00 committed by Mathias Agopian
parent ca41e36266
commit 609bb4dbf0
1 changed files with 33 additions and 0 deletions

View File

@ -1473,6 +1473,29 @@ EGLint eglGetError(void)
return result;
}
// Note: Similar implementations of these functions also exist in
// gl2.cpp and gl.cpp, and are used by applications that call the
// exported entry points directly.
typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES_impl = NULL;
static PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC glEGLImageTargetRenderbufferStorageOES_impl = NULL;
static void glEGLImageTargetTexture2DOES_wrapper(GLenum target, GLeglImageOES image)
{
GLeglImageOES implImage =
(GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
glEGLImageTargetTexture2DOES_impl(target, implImage);
}
static void glEGLImageTargetRenderbufferStorageOES_wrapper(GLenum target, GLeglImageOES image)
{
GLeglImageOES implImage =
(GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
glEGLImageTargetRenderbufferStorageOES_impl(target, implImage);
}
__eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)
{
// eglGetProcAddress() could be the very first function called
@ -1533,6 +1556,16 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)
}
if (found) {
addr = gExtensionForwarders[slot];
if (!strcmp(procname, "glEGLImageTargetTexture2DOES")) {
glEGLImageTargetTexture2DOES_impl = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)addr;
addr = (__eglMustCastToProperFunctionPointerType)glEGLImageTargetTexture2DOES_wrapper;
}
if (!strcmp(procname, "glEGLImageTargetRenderbufferStorageOES")) {
glEGLImageTargetRenderbufferStorageOES_impl = (PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC)addr;
addr = (__eglMustCastToProperFunctionPointerType)glEGLImageTargetRenderbufferStorageOES_wrapper;
}
gGLExtentionMap.add(name, addr);
gGLExtentionSlot++;
}