summaryrefslogtreecommitdiff
path: root/GLES_common/yagl_gles_calls.c
diff options
context:
space:
mode:
Diffstat (limited to 'GLES_common/yagl_gles_calls.c')
-rw-r--r--GLES_common/yagl_gles_calls.c62
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);
}