Loading...
Searching...
No Matches
plugins/score-plugin-threedim/Threedim/Debug.hpp
1#pragma once
2
3#include <score/tools/std/String.hpp>
4
5#include <QDebug>
6
7#include <halp/geometry.hpp>
8#include <magic_enum/magic_enum.hpp>
9
10namespace halp
11{
12inline QDebug operator<<(QDebug dbg, const dynamic_geometry& geom)
13{
14 QDebugStateSaver saver(dbg);
15 dbg.nospace();
16
17 dbg << "dynamic_geometry {\n";
18
19 // Basic properties
20 dbg << " vertices: " << geom.vertices << "\n";
21 dbg << " topology: " << magic_enum::enum_name(geom.topology) << "\n";
22 dbg << " cull_mode: " << magic_enum::enum_name(geom.cull_mode) << "\n";
23 dbg << " front_face: " << magic_enum::enum_name(geom.front_face) << "\n";
24
25 // Buffers
26 dbg << " buffers[" << geom.buffers.size() << "]: {\n";
27 for(std::size_t i = 0; i < geom.buffers.size(); ++i)
28 {
29 const auto& buf = geom.buffers[i];
30 dbg << " [" << i << "] { ralw_data: " << buf.raw_data
31 << ", size: " << buf.byte_size << ", dirty: " << (buf.dirty ? "true" : "false")
32 << " }\n";
33 }
34 dbg << " }\n";
35
36 // Bindings
37 dbg << " bindings[" << geom.bindings.size() << "]: {\n";
38 for(std::size_t i = 0; i < geom.bindings.size(); ++i)
39 {
40 const auto& bind = geom.bindings[i];
41 dbg << " [" << i << "] { stride: " << bind.stride
42 << ", step_rate: " << bind.step_rate
43 << ", classification: " << magic_enum::enum_name(bind.classification) << " }\n";
44 }
45 dbg << " }\n";
46
47 // Attributes
48 dbg << " attributes[" << geom.attributes.size() << "]: {\n";
49 for(std::size_t i = 0; i < geom.attributes.size(); ++i)
50 {
51 const auto& attr = geom.attributes[i];
52 dbg << " [" << i << "] { binding: " << attr.binding
53 << ", location: " << magic_enum::enum_name(attr.location)
54 << ", format: " << magic_enum::enum_name(attr.format)
55 << ", offset: " << attr.byte_offset << " }\n";
56 }
57 dbg << " }\n";
58
59 // Inputs
60 dbg << " input[" << geom.input.size() << "]: {\n";
61 for(std::size_t i = 0; i < geom.input.size(); ++i)
62 {
63 const auto& inp = geom.input[i];
64 dbg << " [" << i << "] { buffer: " << inp.buffer
65 << ", offset: " << inp.byte_offset << " }\n";
66 }
67 dbg << " }\n";
68
69 // Index buffer
70 dbg << " index: { buffer: " << geom.index.buffer;
71 if(geom.index.buffer >= 0)
72 {
73 dbg << ", offset: " << geom.index.byte_offset
74 << ", format: " << magic_enum::enum_name(geom.index.format);
75 }
76 else
77 {
78 dbg << " (none)";
79 }
80 dbg << " }\n";
81
82 dbg << "}";
83
84 return dbg;
85}
86inline QDebug operator<<(QDebug dbg, const dynamic_gpu_geometry& geom)
87{
88 QDebugStateSaver saver(dbg);
89 dbg.nospace();
90
91 dbg << "dynamic_gpu_geometry {\n";
92
93 // Basic properties
94 dbg << " vertices: " << geom.vertices << "\n";
95 dbg << " topology: " << magic_enum::enum_name(geom.topology) << "\n";
96 dbg << " cull_mode: " << magic_enum::enum_name(geom.cull_mode) << "\n";
97 dbg << " front_face: " << magic_enum::enum_name(geom.front_face) << "\n";
98
99 // Buffers
100 dbg << " buffers[" << geom.buffers.size() << "]: {\n";
101 for(std::size_t i = 0; i < geom.buffers.size(); ++i)
102 {
103 const auto& buf = geom.buffers[i];
104 dbg << " [" << i << "] { handle: " << buf.handle << ", size: " << buf.byte_size
105 << ", dirty: " << (buf.dirty ? "true" : "false") << " }\n";
106 }
107 dbg << " }\n";
108
109 // Bindings
110 dbg << " bindings[" << geom.bindings.size() << "]: {\n";
111 for(std::size_t i = 0; i < geom.bindings.size(); ++i)
112 {
113 const auto& bind = geom.bindings[i];
114 dbg << " [" << i << "] { stride: " << bind.stride
115 << ", step_rate: " << bind.step_rate
116 << ", classification: " << magic_enum::enum_name(bind.classification) << " }\n";
117 }
118 dbg << " }\n";
119
120 // Attributes
121 dbg << " attributes[" << geom.attributes.size() << "]: {\n";
122 for(std::size_t i = 0; i < geom.attributes.size(); ++i)
123 {
124 const auto& attr = geom.attributes[i];
125 dbg << " [" << i << "] { binding: " << attr.binding
126 << ", location: " << magic_enum::enum_name(attr.location)
127 << ", format: " << magic_enum::enum_name(attr.format)
128 << ", offset: " << attr.byte_offset << " }\n";
129 }
130 dbg << " }\n";
131
132 // Inputs
133 dbg << " input[" << geom.input.size() << "]: {\n";
134 for(std::size_t i = 0; i < geom.input.size(); ++i)
135 {
136 const auto& inp = geom.input[i];
137 dbg << " [" << i << "] { buffer: " << inp.buffer
138 << ", offset: " << inp.byte_offset << " }\n";
139 }
140 dbg << " }\n";
141
142 // Index buffer
143 dbg << " index: { buffer: " << geom.index.buffer;
144 if(geom.index.buffer >= 0)
145 {
146 dbg << ", offset: " << geom.index.byte_offset
147 << ", format: " << magic_enum::enum_name(geom.index.format);
148 }
149 else
150 {
151 dbg << " (none)";
152 }
153 dbg << " }\n";
154
155 dbg << "}";
156
157 return dbg;
158}
159
160}