---
 src/compositor.h     |  3 +++
 src/gles2-renderer.c | 18 ++++++++++++++++--
 src/shell.c          | 11 +++++++++++
 3 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/src/compositor.h b/src/compositor.h
index c24545d..70080ce 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -292,6 +292,7 @@ struct weston_compositor {
        struct weston_shader texture_shader_y_uv;
        struct weston_shader texture_shader_y_u_v;
        struct weston_shader texture_shader_y_xuxv;
+       struct weston_shader invert_color_shader;
        struct weston_shader solid_shader;
        struct weston_shader *current_shader;
        struct wl_display *wl_display;
@@ -336,6 +337,8 @@ struct weston_compositor {
        struct weston_plane primary_plane;
        int fan_debug;
 
+       int invert_color;
+
        uint32_t focus;
 
        struct weston_renderer *renderer;
diff --git a/src/gles2-renderer.c b/src/gles2-renderer.c
index 1136cba..44604c2 100644
--- a/src/gles2-renderer.c
+++ b/src/gles2-renderer.c
@@ -646,7 +646,7 @@ weston_compositor_use_shader(struct weston_compositor 
*compositor,
 static void
 repaint_surfaces_start(struct weston_output *output, pixman_region32_t *damage)
 {
-       output->indirect_drawing = 0 && !output->indirect_disable;
+       output->indirect_drawing = output->compositor->invert_color && 
!output->indirect_disable;
 
        if(output->indirect_drawing) {
                if(!output->indirect_fbo)
@@ -688,7 +688,7 @@ repaint_surfaces_finish(struct weston_output *output, 
pixman_region32_t *damage)
        if(output->indirect_drawing) {
                glBindFramebuffer(GL_FRAMEBUFFER, 0);
 
-               struct weston_shader *shader = &ec->texture_shader_rgba;
+               struct weston_shader *shader = &ec->invert_color_shader;
 
                weston_compositor_use_shader(ec, shader);
 
@@ -1124,6 +1124,17 @@ static const char texture_fragment_shader_y_xuxv[] =
        FRAGMENT_CONVERT_YUV
        "}\n";
 
+static const char invert_color_fragment_shader[] =
+       "precision mediump float;\n"
+       "varying vec2 v_texcoord;\n"
+       "uniform sampler2D tex;\n"
+       "uniform float alpha;\n"
+       "void main()\n"
+       "{\n"
+       "   gl_FragColor = texture2D(tex, v_texcoord);\n;"
+       "   gl_FragColor.rgb = vec3(1.0) - gl_FragColor.rgb;\n;"
+       "}\n";
+
 static const char solid_fragment_shader[] =
        "precision mediump float;\n"
        "uniform vec4 color;\n"
@@ -1386,6 +1397,9 @@ gles2_renderer_init(struct weston_compositor *ec)
        if (weston_shader_init(&ec->texture_shader_y_xuxv,
                               vertex_shader, texture_fragment_shader_y_xuxv) < 
0)
                return -1;
+       if (weston_shader_init(&ec->invert_color_shader,
+                              vertex_shader, invert_color_fragment_shader) < 0)
+               return -1;
        if (weston_shader_init(&ec->solid_shader,
                             vertex_shader, solid_fragment_shader) < 0)
                return -1;
diff --git a/src/shell.c b/src/shell.c
index dba54f7..44b281f 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -3488,6 +3488,15 @@ debug_repaint_binding(struct wl_seat *seat, uint32_t 
time, uint32_t key,
        }
 }
 
+static void
+invert_color_binding(struct wl_seat *seat, uint32_t time, uint32_t key,
+                         void *data)
+{
+       struct desktop_shell *shell = data;
+       struct weston_compositor *compositor = shell->compositor;
+       compositor->invert_color = !compositor->invert_color;
+       weston_compositor_damage_all(compositor);
+}
 
 static void
 fan_debug_repaint_binding(struct wl_seat *seat, uint32_t time, uint32_t key,
@@ -3664,6 +3673,8 @@ shell_add_bindings(struct weston_compositor *ec, struct 
desktop_shell *shell)
                                          backlight_binding, ec);
        weston_compositor_add_key_binding(ec, KEY_SPACE, mod | MODIFIER_SHIFT,
                                          debug_repaint_binding, shell);
+       weston_compositor_add_key_binding(ec, KEY_I, mod | MODIFIER_ALT,
+                                         invert_color_binding, shell);
        weston_compositor_add_key_binding(ec, KEY_SPACE, mod | MODIFIER_ALT,
                                          fan_debug_repaint_binding, shell);
        weston_compositor_add_key_binding(ec, KEY_K, mod,
-- 
1.7.12

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to