Install brightness and saturation variables for surface shader
This commit is contained in:
parent
ff1db4a4f3
commit
69367082de
@ -226,6 +226,8 @@ weston_surface_create(struct weston_compositor *compositor)
|
||||
surface->compositor = compositor;
|
||||
surface->image = EGL_NO_IMAGE_KHR;
|
||||
surface->alpha = 255;
|
||||
surface->brightness = 255;
|
||||
surface->saturation = 255;
|
||||
surface->pitch = 1;
|
||||
|
||||
surface->buffer = NULL;
|
||||
@ -822,6 +824,8 @@ weston_surface_draw(struct weston_surface *es, struct weston_output *output,
|
||||
glUniform1i(es->shader->tex_uniform, 0);
|
||||
glUniform4fv(es->shader->color_uniform, 1, es->color);
|
||||
glUniform1f(es->shader->alpha_uniform, es->alpha / 255.0);
|
||||
glUniform1f(es->shader->brightness_uniform, es->brightness / 255.0);
|
||||
glUniform1f(es->shader->saturation_uniform, es->saturation / 255.0);
|
||||
glUniform1f(es->shader->texwidth_uniform,
|
||||
(GLfloat)es->geometry.width / es->pitch);
|
||||
|
||||
@ -2185,6 +2189,8 @@ static const char texture_fragment_shader[] =
|
||||
"varying vec2 v_texcoord;\n"
|
||||
"uniform sampler2D tex;\n"
|
||||
"uniform float alpha;\n"
|
||||
"uniform float bright;\n"
|
||||
"uniform float saturation;\n"
|
||||
"uniform float texwidth;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
@ -2192,6 +2198,10 @@ static const char texture_fragment_shader[] =
|
||||
" v_texcoord.y < 0.0 || v_texcoord.y > 1.0)\n"
|
||||
" discard;\n"
|
||||
" gl_FragColor = texture2D(tex, v_texcoord)\n;"
|
||||
" float gray = dot(gl_FragColor.rgb, vec3(0.299, 0.587, 0.114));\n"
|
||||
" vec3 range = (gl_FragColor.rgb - vec3 (gray, gray, gray)) * saturation;\n"
|
||||
" gl_FragColor = vec4(vec3(gray + range), gl_FragColor.a);\n"
|
||||
" gl_FragColor = vec4(vec3(bright, bright, bright) * gl_FragColor.rgb, gl_FragColor.a);\n"
|
||||
" gl_FragColor = alpha * gl_FragColor;\n"
|
||||
"}\n";
|
||||
|
||||
@ -2253,6 +2263,8 @@ weston_shader_init(struct weston_shader *shader,
|
||||
shader->proj_uniform = glGetUniformLocation(shader->program, "proj");
|
||||
shader->tex_uniform = glGetUniformLocation(shader->program, "tex");
|
||||
shader->alpha_uniform = glGetUniformLocation(shader->program, "alpha");
|
||||
shader->brightness_uniform = glGetUniformLocation(shader->program, "bright");
|
||||
shader->saturation_uniform = glGetUniformLocation(shader->program, "saturation");
|
||||
shader->color_uniform = glGetUniformLocation(shader->program, "color");
|
||||
shader->texwidth_uniform = glGetUniformLocation(shader->program,
|
||||
"texwidth");
|
||||
|
@ -136,6 +136,8 @@ struct weston_shader {
|
||||
GLint proj_uniform;
|
||||
GLint tex_uniform;
|
||||
GLint alpha_uniform;
|
||||
GLint brightness_uniform;
|
||||
GLint saturation_uniform;
|
||||
GLint color_uniform;
|
||||
GLint texwidth_uniform;
|
||||
};
|
||||
@ -292,6 +294,8 @@ struct weston_surface {
|
||||
struct weston_shader *shader;
|
||||
GLfloat color[4];
|
||||
uint32_t alpha;
|
||||
uint32_t brightness;
|
||||
uint32_t saturation;
|
||||
|
||||
/* Surface geometry state, mutable.
|
||||
* If you change anything, set dirty = 1.
|
||||
|
Loading…
Reference in New Issue
Block a user