From d462d952de20bdb7c3c84b05ed94d15b07ee5116 Mon Sep 17 00:00:00 2001 From: Erik Reider <35975961+ErikReider@users.noreply.github.com> Date: Thu, 13 Jul 2023 14:55:28 +0200 Subject: feat: initial fx_renderer implementation --- include/render/fx_renderer/fx_renderer.h | 80 ++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 include/render/fx_renderer/fx_renderer.h (limited to 'include/render/fx_renderer/fx_renderer.h') diff --git a/include/render/fx_renderer/fx_renderer.h b/include/render/fx_renderer/fx_renderer.h new file mode 100644 index 0000000..085cd1c --- /dev/null +++ b/include/render/fx_renderer/fx_renderer.h @@ -0,0 +1,80 @@ +#ifndef _FX_OPENGL_H +#define _FX_OPENGL_H + +#include +#include +#include +#include +#include +#include +#include + +enum fx_tex_shader_source { + SHADER_SOURCE_TEXTURE_RGBA = 1, + SHADER_SOURCE_TEXTURE_RGBX = 2, + SHADER_SOURCE_TEXTURE_EXTERNAL = 3, +}; + +struct quad_shader { + GLuint program; + GLint proj; + GLint color; + GLint pos_attrib; +}; + +struct tex_shader { + GLuint program; + GLint proj; + GLint tex; + GLint alpha; + GLint pos_attrib; + GLint tex_attrib; + GLint size; + GLint position; + GLint radius; +}; + +struct fx_renderer { + float projection[9]; + + struct wlr_addon addon; + + struct { + bool OES_egl_image_external; + } exts; + + struct { + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES; + } procs; + + struct { + struct quad_shader quad; + struct tex_shader tex_rgba; + struct tex_shader tex_rgbx; + struct tex_shader tex_ext; + } shaders; +}; + +void fx_renderer_init_addon(struct wlr_egl *egl, struct wlr_addon_set *addons, + const void * owner); + +struct fx_renderer *fx_renderer_addon_find(struct wlr_addon_set *addons, + const void * owner); + +struct fx_renderer *fx_renderer_create(struct wlr_egl *egl); + +void fx_renderer_fini(struct fx_renderer *renderer); + +void fx_renderer_begin(struct fx_renderer *renderer, int width, int height); + +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]); + +void fx_render_rect(struct fx_renderer *renderer, const struct wlr_box *box, + const float color[static 4], const float projection[static 9]); + +#endif -- cgit v1.2.3