gl-renderer: draw_view -> draw_paint_node

A following patch will need the paint node in
gl_shader_config_init_for_view() for color transformations.

While passing the paint node through, rename the functions to be more
appropriate and get surface/view/output from the paint node.

This is a pure refactoring with no functional change.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 4 years ago committed by Pekka Paalanen
parent 79885af165
commit da0f7ea4a7
  1. 58
      libweston/renderer-gl/gl-renderer.c

@ -971,17 +971,16 @@ gl_shader_config_set_input_textures(struct gl_shader_config *sconf,
} }
static bool static bool
gl_shader_config_init_for_view(struct gl_shader_config *sconf, gl_shader_config_init_for_paint_node(struct gl_shader_config *sconf,
struct weston_view *view, struct weston_paint_node *pnode,
struct weston_output *output, GLint filter)
GLint filter)
{ {
struct gl_surface_state *gs = get_surface_state(view->surface); struct gl_surface_state *gs = get_surface_state(pnode->surface);
struct gl_output_state *go = get_output_state(output); struct gl_output_state *go = get_output_state(pnode->output);
*sconf = (struct gl_shader_config) { *sconf = (struct gl_shader_config) {
.projection = go->output_matrix, .projection = go->output_matrix,
.view_alpha = view->alpha, .view_alpha = pnode->view->alpha,
.input_tex_filter = filter, .input_tex_filter = filter,
}; };
@ -991,12 +990,11 @@ gl_shader_config_init_for_view(struct gl_shader_config *sconf,
} }
static void static void
draw_view(struct weston_view *ev, struct weston_output *output, draw_paint_node(struct weston_paint_node *pnode,
pixman_region32_t *damage) /* in global coordinates */ pixman_region32_t *damage /* in global coordinates */)
{ {
struct weston_compositor *ec = ev->surface->compositor; struct gl_renderer *gr = get_renderer(pnode->surface->compositor);
struct gl_renderer *gr = get_renderer(ec); struct gl_surface_state *gs = get_surface_state(pnode->surface);
struct gl_surface_state *gs = get_surface_state(ev->surface);
/* repaint bounding region in global coordinates: */ /* repaint bounding region in global coordinates: */
pixman_region32_t repaint; pixman_region32_t repaint;
/* opaque region in surface coordinates: */ /* opaque region in surface coordinates: */
@ -1014,8 +1012,8 @@ draw_view(struct weston_view *ev, struct weston_output *output,
pixman_region32_init(&repaint); pixman_region32_init(&repaint);
pixman_region32_intersect(&repaint, pixman_region32_intersect(&repaint,
&ev->transform.boundingbox, damage); &pnode->view->transform.boundingbox, damage);
pixman_region32_subtract(&repaint, &repaint, &ev->clip); pixman_region32_subtract(&repaint, &repaint, &pnode->view->clip);
if (!pixman_region32_not_empty(&repaint)) if (!pixman_region32_not_empty(&repaint))
goto out; goto out;
@ -1025,34 +1023,34 @@ draw_view(struct weston_view *ev, struct weston_output *output,
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
if (ev->transform.enabled || output->zoom.active || if (pnode->view->transform.enabled || pnode->output->zoom.active ||
output->current_scale != ev->surface->buffer_viewport.buffer.scale) pnode->output->current_scale != pnode->surface->buffer_viewport.buffer.scale)
filter = GL_LINEAR; filter = GL_LINEAR;
else else
filter = GL_NEAREST; filter = GL_NEAREST;
if (!gl_shader_config_init_for_view(&sconf, ev, output, filter)) if (!gl_shader_config_init_for_paint_node(&sconf, pnode, filter))
goto out; goto out;
/* blended region is whole surface minus opaque region: */ /* blended region is whole surface minus opaque region: */
pixman_region32_init_rect(&surface_blend, 0, 0, pixman_region32_init_rect(&surface_blend, 0, 0,
ev->surface->width, ev->surface->height); pnode->surface->width, pnode->surface->height);
if (ev->geometry.scissor_enabled) if (pnode->view->geometry.scissor_enabled)
pixman_region32_intersect(&surface_blend, &surface_blend, pixman_region32_intersect(&surface_blend, &surface_blend,
&ev->geometry.scissor); &pnode->view->geometry.scissor);
pixman_region32_subtract(&surface_blend, &surface_blend, pixman_region32_subtract(&surface_blend, &surface_blend,
&ev->surface->opaque); &pnode->surface->opaque);
/* XXX: Should we be using ev->transform.opaque here? */ /* XXX: Should we be using ev->transform.opaque here? */
pixman_region32_init(&surface_opaque); pixman_region32_init(&surface_opaque);
if (ev->geometry.scissor_enabled) if (pnode->view->geometry.scissor_enabled)
pixman_region32_intersect(&surface_opaque, pixman_region32_intersect(&surface_opaque,
&ev->surface->opaque, &pnode->surface->opaque,
&ev->geometry.scissor); &pnode->view->geometry.scissor);
else else
pixman_region32_copy(&surface_opaque, &ev->surface->opaque); pixman_region32_copy(&surface_opaque, &pnode->surface->opaque);
maybe_censor_override(&sconf, output, ev); maybe_censor_override(&sconf, pnode->output, pnode->view);
if (pixman_region32_not_empty(&surface_opaque)) { if (pixman_region32_not_empty(&surface_opaque)) {
struct gl_shader_config alt = sconf; struct gl_shader_config alt = sconf;
@ -1066,18 +1064,18 @@ draw_view(struct weston_view *ev, struct weston_output *output,
alt.req.variant = SHADER_VARIANT_RGBX; alt.req.variant = SHADER_VARIANT_RGBX;
} }
if (ev->alpha < 1.0) if (pnode->view->alpha < 1.0)
glEnable(GL_BLEND); glEnable(GL_BLEND);
else else
glDisable(GL_BLEND); glDisable(GL_BLEND);
repaint_region(gr, ev, &repaint, &surface_opaque, &alt); repaint_region(gr, pnode->view, &repaint, &surface_opaque, &alt);
gs->used_in_output_repaint = true; gs->used_in_output_repaint = true;
} }
if (pixman_region32_not_empty(&surface_blend)) { if (pixman_region32_not_empty(&surface_blend)) {
glEnable(GL_BLEND); glEnable(GL_BLEND);
repaint_region(gr, ev, &repaint, &surface_blend, &sconf); repaint_region(gr, pnode->view, &repaint, &surface_blend, &sconf);
gs->used_in_output_repaint = true; gs->used_in_output_repaint = true;
} }
@ -1097,7 +1095,7 @@ repaint_views(struct weston_output *output, pixman_region32_t *damage)
wl_list_for_each_reverse(pnode, &output->paint_node_z_order_list, wl_list_for_each_reverse(pnode, &output->paint_node_z_order_list,
z_order_link) { z_order_link) {
if (pnode->view->plane == &compositor->primary_plane) if (pnode->view->plane == &compositor->primary_plane)
draw_view(pnode->view, output, damage); draw_paint_node(pnode, damage);
} }
} }

Loading…
Cancel
Save