compositor: factor out RGB shader.
Simplify RGB shader code and split off common code that could be reused. This is preparatory work for YUV shaders. Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
This commit is contained in:
parent
023f855f8d
commit
6d0304904c
@ -177,7 +177,7 @@ draw_border(struct wayland_output *output)
|
|||||||
{
|
{
|
||||||
struct wayland_compositor *c =
|
struct wayland_compositor *c =
|
||||||
(struct wayland_compositor *) output->base.compositor;
|
(struct wayland_compositor *) output->base.compositor;
|
||||||
struct weston_shader *shader = &c->base.texture_shader;
|
struct weston_shader *shader = &c->base.texture_shader_rgba;
|
||||||
GLfloat *v;
|
GLfloat *v;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
@ -763,7 +763,7 @@ weston_surface_attach(struct wl_surface *surface, struct wl_buffer *buffer)
|
|||||||
|
|
||||||
if (wl_buffer_is_shm(buffer)) {
|
if (wl_buffer_is_shm(buffer)) {
|
||||||
es->pitch = wl_shm_buffer_get_stride(buffer) / 4;
|
es->pitch = wl_shm_buffer_get_stride(buffer) / 4;
|
||||||
es->shader = &ec->texture_shader;
|
es->shader = &ec->texture_shader_rgba;
|
||||||
|
|
||||||
ensure_textures(es, 1);
|
ensure_textures(es, 1);
|
||||||
glBindTexture(GL_TEXTURE_2D, es->textures[0]);
|
glBindTexture(GL_TEXTURE_2D, es->textures[0]);
|
||||||
@ -787,7 +787,7 @@ weston_surface_attach(struct wl_surface *surface, struct wl_buffer *buffer)
|
|||||||
ec->image_target_texture_2d(GL_TEXTURE_2D, es->images[0]);
|
ec->image_target_texture_2d(GL_TEXTURE_2D, es->images[0]);
|
||||||
|
|
||||||
es->pitch = buffer->width;
|
es->pitch = buffer->width;
|
||||||
es->shader = &ec->texture_shader;
|
es->shader = &ec->texture_shader_rgba;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2760,23 +2760,34 @@ static const char vertex_shader[] =
|
|||||||
" v_texcoord = texcoord;\n"
|
" v_texcoord = texcoord;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
static const char texture_fragment_shader[] =
|
/* Declare common fragment shader uniforms */
|
||||||
|
#define FRAGMENT_SHADER_UNIFORMS \
|
||||||
|
"uniform float alpha;\n" \
|
||||||
|
"uniform float texwidth;\n" \
|
||||||
|
"uniform vec4 opaque;\n"
|
||||||
|
|
||||||
|
/* Common fragment shader init code (check texture bounds) */
|
||||||
|
#define FRAGMENT_SHADER_INIT \
|
||||||
|
" if (v_texcoord.x < 0.0 || v_texcoord.x > texwidth ||\n" \
|
||||||
|
" v_texcoord.y < 0.0 || v_texcoord.y > 1.0)\n" \
|
||||||
|
" discard;\n"
|
||||||
|
|
||||||
|
#define FRAGMENT_SHADER_EXIT \
|
||||||
|
" if (opaque.x <= v_texcoord.x && v_texcoord.x < opaque.y &&\n" \
|
||||||
|
" opaque.z <= v_texcoord.y && v_texcoord.y < opaque.w)\n" \
|
||||||
|
" gl_FragColor.a = 1.0;\n" \
|
||||||
|
" gl_FragColor = alpha * gl_FragColor;\n"
|
||||||
|
|
||||||
|
static const char texture_fragment_shader_rgba[] =
|
||||||
"precision mediump float;\n"
|
"precision mediump float;\n"
|
||||||
"varying vec2 v_texcoord;\n"
|
"varying vec2 v_texcoord;\n"
|
||||||
"uniform sampler2D tex;\n"
|
"uniform sampler2D tex;\n"
|
||||||
"uniform float alpha;\n"
|
FRAGMENT_SHADER_UNIFORMS
|
||||||
"uniform float texwidth;\n"
|
|
||||||
"uniform vec4 opaque;\n"
|
|
||||||
"void main()\n"
|
"void main()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" if (v_texcoord.x < 0.0 || v_texcoord.x > texwidth ||\n"
|
FRAGMENT_SHADER_INIT
|
||||||
" v_texcoord.y < 0.0 || v_texcoord.y > 1.0)\n"
|
|
||||||
" discard;\n"
|
|
||||||
" gl_FragColor = texture2D(tex, v_texcoord)\n;"
|
" gl_FragColor = texture2D(tex, v_texcoord)\n;"
|
||||||
" if (opaque.x <= v_texcoord.x && v_texcoord.x < opaque.y &&\n"
|
FRAGMENT_SHADER_EXIT
|
||||||
" opaque.z <= v_texcoord.y && v_texcoord.y < opaque.w)\n"
|
|
||||||
" gl_FragColor.a = 1.0;\n"
|
|
||||||
" gl_FragColor = alpha * gl_FragColor;\n"
|
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
static const char solid_fragment_shader[] =
|
static const char solid_fragment_shader[] =
|
||||||
@ -3135,8 +3146,8 @@ weston_compositor_init_gl(struct weston_compositor *ec)
|
|||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|
||||||
if (weston_shader_init(&ec->texture_shader,
|
if (weston_shader_init(&ec->texture_shader_rgba,
|
||||||
vertex_shader, texture_fragment_shader) < 0)
|
vertex_shader, texture_fragment_shader_rgba) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (weston_shader_init(&ec->solid_shader,
|
if (weston_shader_init(&ec->solid_shader,
|
||||||
vertex_shader, solid_fragment_shader) < 0)
|
vertex_shader, solid_fragment_shader) < 0)
|
||||||
|
@ -270,7 +270,7 @@ struct weston_compositor {
|
|||||||
EGLContext egl_context;
|
EGLContext egl_context;
|
||||||
EGLConfig egl_config;
|
EGLConfig egl_config;
|
||||||
GLuint fbo;
|
GLuint fbo;
|
||||||
struct weston_shader texture_shader;
|
struct weston_shader texture_shader_rgba;
|
||||||
struct weston_shader solid_shader;
|
struct weston_shader solid_shader;
|
||||||
struct weston_shader *current_shader;
|
struct weston_shader *current_shader;
|
||||||
struct wl_display *wl_display;
|
struct wl_display *wl_display;
|
||||||
|
Loading…
Reference in New Issue
Block a user