94 void set_data(std::vector<Kakshya::DataVariant> variants);
110 void set_vertices(
const void* data,
size_t byte_count);
122 template <
typename T>
125 static_assert(
sizeof(T) == 60,
"set_vertices: T must be a 60-byte vertex type");
126 set_vertices(vertices.data(), vertices.size_bytes());
132 [[nodiscard]]
bool has_pending() const noexcept;
147 void set_texture(
std::shared_ptr<Core::VKImage>
image,
std::
string binding);
161 void set_pixel_data(Kakshya::DataVariant variant);
176 void setup_pixel_target(
179 Portal::Graphics::ImageFormat
format,
180 std::
string binding = "texSampler");
189 [[nodiscard]] Kakshya::GpuDataFormat last_texture_format() const noexcept;
203 void write_buffer(
std::shared_ptr<
VKBuffer> target, Kakshya::DataVariant data,
size_t dst_offset = 0);
212 void write_field(
std::
string name, Kakshya::DataVariant data);
220 void write_back_buffer(
size_t index, Kakshya::DataVariant data);
229 void write_mesh(Kakshya::MeshData data,
std::
string slot = {});
249 void on_attach(
const std::shared_ptr<Buffer>&
buffer)
override;
250 void on_detach(
const std::shared_ptr<Buffer>&
buffer)
override;
251 void processing_function(
const std::shared_ptr<Buffer>&
buffer)
override;
255 std::shared_ptr<Core::VKImage>
image;
265 bool m_tex_binding_confirmed {};
267 uint32_t m_tex_width {};
268 uint32_t m_tex_height {};
285 static constexpr size_t k_write_queue_capacity = 64;
287 std::unique_ptr<Memory::LockFreeQueue<WriteFn, k_write_queue_capacity>>
m_writes;
291 void enqueue_write(
WriteFn fn);
293 void upload_primary(
const std::shared_ptr<VKBuffer>& vk, std::vector<Kakshya::DataVariant>& slots);
295 void upload_vertex(
const std::shared_ptr<VKBuffer>& vk, std::vector<Kakshya::DataVariant>& slots);
299 void ensure_capacity(
const std::shared_ptr<VKBuffer>& vk,
size_t required);
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
std::shared_ptr< Core::VKImage > image