45 const glm::vec3& bounds_min,
46 const glm::vec3& bounds_max,
69 std::shared_ptr<VKBuffer> grid_buf,
70 std::shared_ptr<VKBuffer> counter_buf,
71 const glm::vec3& bounds_min,
72 const glm::vec3& bounds_max,
84 void set_bounds(
const glm::vec3& bounds_min,
const glm::vec3& bounds_max);
92 void set_resolution(uint32_t res_x, uint32_t res_y, uint32_t res_z);
95 void set_iso_level(
float iso_level);
100 [[nodiscard]]
bool is_dirty()
const {
return m_dirty; }
113 void set_axis_palette(
const glm::vec3& x,
const glm::vec3& y,
const glm::vec3& z);
116 [[nodiscard]]
const std::array<glm::vec3, 3>&
get_axis_palette()
const {
return m_palette; }
119 void on_attach(
const std::shared_ptr<Buffer>& buffer)
override;
120 void on_descriptors_created()
override;
121 bool on_before_execute(
123 const std::shared_ptr<VKBuffer>& buffer)
override;
124 void on_after_execute(
126 const std::shared_ptr<VKBuffer>& buffer)
override;
136 bool m_dirty {
true };
137 bool m_owns_buffers {
true };
138 std::array<glm::vec3, 3> m_palette { glm::vec3(1.0F), glm::vec3(1.0F), glm::vec3(1.0F) };
153 alignas(16) glm::vec4 palette[3] {};
155 static_assert(
sizeof(McPC) % 16 == 0);
157 void rebuild_owned_buffers();
158 void evaluate_grid();
159 void rebuild_lookup_buffers();
163 return (m_res_x + 1) * (m_res_y + 1) * (m_res_z + 1);
168 return m_res_x * m_res_y * m_res_z;
173 return voxel_count() * 15U;