MCPcopy Create free account
hub / github.com/WayfireWM/wayfire / cube_render_node_t

Class cube_render_node_t

plugins/cube/cube.cpp:42–175  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40class wayfire_cube : public wf::per_output_plugin_instance_t, public wf::pointer_interaction_t
41{
42 class cube_render_node_t : public wf::scene::node_t
43 {
44 class cube_render_instance_t : public wf::scene::render_instance_t
45 {
46 std::shared_ptr<cube_render_node_t> self;
47 wf::scene::damage_callback push_damage;
48
49 std::vector<std::vector<wf::scene::render_instance_uptr>> ws_instances;
50 std::vector<wf::region_t> ws_damage;
51 std::vector<wf::auxilliary_buffer_t> framebuffers;
52
53 wf::signal::connection_t<wf::scene::node_damage_signal> on_cube_damage =
54 [=] (wf::scene::node_damage_signal *ev)
55 {
56 push_damage(ev->region);
57 };
58
59 public:
60 cube_render_instance_t(cube_render_node_t *self, wf::scene::damage_callback push_damage)
61 {
62 this->self = std::dynamic_pointer_cast<cube_render_node_t>(self->shared_from_this());
63 this->push_damage = push_damage;
64 self->connect(&on_cube_damage);
65
66 ws_damage.resize(self->workspaces.size());
67 framebuffers.resize(self->workspaces.size());
68 ws_instances.resize(self->workspaces.size());
69 for (int i = 0; i < (int)self->workspaces.size(); i++)
70 {
71 auto push_damage_child = [=] (const wf::region_t& damage)
72 {
73 ws_damage[i] |= damage;
74 push_damage(self->get_bounding_box());
75 };
76
77 self->workspaces[i]->gen_render_instances(ws_instances[i],
78 push_damage_child, self->cube->output);
79
80 ws_damage[i] |= self->workspaces[i]->get_bounding_box();
81 }
82 }
83
84 ~cube_render_instance_t()
85 {}
86
87 void schedule_instructions(
88 std::vector<wf::scene::render_instruction_t>& instructions,
89 const wf::render_target_t& target, wf::region_t& damage) override
90 {
91 instructions.push_back(wf::scene::render_instruction_t{
92 .instance = this,
93 .target = target.translated(-wf::origin(self->get_bounding_box())),
94 .damage = damage & self->get_bounding_box(),
95 });
96
97 auto bbox = self->get_bounding_box();
98
99 damage ^= bbox;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected