16 const void* initial_pixel_data)
18 calculate_quad_vertex_size(),
20 Kakshya::DataModality::VERTEX_POSITIONS_3D)
32 if (initial_pixel_data) {
35 std::memcpy(
m_pixel_data.data(), initial_pixel_data, pixel_bytes);
41 "Created TextureBuffer: {}x{} ({} pixel bytes, {} vertex bytes)",
47 auto self = std::dynamic_pointer_cast<TextureBuffer>(shared_from_this());
56 chain = std::make_shared<BufferProcessingChain>();
59 chain->set_preferred_token(token);
62 "TextureBuffer setup_processors: TextureProcessor will be attached on first registration");
78 "TextureBuffer only supports TRIANGLE_STRIP topology. Ignoring provided topology.");
95 0, 0, vk::DescriptorType::eCombinedImageSampler);
97 uint32_t binding_index = 1;
100 0, binding_index++, vk::DescriptorType::eCombinedImageSampler);
125 if (!data || size == 0) {
127 "set_pixel_data called with null or empty data");
136 "TextureBuffer: pixel data updated ({} bytes, marked dirty)", size);
155 "TextureBuffer: position set to ({}, {}), geometry marked dirty", x, y);
166 "TextureBuffer: scale set to ({}, {}), geometry marked dirty", width, height);
177 "TextureBuffer: rotation set to {}, geometry marked dirty", angle_radians);
187 if (vertices.size() != 4) {
189 "set_custom_vertices: must provide exactly 4 vertices, got {}", vertices.size());
199 "TextureBuffer: custom vertices set, geometry marked dirty");
210 "TextureBuffer: reset to default quad, geometry marked dirty");
231 "TextureBuffer: generated default quad");
238 "TextureBuffer: using custom vertices, skipping transform");
247 "TextureBuffer: regenerated quad with transform (pos={},{}, scale={},{}, rot={})",
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
void setup_processors(ProcessingToken token) override
Setup processors with a processing token.
void use_default_quad()
Reset to default fullscreen quad Uses position and scale to generate quad geometry.
std::shared_ptr< TextureProcessor > m_texture_processor
bool m_uses_custom_vertices
void generate_quad_with_transform()
std::vector< uint8_t > m_pixel_data
std::shared_ptr< RenderProcessor > m_render_processor
void setup_rendering(const RenderConfig &config)
Setup rendering with RenderProcessor.
void mark_pixels_dirty()
Mark pixel data as changed Use this if you modify pixel data in-place without calling set_pixel_data(...
void set_position(float x, float y)
Set screen position (NDC or pixel coords depending on rendering setup)
static size_t calculate_quad_vertex_size()
TextureBuffer(uint32_t width, uint32_t height, Portal::Graphics::ImageFormat format, const void *initial_pixel_data=nullptr)
Create texture buffer with dimensions.
void set_custom_vertices(const std::vector< Nodes::TextureQuadVertex > &vertices)
std::shared_ptr< Core::VKImage > get_texture() const
Get GPU texture image Suitable for binding to shaders via RenderProcessor::bind_texture()
std::vector< uint8_t > m_vertex_bytes
void set_rotation(float angle_radians)
Set rotation around center.
void generate_default_quad()
void set_scale(float width, float height)
Set display size.
void set_pixel_data(const void *data, size_t size)
Replace pixel data.
RenderConfig m_render_config
void set_vertex_layout(const Kakshya::VertexLayout &layout)
Set vertex layout for this buffer.
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
void set_default_processor(const std::shared_ptr< BufferProcessor > &processor) override
Set the buffer's default processor.
void set_processing_chain(const std::shared_ptr< BufferProcessingChain > &chain, bool force=false) override
Replace the buffer's processing chain.
void set_default_render_config(const RenderConfig &config)
Called by derived classes to set their context-specific defaults.
Vulkan-backed buffer wrapper used in processing chains.
static size_t get_bytes_per_pixel(ImageFormat format)
Get bytes per pixel for a format.
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Init
Engine/subsystem initialization.
@ Buffers
Buffers, Managers, processors and processing chains.
QuadGeometry generate_quad(glm::vec2 position, glm::vec2 scale, float rotation)
Generate a textured quad centred on the origin.
ImageFormat
User-friendly image format enum.
Describes how a VKBuffer binds to a shader descriptor.
Vertex layout for textured quad geometry (position + UV).
std::shared_ptr< Core::Window > target_window
std::vector< std::pair< std::string, std::shared_ptr< Core::VKImage > > > additional_textures
For child-specific fields.
PrimitiveTopology topology
std::string vertex_shader
std::string fragment_shader
std::string default_texture_binding
Unified rendering configuration for graphics buffers.