diff options
Diffstat (limited to 'GLES_common/yagl_gles_calls.c')
-rw-r--r-- | GLES_common/yagl_gles_calls.c | 62 |
1 files changed, 54 insertions, 8 deletions
diff --git a/GLES_common/yagl_gles_calls.c b/GLES_common/yagl_gles_calls.c index a87f4c5..41e3368 100644 --- a/GLES_common/yagl_gles_calls.c +++ b/GLES_common/yagl_gles_calls.c @@ -420,6 +420,8 @@ YAGL_API void glBindBuffer(GLenum target, GLuint buffer) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (buffer != 0) { buffer_obj = (struct yagl_gles_buffer*)yagl_sharegroup_acquire_object(ctx->base.sg, YAGL_NS_BUFFER, buffer); @@ -441,6 +443,8 @@ YAGL_API void glBindBuffer(GLenum target, GLuint buffer) out: yagl_gles_buffer_release(buffer_obj); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -452,6 +456,8 @@ void glBindFramebuffer(GLenum target, GLuint framebuffer) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (framebuffer != 0) { framebuffer_obj = (struct yagl_gles_framebuffer*)yagl_namespace_acquire(&ctx->framebuffers, framebuffer); @@ -473,6 +479,8 @@ void glBindFramebuffer(GLenum target, GLuint framebuffer) out: yagl_gles_framebuffer_release(framebuffer_obj); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -484,6 +492,8 @@ void glBindRenderbuffer(GLenum target, GLuint renderbuffer) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (renderbuffer != 0) { renderbuffer_obj = (struct yagl_gles_renderbuffer*)yagl_sharegroup_acquire_object(ctx->base.sg, YAGL_NS_RENDERBUFFER, renderbuffer); @@ -505,6 +515,8 @@ void glBindRenderbuffer(GLenum target, GLuint renderbuffer) out: yagl_gles_renderbuffer_release(renderbuffer_obj); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -517,6 +529,8 @@ YAGL_API void glBindTexture(GLenum target, GLuint texture) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (!yagl_gles_context_validate_texture_target(ctx, target, &texture_target)) { YAGL_SET_ERR(GL_INVALID_ENUM); goto out; @@ -527,14 +541,8 @@ YAGL_API void glBindTexture(GLenum target, GLuint texture) YAGL_NS_TEXTURE, texture); if (!texture_obj) { - texture_obj = yagl_gles_texture_create(); - - if (!texture_obj) { - goto out; - } - - texture_obj = (struct yagl_gles_texture*)yagl_sharegroup_add_named(ctx->base.sg, - YAGL_NS_TEXTURE, texture, &texture_obj->base); + YAGL_SET_ERR(GL_INVALID_OPERATION); + goto out; } } @@ -543,6 +551,8 @@ YAGL_API void glBindTexture(GLenum target, GLuint texture) out: yagl_gles_texture_release(texture_obj); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1029,6 +1039,8 @@ YAGL_API void glDeleteBuffers(GLsizei n, const GLuint *buffers) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1045,6 +1057,8 @@ YAGL_API void glDeleteBuffers(GLsizei n, const GLuint *buffers) } out: + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1056,6 +1070,8 @@ void glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1071,6 +1087,8 @@ void glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers) } out: + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1082,6 +1100,8 @@ void glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1098,6 +1118,8 @@ void glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers) } out: + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1109,6 +1131,8 @@ YAGL_API void glDeleteTextures(GLsizei n, const GLuint *textures) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1126,6 +1150,8 @@ YAGL_API void glDeleteTextures(GLsizei n, const GLuint *textures) } out: + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1411,6 +1437,8 @@ YAGL_API void glGenBuffers(GLsizei n, GLuint *buffer_names) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1442,6 +1470,8 @@ out: } yagl_free(buffers); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1469,6 +1499,8 @@ void glGenFramebuffers(GLsizei n, GLuint *framebuffer_names) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1499,6 +1531,8 @@ out: } yagl_free(framebuffers); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1511,6 +1545,8 @@ void glGenRenderbuffers(GLsizei n, GLuint *renderbuffer_names) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1542,6 +1578,8 @@ out: } yagl_free(renderbuffers); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -1554,6 +1592,8 @@ YAGL_API void glGenTextures(GLsizei n, GLuint *texture_names) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + if (n < 0) { YAGL_SET_ERR(GL_INVALID_VALUE); goto out; @@ -1585,6 +1625,8 @@ out: } yagl_free(textures); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } @@ -2432,6 +2474,8 @@ YAGL_API void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) YAGL_GET_CTX(); + yagl_sharegroup_mutex_lock_if_shared(ctx->base.sg); + switch (target) { case GL_TEXTURE_2D: texture_target = yagl_gles_texture_target_2d; @@ -2464,6 +2508,8 @@ YAGL_API void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) out: yagl_gles_image_release(image_obj); + yagl_sharegroup_mutex_unlock_if_shared(ctx->base.sg); + YAGL_LOG_FUNC_EXIT(NULL); } |