#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;
" 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\
\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\
\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,
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);
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);
}
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) {
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),
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);
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);
/*
* @}
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;
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;