mirror of https://github.com/yshui/picom.git
backend: remove image operation BAKE
It's not used. Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
parent
48b7d7c27d
commit
710e5fd7a0
|
@ -57,9 +57,6 @@ enum image_properties {
|
|||
};
|
||||
|
||||
enum image_operations {
|
||||
// Apply the image properties, reset the image properties to their defaults
|
||||
// afterwards.
|
||||
IMAGE_OP_BAKE_PROPERTIES,
|
||||
// Multiply the alpha channel by the argument
|
||||
IMAGE_OP_APPLY_ALPHA,
|
||||
};
|
||||
|
@ -228,8 +225,7 @@ struct backend_operations {
|
|||
void *image_data, void *args);
|
||||
|
||||
/**
|
||||
* Manipulate an image. Image properties are untouched by and have no effects on
|
||||
* operations other than BAKE.
|
||||
* Manipulate an image. Image properties are untouched.
|
||||
*
|
||||
* @param backend_data backend data
|
||||
* @param op the operation to perform
|
||||
|
@ -247,7 +243,7 @@ struct backend_operations {
|
|||
|
||||
/**
|
||||
* Read the color of the pixel at given position of the given image. Image
|
||||
* properties have no effect. BAKE them first before reading the pixels.
|
||||
* properties have no effect.
|
||||
*
|
||||
* @param backend_data backend_data
|
||||
* @param image_data an image data structure previously returned by the
|
||||
|
|
|
@ -1778,75 +1778,6 @@ static inline void gl_image_decouple(backend_t *base, struct backend_image *img)
|
|||
inner->refcount--;
|
||||
}
|
||||
|
||||
/// Decouple `img` from the image it references, also applies all the lazy operations
|
||||
static inline void gl_image_bake(backend_t *base, struct backend_image *img) {
|
||||
if (!img->color_inverted && img->opacity == 1 && img->max_brightness == 1 &&
|
||||
img->dim == 0) {
|
||||
// Nothing to bake
|
||||
return;
|
||||
}
|
||||
auto gd = (struct gl_data *)base;
|
||||
auto new_tex = ccalloc(1, struct gl_texture);
|
||||
auto inner = (struct gl_texture *)img->inner;
|
||||
|
||||
new_tex->texture = gl_new_texture(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, new_tex->texture);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, inner->width, inner->height, 0, GL_BGRA,
|
||||
GL_UNSIGNED_BYTE, NULL);
|
||||
new_tex->y_inverted = true;
|
||||
new_tex->height = inner->height;
|
||||
new_tex->width = inner->width;
|
||||
new_tex->refcount = 1;
|
||||
new_tex->user_data = gd->decouple_texture_user_data(base, inner->user_data);
|
||||
|
||||
GLuint fbo;
|
||||
glGenFramebuffers(1, &fbo);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
|
||||
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
|
||||
new_tex->texture, 0);
|
||||
glDrawBuffer(GL_COLOR_ATTACHMENT0);
|
||||
|
||||
glClearColor(0, 0, 0, 0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
// clang-format off
|
||||
GLint coord[] = {
|
||||
// top left
|
||||
0, 0, // vertex coord
|
||||
0, 0, // texture coord
|
||||
|
||||
// top right
|
||||
inner->width, 0, // vertex coord
|
||||
inner->width, 0, // texture coord
|
||||
|
||||
// bottom right
|
||||
inner->width, inner->height,
|
||||
inner->width, inner->height,
|
||||
|
||||
// bottom left
|
||||
0, inner->height,
|
||||
0, inner->height,
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
_gl_compose(base, img, fbo, coord, (GLuint[]){0, 1, 2, 2, 3, 0}, 1);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
glDeleteFramebuffers(1, &fbo);
|
||||
|
||||
inner->refcount--;
|
||||
if (inner->refcount == 0) {
|
||||
gl_release_image_inner(base, inner);
|
||||
}
|
||||
img->inner = (struct backend_image_inner_base *)new_tex;
|
||||
|
||||
// Clear lazy operation flags
|
||||
img->color_inverted = false;
|
||||
img->dim = 0;
|
||||
img->opacity = 1;
|
||||
|
||||
gl_check_err();
|
||||
}
|
||||
|
||||
static void gl_image_apply_alpha(backend_t *base, struct backend_image *img,
|
||||
const region_t *reg_op, double alpha) {
|
||||
// Result color = 0 (GL_ZERO) + alpha (GL_CONSTANT_ALPHA) * original color
|
||||
|
@ -1926,7 +1857,6 @@ bool gl_image_op(backend_t *base, enum image_operations op, void *image_data,
|
|||
assert(tex->inner->refcount == 1);
|
||||
gl_image_apply_alpha(base, tex, reg_op, *(double *)arg);
|
||||
break;
|
||||
case IMAGE_OP_BAKE_PROPERTIES: gl_image_bake(base, tex); break;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -527,36 +527,6 @@ static bool decouple_image(backend_t *base, struct backend_image *img, const reg
|
|||
inner->refcount--;
|
||||
return true;
|
||||
}
|
||||
static bool bake_image(backend_t *base, struct backend_image *img, const region_t *reg) {
|
||||
struct _xrender_data *xd = (void *)base;
|
||||
struct _xrender_image_data_inner *inner = (void *)img->inner;
|
||||
assert(inner->visual != XCB_NONE);
|
||||
|
||||
if (!img->color_inverted && img->opacity == 1 && img->dim == 0) {
|
||||
// Nothing to bake
|
||||
return true;
|
||||
}
|
||||
|
||||
log_trace("xrender: copying %#010x visual %#x", inner->pixmap, inner->visual);
|
||||
auto inner2 =
|
||||
new_inner(base, inner->width, inner->height, inner->visual, inner->depth);
|
||||
if (!inner2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
inner2->has_alpha = (inner->has_alpha || img->opacity != 1);
|
||||
compose_impl(xd, img, 0, 0, reg, NULL, inner2->pict);
|
||||
|
||||
img->opacity = 1;
|
||||
img->inner = (struct backend_image_inner_base *)inner2;
|
||||
img->dim = 0;
|
||||
img->color_inverted = false;
|
||||
inner->refcount--;
|
||||
if (inner->refcount == 0) {
|
||||
release_image_inner(base, inner);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool image_op(backend_t *base, enum image_operations op, void *image,
|
||||
const region_t *reg_op, const region_t *reg_visible, void *arg) {
|
||||
|
@ -569,8 +539,6 @@ static bool image_op(backend_t *base, enum image_operations op, void *image,
|
|||
pixman_region32_intersect(®, (region_t *)reg_op, (region_t *)reg_visible);
|
||||
|
||||
switch (op) {
|
||||
case IMAGE_OP_BAKE_PROPERTIES: return bake_image(base, img, ®);
|
||||
|
||||
case IMAGE_OP_APPLY_ALPHA:
|
||||
assert(reg_op);
|
||||
|
||||
|
|
Loading…
Reference in New Issue