diff options
-rw-r--r-- | GLES_common/yagl_gles_calls.c | 4 | ||||
-rw-r--r-- | GLES_common/yagl_gles_context.c | 16 | ||||
-rw-r--r-- | GLES_common/yagl_gles_context.h | 5 | ||||
-rw-r--r-- | GLESv1_CM/yagl_gles1_context.c | 5 | ||||
-rw-r--r-- | GLESv2/yagl_gles2_context.c | 10 | ||||
-rw-r--r-- | GLESv2/yagl_gles2_context.h | 2 | ||||
-rw-r--r-- | GLESv2/yagl_gles3_context.c | 6 |
7 files changed, 44 insertions, 4 deletions
diff --git a/GLES_common/yagl_gles_calls.c b/GLES_common/yagl_gles_calls.c index 7e5d763..6a60449 100644 --- a/GLES_common/yagl_gles_calls.c +++ b/GLES_common/yagl_gles_calls.c @@ -760,9 +760,7 @@ YAGL_API void glClear(GLbitfield mask) YAGL_GET_CTX(); - yagl_render_invalidate((mask & GL_COLOR_BUFFER_BIT)); - - yagl_host_glClear(mask); + yagl_gles_context_clear(ctx, mask); YAGL_LOG_FUNC_EXIT(NULL); } diff --git a/GLES_common/yagl_gles_context.c b/GLES_common/yagl_gles_context.c index b57d949..00c21ad 100644 --- a/GLES_common/yagl_gles_context.c +++ b/GLES_common/yagl_gles_context.c @@ -2539,3 +2539,19 @@ void yagl_gles_context_hint(struct yagl_gles_context *ctx, yagl_host_glHint(target, mode); } + +void yagl_gles_context_clear(struct yagl_gles_context *ctx, GLbitfield mask) +{ + YAGL_LOG_FUNC_SET(yagl_gles_context_clear); + + if (mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) { + YAGL_SET_ERR(GL_INVALID_VALUE); + return; + } + + yagl_render_invalidate((mask & GL_COLOR_BUFFER_BIT)); + + ctx->clear(ctx); + + yagl_host_glClear(mask); +} diff --git a/GLES_common/yagl_gles_context.h b/GLES_common/yagl_gles_context.h index ca3f43f..2962cb0 100644 --- a/GLES_common/yagl_gles_context.h +++ b/GLES_common/yagl_gles_context.h @@ -164,6 +164,8 @@ struct yagl_gles_context GLenum /*target*/, GLenum /*mode*/); + void (*clear)(struct yagl_gles_context */*ctx*/); + struct yagl_namespace framebuffers; struct yagl_namespace vertex_arrays; @@ -515,4 +517,7 @@ void yagl_gles_context_hint(struct yagl_gles_context *ctx, GLenum target, GLenum mode); +void yagl_gles_context_clear(struct yagl_gles_context *ctx, + GLbitfield mask); + #endif diff --git a/GLESv1_CM/yagl_gles1_context.c b/GLESv1_CM/yagl_gles1_context.c index f51200a..7f899cf 100644 --- a/GLESv1_CM/yagl_gles1_context.c +++ b/GLESv1_CM/yagl_gles1_context.c @@ -1556,6 +1556,10 @@ static void yagl_gles1_context_hint(struct yagl_gles_context *ctx, { } +static void yagl_gles1_context_clear(struct yagl_gles_context *ctx) +{ +} + struct yagl_client_context *yagl_gles1_context_create(struct yagl_sharegroup *sg) { struct yagl_gles1_context *gles1_ctx; @@ -1591,6 +1595,7 @@ struct yagl_client_context *yagl_gles1_context_create(struct yagl_sharegroup *sg gles1_ctx->base.validate_renderbuffer_format = &yagl_gles1_context_validate_renderbuffer_format; gles1_ctx->base.validate_framebuffer_blit = &yagl_gles1_context_validate_framebuffer_blit; gles1_ctx->base.hint = &yagl_gles1_context_hint; + gles1_ctx->base.clear = &yagl_gles1_context_clear; YAGL_LOG_FUNC_EXIT("%p", gles1_ctx); diff --git a/GLESv2/yagl_gles2_context.c b/GLESv2/yagl_gles2_context.c index fa67c75..c373e53 100644 --- a/GLESv2/yagl_gles2_context.c +++ b/GLESv2/yagl_gles2_context.c @@ -270,7 +270,7 @@ static void yagl_gles2_context_prepare_framebuffer(struct yagl_gles2_context *ct yagl_gles_framebuffer_texture2d(fb, fb->target, GL_COLOR_ATTACHMENT0 + i, - yagl_gles_framebuffer_attachment_color0, + yagl_gles_framebuffer_attachment_color0 + i, state.textarget, 0, state.texture); @@ -1548,6 +1548,13 @@ void yagl_gles2_context_hint(struct yagl_gles_context *ctx, { } +void yagl_gles2_context_clear(struct yagl_gles_context *gles_ctx) +{ + struct yagl_gles2_context *ctx = (struct yagl_gles2_context *)gles_ctx; + + yagl_gles2_context_prepare_framebuffer(ctx, ctx->base.fbo_draw); +} + int yagl_gles2_context_get_programiv(struct yagl_gles2_context *ctx, struct yagl_gles2_program *program, GLenum pname, @@ -1619,6 +1626,7 @@ struct yagl_client_context *yagl_gles2_context_create(struct yagl_sharegroup *sg gles2_ctx->base.validate_renderbuffer_format = &yagl_gles2_context_validate_renderbuffer_format; gles2_ctx->base.validate_framebuffer_blit = &yagl_gles2_context_validate_framebuffer_blit; gles2_ctx->base.hint = &yagl_gles2_context_hint; + gles2_ctx->base.clear = &yagl_gles2_context_clear; gles2_ctx->get_programiv = &yagl_gles2_context_get_programiv; gles2_ctx->pre_use_program = &yagl_gles2_context_pre_use_program; gles2_ctx->pre_link_program = &yagl_gles2_context_pre_link_program; diff --git a/GLESv2/yagl_gles2_context.h b/GLESv2/yagl_gles2_context.h index d306223..a2ae3e4 100644 --- a/GLESv2/yagl_gles2_context.h +++ b/GLESv2/yagl_gles2_context.h @@ -282,6 +282,8 @@ void yagl_gles2_context_hint(struct yagl_gles_context *ctx, GLenum target, GLenum mode); +void yagl_gles2_context_clear(struct yagl_gles_context *ctx); + int yagl_gles2_context_get_programiv(struct yagl_gles2_context *ctx, struct yagl_gles2_program *program, GLenum pname, diff --git a/GLESv2/yagl_gles3_context.c b/GLESv2/yagl_gles3_context.c index 846ac7f..7ac5e4f 100644 --- a/GLESv2/yagl_gles3_context.c +++ b/GLESv2/yagl_gles3_context.c @@ -1583,6 +1583,11 @@ static void yagl_gles3_context_hint(struct yagl_gles_context *gles_ctx, } } +static void yagl_gles3_context_clear(struct yagl_gles_context *gles_ctx) +{ + yagl_gles2_context_clear(gles_ctx); +} + static int yagl_gles3_context_get_programiv(struct yagl_gles2_context *ctx, struct yagl_gles2_program *program, GLenum pname, @@ -1688,6 +1693,7 @@ struct yagl_client_context *yagl_gles3_context_create(struct yagl_sharegroup *sg gles3_ctx->base.base.validate_renderbuffer_format = &yagl_gles3_context_validate_renderbuffer_format; gles3_ctx->base.base.validate_framebuffer_blit = &yagl_gles3_context_validate_framebuffer_blit; gles3_ctx->base.base.hint = &yagl_gles3_context_hint; + gles3_ctx->base.base.clear = &yagl_gles3_context_clear; gles3_ctx->base.get_programiv = &yagl_gles3_context_get_programiv; gles3_ctx->base.pre_use_program = &yagl_gles3_context_pre_use_program; gles3_ctx->base.pre_link_program = &yagl_gles3_context_pre_link_program; |