VIGS/qt5: respect maru_brightness 79/25979/1
authorStanislav Vorobiov <s.vorobiov@samsung.com>
Wed, 13 Aug 2014 12:10:47 +0000 (16:10 +0400)
committerStanislav Vorobiov <s.vorobiov@samsung.com>
Wed, 13 Aug 2014 12:11:11 +0000 (16:11 +0400)
Change-Id: Ic8687f08bd03bdbb6b6984661b40eb5989f7a8b8
Signed-off-by: Stanislav Vorobiov <s.vorobiov@samsung.com>
hw/vigs/vigs_gl_backend.c
hw/vigs/vigs_gl_backend.h
hw/vigs/vigs_gl_backend_cgl.c
hw/vigs/vigs_gl_backend_glx.c
hw/vigs/vigs_gl_backend_wgl.c

index e66eb0bc3d34d980d4a9e07d0727fc3103ba3ead..23307510763634c6f8203618ab6c0e5d7576bc6c 100644 (file)
@@ -36,6 +36,7 @@
 #include "vigs_ref.h"
 #include "vigs_qt5.h"
 #include "winsys_gl.h"
+#include "hw/pci/maru_brightness.h"
 #include <math.h>
 
 extern uint32_t qt5_window_width;
@@ -193,10 +194,32 @@ static const char *g_fs_color_source_gl3 =
     "    FragColor = color;\n"
     "}\n";
 
+static const char *g_fs_dpy_source_gl2 =
+    "#version 120\n\n"
+    "uniform sampler2D tex;\n"
+    "uniform float brightness;\n"
+    "varying vec2 v_texCoord;\n"
+    "void main()\n"
+    "{\n"
+    "    gl_FragColor = texture2D(tex, v_texCoord) * brightness;\n"
+    "}\n";
+
+static const char *g_fs_dpy_source_gl3 =
+    "#version 140\n\n"
+    "uniform sampler2D tex;\n"
+    "uniform float brightness;\n"
+    "in vec2 v_texCoord;\n"
+    "out vec4 FragColor;\n"
+    "void main()\n"
+    "{\n"
+    "    FragColor = texture(tex, v_texCoord) * brightness;\n"
+    "}\n";
+
 static const char *g_fs_scale_source_gl2 =
 "#version 120\n\
 \n\
 uniform sampler2D tex;\n\
+uniform float brightness;\n\
 uniform vec2 texSize;\n\
 varying vec2 v_texCoord;\n\
 vec4 cubic(float x)\n\
@@ -243,13 +266,14 @@ texscale);\n\
 \n\
     gl_FragColor = mix(\n\
         mix(sample3, sample2, sx),\n\
-        mix(sample1, sample0, sx), sy);\n\
+        mix(sample1, sample0, sx), sy) * brightness;\n\
 }";
 
 static const char *g_fs_scale_source_gl3 =
 "#version 140\n\
 \n\
 uniform sampler2D tex;\n\
+uniform float brightness;\n\
 uniform vec2 texSize;\n\
 in vec2 v_texCoord;\n\
 out vec4 FragColor;\n\
@@ -297,7 +321,7 @@ texscale);\n\
 \n\
     FragColor = mix(\n\
         mix(sample3, sample2, sx),\n\
-        mix(sample1, sample0, sx), sy);\n\
+        mix(sample1, sample0, sx), sy) * brightness;\n\
 }";
 
 static GLuint vigs_gl_backend_alloc_tmp_texture(void *user_data,
@@ -1667,6 +1691,11 @@ static bool vigs_gl_backend_display(struct vigs_backend *backend,
         bool scale;
         GLfloat rotated_ortho[16];
         GLfloat *ortho;
+        float brightness = (float)(255 - brightness_tbl[brightness_level]) / 255.0f;
+
+        if (display_off) {
+            brightness = 0.0f;
+        }
 
         if (!gl_backend->is_gl_2 && !gl_backend->dpy_vao) {
             gl_backend->GenVertexArrays(1, &gl_backend->dpy_vao);
@@ -1710,10 +1739,12 @@ static bool vigs_gl_backend_display(struct vigs_backend *backend,
             texSize[1] = gl_backend->dpy_tex_height;
 
             gl_backend->Uniform2fv(gl_backend->dpy_scale_prog_texSize_loc, 1, texSize);
+            gl_backend->Uniform1f(gl_backend->dpy_scale_prog_brightness_loc, brightness);
         } else {
             gl_backend->UseProgram(gl_backend->dpy_tex_prog_id);
             gl_backend->UniformMatrix4fv(gl_backend->dpy_tex_prog_proj_loc, 1, GL_FALSE,
                                          ortho);
+            gl_backend->Uniform1f(gl_backend->dpy_tex_prog_brightness_loc, brightness);
         }
 
         gl_backend->BindTexture(GL_TEXTURE_2D, gl_backend->dpy_tex);
@@ -1895,7 +1926,7 @@ bool vigs_gl_backend_init(struct vigs_gl_backend *gl_backend)
     }
 
     gl_backend->dpy_tex_prog_fs_id = vigs_gl_create_shader(gl_backend,
-        (gl_backend->is_gl_2 ? g_fs_tex_source_gl2 : g_fs_tex_source_gl3),
+        (gl_backend->is_gl_2 ? g_fs_dpy_source_gl2 : g_fs_dpy_source_gl3),
         GL_FRAGMENT_SHADER);
 
     if (!gl_backend->dpy_tex_prog_fs_id) {
@@ -1913,6 +1944,7 @@ bool vigs_gl_backend_init(struct vigs_gl_backend *gl_backend)
     gl_backend->dpy_tex_prog_proj_loc = gl_backend->GetUniformLocation(gl_backend->dpy_tex_prog_id, "proj");
     gl_backend->dpy_tex_prog_vertCoord_loc = gl_backend->GetAttribLocation(gl_backend->dpy_tex_prog_id, "vertCoord");
     gl_backend->dpy_tex_prog_texCoord_loc = gl_backend->GetAttribLocation(gl_backend->dpy_tex_prog_id, "texCoord");
+    gl_backend->dpy_tex_prog_brightness_loc = gl_backend->GetUniformLocation(gl_backend->dpy_tex_prog_id, "brightness");
 
     gl_backend->dpy_scale_prog_vs_id = vigs_gl_create_shader(gl_backend,
         (gl_backend->is_gl_2 ? g_vs_tex_source_gl2 : g_vs_tex_source_gl3),
@@ -1942,6 +1974,7 @@ bool vigs_gl_backend_init(struct vigs_gl_backend *gl_backend)
     gl_backend->dpy_scale_prog_vertCoord_loc = gl_backend->GetAttribLocation(gl_backend->dpy_scale_prog_id, "vertCoord");
     gl_backend->dpy_scale_prog_texCoord_loc = gl_backend->GetAttribLocation(gl_backend->dpy_scale_prog_id, "texCoord");
     gl_backend->dpy_scale_prog_texSize_loc = gl_backend->GetUniformLocation(gl_backend->dpy_scale_prog_id, "texSize");
+    gl_backend->dpy_scale_prog_brightness_loc = gl_backend->GetUniformLocation(gl_backend->dpy_scale_prog_id, "brightness");
 
     gl_backend->Disable(GL_DEPTH_TEST);
     gl_backend->Disable(GL_BLEND);
index 450d1a22df77f0cf6bf531c900fd3e96e7afb376..98cfe990a3bf9da41045cc7fe11abd33c14bf652 100644 (file)
@@ -120,6 +120,7 @@ struct vigs_gl_backend
     void (GLAPIENTRY* Uniform4fv)(GLint location, GLsizei count, const GLfloat* value);
     void (GLAPIENTRY* UniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
     void (GLAPIENTRY* Uniform2fv)(GLint location, GLsizei count, const GLfloat* value);
+    void (GLAPIENTRY* Uniform1f)(GLint location, GLfloat v0);
 
     /*
      * @}
@@ -201,6 +202,7 @@ struct vigs_gl_backend
     GLint dpy_tex_prog_proj_loc;
     GLint dpy_tex_prog_vertCoord_loc;
     GLint dpy_tex_prog_texCoord_loc;
+    GLint dpy_tex_prog_brightness_loc;
 
     GLuint dpy_scale_prog_vs_id;
     GLuint dpy_scale_prog_fs_id;
@@ -209,6 +211,7 @@ struct vigs_gl_backend
     GLint dpy_scale_prog_vertCoord_loc;
     GLint dpy_scale_prog_texCoord_loc;
     GLint dpy_scale_prog_texSize_loc;
+    GLint dpy_scale_prog_brightness_loc;
 
     GLuint dpy_vbo;
     uint32_t dpy_vbo_size;
index 768146d2b2099123c2ff1b6c0ae7bb112b55411c..e31adeac72378145de514e083248b180dc38527e 100644 (file)
@@ -321,6 +321,7 @@ struct vigs_backend *vigs_gl_backend_create(void *display)
     VIGS_GL_GET_PROC(Uniform4fv, glUniform4fv);
     VIGS_GL_GET_PROC(UniformMatrix4fv, glUniformMatrix4fv);
     VIGS_GL_GET_PROC(Uniform2fv, glUniform2fv);
+    VIGS_GL_GET_PROC(Uniform1f, glUniform1f);
 
     VIGS_GL_GET_PROC_OPTIONAL(MapBufferRange, glMapBufferRange);
 
index 9b478dfc8dd48d399b37a5badac14ab8030843a4..ade918110009150be398e7f973d339d846a09ca1 100644 (file)
@@ -499,6 +499,7 @@ struct vigs_backend *vigs_gl_backend_create(void *display)
     VIGS_GL_GET_PROC(Uniform4fv, glUniform4fv);
     VIGS_GL_GET_PROC(UniformMatrix4fv, glUniformMatrix4fv);
     VIGS_GL_GET_PROC(Uniform2fv, glUniform2fv);
+    VIGS_GL_GET_PROC(Uniform1f, glUniform1f);
 
     VIGS_GL_GET_PROC_OPTIONAL(MapBufferRange, glMapBufferRange);
 
index 488e2a6a2388813b5aa3894dd5b6474c5a5cb3c9..eeb121ce4502fcf65695c7de3d372e58a13e5444 100644 (file)
@@ -613,6 +613,7 @@ struct vigs_backend *vigs_gl_backend_create(void *display)
     VIGS_GL_GET_PROC(Uniform4fv, glUniform4fv);
     VIGS_GL_GET_PROC(UniformMatrix4fv, glUniformMatrix4fv);
     VIGS_GL_GET_PROC(Uniform2fv, glUniform2fv);
+    VIGS_GL_GET_PROC(Uniform1f, glUniform1f);
 
     VIGS_GL_GET_PROC_OPTIONAL(MapBufferRange, glMapBufferRange);