summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-03-13 14:29:34 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-03-14 16:49:31 -0400
commit4aa570ba8865ca1862456b21d219b69757378123 (patch)
tree31c6a0af50c845400dbda42ad802c7ef1fa3be4c
parent233969e9e4240ac03be67f037587390cb0eec1d9 (diff)
downloadgtk+-4aa570ba8865ca1862456b21d219b69757378123.tar.gz
ngl: Drop gsk_ngl_render_job_set_color
Colors are not state that we carry across draw ops, so setting the color on the render job doesn't make much sense. Instead, pass the color to the various draw calls. Add a few new ones for that purpose. Also, shorten the names of some by going from 'load_vertices_from_offscreen' to 'draw_offscreen'.
-rw-r--r--gsk/ngl/gsknglrenderjob.c417
1 files changed, 207 insertions, 210 deletions
diff --git a/gsk/ngl/gsknglrenderjob.c b/gsk/ngl/gsknglrenderjob.c
index 94f56f63de..6b28515d66 100644
--- a/gsk/ngl/gsknglrenderjob.c
+++ b/gsk/ngl/gsknglrenderjob.c
@@ -142,9 +142,6 @@ struct _GskNglRenderJob
/* Our current alpha state as we process nodes */
float alpha;
- /* Our current color state as we process nodes */
- GdkRGBA color;
-
/* Offset (delta x,y) as we process nodes. Occasionally this is merged into
* a transform that is referenced from child transform nodes.
*/
@@ -398,13 +395,6 @@ gsk_ngl_render_job_set_alpha (GskNglRenderJob *job,
return alpha;
}
-static inline void
-gsk_ngl_render_job_set_color (GskNglRenderJob *job,
- const GdkRGBA *color)
-{
- job->color = *color;
-}
-
static void
extract_matrix_metadata (GskNglRenderModelview *modelview)
{
@@ -894,70 +884,25 @@ gsk_ngl_render_job_draw_coords (GskNglRenderJob *job,
float min_u,
float min_v,
float max_u,
- float max_v)
+ float max_v,
+ const GdkRGBA *color)
{
GskNglDrawVertex *vertices = gsk_ngl_command_queue_add_vertices (job->command_queue);
- vertices[0].position[0] = min_x;
- vertices[0].position[1] = min_y;
- vertices[0].uv[0] = min_u;
- vertices[0].uv[1] = min_v;
- vertices[0].color[0] = job->color.red;
- vertices[0].color[1] = job->color.green;
- vertices[0].color[2] = job->color.blue;
- vertices[0].color[3] = job->color.alpha;
-
- vertices[1].position[0] = min_x;
- vertices[1].position[1] = max_y;
- vertices[1].uv[0] = min_u;
- vertices[1].uv[1] = max_v;
- vertices[1].color[0] = job->color.red;
- vertices[1].color[1] = job->color.green;
- vertices[1].color[2] = job->color.blue;
- vertices[1].color[3] = job->color.alpha;
-
- vertices[2].position[0] = max_x;
- vertices[2].position[1] = min_y;
- vertices[2].uv[0] = max_u;
- vertices[2].uv[1] = min_v;
- vertices[2].color[0] = job->color.red;
- vertices[2].color[1] = job->color.green;
- vertices[2].color[2] = job->color.blue;
- vertices[2].color[3] = job->color.alpha;
-
- vertices[3].position[0] = max_x;
- vertices[3].position[1] = max_y;
- vertices[3].uv[0] = max_u;
- vertices[3].uv[1] = max_v;
- vertices[3].color[0] = job->color.red;
- vertices[3].color[1] = job->color.green;
- vertices[3].color[2] = job->color.blue;
- vertices[3].color[3] = job->color.alpha;
-
- vertices[4].position[0] = min_x;
- vertices[4].position[1] = max_y;
- vertices[4].uv[0] = min_u;
- vertices[4].uv[1] = max_v;
- vertices[4].color[0] = job->color.red;
- vertices[4].color[1] = job->color.green;
- vertices[4].color[2] = job->color.blue;
- vertices[4].color[3] = job->color.alpha;
-
- vertices[5].position[0] = max_x;
- vertices[5].position[1] = min_y;
- vertices[5].uv[0] = max_u;
- vertices[5].uv[1] = min_v;
- vertices[5].color[0] = job->color.red;
- vertices[5].color[1] = job->color.green;
- vertices[5].color[2] = job->color.blue;
- vertices[5].color[3] = job->color.alpha;
+ vertices[0] = (GskNglDrawVertex) { { min_x, min_y }, { min_u, min_v }, { color->red, color->green, color->blue, color->alpha } };
+ vertices[1] = (GskNglDrawVertex) { { min_x, max_y }, { min_u, max_v }, { color->red, color->green, color->blue, color->alpha } };
+ vertices[2] = (GskNglDrawVertex) { { max_x, min_y }, { max_u, min_v }, { color->red, color->green, color->blue, color->alpha } };
+ vertices[3] = (GskNglDrawVertex) { { max_x, max_y }, { max_u, max_v }, { color->red, color->green, color->blue, color->alpha } };
+ vertices[4] = (GskNglDrawVertex) { { min_x, max_y }, { min_u, max_v }, { color->red, color->green, color->blue, color->alpha } };
+ vertices[5] = (GskNglDrawVertex) { { max_x, min_y }, { max_u, min_v }, { color->red, color->green, color->blue, color->alpha } };
}
/* load_vertex_data_with_region */
static inline void
-gsk_ngl_render_job_load_vertices_from_offscreen (GskNglRenderJob *job,
- const graphene_rect_t *bounds,
- const GskNglRenderOffscreen *offscreen)
+gsk_ngl_render_job_draw_offscreen_with_color (GskNglRenderJob *job,
+ const graphene_rect_t *bounds,
+ const GskNglRenderOffscreen *offscreen,
+ const GdkRGBA *color)
{
float min_x = job->offset_x + bounds->origin.x;
float min_y = job->offset_y + bounds->origin.y;
@@ -968,27 +913,59 @@ gsk_ngl_render_job_load_vertices_from_offscreen (GskNglRenderJob *jo
gsk_ngl_render_job_draw_coords (job,
min_x, min_y, max_x, max_y,
- offscreen->area.x, y1, offscreen->area.x2, y2);
+ offscreen->area.x, y1, offscreen->area.x2, y2,
+ color);
+}
+
+static inline void
+gsk_ngl_render_job_draw_offscreen (GskNglRenderJob *job,
+ const graphene_rect_t *bounds,
+ const GskNglRenderOffscreen *offscreen)
+{
+ gsk_ngl_render_job_draw_offscreen_with_color (job, bounds, offscreen, &(GdkRGBA) { 0.f, 0.f, 0.f, 0.f });
}
/* load_float_vertex_data */
static inline void
-gsk_ngl_render_job_draw (GskNglRenderJob *job,
- float x,
- float y,
- float width,
- float height)
+gsk_ngl_render_job_draw_with_color (GskNglRenderJob *job,
+ float x,
+ float y,
+ float width,
+ float height,
+ const GdkRGBA *color)
{
float min_x = job->offset_x + x;
float min_y = job->offset_y + y;
float max_x = min_x + width;
float max_y = min_y + height;
- gsk_ngl_render_job_draw_coords (job, min_x, min_y, max_x, max_y, 0, 0, 1, 1);
+ gsk_ngl_render_job_draw_coords (job, min_x, min_y, max_x, max_y, 0, 0, 1, 1, color);
+}
+
+static inline void
+gsk_ngl_render_job_draw (GskNglRenderJob *job,
+ float x,
+ float y,
+ float width,
+ float height)
+{
+ gsk_ngl_render_job_draw_with_color (job, x, y, width, height, &(GdkRGBA) { 0.f, 0.f, 0.f, 0.f });
}
/* load_vertex_data */
static inline void
+gsk_ngl_render_job_draw_rect_with_color (GskNglRenderJob *job,
+ const graphene_rect_t *bounds,
+ const GdkRGBA *color)
+{
+ gsk_ngl_render_job_draw_with_color (job,
+ bounds->origin.x,
+ bounds->origin.y,
+ bounds->size.width,
+ bounds->size.height,
+ color);
+}
+static inline void
gsk_ngl_render_job_draw_rect (GskNglRenderJob *job,
const graphene_rect_t *bounds)
{
@@ -1009,7 +986,10 @@ gsk_ngl_render_job_draw_offscreen_rect (GskNglRenderJob *job,
float max_x = min_x + bounds->size.width;
float max_y = min_y + bounds->size.height;
- gsk_ngl_render_job_draw_coords (job, min_x, min_y, max_x, max_y, 0, 1, 1, 0);
+ gsk_ngl_render_job_draw_coords (job,
+ min_x, min_y, max_x, max_y,
+ 0, 1, 1, 0,
+ &(GdkRGBA) { 0.f, 0.f, 0.f, 0.f } );
}
static inline void
@@ -1265,7 +1245,10 @@ blur_offscreen (GskNglRenderJob *job,
gsk_ngl_program_set_uniform2f (job->current_program,
UNIFORM_BLUR_DIR, 0,
1, 0);
- gsk_ngl_render_job_draw_coords (job, 0, 0, texture_to_blur_width, texture_to_blur_height, 0, 1, 1, 0);
+ gsk_ngl_render_job_draw_coords (job,
+ 0, 0, texture_to_blur_width, texture_to_blur_height,
+ 0, 1, 1, 0,
+ &(GdkRGBA) { 0.f, 0.f, 0.f, 0.f });
gsk_ngl_render_job_end_draw (job);
/* Bind second pass framebuffer and clear it */
@@ -1289,7 +1272,10 @@ blur_offscreen (GskNglRenderJob *job,
gsk_ngl_program_set_uniform2f (job->current_program,
UNIFORM_BLUR_DIR, 0,
0, 1);
- gsk_ngl_render_job_draw_coords (job, 0, 0, texture_to_blur_width, texture_to_blur_height, 0, 1, 1, 0);
+ gsk_ngl_render_job_draw_coords (job,
+ 0, 0, texture_to_blur_width, texture_to_blur_height,
+ 0, 1, 1, 0,
+ &(GdkRGBA) { 0.f, 0.f, 0.f, 0.f });
gsk_ngl_render_job_end_draw (job);
gsk_ngl_render_job_pop_modelview (job);
@@ -1363,8 +1349,9 @@ gsk_ngl_render_job_visit_color_node (GskNglRenderJob *job,
const GskRenderNode *node)
{
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, color));
- gsk_ngl_render_job_set_color (job, gsk_color_node_get_color (node));
- gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_draw_rect_with_color (job,
+ &node->bounds,
+ gsk_color_node_get_color (node));
gsk_ngl_render_job_end_draw (job);
}
@@ -1627,7 +1614,7 @@ gsk_ngl_render_job_visit_rounded_clip_node (GskNglRenderJob *job,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &offscreen);
gsk_ngl_render_job_end_draw (job);
}
}
@@ -1674,31 +1661,25 @@ gsk_ngl_render_job_visit_rect_border_node (GskNglRenderJob *job,
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, color));
- gsk_ngl_render_job_set_color (job, &colors[0]);
-
- gsk_ngl_render_job_draw_rect (job,
- &GRAPHENE_RECT_INIT (origin->x,
- origin->y,
- size->width - widths[1],
- widths[0]));
+ if (widths[0] > 0)
+ gsk_ngl_render_job_draw_rect_with_color (job,
+ &GRAPHENE_RECT_INIT (origin->x, origin->y, size->width - widths[1], widths[0]),
+ &colors[0]);
- gsk_ngl_render_job_draw_rect (job,
- &GRAPHENE_RECT_INIT (origin->x + size->width - widths[1],
- origin->y,
- widths[1],
- size->height - widths[2]));
+ if (widths[1] > 0)
+ gsk_ngl_render_job_draw_rect_with_color (job,
+ &GRAPHENE_RECT_INIT (origin->x + size->width - widths[1], origin->y, widths[1], size->height - widths[2]),
+ &colors[0]);
- gsk_ngl_render_job_draw_rect (job,
- &GRAPHENE_RECT_INIT (origin->x + widths[3],
- origin->y + size->height - widths[2],
- size->width - widths[1],
- widths[2]));
+ if (widths[2] > 0)
+ gsk_ngl_render_job_draw_rect_with_color (job,
+ &GRAPHENE_RECT_INIT (origin->x + widths[3], origin->y + size->height - widths[2], size->width - widths[1], widths[2]),
+ &colors[0]);
- gsk_ngl_render_job_draw_rect (job,
- &GRAPHENE_RECT_INIT (origin->x,
- origin->y + widths[0],
- widths[3],
- size->height - widths[0]));
+ if (widths[3] > 0)
+ gsk_ngl_render_job_draw_rect_with_color (job,
+ &GRAPHENE_RECT_INIT (origin->x, origin->y + widths[0], widths[3], size->height - widths[0]),
+ &colors[0]);
gsk_ngl_render_job_end_draw (job);
}
@@ -1715,7 +1696,6 @@ gsk_ngl_render_job_visit_uniform_border_node (GskNglRenderJob *job,
gsk_ngl_render_job_transform_rounded_rect (job, rounded_outline, &outline);
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, inset_shadow));
- gsk_ngl_render_job_set_color (job, &colors[0]);
gsk_ngl_program_set_uniform_rounded_rect (job->current_program,
UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
&outline);
@@ -1725,7 +1705,7 @@ gsk_ngl_render_job_visit_uniform_border_node (GskNglRenderJob *job,
gsk_ngl_program_set_uniform2f (job->current_program,
UNIFORM_INSET_SHADOW_OFFSET, 0,
0, 0);
- gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_draw_rect_with_color (job, &node->bounds, &colors[0]);
gsk_ngl_render_job_end_draw (job);
}
@@ -1939,7 +1919,7 @@ gsk_ngl_render_job_visit_transform_node (GskNglRenderJob *job,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &child->bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &child->bounds, &offscreen);
gsk_ngl_render_job_end_draw (job);
gsk_ngl_render_job_pop_modelview (job);
@@ -1962,7 +1942,6 @@ gsk_ngl_render_job_visit_unblurred_inset_shadow_node (GskNglRenderJob *job,
gsk_ngl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, inset_shadow));
- gsk_ngl_render_job_set_color (job, gsk_inset_shadow_node_get_color (node));
gsk_ngl_program_set_uniform_rounded_rect (job->current_program,
UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
&transformed_outline);
@@ -1973,7 +1952,7 @@ gsk_ngl_render_job_visit_unblurred_inset_shadow_node (GskNglRenderJob *job,
UNIFORM_INSET_SHADOW_OFFSET, 0,
gsk_inset_shadow_node_get_dx (node),
gsk_inset_shadow_node_get_dy (node));
- gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_draw_rect_with_color (job, &node->bounds, gsk_inset_shadow_node_get_color (node));
gsk_ngl_render_job_end_draw (job);
}
@@ -2063,7 +2042,6 @@ gsk_ngl_render_job_visit_blurred_inset_shadow_node (GskNglRenderJob *job,
/* Actual inset shadow outline drawing */
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, inset_shadow));
- gsk_ngl_render_job_set_color (job, gsk_inset_shadow_node_get_color (node));
gsk_ngl_program_set_uniform_rounded_rect (job->current_program,
UNIFORM_INSET_SHADOW_OUTLINE_RECT, 0,
&transformed_outline);
@@ -2074,7 +2052,9 @@ gsk_ngl_render_job_visit_blurred_inset_shadow_node (GskNglRenderJob *job,
UNIFORM_INSET_SHADOW_OFFSET, 0,
offset_x * scale_x,
offset_y * scale_y);
- gsk_ngl_render_job_draw (job, 0, 0, texture_width, texture_height);
+ gsk_ngl_render_job_draw_with_color (job,
+ 0, 0, texture_width, texture_height,
+ gsk_inset_shadow_node_get_color (node));
gsk_ngl_render_job_end_draw (job);
gsk_ngl_render_job_pop_modelview (job);
@@ -2136,7 +2116,7 @@ gsk_ngl_render_job_visit_blurred_inset_shadow_node (GskNglRenderJob *job,
GL_TEXTURE_2D,
GL_TEXTURE0,
blurred_texture_id);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &offscreen);
gsk_ngl_render_job_end_draw (job);
if (needs_clip)
@@ -2157,6 +2137,7 @@ gsk_ngl_render_job_visit_unblurred_outset_shadow_node (GskNglRenderJob *job,
float spread = gsk_outset_shadow_node_get_spread (node);
float dx = gsk_outset_shadow_node_get_dx (node);
float dy = gsk_outset_shadow_node_get_dy (node);
+ const GdkRGBA *color = gsk_outset_shadow_node_get_color (node);
const float edge_sizes[] = { // Top, right, bottom, left
spread - dy, spread + dx, spread + dy, spread - dx
};
@@ -2170,7 +2151,6 @@ gsk_ngl_render_job_visit_unblurred_outset_shadow_node (GskNglRenderJob *job,
gsk_ngl_render_job_transform_rounded_rect (job, outline, &transformed_outline);
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, unblurred_outset_shadow));
- gsk_ngl_render_job_set_color (job, gsk_outset_shadow_node_get_color (node));
gsk_ngl_program_set_uniform_rounded_rect (job->current_program,
UNIFORM_UNBLURRED_OUTSET_SHADOW_OUTLINE_RECT, 0,
&transformed_outline);
@@ -2183,38 +2163,45 @@ gsk_ngl_render_job_visit_unblurred_outset_shadow_node (GskNglRenderJob *job,
/* Corners... */
if (corner_sizes[0][0] > 0 && corner_sizes[0][1] > 0) /* Top left */
- gsk_ngl_render_job_draw (job,
- x, y,
- corner_sizes[0][0], corner_sizes[0][1]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x, y, corner_sizes[0][0], corner_sizes[0][1],
+ color);
if (corner_sizes[1][0] > 0 && corner_sizes[1][1] > 0) /* Top right */
- gsk_ngl_render_job_draw (job,
- x + w - corner_sizes[1][0], y,
- corner_sizes[1][0], corner_sizes[1][1]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x + w - corner_sizes[1][0], y,
+ corner_sizes[1][0], corner_sizes[1][1],
+ color);
if (corner_sizes[2][0] > 0 && corner_sizes[2][1] > 0) /* Bottom right */
- gsk_ngl_render_job_draw (job,
- x + w - corner_sizes[2][0], y + h - corner_sizes[2][1],
- corner_sizes[2][0], corner_sizes[2][1]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x + w - corner_sizes[2][0], y + h - corner_sizes[2][1],
+ corner_sizes[2][0], corner_sizes[2][1],
+ color);
if (corner_sizes[3][0] > 0 && corner_sizes[3][1] > 0) /* Bottom left */
- gsk_ngl_render_job_draw (job,
- x, y + h - corner_sizes[3][1],
- corner_sizes[3][0], corner_sizes[3][1]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x, y + h - corner_sizes[3][1],
+ corner_sizes[3][0], corner_sizes[3][1],
+ color);
/* Edges... */;
if (edge_sizes[0] > 0) /* Top */
- gsk_ngl_render_job_draw (job,
- x + corner_sizes[0][0], y,
- w - corner_sizes[0][0] - corner_sizes[1][0], edge_sizes[0]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x + corner_sizes[0][0], y,
+ w - corner_sizes[0][0] - corner_sizes[1][0], edge_sizes[0],
+ color);
if (edge_sizes[1] > 0) /* Right */
- gsk_ngl_render_job_draw (job,
- x + w - edge_sizes[1], y + corner_sizes[1][1],
- edge_sizes[1], h - corner_sizes[1][1] - corner_sizes[2][1]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x + w - edge_sizes[1], y + corner_sizes[1][1],
+ edge_sizes[1], h - corner_sizes[1][1] - corner_sizes[2][1],
+ color);
if (edge_sizes[2] > 0) /* Bottom */
- gsk_ngl_render_job_draw (job,
- x + corner_sizes[3][0], y + h - edge_sizes[2],
- w - corner_sizes[3][0] - corner_sizes[2][0], edge_sizes[2]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x + corner_sizes[3][0], y + h - edge_sizes[2],
+ w - corner_sizes[3][0] - corner_sizes[2][0], edge_sizes[2],
+ color);
if (edge_sizes[3] > 0) /* Left */
- gsk_ngl_render_job_draw (job,
- x, y + corner_sizes[0][1],
- edge_sizes[3], h - corner_sizes[0][1] - corner_sizes[3][1]);
+ gsk_ngl_render_job_draw_with_color (job,
+ x, y + corner_sizes[0][1],
+ edge_sizes[3], h - corner_sizes[0][1] - corner_sizes[3][1],
+ color);
gsk_ngl_render_job_end_draw (job);
}
@@ -2324,8 +2311,7 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
/* Draw the outline using color program */
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, color));
- gsk_ngl_render_job_set_color (job, &white);
- gsk_ngl_render_job_draw (job, 0, 0, texture_width, texture_height);
+ gsk_ngl_render_job_draw_with_color (job, 0, 0, texture_width, texture_height, &white);
gsk_ngl_render_job_end_draw (job);
/* Reset state from offscreen */
@@ -2368,7 +2354,6 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
init_full_texture_region (&offscreen);
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, outset_shadow));
- gsk_ngl_render_job_set_color (job, color);
gsk_ngl_program_set_uniform_texture (job->current_program,
UNIFORM_SHARED_SOURCE, 0,
GL_TEXTURE_2D,
@@ -2377,19 +2362,19 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
gsk_ngl_program_set_uniform_rounded_rect (job->current_program,
UNIFORM_OUTSET_SHADOW_OUTLINE_RECT, 0,
&transformed_outline);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x,
- min_y,
- texture_width / scale_x,
- texture_height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (min_x,
+ min_y,
+ texture_width / scale_x,
+ texture_height / scale_y),
+ &offscreen,
+ color);
gsk_ngl_render_job_end_draw (job);
return;
}
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, outset_shadow));
- gsk_ngl_render_job_set_color (job, color);
gsk_ngl_program_set_uniform_texture (job->current_program,
UNIFORM_SHARED_SOURCE, 0,
GL_TEXTURE_2D,
@@ -2421,11 +2406,12 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
if (nine_slice_is_visible (&slices[NINE_SLICE_TOP_LEFT]))
{
memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_LEFT].area, sizeof offscreen.area);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x, min_y,
- slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x,
- slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (min_x, min_y,
+ slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x,
+ slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
+ &offscreen,
+ color);
}
/* Top center */
@@ -2434,48 +2420,52 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_CENTER].area, sizeof offscreen.area);
float width = (max_x - min_x) - (slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x +
slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x + (slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x),
- min_y,
- width,
- slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (min_x + (slices[NINE_SLICE_TOP_LEFT].rect.width / scale_x),
+ min_y,
+ width,
+ slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
+ &offscreen,
+ color);
}
/* Top right */
if (nine_slice_is_visible (&slices[NINE_SLICE_TOP_RIGHT]))
{
memcpy (&offscreen.area, &slices[NINE_SLICE_TOP_RIGHT].area, sizeof offscreen.area);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (max_x - (slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x),
- min_y,
- slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x,
- slices[NINE_SLICE_TOP_RIGHT].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (max_x - (slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x),
+ min_y,
+ slices[NINE_SLICE_TOP_RIGHT].rect.width / scale_x,
+ slices[NINE_SLICE_TOP_RIGHT].rect.height / scale_y),
+ &offscreen,
+ color);
}
/* Bottom right */
if (nine_slice_is_visible (&slices[NINE_SLICE_BOTTOM_RIGHT]))
{
memcpy (&offscreen.area, &slices[NINE_SLICE_BOTTOM_RIGHT].area, sizeof offscreen.area);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (max_x - (slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x),
- max_y - (slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
- slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x,
- slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (max_x - (slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x),
+ max_y - (slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
+ slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x,
+ slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y),
+ &offscreen,
+ color);
}
/* Bottom left */
if (nine_slice_is_visible (&slices[NINE_SLICE_BOTTOM_LEFT]))
{
memcpy (&offscreen.area, &slices[NINE_SLICE_BOTTOM_LEFT].area, sizeof offscreen.area);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x,
- max_y - (slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
- slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x,
- slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (min_x,
+ max_y - (slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
+ slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x,
+ slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y),
+ &offscreen,
+ color);
}
/* Left side */
@@ -2484,12 +2474,13 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
memcpy (&offscreen.area, &slices[NINE_SLICE_LEFT_CENTER].area, sizeof offscreen.area);
float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y +
slices[NINE_SLICE_BOTTOM_LEFT].rect.height / scale_y);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x,
- min_y + (slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
- slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x,
- height),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (min_x,
+ min_y + (slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
+ slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x,
+ height),
+ &offscreen,
+ color);
}
/* Right side */
@@ -2498,12 +2489,13 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
memcpy (&offscreen.area, &slices[NINE_SLICE_RIGHT_CENTER].area, sizeof offscreen.area);
float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_RIGHT].rect.height / scale_y +
slices[NINE_SLICE_BOTTOM_RIGHT].rect.height / scale_y);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (max_x - (slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x),
- min_y + (slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
- slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x,
- height),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (max_x - (slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x),
+ min_y + (slices[NINE_SLICE_TOP_LEFT].rect.height / scale_y),
+ slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x,
+ height),
+ &offscreen,
+ color);
}
/* Bottom side */
@@ -2512,12 +2504,13 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
memcpy (&offscreen.area, &slices[NINE_SLICE_BOTTOM_CENTER].area, sizeof offscreen.area);
float width = (max_x - min_x) - (slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x +
slices[NINE_SLICE_BOTTOM_RIGHT].rect.width / scale_x);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x + (slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x),
- max_y - (slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
- width,
- slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (min_x + (slices[NINE_SLICE_BOTTOM_LEFT].rect.width / scale_x),
+ max_y - (slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
+ width,
+ slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y),
+ &offscreen,
+ color);
}
/* Middle */
@@ -2528,11 +2521,12 @@ gsk_ngl_render_job_visit_blurred_outset_shadow_node (GskNglRenderJob *job,
slices[NINE_SLICE_RIGHT_CENTER].rect.width / scale_x);
float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y +
slices[NINE_SLICE_BOTTOM_CENTER].rect.height / scale_y);
- gsk_ngl_render_job_load_vertices_from_offscreen (job,
- &GRAPHENE_RECT_INIT (min_x + (slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x),
- min_y + (slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
- width, height),
- &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job,
+ &GRAPHENE_RECT_INIT (min_x + (slices[NINE_SLICE_LEFT_CENTER].rect.width / scale_x),
+ min_y + (slices[NINE_SLICE_TOP_CENTER].rect.height / scale_y),
+ width, height),
+ &offscreen,
+ color);
}
}
@@ -2607,7 +2601,7 @@ gsk_ngl_render_job_visit_cross_fade_node (GskNglRenderJob *job,
gsk_ngl_program_set_uniform1f (job->current_program,
UNIFORM_CROSS_FADE_PROGRESS, 0,
progress);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen_end);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &offscreen_end);
gsk_ngl_render_job_end_draw (job);
}
@@ -2645,7 +2639,7 @@ gsk_ngl_render_job_visit_opacity_node (GskNglRenderJob *job,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &offscreen);
gsk_ngl_render_job_end_draw (job);
}
else
@@ -2907,13 +2901,12 @@ gsk_ngl_render_job_visit_shadow_node (GskNglRenderJob *job,
gsk_ngl_render_job_offset (job, dx, dy);
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, coloring));
- gsk_ngl_render_job_set_color (job, &shadow->color);
gsk_ngl_program_set_uniform_texture (job->current_program,
UNIFORM_SHARED_SOURCE, 0,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen_with_color (job, &bounds, &offscreen, &shadow->color);
gsk_ngl_render_job_end_draw (job);
gsk_ngl_render_job_offset (job, -dx, -dy);
}
@@ -2967,7 +2960,10 @@ gsk_ngl_render_job_visit_blur_node (GskNglRenderJob *job,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id);
- gsk_ngl_render_job_draw_coords (job, min_x, min_y, max_x, max_y, 0, 1, 1, 0);
+ gsk_ngl_render_job_draw_coords (job,
+ min_x, min_y, max_x, max_y,
+ 0, 1, 1, 0,
+ &(GdkRGBA) { 0.f, 0.f, 0.f, 0.f } );
gsk_ngl_render_job_end_draw (job);
}
@@ -3006,7 +3002,7 @@ gsk_ngl_render_job_visit_blend_node (GskNglRenderJob *job,
GL_TEXTURE_2D,
GL_TEXTURE0,
bottom_offscreen.texture_id);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &bottom_offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &bottom_offscreen);
gsk_ngl_render_job_end_draw (job);
return;
}
@@ -3065,7 +3061,7 @@ gsk_ngl_render_job_visit_color_matrix_node (GskNglRenderJob *job,
UNIFORM_COLOR_MATRIX_COLOR_OFFSET, 0,
1,
offset);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &offscreen);
gsk_ngl_render_job_end_draw (job);
}
@@ -3076,8 +3072,7 @@ gsk_ngl_render_job_visit_gl_shader_node_fallback (GskNglRenderJob *job,
static const GdkRGBA pink = { 255 / 255., 105 / 255., 180 / 255., 1.0 };
gsk_ngl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, color));
- gsk_ngl_render_job_set_color (job, &pink);
- gsk_ngl_render_job_draw_rect (job, &node->bounds);
+ gsk_ngl_render_job_draw_rect_with_color (job, &node->bounds, &pink);
gsk_ngl_render_job_end_draw (job);
}
@@ -3245,7 +3240,7 @@ gsk_ngl_render_job_visit_texture_node (GskNglRenderJob *job,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &offscreen);
gsk_ngl_render_job_end_draw (job);
}
else
@@ -3284,7 +3279,10 @@ gsk_ngl_render_job_visit_texture_node (GskNglRenderJob *job,
GL_TEXTURE0,
slice->texture_id);
- gsk_ngl_render_job_draw_coords (job, x1, y1, x2, y2, 0, 0, 1, 1);
+ gsk_ngl_render_job_draw_coords (job,
+ x1, y1, x2, y2,
+ 0, 0, 1, 1,
+ &(GdkRGBA) { 0.f, 0.f, 0.f, 0.f });
}
gsk_ngl_render_job_end_draw (job);
@@ -3342,7 +3340,7 @@ gsk_ngl_render_job_visit_repeat_node (GskNglRenderJob *job,
offscreen.was_offscreen ? offscreen.area.y2 : offscreen.area.y,
offscreen.area.x2,
offscreen.was_offscreen ? offscreen.area.y : offscreen.area.y2);
- gsk_ngl_render_job_load_vertices_from_offscreen (job, &node->bounds, &offscreen);
+ gsk_ngl_render_job_draw_offscreen (job, &node->bounds, &offscreen);
gsk_ngl_render_job_end_draw (job);
}
@@ -3821,7 +3819,6 @@ gsk_ngl_render_job_new (GskNglDriver *driver,
job->viewport = *viewport;
gsk_ngl_render_job_set_alpha (job, 1.0);
- gsk_ngl_render_job_set_color (job, &(GdkRGBA){ 0.f, 0.f, 0.f, 0.f });
gsk_ngl_render_job_set_projection_from_rect (job, viewport, NULL);
gsk_ngl_render_job_set_modelview (job, gsk_transform_scale (NULL, scale_factor, scale_factor));