diff options
author | Stanislav Vorobiov <s.vorobiov@samsung.com> | 2014-01-17 19:59:26 +0400 |
---|---|---|
committer | Stanislav Vorobiov <s.vorobiov@samsung.com> | 2014-01-17 19:59:26 +0400 |
commit | 95b1ea5eb30465c74924f93439b30a643630495a (patch) | |
tree | 2630a8e0626f0695c7b60b91d6a951501f438fa4 /GLESv2/yagl_gles3_context.c | |
parent | 0a70e8a1b65c038399bf61e40db6e22f19286bfd (diff) | |
download | emulator-yagl-95b1ea5eb30465c74924f93439b30a643630495a.tar.gz emulator-yagl-95b1ea5eb30465c74924f93439b30a643630495a.tar.bz2 emulator-yagl-95b1ea5eb30465c74924f93439b30a643630495a.zip |
YaGL: Samplers implemented
Change-Id: I90b08b9cf07b97daa4578de8925f15fa97b34c0a
Diffstat (limited to 'GLESv2/yagl_gles3_context.c')
-rw-r--r-- | GLESv2/yagl_gles3_context.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/GLESv2/yagl_gles3_context.c b/GLESv2/yagl_gles3_context.c index 1c996a5..3eedc29 100644 --- a/GLESv2/yagl_gles3_context.c +++ b/GLESv2/yagl_gles3_context.c @@ -5,6 +5,8 @@ #include "yagl_gles3_query.h" #include "yagl_gles2_utils.h" #include "yagl_gles_buffer.h" +#include "yagl_gles_texture_unit.h" +#include "yagl_gles_sampler.h" #include "yagl_log.h" #include "yagl_malloc.h" #include "yagl_state.h" @@ -268,6 +270,7 @@ static int yagl_gles3_context_get_integerv(struct yagl_gles_context *ctx, { int processed = 1; struct yagl_gles3_context *gles3_ctx = (struct yagl_gles3_context*)ctx; + struct yagl_gles_sampler *sampler; switch (pname) { case GL_MAX_UNIFORM_BUFFER_BINDINGS: @@ -306,6 +309,11 @@ static int yagl_gles3_context_get_integerv(struct yagl_gles_context *ctx, *params = gles3_ctx->tfbo ? gles3_ctx->tfbo->base.local_name : 0; *num_params = 1; break; + case GL_SAMPLER_BINDING: + sampler = yagl_gles_context_get_active_texture_unit(ctx)->sampler; + *params = sampler ? sampler->base.local_name : 0; + *num_params = 1; + break; default: processed = 0; break; @@ -1020,3 +1028,34 @@ int yagl_gles3_context_acquire_active_query(struct yagl_gles3_context *ctx, return 1; } + +int yagl_gles3_context_bind_sampler(struct yagl_gles3_context *ctx, + GLuint unit, + struct yagl_gles_sampler *sampler) +{ + if (unit > ctx->base.base.num_texture_units) { + return 0; + } + + yagl_gles_sampler_acquire(sampler); + yagl_gles_sampler_release(ctx->base.base.texture_units[unit].sampler); + ctx->base.base.texture_units[unit].sampler = sampler; + + yagl_gles_sampler_bind(sampler, unit); + + return 1; +} + +void yagl_gles3_context_unbind_sampler(struct yagl_gles3_context *ctx, + yagl_object_name sampler_local_name) +{ + int i; + + for (i = 0; i < ctx->base.base.num_texture_units; ++i) { + if (ctx->base.base.texture_units[i].sampler && + (ctx->base.base.texture_units[i].sampler->base.local_name == sampler_local_name)) { + yagl_gles_sampler_release(ctx->base.base.texture_units[i].sampler); + ctx->base.base.texture_units[i].sampler = NULL; + } + } +} |