gpu: Add a variant of gsk_gpu_colorize_op

This variant takes the color_states, instead of computing it
anew from the ccs and the color state of the color. This will
be used to pull this work out of the loop in add_glyph_node.
This commit is contained in:
Matthias Clasen
2024-09-08 12:41:48 -04:00
parent 03840151ac
commit 60f5d4c93e
2 changed files with 39 additions and 12 deletions

View File

@@ -50,22 +50,19 @@ static const GskGpuShaderOpClass GSK_GPU_COLORIZE_OP_CLASS = {
};
void
gsk_gpu_colorize_op (GskGpuFrame *frame,
GskGpuShaderClip clip,
GdkColorState *ccs,
float opacity,
const graphene_point_t *offset,
const GskGpuShaderImage *image,
const GdkColor *color)
gsk_gpu_colorize_op2 (GskGpuFrame *frame,
GskGpuShaderClip clip,
GskGpuColorStates color_states,
float opacity,
const graphene_point_t *offset,
const GskGpuShaderImage *image,
const GdkColor *color)
{
GskGpuColorizeInstance *instance;
GdkColorState *alt;
alt = gsk_gpu_color_states_find (ccs, color);
gsk_gpu_shader_op_alloc (frame,
&GSK_GPU_COLORIZE_OP_CLASS,
gsk_gpu_color_states_create (ccs, TRUE, alt, FALSE),
color_states,
0,
clip,
(GskGpuImage *[1]) { image->image },
@@ -74,5 +71,27 @@ gsk_gpu_colorize_op (GskGpuFrame *frame,
gsk_gpu_rect_to_float (image->coverage ? image->coverage : image->bounds, offset, instance->rect);
gsk_gpu_rect_to_float (image->bounds, offset, instance->tex_rect);
gsk_gpu_color_to_float (color, alt, opacity, instance->color);
gsk_gpu_color_to_float (color, gsk_gpu_color_states_get_alt (color_states), opacity, instance->color);
}
void
gsk_gpu_colorize_op (GskGpuFrame *frame,
GskGpuShaderClip clip,
GdkColorState *ccs,
float opacity,
const graphene_point_t *offset,
const GskGpuShaderImage *image,
const GdkColor *color)
{
GdkColorState *alt;
GskGpuColorStates color_states;
GdkColor color2;
alt = gsk_gpu_color_states_find (ccs, color);
color_states = gsk_gpu_color_states_create (ccs, TRUE, alt, FALSE);
gdk_color_convert (&color2, alt, color);
gsk_gpu_colorize_op2 (frame, clip, color_states, opacity, offset, image, &color2);
gdk_color_finish (&color2);
}

View File

@@ -14,6 +14,14 @@ void gsk_gpu_colorize_op (GskGpuF
const GskGpuShaderImage *image,
const GdkColor *color);
void gsk_gpu_colorize_op2 (GskGpuFrame *frame,
GskGpuShaderClip clip,
GskGpuColorStates color_states,
float opacity,
const graphene_point_t *offset,
const GskGpuShaderImage *image,
const GdkColor *color);
G_END_DECLS