From 3429a72597044a82f6ab2b4f5530f9489d6feff9 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Tue, 20 Dec 2011 16:38:25 +0200 Subject: [PATCH] compositor: fix uniform handling for fade_output() fade_output() is strange in that it manufactures a wlsc_surface object by hand, and then calls wlsc_surface_draw() on it. Valgrind complained, that wlsc_surface_draw() accesses uninitialised data: wlsc_surface::alpha. fade_output() forgets to set it. Initialise surface.alpha in fade_output(). Specifically, set it to compositor->current_alpha to deliberatly avoid the gluniform1f() call in wlsc_surface_draw(). fade_output() binds a different GL shader program than wlsc_surface_draw() expects. This program does not have a uniform called "alpha", and the uniform location given in glUniform1f() is not for this program anyway. A hint of that is the runtime error: Mesa: User error: GL_INVALID_OPERATION in glUniform(type mismatch) Fixing this seems to get rid of half a thousand of Valgrind errors, and of course the Mesa user error. Signed-off-by: Pekka Paalanen --- compositor/compositor.c | 1 + 1 file changed, 1 insertion(+) diff --git a/compositor/compositor.c b/compositor/compositor.c index 19af47d7..4dc99cb3 100644 --- a/compositor/compositor.c +++ b/compositor/compositor.c @@ -664,6 +664,7 @@ fade_output(struct wlsc_output *output, surface.height = output->current->height; surface.texture = GL_NONE; surface.transform = NULL; + surface.alpha = compositor->current_alpha; if (tint <= 1.0) surface.visual = WLSC_PREMUL_ARGB_VISUAL;