summaryrefslogtreecommitdiff
path: root/gsk
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2019-04-24 12:56:44 +0200
committerTimm Bäder <mail@baedert.org>2019-04-24 13:29:45 +0200
commit91bbe6ef9518e42904d08f9ec6acbaf62eda2387 (patch)
tree6516ae2c8f4c9b76350c1a6378cb03989945f13b /gsk
parent34fcfb154ab2e0cd1d51120a9b11a83b4868c9ad (diff)
downloadgtk+-91bbe6ef9518e42904d08f9ec6acbaf62eda2387.tar.gz
gl renderer: Sync gpu and cpu default alpha value
Otherwise we might end up not passing the new value to the GPU.
Diffstat (limited to 'gsk')
-rw-r--r--gsk/gl/gskglrenderer.c4
-rw-r--r--gsk/gl/gskglrenderops.c16
-rw-r--r--gsk/gl/gskglrenderopsprivate.h2
3 files changed, 19 insertions, 3 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 1dafe4521e..1ee037feb7 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -2927,11 +2927,11 @@ gsk_gl_renderer_do_render (GskRenderer *renderer,
gsk_gl_glyph_cache_begin_frame (&self->glyph_cache);
gsk_gl_shadow_cache_begin_frame (&self->shadow_cache, self->gl_driver);
- memset (&render_op_builder, 0, sizeof (render_op_builder));
+ /* TODO: REALLY USE ONE BUILDER FOREVER! shader state is not per-frame... */
+ ops_init (&render_op_builder);
render_op_builder.renderer = self;
render_op_builder.current_projection = projection;
render_op_builder.current_viewport = *viewport;
- render_op_builder.current_opacity = 1.0f;
render_op_builder.render_ops = self->render_ops;
ops_set_modelview (&render_op_builder, &modelview,
scale_factor == 1 ? GSK_TRANSFORM_CATEGORY_IDENTITY : GSK_TRANSFORM_CATEGORY_2D_AFFINE);
diff --git a/gsk/gl/gskglrenderops.c b/gsk/gl/gskglrenderops.c
index beb94a5967..f4c887fa59 100644
--- a/gsk/gl/gskglrenderops.c
+++ b/gsk/gl/gskglrenderops.c
@@ -150,6 +150,22 @@ ops_transform_bounds_modelview (const RenderOpBuilder *builder,
}
void
+ops_init (RenderOpBuilder *builder)
+{
+ int i;
+
+ memset (builder, 0, sizeof (*builder));
+
+ builder->current_opacity = 1.0f;
+
+ for (i = 0; i < GL_N_PROGRAMS; i ++)
+ {
+ builder->program_state[i].opacity = 1.0f;
+ }
+
+}
+
+void
ops_set_program (RenderOpBuilder *builder,
const Program *program)
{
diff --git a/gsk/gl/gskglrenderopsprivate.h b/gsk/gl/gskglrenderopsprivate.h
index f54440aa30..a2608b7450 100644
--- a/gsk/gl/gskglrenderopsprivate.h
+++ b/gsk/gl/gskglrenderopsprivate.h
@@ -277,7 +277,7 @@ void ops_dump_framebuffer (RenderOpBuilder *builder,
const char *filename,
int width,
int height);
-
+void ops_init (RenderOpBuilder *builder);
void ops_finish (RenderOpBuilder *builder);
void ops_push_modelview (RenderOpBuilder *builder,
const graphene_matrix_t *mv,