31 typedef DisplayDataType DataType;
35 struct OrientedBox3d { Transform transform; Box3f box; };
36 struct DiskSector { Vec3f P;
KyFloat32 radius; Vec3f startPos; Vec3f endPos;
KyUInt32 rotDir; };
39 static KyUInt32 GetFloatCount(DisplayDataType::Enum dataType)
43 case DataType::Point :
return 3;
44 case DataType::PointRadius :
return 4;
45 case DataType::PointHeight :
return 4;
46 case DataType::PointHeightRadius :
return 5;
47 case DataType::Segment :
return 6;
48 case DataType::SegmentRadius :
return 7;
49 case DataType::SegmentHeight :
return 7;
50 case DataType::SegmentHeightRadius :
return 8;
51 case DataType::Triangle :
return sizeof(Triangle3f) /
sizeof(
KyFloat32);
52 case DataType::Quad :
return 12;
53 case DataType::Box :
return sizeof(Box3f) /
sizeof(
KyFloat32);
54 case DataType::Donut :
return 5;
55 case DataType::SegmentVerticalQuad :
return sizeof(SegmentVerticalQuad) /
sizeof(
KyFloat32);
56 case DataType::OrientedBox2d :
return sizeof(OrientedBox2d) /
sizeof(
KyFloat32);
57 case DataType::OrientedBox3d :
return sizeof(OrientedBox3d) /
sizeof(
KyFloat32);
58 case DataType::DiskSector :
return sizeof(DiskSector) /
sizeof(
KyFloat32);
59 default: KY_ASSERT(0);
return 0;
65 class DisplayShapeBlob;
75 typedef DisplayDataType DataType;
80 DisplayShape(
const ShapeColor& shapeColor)
84 DisplayShape(DisplayFlags flags,
const ShapeColor& shapeColor)
85 : m_flags(flags), m_color(shapeColor)
88 void InitData(DisplayDataType::Enum dataType)
90 m_flags.Set(dataType);
91 KyUInt32 count = Display::GetFloatCount(dataType);
95 void StealFrom(DisplayShape& other)
97 m_flags = other.m_flags;
98 m_data.StealFrom(other.m_data);
99 m_color = other.m_color;
102 void SetShapeColor(
const ShapeColor& shapeColor) { m_color = shapeColor; }
105 void SetVec3(
KyUInt32 idx,
const Vec3f& vec3) { *(Vec3f*)(&m_data[idx]) = vec3; }
108 void Set(
const T&
object) { *(T*)m_data.GetDataPtr() = object; }
110 void P (
const Vec3f& P) { InitData(DataType::Point); SetVec3(0, P); }
111 void PR (
const Vec3f& P,
KyFloat32 R) { InitData(DataType::PointRadius); SetVec3(0, P); SetFloat(3, R); }
112 void PH (
const Vec3f& P,
KyFloat32 H) { InitData(DataType::PointHeight); SetVec3(0, P); SetFloat(3, H); }
113 void PHR(
const Vec3f& P,
KyFloat32 H,
KyFloat32 R) { InitData(DataType::PointHeightRadius); SetVec3(0, P); SetFloat(3, H); SetFloat(4, R); }
116 void PQ(
const Vec3f& P,
const Vec3f& Q) { InitData(DataType::Segment); SetVec3(0, P); SetVec3(3, Q); }
117 void PQR(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 R) { InitData(DataType::SegmentRadius); SetVec3(0, P); SetVec3(3, Q); SetFloat(6, R); }
118 void PQH(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 H) { InitData(DataType::SegmentHeight); SetVec3(0, P); SetVec3(3, Q); SetFloat(6, H); }
119 void PQHR(
const Vec3f& P,
const Vec3f& Q,
KyFloat32 H,
KyFloat32 R) { InitData(DisplayDataType::SegmentHeightRadius); SetVec3(0, P); SetVec3(3, Q); SetFloat(6, H); SetFloat(7, R); }
121 void Triangle(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C) { InitData(DataType::Triangle); SetVec3(0, A); SetVec3(3, B); SetVec3(6, C); }
122 void Quad(
const Vec3f& A,
const Vec3f& B,
const Vec3f& C,
const Vec3f& D) { InitData(DataType::Quad); SetVec3(0, A); SetVec3(3, B); SetVec3(6, C); SetVec3(9, D); }
123 void Box(
const Box3f& x) { InitData(DataType::Box); Set(x); }
124 void Donut(
const Vec3f& P,
KyFloat32 R1,
KyFloat32 R2) { InitData(DataType::Donut); SetVec3(0, P); SetFloat(3, R1); SetFloat(4, R2); }
125 void SegmentVerticalQuad(
const Display::SegmentVerticalQuad& x) { InitData(DataType::SegmentVerticalQuad); Set(x); }
126 void OrientedBox2D(
const OrientedBox2d& x) { InitData(DataType::OrientedBox2d); Set(x); }
127 void OrientedBox3D(
const Display::OrientedBox3d& x) { InitData(DataType::OrientedBox3d); Set(x); }
128 void DiskSector(
const Display::DiskSector& x) { InitData(DataType::DiskSector); Set(x); }
131 DisplayFlags m_flags;
132 KyArrayPOD<KyFloat32, MemStat_VisualSystem> m_data;
136 class DisplayShapeBlob
141 ShapeColor GetShapeColor()
const {
return ShapeColor(m_fillColor, m_lineColor); }
142 Color GetLineColor()
const {
return m_lineColor; }
143 Color GetFillColor()
const {
return m_fillColor; }
144 KyFloat32 GetPrecision()
const {
return m_flags.GetPrecision(); }
147 const Vec3f& GetVec3(
KyUInt32 idx)
const {
return *(Vec3f*) (&m_data.GetValues()[idx]); }
148 const Box3f& GetBox3(
KyUInt32 idx)
const {
return *(Box3f*) (&m_data.GetValues()[idx]); }
149 const Transform& GetTransform(
KyUInt32 idx)
const {
return *(Transform*)(&m_data.GetValues()[idx]); }
151 Vec3f GetP()
const {
return GetVec3(0); }
153 Vec3f GetQ(
KyFloat32 defaultOffsetZ)
const
155 switch (m_flags.GetDataType())
157 case DisplayDataType::Segment :
158 case DisplayDataType::SegmentRadius :
159 case DisplayDataType::SegmentHeight :
160 case DisplayDataType::SegmentHeightRadius:
161 case DisplayDataType::SegmentVerticalQuad:
163 default:
return GetVec3(0).OffsetZ(defaultOffsetZ);
169 switch (m_flags.GetDataType())
171 case DisplayDataType::PointRadius :
return GetFloat(3);
172 case DisplayDataType::PointHeightRadius :
return GetFloat(4);
173 case DisplayDataType::Donut :
return GetFloat(3);
174 case DisplayDataType::SegmentRadius :
return GetFloat(6);
175 case DisplayDataType::SegmentHeightRadius:
return GetFloat(7);
176 default:
return defaultRadius;
182 switch (m_flags.GetDataType())
184 case DisplayDataType::PointHeight :
return GetFloat(3);
185 case DisplayDataType::PointHeightRadius :
return GetFloat(3);
186 case DisplayDataType::SegmentHeight :
return GetFloat(6);
187 case DisplayDataType::SegmentHeightRadius:
return GetFloat(6);
188 case DisplayDataType::SegmentVerticalQuad:
return GetFloat(6);
189 default:
return defaultHeight;
194 const T& GetAs()
const {
return *(T*)m_data.GetValues(); }
197 DisplayFlags m_flags;
198 BlobArray<KyFloat32> m_data;
205 SwapEndianness(e,
self.m_flags);
206 SwapEndianness(e,
self.m_data);
207 SwapEndianness(e,
self.m_fillColor);
208 SwapEndianness(e,
self.m_lineColor);
216 enum { TextBufferSize = 128 };
217 DisplayText() { m_text[0] =
'\0'; }
220 char m_text[TextBufferSize];
223 class DisplayTextBlob
229 BlobArray<
char> m_text;
233 inline
void SwapEndianness(
Kaim::Endianness::Target e, DisplayTextBlob& self)
235 SwapEndianness(e,
self.m_position);
236 SwapEndianness(e,
self.m_text);
237 SwapEndianness(e,
self.m_color);
243 DisplayListLifeSpan_SingleFrame,
253 class DisplayListBlob
256 KY_ROOT_BLOB_CLASS(VisualDebug, DisplayListBlob, 1)
262 BlobArray<char> m_listName;
263 BlobArray<char> m_groupName;
264 BlobArray<DisplayTextBlob> m_textBlobs;
265 BlobArray<DisplayShapeBlob> m_shapeBlobs;
266 KyUInt32 m_showInLabWhenNotSelected;
274 SwapEndianness(e,
self.m_listName);
275 SwapEndianness(e,
self.m_groupName);
276 SwapEndianness(e,
self.m_textBlobs);
277 SwapEndianness(e,
self.m_shapeBlobs);
278 SwapEndianness(e,
self.m_showInLabWhenNotSelected);
279 SwapEndianness(e,
self.m_showInLabWhenSelected);
280 SwapEndianness(e,
self.m_worldElementId);
281 SwapEndianness(e,
self.m_displayListId);
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
displayed one frame
Definition: displaylistblob.h:244
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68
float KyFloat32
float
Definition: types.h:32
DisplayListLifeSpan
Indicates if the displayList will be only visible when received, or will be remanent until replaced o...
Definition: displaylistblob.h:241