summaryrefslogtreecommitdiff
path: root/include/render/fx_renderer/fx_renderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/render/fx_renderer/fx_renderer.h')
-rw-r--r--include/render/fx_renderer/fx_renderer.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/include/render/fx_renderer/fx_renderer.h b/include/render/fx_renderer/fx_renderer.h
index 2067c04..f569aa9 100644
--- a/include/render/fx_renderer/fx_renderer.h
+++ b/include/render/fx_renderer/fx_renderer.h
@@ -8,6 +8,8 @@
#include <wlr/render/wlr_texture.h>
#include <wlr/util/addon.h>
#include <wlr/util/box.h>
+#include "render/fx_renderer/fx_stencilbuffer.h"
+#include "types/fx/shadow_data.h"
enum fx_tex_shader_source {
SHADER_SOURCE_TEXTURE_RGBA = 1,
@@ -34,9 +36,32 @@ struct tex_shader {
GLint radius;
};
+struct stencil_mask_shader {
+ GLuint program;
+ GLint proj;
+ GLint color;
+ GLint pos_attrib;
+ GLint half_size;
+ GLint position;
+ GLint radius;
+};
+
+struct box_shadow_shader {
+ GLuint program;
+ GLint proj;
+ GLint color;
+ GLint pos_attrib;
+ GLint position;
+ GLint size;
+ GLint blur_sigma;
+ GLint corner_radius;
+};
+
struct fx_renderer {
float projection[9];
+ struct fx_stencilbuffer stencil_buffer;
+
struct wlr_addon addon;
struct {
@@ -52,6 +77,8 @@ struct fx_renderer {
struct tex_shader tex_rgba;
struct tex_shader tex_rgbx;
struct tex_shader tex_ext;
+ struct box_shadow_shader box_shadow;
+ struct stencil_mask_shader stencil_mask;
} shaders;
};
@@ -71,6 +98,19 @@ void fx_renderer_clear(const float color[static 4]);
void fx_renderer_scissor(struct wlr_box *box);
+// Initialize the stenciling work
+void fx_renderer_stencil_mask_init(void);
+
+// Close the mask
+void fx_renderer_stencil_mask_close(bool draw_inside_mask);
+
+// Finish stenciling and clear the buffer
+void fx_renderer_stencil_mask_fini(void);
+
+void fx_renderer_stencil_enable(void);
+
+void fx_renderer_stencil_disable(void);
+
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],
@@ -79,4 +119,9 @@ bool fx_render_subtexture_with_matrix(struct fx_renderer *renderer,
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_box_shadow(struct fx_renderer *renderer,
+ const struct wlr_box *box, const struct wlr_box *stencil_box,
+ const float matrix[static 9], int corner_radius,
+ struct shadow_data *shadow_data);
+
#endif