diff --git a/cogl/cogl-pipeline-fragend-glsl.c b/cogl/cogl-pipeline-fragend-glsl.c
index ccd0da833..c0f2ad111 100644
--- a/cogl/cogl-pipeline-fragend-glsl.c
+++ b/cogl/cogl-pipeline-fragend-glsl.c
@@ -417,12 +417,20 @@ ensure_texture_lookup_generated (CoglPipelineShaderState *shader_state,
{
int unit_index = _cogl_pipeline_layer_get_unit_index (layer);
CoglPipelineSnippetData snippet_data;
+ CoglTextureType texture_type;
+ const char *target_string, *tex_coord_swizzle;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (shader_state->unit_state[unit_index].sampled)
return;
+ texture_type =
+ _cogl_pipeline_layer_get_texture_type (layer);
+ get_texture_target_string (texture_type,
+ &target_string,
+ &tex_coord_swizzle);
+
shader_state->unit_state[unit_index].sampled = TRUE;
g_string_append_printf (shader_state->header,
@@ -430,7 +438,9 @@ ensure_texture_lookup_generated (CoglPipelineShaderState *shader_state,
layer->index);
g_string_append_printf (shader_state->source,
- " cogl_texel%i = cogl_texture_lookup%i (",
+ " cogl_texel%i = cogl_texture_lookup%i ("
+ "cogl_sampler%i, ",
+ layer->index,
layer->index,
layer->index);
@@ -458,28 +468,22 @@ ensure_texture_lookup_generated (CoglPipelineShaderState *shader_state,
to be replaced */
if (!has_replace_hook (layer, COGL_SNIPPET_HOOK_TEXTURE_LOOKUP))
{
- CoglTextureType texture_type =
- _cogl_pipeline_layer_get_texture_type (layer);
- const char *target_string, *tex_coord_swizzle;
-
- get_texture_target_string (texture_type,
- &target_string,
- &tex_coord_swizzle);
-
g_string_append_printf (shader_state->header,
"vec4\n"
- "cogl_real_texture_lookup%i (vec4 coords)\n"
+ "cogl_real_texture_lookup%i (sampler%s tex,\n"
+ " vec4 coords)\n"
"{\n"
" return ",
- layer->index);
+ layer->index,
+ target_string);
if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_DISABLE_TEXTURING)))
g_string_append (shader_state->header,
"vec4 (1.0, 1.0, 1.0, 1.0);\n");
else
g_string_append_printf (shader_state->header,
- "texture%s (cogl_sampler%i, coords.%s);\n",
- target_string, layer->index, tex_coord_swizzle);
+ "texture%s (tex, coords.%s);\n",
+ target_string, tex_coord_swizzle);
g_string_append (shader_state->header, "}\n");
}
@@ -496,8 +500,10 @@ ensure_texture_lookup_generated (CoglPipelineShaderState *shader_state,
layer->index);
snippet_data.return_type = "vec4";
snippet_data.return_variable = "cogl_texel";
- snippet_data.arguments = "cogl_tex_coord";
- snippet_data.argument_declarations = "vec4 cogl_tex_coord";
+ snippet_data.arguments = "cogl_sampler, cogl_tex_coord";
+ snippet_data.argument_declarations =
+ g_strdup_printf ("sampler%s cogl_sampler, vec4 cogl_tex_coord",
+ target_string);
snippet_data.source_buf = shader_state->header;
_cogl_pipeline_snippet_generate_code (&snippet_data);
@@ -505,6 +511,7 @@ ensure_texture_lookup_generated (CoglPipelineShaderState *shader_state,
g_free ((char *) snippet_data.chain_function);
g_free ((char *) snippet_data.final_name);
g_free ((char *) snippet_data.function_prefix);
+ g_free ((char *) snippet_data.argument_declarations);
}
static void
diff --git a/cogl/cogl-snippet.h b/cogl/cogl-snippet.h
index cb168838d..88a49d268 100644
--- a/cogl/cogl-snippet.h
+++ b/cogl/cogl-snippet.h
@@ -515,11 +515,13 @@ typedef struct _CoglSnippet CoglSnippet;
* alter the returned texel.
*
*
- * Within the snippet code for this hook there are two extra variables
- * available. ‘cogl_tex_coord’ is a vec4 which contains the texture
- * coordinates that will be used for the texture lookup this can be
+ * Within the snippet code for this hook there are three extra
+ * variables available. ‘cogl_sampler’ is a sampler object
+ * representing the sampler for the layer where the snippet is
+ * attached. ‘cogl_tex_coord’ is a vec4 which contains the texture
+ * coordinates that will be used for the texture lookup. This can be
* modified. ‘cogl_texel’ will contain the result of the texture
- * lookup. This can be modified.
+ * lookup. This can also be modified.
*
*
* The ‘declarations’ string in @snippet will be inserted in the