9 using namespace Kakshya;
12 case DataModality::VERTEX_POSITIONS_3D:
13 case DataModality::VERTEX_NORMALS_3D:
14 case DataModality::VERTEX_TANGENTS_3D:
15 case DataModality::VERTEX_COLORS_RGB:
16 return vk::Format::eR32G32B32Sfloat;
18 case DataModality::TEXTURE_COORDS_2D:
19 return vk::Format::eR32G32Sfloat;
21 case DataModality::VERTEX_COLORS_RGBA:
22 return vk::Format::eR32G32B32A32Sfloat;
24 case DataModality::AUDIO_1D:
25 case DataModality::AUDIO_MULTICHANNEL:
26 return vk::Format::eR64Sfloat;
28 case DataModality::SPECTRAL_2D:
29 return vk::Format::eR32G32Sfloat;
31 case DataModality::TRANSFORMATION_MATRIX:
32 return vk::Format::eR32G32B32A32Sfloat;
34 case DataModality::SCALAR_F32:
35 return vk::Format::eR32Sfloat;
39 "Unknown modality for vertex format conversion, defaulting to R32G32B32Sfloat");
40 return vk::Format::eR32G32B32Sfloat;
45 std::vector<Core::VertexBinding>,
46 std::vector<Core::VertexAttribute>>
49 uint32_t binding_index)
53 "Cannot translate empty vertex layout");
59 "Vertex layout has zero vertices");
64 "Vertex layout has zero stride");
68 std::vector<Core::VertexBinding> bindings;
69 bindings.emplace_back(
73 vk::VertexInputRate::eVertex);
75 std::vector<Core::VertexAttribute> attributes;
76 uint32_t location = 0;
79 attributes.emplace_back(
83 attr.offset_in_vertex);
86 "Vertex attribute: location={}, format={}, offset={}",
88 vk::to_string(attributes.back().format),
89 attr.offset_in_vertex);
95 "Translated vertex layout: {} vertices, {} bytes stride, {} attributes",
98 return { bindings, attributes };
103 using namespace Kakshya;
106 case DataModality::VERTEX_POSITIONS_3D:
107 case DataModality::VERTEX_NORMALS_3D:
108 case DataModality::VERTEX_TANGENTS_3D:
109 case DataModality::VERTEX_COLORS_RGB:
112 case DataModality::TEXTURE_COORDS_2D:
115 case DataModality::VERTEX_COLORS_RGBA:
118 case DataModality::AUDIO_1D:
119 case DataModality::AUDIO_MULTICHANNEL:
120 case DataModality::SPECTRAL_2D:
123 case DataModality::TRANSFORMATION_MATRIX:
126 case DataModality::SCALAR_F32:
134 using namespace Kakshya;
137 case DataModality::VERTEX_POSITIONS_3D:
138 return "vec3 (positions)";
139 case DataModality::VERTEX_NORMALS_3D:
140 return "vec3 (normals)";
141 case DataModality::VERTEX_TANGENTS_3D:
142 return "vec3 (tangents)";
143 case DataModality::VERTEX_COLORS_RGB:
144 return "vec3 (color RGB)";
145 case DataModality::VERTEX_COLORS_RGBA:
146 return "vec4 (color RGBA)";
147 case DataModality::TEXTURE_COORDS_2D:
149 case DataModality::AUDIO_1D:
150 return "double (audio sample)";
151 case DataModality::AUDIO_MULTICHANNEL:
152 return "double (audio multichannel)";
153 case DataModality::SPECTRAL_2D:
154 return "vec2 (frequency, magnitude)";
155 case DataModality::TRANSFORMATION_MATRIX:
156 return "mat4 (transformation)";
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_TRACE(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
static uint32_t get_modality_size_bytes(Kakshya::DataModality modality)
Get size in bytes for a modality Useful for computing strides, offsets, etc.
static std::pair< std::vector< Core::VertexBinding >, std::vector< Core::VertexAttribute > > translate_layout(const Kakshya::VertexLayout &layout, uint32_t binding_index=0)
Translate a semantic vertex layout to Vulkan binding/attribute descriptions.
static vk::Format modality_to_vk_format(Kakshya::DataModality modality)
Convert semantic modality to Vulkan format.
static std::string_view describe_modality(Kakshya::DataModality modality)
Describe a modality in human-readable form e.g., "vec3" for VERTEX_POSITIONS_3D.
@ Rendering
GPU rendering operations (graphics pipeline, frame rendering)
@ Portal
High-level user-facing API layer.
DataModality
Data modality types for cross-modal analysis.
uint32_t stride_bytes
Total bytes per vertex (stride in Vulkan terms) e.g., 3 floats (position) + 3 floats (normal) = 24 by...
uint32_t vertex_count
Total number of vertices in this buffer.
std::vector< VertexAttributeLayout > attributes
All attributes that make up one vertex Ordered by shader location (0, 1, 2, ...)
Complete description of vertex data layout in a buffer.