[Cogl] [PATCH 1/2] Fix point sprite coordinates in shaders on GLES2

Neil Roberts neil at linux.intel.com
Mon Jul 2 06:52:43 PDT 2012


When using the GLES2 driver with a pipeline layer that has point
sprite coordinates enabled it extracts the texture coordinates from
the gl_PointCoord builtin instead of cogl_tex_coord_in[*].
gl_PointCoord is not quite the same as the regular texture coordinates
because it is only a vec2 instead of a vec4. This used to work ok
because either set of texture coordinates would always immediately be
accessed using a swizzle of '.st' so it would effectively be converted
to a vec2 anyway. However since the snippet hook for texture lookups
was added the texture coordinates are now passed to a function to
perform the actual lookup instead. This function always takes a vec4
so the shader would not compile. This patch fixes it to construct a
vec4 from gl_PointCoord by setting the third and fourth components to
0.0 and 1.0.
---
 cogl/cogl-pipeline-fragend-glsl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cogl/cogl-pipeline-fragend-glsl.c b/cogl/cogl-pipeline-fragend-glsl.c
index c2c0370..d4e5a29 100644
--- a/cogl/cogl-pipeline-fragend-glsl.c
+++ b/cogl/cogl-pipeline-fragend-glsl.c
@@ -425,7 +425,7 @@ ensure_texture_lookup_generated (CoglPipelineShaderState *shader_state,
       cogl_pipeline_get_layer_point_sprite_coords_enabled (pipeline,
                                                            layer->index))
     g_string_append_printf (shader_state->source,
-                            "gl_PointCoord");
+                            "vec4 (gl_PointCoord, 0.0, 1.0)");
   else
     g_string_append_printf (shader_state->source,
                             "cogl_tex_coord_in[%d]",
-- 
1.7.11.3.g3c3efa5



More information about the Cogl mailing list