From eeabf5807e01b5f24a787b6a3ead55df7d69f47d Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Sun, 17 Jul 2022 21:32:31 +0100 Subject: [PATCH] backend: gl: handle custom shader image property Signed-off-by: Yuxuan Shui --- src/backend/gl/gl_common.c | 12 ++++++++++++ src/backend/gl/gl_common.h | 2 ++ src/backend/gl/glx.c | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/gl/gl_common.c b/src/backend/gl/gl_common.c index c139b6c3..cc5e559d 100644 --- a/src/backend/gl/gl_common.c +++ b/src/backend/gl/gl_common.c @@ -1994,6 +1994,18 @@ bool gl_image_op(backend_t *base, enum image_operations op, void *image_data, return true; } +bool gl_set_image_property(backend_t *backend_data, enum image_properties prop, + void *image_data, void *args) { + if (prop != IMAGE_PROPERTY_CUSTOM_SHADER) { + return default_set_image_property(backend_data, prop, image_data, args); + } + + struct backend_image *img = image_data; + auto inner = (struct gl_texture *)img->inner; + inner->shader = args; + return true; +} + enum device_status gl_device_status(backend_t *base) { auto gd = (struct gl_data *)base; if (!gd->has_robustness) { diff --git a/src/backend/gl/gl_common.h b/src/backend/gl/gl_common.h index c5d22597..0db5bf7c 100644 --- a/src/backend/gl/gl_common.h +++ b/src/backend/gl/gl_common.h @@ -110,6 +110,8 @@ GLuint gl_create_program(const GLuint *const shaders, int nshaders); GLuint gl_create_program_from_str(const char *vert_shader_str, const char *frag_shader_str); void *gl_create_window_shader(backend_t *backend_data, const char *source); void gl_destroy_window_shader(backend_t *backend_data, void *shader); +bool gl_set_image_property(backend_t *backend_data, enum image_properties prop, + void *image_data, void *args); /** * @brief Render a region with texture data. diff --git a/src/backend/gl/glx.c b/src/backend/gl/glx.c index 2a1162ed..11a3c85b 100644 --- a/src/backend/gl/glx.c +++ b/src/backend/gl/glx.c @@ -534,7 +534,7 @@ struct backend_operations glx_ops = { .release_image = gl_release_image, .compose = gl_compose, .image_op = gl_image_op, - .set_image_property = default_set_image_property, + .set_image_property = gl_set_image_property, .clone_image = default_clone_image, .blur = gl_blur, .is_image_transparent = default_is_image_transparent,