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);
|
GLfloat width, GLfloat height);
|
||||||
/*@}*/
|
/*@}*/
|
||||||
#endif
|
#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
|
* Helper function for _mesa_GetRenderbufferParameterivEXT() and
|
||||||
|
@@ -88,6 +88,9 @@ _mesa_RenderbufferStorageMultisample(GLenum target, GLsizei samples,
|
|||||||
GLenum internalformat,
|
GLenum internalformat,
|
||||||
GLsizei width, GLsizei height);
|
GLsizei width, GLsizei height);
|
||||||
|
|
||||||
|
extern void GLAPIENTRY
|
||||||
|
_mesa_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
|
||||||
|
|
||||||
extern void GLAPIENTRY
|
extern void GLAPIENTRY
|
||||||
_mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname,
|
_mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname,
|
||||||
GLint *params);
|
GLint *params);
|
||||||
|
@@ -122,5 +122,7 @@
|
|||||||
#define FEATURE_NV_fragment_program _HAVE_FULL_GL
|
#define FEATURE_NV_fragment_program _HAVE_FULL_GL
|
||||||
#define FEATURE_NV_vertex_program _HAVE_FULL_GL
|
#define FEATURE_NV_vertex_program _HAVE_FULL_GL
|
||||||
|
|
||||||
|
#define FEATURE_OES_EGL_image _HAVE_FULL_GL
|
||||||
|
|
||||||
|
|
||||||
#endif /* FEATURES_H */
|
#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
|
void GLAPIENTRY
|
||||||
_mesa_TexSubImage1D( GLenum target, GLint level,
|
_mesa_TexSubImage1D( GLenum target, GLint level,
|
||||||
|
@@ -165,6 +165,8 @@ _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalformat,
|
|||||||
GLint border, GLenum format, GLenum type,
|
GLint border, GLenum format, GLenum type,
|
||||||
const GLvoid *pixels );
|
const GLvoid *pixels );
|
||||||
|
|
||||||
|
extern void GLAPIENTRY
|
||||||
|
_mesa_EGLImageTargetTexture2DOES( GLenum target, GLeglImageOES image );
|
||||||
|
|
||||||
extern void GLAPIENTRY
|
extern void GLAPIENTRY
|
||||||
_mesa_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
|
_mesa_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
|
||||||
|
Reference in New Issue
Block a user