moved more to fx_renderer

This commit is contained in:
William McKinnon 2023-07-25 17:55:34 -04:00
parent 0e4a8d0c00
commit a5a38efc00
3 changed files with 26 additions and 23 deletions

View file

@ -189,9 +189,6 @@ void fx_render_box_shadow(struct fx_renderer *renderer, const struct wlr_box *bo
const float color[static 4], const float matrix[static 9], int radius,
float blur_sigma);
void fx_render_blur_segments(struct fx_renderer *renderer,
const float matrix[static 9], pixman_region32_t* damage,
struct fx_framebuffer **buffer, struct blur_shader* shader,
const struct wlr_box *box, int blur_radius);
void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_matrix[static 9], pixman_region32_t *damage, const struct wlr_box *dst_box, struct fx_framebuffer *current_buffer, int blur_radius, int blur_passes);
#endif

View file

@ -11,6 +11,7 @@
#include <wlr/render/gles2.h>
#include <wlr/types/wlr_matrix.h>
#include <wlr/util/box.h>
#include <wlr/util/region.h>
#include "log.h"
#include "sway/desktop/fx_renderer/fx_framebuffer.h"
@ -875,3 +876,26 @@ void fx_render_blur_segments(struct fx_renderer *renderer,
*buffer = &renderer->effects_buffer_swapped;
}
}
void fx_render_main_buffer_blur(struct fx_renderer *renderer, const float gl_matrix[static 9], pixman_region32_t *damage, const struct wlr_box *dst_box, struct fx_framebuffer *current_buffer, int blur_radius, int blur_passes) {
// damage region will be scaled, make a temp
pixman_region32_t tempDamage;
pixman_region32_init(&tempDamage);
// Downscale
for (int i = 0; i < blur_passes; ++i) {
wlr_region_scale(&tempDamage, damage, 1.0f / (1 << (i + 1)));
fx_render_blur_segments(renderer, gl_matrix, &tempDamage, &current_buffer,
&renderer->shaders.blur1, dst_box, blur_radius);
}
// Upscale
for (int i = blur_passes - 1; i >= 0; --i) {
// when upsampling we make the region twice as big
wlr_region_scale(&tempDamage, damage, 1.0f / (1 << i));
fx_render_blur_segments(renderer, gl_matrix, &tempDamage, &current_buffer,
&renderer->shaders.blur2, dst_box, blur_radius);
}
pixman_region32_fini(&tempDamage);
}

View file

@ -206,29 +206,11 @@ struct fx_framebuffer *render_main_buffer_blur(struct sway_output *output,
fx_framebuffer_bind(&renderer->effects_buffer);
glBindTexture(renderer->main_buffer.texture.target, renderer->main_buffer.texture.id);
// damage region will be scaled, make a temp
pixman_region32_t tempDamage;
pixman_region32_init(&tempDamage);
int blur_radius = config->blur_params.radius;
int blur_passes = config->blur_params.num_passes;
// Downscale
for (int i = 0; i < blur_passes; ++i) {
wlr_region_scale(&tempDamage, &damage, 1.0f / (1 << (i + 1)));
fx_render_blur_segments(renderer, gl_matrix, &tempDamage, &current_buffer,
&renderer->shaders.blur1, dst_box, blur_radius);
}
fx_render_main_buffer_blur(renderer, gl_matrix, &damage, dst_box, current_buffer, blur_radius, blur_passes);
// Upscale
for (int i = blur_passes - 1; i >= 0; --i) {
// when upsampling we make the region twice as big
wlr_region_scale(&tempDamage, &damage, 1.0f / (1 << i));
fx_render_blur_segments(renderer, gl_matrix, &tempDamage, &current_buffer,
&renderer->shaders.blur2, dst_box, blur_radius);
}
pixman_region32_fini(&tempDamage);
pixman_region32_fini(&damage);
// Bind back to the default buffer