diff options
author | Will McKinnon <[email protected]> | 2023-04-06 18:49:51 -0400 |
---|---|---|
committer | Will McKinnon <[email protected]> | 2023-04-06 20:30:42 -0400 |
commit | 420364dd191fa3c22370bbaa34f178b07bcb8318 (patch) | |
tree | bf7e3bcb7a0835e0c16901a3b800c7f218607d53 /include/sway/desktop/fx_renderer/fx_renderer.h | |
parent | c24fccd45c4bc69c968a09ae5b953672a29bac12 (diff) |
structure: moved fx_renderer and related fuctions to a folder
Diffstat (limited to 'include/sway/desktop/fx_renderer/fx_renderer.h')
-rw-r--r-- | include/sway/desktop/fx_renderer/fx_renderer.h | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/include/sway/desktop/fx_renderer/fx_renderer.h b/include/sway/desktop/fx_renderer/fx_renderer.h new file mode 100644 index 00000000..a48a00e1 --- /dev/null +++ b/include/sway/desktop/fx_renderer/fx_renderer.h @@ -0,0 +1,149 @@ +#ifndef _SWAY_OPENGL_H +#define _SWAY_OPENGL_H + +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> +#include <stdbool.h> + +enum corner_location { ALL, TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, NONE }; + +enum fx_tex_shader_source { + SHADER_SOURCE_TEXTURE_RGBA = 1, + SHADER_SOURCE_TEXTURE_RGBX = 2, + SHADER_SOURCE_TEXTURE_EXTERNAL = 3, +}; + +enum fx_rounded_quad_shader_source { + SHADER_SOURCE_QUAD_ROUND = 1, + SHADER_SOURCE_QUAD_ROUND_TOP_LEFT = 2, + SHADER_SOURCE_QUAD_ROUND_TOP_RIGHT = 3, +}; + +struct decoration_data { + float alpha; + float saturation; + int corner_radius; + float dim; + float* dim_color; + bool has_titlebar; +}; + +struct gles2_tex_shader { + GLuint program; + GLint proj; + GLint tex; + GLint alpha; + GLint pos_attrib; + GLint tex_attrib; + GLint size; + GLint position; + GLint radius; + GLint saturation; + GLint dim; + GLint dim_color; + GLint has_titlebar; +}; + +struct rounded_quad_shader { + GLuint program; + GLint proj; + GLint color; + GLint pos_attrib; + GLint size; + GLint position; + GLint radius; +}; + +struct fx_renderer { + struct wlr_egl *egl; + + float projection[9]; + + GLuint stencil_buffer_id; + + struct { + bool OES_egl_image_external; + } exts; + + struct { + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES; + } procs; + + + // Shaders + struct { + struct { + GLuint program; + GLint proj; + GLint color; + GLint pos_attrib; + } quad; + + struct rounded_quad_shader rounded_quad; + struct rounded_quad_shader rounded_tl_quad; + struct rounded_quad_shader rounded_tr_quad; + + struct { + GLuint program; + GLint proj; + GLint color; + GLint pos_attrib; + GLint is_top_left; + GLint is_top_right; + GLint is_bottom_left; + GLint is_bottom_right; + GLint position; + GLint radius; + GLint half_size; + GLint half_thickness; + } corner; + + struct { + GLuint program; + GLint proj; + GLint color; + GLint pos_attrib; + GLint position; + GLint size; + GLint blur_sigma; + GLint corner_radius; + } box_shadow; + + struct gles2_tex_shader tex_rgba; + struct gles2_tex_shader tex_rgbx; + struct gles2_tex_shader tex_ext; + } shaders; +}; + +struct fx_renderer *fx_renderer_create(struct wlr_egl *egl); + +void fx_renderer_begin(struct fx_renderer *renderer, uint32_t width, uint32_t height); + +void fx_renderer_end(); + +void fx_renderer_clear(const float color[static 4]); + +void fx_renderer_scissor(struct wlr_box *box); + +bool fx_render_subtexture_with_matrix(struct fx_renderer *renderer, struct wlr_texture *wlr_texture, + const struct wlr_fbox *src_box, const struct wlr_box *dst_box, const float matrix[static 9], + struct decoration_data deco_data); + +bool fx_render_texture_with_matrix(struct fx_renderer *renderer, struct wlr_texture *wlr_texture, + const struct wlr_box *dst_box, const float matrix[static 9], struct decoration_data deco_data); + +void fx_render_rect(struct fx_renderer *renderer, const struct wlr_box *box, + const float color[static 4], const float projection[static 9]); + +void fx_render_rounded_rect(struct fx_renderer *renderer, const struct wlr_box *box, + const float color[static 4], const float projection[static 9], + int radius, enum corner_location corner_location); + +void fx_render_border_corner(struct fx_renderer *renderer, const struct wlr_box *box, + const float color[static 4], const float projection[static 9], + enum corner_location corner_location, int radius, int border_thickness); + +void fx_render_box_shadow(struct fx_renderer *renderer, const struct wlr_box *box, + const float color[static 4], const float projection[static 9], int radius, float blur_sigma); + +#endif |