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;
36 "Unknown modality for vertex format conversion, defaulting to R32G32B32Sfloat");
37 return vk::Format::eR32G32B32Sfloat;
42 std::vector<Core::VertexBinding>,
43 std::vector<Core::VertexAttribute>>
46 uint32_t binding_index)
50 "Cannot translate empty vertex layout");
56 "Vertex layout has zero vertices");
61 "Vertex layout has zero stride");
65 std::vector<Core::VertexBinding> bindings;
66 bindings.emplace_back(
70 vk::VertexInputRate::eVertex);
72 std::vector<Core::VertexAttribute> attributes;
73 uint32_t location = 0;
76 attributes.emplace_back(
80 attr.offset_in_vertex);
83 "Vertex attribute: location={}, format={}, offset={}",
85 vk::to_string(attributes.back().format),
86 attr.offset_in_vertex);
92 "Translated vertex layout: {} vertices, {} bytes stride, {} attributes",
95 return { bindings, attributes };
100 using namespace Kakshya;
103 case DataModality::VERTEX_POSITIONS_3D:
104 case DataModality::VERTEX_NORMALS_3D:
105 case DataModality::VERTEX_TANGENTS_3D:
106 case DataModality::VERTEX_COLORS_RGB:
109 case DataModality::TEXTURE_COORDS_2D:
112 case DataModality::VERTEX_COLORS_RGBA:
115 case DataModality::AUDIO_1D:
116 case DataModality::AUDIO_MULTICHANNEL:
119 case DataModality::SPECTRAL_2D:
122 case DataModality::TRANSFORMATION_MATRIX:
132 using namespace Kakshya;
135 case DataModality::VERTEX_POSITIONS_3D:
136 return "vec3 (positions)";
137 case DataModality::VERTEX_NORMALS_3D:
138 return "vec3 (normals)";
139 case DataModality::VERTEX_TANGENTS_3D:
140 return "vec3 (tangents)";
141 case DataModality::VERTEX_COLORS_RGB:
142 return "vec3 (color RGB)";
143 case DataModality::VERTEX_COLORS_RGBA:
144 return "vec4 (color RGBA)";
145 case DataModality::TEXTURE_COORDS_2D:
147 case DataModality::AUDIO_1D:
148 return "double (audio sample)";
149 case DataModality::AUDIO_MULTICHANNEL:
150 return "double (audio multichannel)";
151 case DataModality::SPECTRAL_2D:
152 return "vec2 (frequency, magnitude)";
153 case DataModality::TRANSFORMATION_MATRIX:
154 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.