summaryrefslogtreecommitdiff
path: root/render/fx_renderer/fx_renderer.c
diff options
context:
space:
mode:
Diffstat (limited to 'render/fx_renderer/fx_renderer.c')
-rw-r--r--render/fx_renderer/fx_renderer.c47
1 files changed, 44 insertions, 3 deletions
diff --git a/render/fx_renderer/fx_renderer.c b/render/fx_renderer/fx_renderer.c
index 0923555..0b9e1a4 100644
--- a/render/fx_renderer/fx_renderer.c
+++ b/render/fx_renderer/fx_renderer.c
@@ -3,6 +3,7 @@
https://gitlab.freedesktop.org/wlroots/wlroots/-/tree/master/render/gles2
*/
+#include "render/fx_renderer/shaders.h"
#define _POSIX_C_SOURCE 199309L
#include <assert.h>
#include <drm_fourcc.h>
@@ -20,10 +21,11 @@
#include <wlr/util/log.h>
#include "render/egl.h"
+#include "scenefx/render/pass.h"
#include "render/pixel_format.h"
#include "render/fx_renderer/util.h"
#include "render/fx_renderer/fx_renderer.h"
-#include "scenefx/fx_renderer/fx_renderer.h"
+#include "scenefx/render/fx_renderer/fx_renderer.h"
#include "render/fx_renderer/matrix.h"
#include "util/time.h"
@@ -453,6 +455,8 @@ static void fx_renderer_destroy(struct wlr_renderer *wlr_renderer) {
static struct wlr_render_pass *begin_buffer_pass(struct wlr_renderer *wlr_renderer,
struct wlr_buffer *wlr_buffer, const struct wlr_buffer_pass_options *options) {
+ struct fx_renderer *renderer = fx_get_renderer(wlr_renderer);
+ renderer->basic_renderer = true;
struct fx_gles_render_pass *pass =
fx_renderer_begin_buffer_pass(wlr_renderer, wlr_buffer, NULL, options);
if (!pass) {
@@ -638,6 +642,33 @@ static bool link_shaders(struct fx_renderer *renderer) {
wlr_log(WLR_ERROR, "Could not link quad shader");
goto error;
}
+
+ // rounded quad fragment shaders
+ if (!link_quad_round_program(&renderer->shaders.quad_round, SHADER_SOURCE_QUAD_ROUND)) {
+ wlr_log(WLR_ERROR, "Could not link quad shader");
+ goto error;
+ }
+ // rounded quad fragment shaders
+ if (!link_quad_round_program(&renderer->shaders.quad_round_tl, SHADER_SOURCE_QUAD_ROUND_TOP_LEFT)) {
+ wlr_log(WLR_ERROR, "Could not link quad shader");
+ goto error;
+ }
+ // rounded quad fragment shaders
+ if (!link_quad_round_program(&renderer->shaders.quad_round_tr, SHADER_SOURCE_QUAD_ROUND_TOP_RIGHT)) {
+ wlr_log(WLR_ERROR, "Could not link quad shader");
+ goto error;
+ }
+ // rounded quad fragment shaders
+ if (!link_quad_round_program(&renderer->shaders.quad_round_bl, SHADER_SOURCE_QUAD_ROUND_BOTTOM_LEFT)) {
+ wlr_log(WLR_ERROR, "Could not link quad shader");
+ goto error;
+ }
+ // rounded quad fragment shaders
+ if (!link_quad_round_program(&renderer->shaders.quad_round_br, SHADER_SOURCE_QUAD_ROUND_BOTTOM_RIGHT)) {
+ wlr_log(WLR_ERROR, "Could not link quad shader");
+ goto error;
+ }
+
// fragment shaders
if (!link_tex_program(&renderer->shaders.tex_rgba, SHADER_SOURCE_TEXTURE_RGBA)) {
wlr_log(WLR_ERROR, "Could not link tex_RGBA shader");
@@ -652,6 +683,12 @@ static bool link_shaders(struct fx_renderer *renderer) {
goto error;
}
+ // border corner shader
+ if (!link_rounded_border_corner_program(&renderer->shaders.rounded_border_corner)) {
+ wlr_log(WLR_ERROR, "Could not link rounded border corner shader");
+ goto error;
+ }
+
// stencil mask shader
if (!link_stencil_mask_program(&renderer->shaders.stencil_mask)) {
wlr_log(WLR_ERROR, "Could not link stencil mask shader");
@@ -681,9 +718,15 @@ static bool link_shaders(struct fx_renderer *renderer) {
error:
glDeleteProgram(renderer->shaders.quad.program);
+ glDeleteProgram(renderer->shaders.quad_round.program);
+ glDeleteProgram(renderer->shaders.quad_round_tl.program);
+ glDeleteProgram(renderer->shaders.quad_round_tr.program);
+ glDeleteProgram(renderer->shaders.quad_round_bl.program);
+ glDeleteProgram(renderer->shaders.quad_round_br.program);
glDeleteProgram(renderer->shaders.tex_rgba.program);
glDeleteProgram(renderer->shaders.tex_rgbx.program);
glDeleteProgram(renderer->shaders.tex_ext.program);
+ glDeleteProgram(renderer->shaders.rounded_border_corner.program);
glDeleteProgram(renderer->shaders.stencil_mask.program);
glDeleteProgram(renderer->shaders.box_shadow.program);
glDeleteProgram(renderer->shaders.blur1.program);
@@ -816,8 +859,6 @@ struct wlr_renderer *fx_renderer_create_egl(struct wlr_egl *egl) {
goto error;
}
- renderer->blur_buffer_dirty = false;
-
pop_fx_debug(renderer);
wlr_log(WLR_INFO, "FX RENDERER: Shaders Initialized Successfully");