MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
LayoutTranslator.cpp
Go to the documentation of this file.
2
4
6
8{
9 using namespace Kakshya;
10
11 switch (modality) {
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;
17
18 case DataModality::TEXTURE_COORDS_2D:
19 return vk::Format::eR32G32Sfloat;
20
21 case DataModality::VERTEX_COLORS_RGBA:
22 return vk::Format::eR32G32B32A32Sfloat;
23
24 case DataModality::AUDIO_1D:
25 case DataModality::AUDIO_MULTICHANNEL:
26 return vk::Format::eR64Sfloat;
27
28 case DataModality::SPECTRAL_2D:
29 return vk::Format::eR32G32Sfloat;
30
31 case DataModality::TRANSFORMATION_MATRIX:
32 return vk::Format::eR32G32B32A32Sfloat;
33
34 default:
36 "Unknown modality for vertex format conversion, defaulting to R32G32B32Sfloat");
37 return vk::Format::eR32G32B32Sfloat;
38 }
39}
40
41std::pair<
42 std::vector<Core::VertexBinding>,
43 std::vector<Core::VertexAttribute>>
45 const Kakshya::VertexLayout& layout,
46 uint32_t binding_index)
47{
48 if (layout.attributes.empty()) {
50 "Cannot translate empty vertex layout");
51 return {};
52 }
53
54 if (layout.vertex_count == 0) {
56 "Vertex layout has zero vertices");
57 }
58
59 if (layout.stride_bytes == 0) {
61 "Vertex layout has zero stride");
62 return {};
63 }
64
65 std::vector<Core::VertexBinding> bindings;
66 bindings.emplace_back(
67 binding_index,
68 layout.stride_bytes,
69 false,
70 vk::VertexInputRate::eVertex);
71
72 std::vector<Core::VertexAttribute> attributes;
73 uint32_t location = 0;
74
75 for (const auto& attr : layout.attributes) {
76 attributes.emplace_back(
77 location,
78 binding_index,
79 modality_to_vk_format(attr.component_modality),
80 attr.offset_in_vertex);
81
83 "Vertex attribute: location={}, format={}, offset={}",
84 location,
85 vk::to_string(attributes.back().format),
86 attr.offset_in_vertex);
87
88 location++;
89 }
90
92 "Translated vertex layout: {} vertices, {} bytes stride, {} attributes",
93 layout.vertex_count, layout.stride_bytes, layout.attributes.size());
94
95 return { bindings, attributes };
96}
97
99{
100 using namespace Kakshya;
101
102 switch (modality) {
103 case DataModality::VERTEX_POSITIONS_3D:
104 case DataModality::VERTEX_NORMALS_3D:
105 case DataModality::VERTEX_TANGENTS_3D:
106 case DataModality::VERTEX_COLORS_RGB:
107 return 12; // 3 * float32
108
109 case DataModality::TEXTURE_COORDS_2D:
110 return 8; // 2 * float32
111
112 case DataModality::VERTEX_COLORS_RGBA:
113 return 16; // 4 * float32
114
115 case DataModality::AUDIO_1D:
116 case DataModality::AUDIO_MULTICHANNEL:
117 return 8; // float64
118
119 case DataModality::SPECTRAL_2D:
120 return 8; // 2 * float32
121
122 case DataModality::TRANSFORMATION_MATRIX:
123 return 64; // 4x4 * float32
124
125 default:
126 return 4;
127 }
128}
129
131{
132 using namespace Kakshya;
133
134 switch (modality) {
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:
146 return "vec2 (UV)";
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)";
155 default:
156 return "unknown";
157 }
158}
159
160} // namespace MayaFlux::Portal::Graphics
#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.
Definition NDData.hpp:78
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.