Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions plugins/animate/fire/fire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t
wf::output_t *output)
{
this->self = std::dynamic_pointer_cast<fire_node_t>(self->shared_from_this());
auto child_damage = [=] (const wf::region_t& damage)
auto child_damage = [=] (const wf::regionf_t& damage)
{
push_damage(damage | self->get_bounding_box());
};
Expand All @@ -155,7 +155,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t

void schedule_instructions(
std::vector<wf::scene::render_instruction_t>& instructions,
const wf::render_target_t& target, wf::region_t& damage) override
const wf::render_target_t& target, wf::regionf_t& damage) override
{
if (children.empty())
{
Expand Down Expand Up @@ -191,7 +191,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t
{
for (auto box : data.damage)
{
wf::gles::render_target_logic_scissor(data.target, wlr_box_from_pixman_box(box));
wf::gles::render_target_logic_scissor(data.target, box);
self->ps->render(wf::gles::render_target_orthographic_projection(data.target) * translate);
}
});
Expand All @@ -205,7 +205,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t
}
}

void compute_visibility(wf::output_t *output, wf::region_t& visible) override
void compute_visibility(wf::output_t *output, wf::regionf_t& visible) override
{
for (auto& ch : this->children)
{
Expand Down
30 changes: 18 additions & 12 deletions plugins/animate/squeezimize.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t

void schedule_instructions(
std::vector<render_instruction_t>& instructions,
const wf::render_target_t& target, wf::region_t& damage) override
const wf::render_target_t& target, wf::regionf_t& damage) override
{
instructions.push_back(render_instruction_t{
.instance = this,
Expand All @@ -218,9 +218,9 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t
});
}

void transform_damage_region(wf::region_t& damage) override
void transform_damage_region(wf::regionf_t& damage) override
{
damage |= wf::region_t{self->animation_geometry};
damage |= self->animation_geometry;
}

void render(const render_instruction_t& data) override
Expand All @@ -247,14 +247,19 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t
(self->minimize_target.y + self->minimize_target.height) - src_box.y),
(src_box.y + src_box.height) - self->minimize_target.y);

const float geometry_x = (float)self->animation_geometry.x;
const float geometry_y = (float)self->animation_geometry.y;
const float geometry_width = (float)self->animation_geometry.width;
const float geometry_height = (float)self->animation_geometry.height;

const float vertex_data_pos[] = {
1.0f * self->animation_geometry.x,
1.0f * self->animation_geometry.y + self->animation_geometry.height,
1.0f * self->animation_geometry.x + self->animation_geometry.width,
1.0f * self->animation_geometry.y + self->animation_geometry.height,
1.0f * self->animation_geometry.x + self->animation_geometry.width,
1.0f * self->animation_geometry.y,
1.0f * self->animation_geometry.x, 1.0f * self->animation_geometry.y,
geometry_x,
geometry_y + geometry_height,
geometry_x + geometry_width,
geometry_y + geometry_height,
geometry_x + geometry_width,
geometry_y,
geometry_x, geometry_y,
};

const glm::vec4 src_box_pos{
Expand Down Expand Up @@ -290,7 +295,7 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t
self->program.set_active_texture(src_tex);
for (auto box : data.damage)
{
gles::render_target_logic_scissor(data.target, wlr_box_from_pixman_box(box));
gles::render_target_logic_scissor(data.target, box);
GL_CALL(glDrawArrays(GL_TRIANGLE_FAN, 0, 4));
}
});
Expand Down Expand Up @@ -418,7 +423,8 @@ class squeezimize_animation : public animate::animation_base_t
wf::dassert(toplevel != nullptr, "We cannot minimize non-toplevel views!");
auto hint = toplevel->get_minimize_hint();
auto tmgr = view->get_transformed_node();
auto node = std::make_shared<wf::squeezimize::squeezimize_transformer>(view, dur, hint, bbox);
auto node = std::make_shared<wf::squeezimize::squeezimize_transformer>(view, dur,
wf::from_framebuffer_box(hint), bbox);
tmgr->add_transformer(node, wf::TRANSFORMER_HIGHLEVEL + 1, squeezimize_transformer_name);
node->init_animation(type & WF_ANIMATE_HIDING_ANIMATION);
}
Expand Down
4 changes: 2 additions & 2 deletions plugins/animate/unmapped-view-node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ namespace wf
class unmapped_view_snapshot_node : public wf::scene::node_t
{
wf::auxilliary_buffer_t snapshot;
wf::dimensions_t snapshot_logical_size;
wf::dimensionsf_t snapshot_logical_size;
std::weak_ptr<wf::view_interface_t> _view;

public:
unmapped_view_snapshot_node(wayfire_view view) : node_t(false)
{
view->take_snapshot(snapshot);
snapshot_logical_size = wf::dimensions(view->get_surface_root_node()->get_bounding_box());
snapshot_logical_size = wf::fdimensions(view->get_surface_root_node()->get_bounding_box());
_view = view->weak_from_this();
}

Expand Down
15 changes: 8 additions & 7 deletions plugins/blur/blur-base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,9 @@ static int round_up(int x, int mod)
* Calculate the smallest box which contains @box and whose x, y, width, height
* are divisible by @degrade, and clamp that box to @bounds.
*/
static wf::geometry_t sanitize(wf::geometry_t box, int degrade,
wf::geometry_t bounds)
static wlr_box sanitize(wlr_box box, int degrade, wlr_box bounds)
{
wf::geometry_t out_box;
wlr_box out_box;
out_box.x = degrade * int(box.x / degrade);
out_box.y = degrade * int(box.y / degrade);
out_box.width = round_up(box.width, degrade);
Expand All @@ -147,7 +146,8 @@ static wf::geometry_t sanitize(wf::geometry_t box, int degrade,
out_box.height += degrade;
}

return wf::clamp(out_box, bounds);
return wlr_box(wf::to_framebuffer_box(wf::clamp(wf::from_framebuffer_box(out_box),
wf::from_framebuffer_box(bounds))));
}

wlr_box wf_blur_base::copy_region(wf::auxilliary_buffer_t& result,
Expand Down Expand Up @@ -212,7 +212,7 @@ void wf_blur_base::prepare_blur(const wf::render_target_t& target_fb, const wf::
std::swap(fb[0], fb[1]);
}

prepared_geometry = damage_box;
prepared_geometry = wf::from_framebuffer_box(damage_box);
}

static wf::pointf_t get_center(wf::geometry_t g)
Expand Down Expand Up @@ -264,7 +264,7 @@ void wf_blur_base::render(wf::gles_texture_t src_tex, wlr_box src_box, const wf:
const auto scale_y = 1.0 * view_box.height / blurred_box.height;
glm::mat4 scale = glm::scale(glm::mat4(1.0), glm::vec3{scale_x, scale_y, 1.0});

const wf::pointf_t center_view = get_center(view_box);
const wf::pointf_t center_view = get_center(wf::from_framebuffer_box(view_box));
const wf::pointf_t center_prepared = get_center(blurred_box);
const auto translate_x = 1.0 * (center_view.x - center_prepared.x) / view_box.width;
const auto translate_y = 1.0 * (center_view.y - center_prepared.y) / view_box.height;
Expand All @@ -287,7 +287,8 @@ void wf_blur_base::render(wf::gles_texture_t src_tex, wlr_box src_box, const wf:

for (const auto& box : damage)
{
wf::gles::render_target_logic_scissor(target_fb, wlr_box_from_pixman_box(box));
wf::gles::render_target_logic_scissor(target_fb,
wf::from_framebuffer_box(wlr_box_from_pixman_box(box)));
GL_CALL(glDrawArrays(GL_TRIANGLE_FAN, 0, 4));
}

Expand Down
21 changes: 12 additions & 9 deletions plugins/blur/blur.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>

public:
using transformer_render_instance_t::transformer_render_instance_t;
bool is_fully_opaque(wf::region_t damage)
bool is_fully_opaque(wf::regionf_t damage)
{
if (self->get_children().size() == 1)
{
Expand All @@ -109,7 +109,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
return false;
}

wf::region_t calculate_translucent_damage(const wf::render_target_t& target, wf::region_t damage)
wf::regionf_t calculate_translucent_damage(const wf::render_target_t& target, wf::regionf_t damage)
{
if (self->get_children().size() == 1)
{
Expand All @@ -120,7 +120,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
auto opaque_region = opaque->get_opaque_region();
opaque_region.expand_edges(-padding);

wf::region_t translucent_region = damage ^ opaque_region;
wf::regionf_t translucent_region = damage ^ opaque_region;
return translucent_region;
}
}
Expand All @@ -129,7 +129,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
}

void schedule_instructions(std::vector<render_instruction_t>& instructions,
const wf::render_target_t& target, wf::region_t& damage) override
const wf::render_target_t& target, wf::regionf_t& damage) override
{
const int padding = calculate_damage_padding(target, self->provider()->calculate_blur_radius());
auto bbox = self->get_bounding_box();
Expand Down Expand Up @@ -164,7 +164,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
padded_region &= target.geometry;

// Actual region which will be repainted by this render instance.
wf::region_t we_repaint = padded_region;
wf::regionf_t we_repaint = padded_region;

this->saved_pixels = self->acquire_saved_pixel_buffer();
saved_pixels->region =
Expand Down Expand Up @@ -204,15 +204,18 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>

void render(const wf::scene::render_instruction_t& data) override
{
auto bounding_box = self->get_bounding_box();
auto bounding_box = wf::to_framebuffer_box(self->get_bounding_box());
data.pass->custom_gles_subpass([&]
{
auto tex = wf::gles_texture_t{get_texture(data.target.scale)};
if (!data.damage.empty())
{
auto translucent_damage = calculate_translucent_damage(data.target, data.damage);
self->provider()->prepare_blur(data.target, translucent_damage);
self->provider()->render(tex, bounding_box, data.damage, data.target, data.target);
auto translucent_damage = calculate_translucent_damage(data.target, data.damage);
auto translucent_damage_fb =
data.target.framebuffer_region_from_geometry_region(translucent_damage);
auto render_damage_fb = data.target.framebuffer_region_from_geometry_region(data.damage);
self->provider()->prepare_blur(data.target, translucent_damage_fb);
self->provider()->render(tex, bounding_box, render_damage_fb, data.target, data.target);
}

GL_CALL(glDisable(GL_SCISSOR_TEST));
Expand Down
Loading
Loading