summaryrefslogtreecommitdiff
path: root/GLESv2/yagl_gles3_context.c
diff options
context:
space:
mode:
authorStanislav Vorobiov <s.vorobiov@samsung.com>2014-01-17 19:59:26 +0400
committerStanislav Vorobiov <s.vorobiov@samsung.com>2014-01-17 19:59:26 +0400
commit95b1ea5eb30465c74924f93439b30a643630495a (patch)
tree2630a8e0626f0695c7b60b91d6a951501f438fa4 /GLESv2/yagl_gles3_context.c
parent0a70e8a1b65c038399bf61e40db6e22f19286bfd (diff)
downloademulator-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.c39
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;
+ }
+ }
+}