core: Implement GL_OES_EGL_image entry points
This commit is contained in:
@@ -1035,6 +1035,17 @@ struct dd_function_table {
|
||||
GLfloat width, GLfloat height);
|
||||
/*@}*/
|
||||
#endif
|
||||
|
||||
#if FEATURE_OES_EGL_image
|
||||
void (*EGLImageTargetTexture2D)(GLcontext *ctx, GLenum target,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_texture_image *texImage,
|
||||
GLeglImageOES image_handle);
|
||||
void (*EGLImageTargetRenderbufferStorage)(GLcontext *ctx,
|
||||
struct gl_renderbuffer *rb,
|
||||
void *image_handle);
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@@ -1008,6 +1008,30 @@ renderbuffer_storage(GLenum target, GLenum internalFormat,
|
||||
*/
|
||||
}
|
||||
|
||||
#if FEATURE_OES_EGL_image
|
||||
void GLAPIENTRY
|
||||
_mesa_EGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
struct gl_renderbuffer *rb;
|
||||
|
||||
if (target != GL_RENDERBUFFER) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "EGLImageTargetRenderbufferStorageOES");
|
||||
return;
|
||||
}
|
||||
|
||||
rb = ctx->CurrentRenderbuffer;
|
||||
if (!rb) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "EGLImageTargetRenderbufferStorageOES");
|
||||
return;
|
||||
}
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
|
||||
|
||||
ctx->Driver.EGLImageTargetRenderbufferStorage(ctx, rb, image);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Helper function for _mesa_GetRenderbufferParameterivEXT() and
|
||||
|
@@ -88,6 +88,9 @@ _mesa_RenderbufferStorageMultisample(GLenum target, GLsizei samples,
|
||||
GLenum internalformat,
|
||||
GLsizei width, GLsizei height);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname,
|
||||
GLint *params);
|
||||
|
@@ -122,5 +122,7 @@
|
||||
#define FEATURE_NV_fragment_program _HAVE_FULL_GL
|
||||
#define FEATURE_NV_vertex_program _HAVE_FULL_GL
|
||||
|
||||
#define FEATURE_OES_EGL_image _HAVE_FULL_GL
|
||||
|
||||
|
||||
#endif /* FEATURES_H */
|
||||
|
@@ -2448,6 +2448,47 @@ _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat,
|
||||
}
|
||||
|
||||
|
||||
#if FEATURE_OES_EGL_image
|
||||
void GLAPIENTRY
|
||||
_mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
|
||||
struct gl_texture_object *texObj;
|
||||
struct gl_texture_image *texImage;
|
||||
|
||||
if (target != GL_TEXTURE_2D) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glEGLImageTargetTexture2D(target=%d)", target);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx->NewState & _MESA_NEW_TRANSFER_STATE)
|
||||
_mesa_update_state(ctx);
|
||||
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
_mesa_lock_texture(ctx, texObj);
|
||||
|
||||
texImage = _mesa_get_tex_image(ctx, texObj, target, 0);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glEGLImageTargetTexture2D");
|
||||
} else {
|
||||
if (texImage->Data)
|
||||
ctx->Driver.FreeTexImageData( ctx, texImage );
|
||||
|
||||
ASSERT(texImage->Data == NULL);
|
||||
ctx->Driver.EGLImageTargetTexture2D(ctx, target,
|
||||
texObj, texImage, image);
|
||||
|
||||
/* state update */
|
||||
texObj->_Complete = GL_FALSE;
|
||||
ctx->NewState |= _NEW_TEXTURE;
|
||||
}
|
||||
_mesa_unlock_texture(ctx, texObj);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_TexSubImage1D( GLenum target, GLint level,
|
||||
|
@@ -165,6 +165,8 @@ _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalformat,
|
||||
GLint border, GLenum format, GLenum type,
|
||||
const GLvoid *pixels );
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_EGLImageTargetTexture2DOES( GLenum target, GLeglImageOES image );
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
|
||||
|
Reference in New Issue
Block a user