chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
3 / 3
100.0%
Branches:
-
-%
Functions:
1 / 1
100.0%

overlay/kernels/overlay.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 #pragma once
3
4 #include "chrono_batch_render/device/kernels/shared.h"
5 #include "chrono_batch_render/overlay/kernels/fills.h"
6 #include "chrono_batch_render/overlay/kernels/mask.h"
7 #include "chrono_batch_render/overlay/kernels/picks.h"
8 #include "chrono_batch_render/overlay/kernels/style.h"
9 #include "chrono_batch_render/overlay/kernels/text.h"
10
11 #ifndef __SLANG__
12 #include "chrono_batch_render/io/kernels/encoding.h"
13 #include "chrono_batch_render/scene/records/instances.h"
14 #include "chrono_batch_render/scene/records/render_tables.h"
15 #endif
16
17 namespace chrono::batch_render {
18
19 CHRONO_BATCH_RENDER_ENUM(OverlayKind){
20 Lines,
21 Markers,
22 Boxes,
23 Spheres,
24 Circles,
25 Frames,
26 Arrows,
27 Capsules,
28 Trails,
29 Labels,
30 Texts,
31 Numbers,
32 Triangles,
33 Images,
34 Prims,
35 Outlines,
36 };
37
38 CHRONO_BATCH_RENDER_ENUM(OverlayPiece){
39 Segment,
40 Marker,
41 Glyph,
42 Box,
43 Triangle,
44 };
45
46 static const uint kOverlayGroup = 64;
47 static const uint kOverlayTile = 8;
48 static const uint kOverlayTilePixels = kOverlayTile * kOverlayTile;
49
50 static const uint kOverlayDepthMask = 3;
51 static const uint kOverlayPerspective = 1u << 2;
52 static const uint kOverlayKindShift = 3;
53 static const uint kOverlayKindMask = 7;
54 static const uint kOverlayShapeShift = 6;
55 static const uint kOverlayShapeMask = 7;
56 static const uint kOverlayDashShift = 6;
57 static const uint kOverlayGapShift = 12;
58 static const uint kOverlayPatternMask = 63;
59 static const uint kOverlayRadiusShift = 18;
60 static const float kOverlayRadiusUnits = 8;
61 static const uint kOverlayMostRadius = (1u << 14) - 1;
62 static const uint kOverlayHalo = 1u << 6;
63 static const uint kOverlayEdgeShift = 6;
64 static const uint kOverlayEdgeMask = 7;
65 static const uint kOverlayTextured = 1u << 9;
66 static const uint kOverlayUvShift = 10;
67 static const uint kOverlayHaloShift = 7;
68 static const uint kOverlayHaloMask = 255;
69 static const uint kOverlayMostGroups = 65535;
70 static const uint kOverlayTileList = 4;
71 static const uint kOverlayTileWords = 4;
72
73 static const uint kOverlayByteColors = 1u << 0;
74 static const uint kOverlayHasColors = 1u << 1;
75 static const uint kOverlayHasSizes = 1u << 2;
76 static const uint kOverlayHasWorlds = 1u << 3;
77 static const uint kOverlayGrouped = 1u << 4;
78 static const uint kOverlayHasRotations = 1u << 5;
79 static const uint kOverlayHasScalars = 1u << 6;
80 static const uint kOverlayHasExtras = 1u << 7;
81 static const uint kOverlayPackedText = 1u << 8;
82 static const uint kOverlayScreen = 1u << 9;
83 static const uint kOverlayMeters = 1u << 10;
84 static const uint kOverlayUnited = 1u << 11;
85 static const uint kOverlayImageLayers = 1u << 12;
86 static const uint kOverlayScreenSized = 1u << 13;
87 static const uint kOverlayFacing = 1u << 14;
88 static const uint kOverlayPickable = 1u << 15;
89 static const uint kOverlayHasIds = 1u << 16;
90 static const uint kOverlayScreenPoints = 1u << 17;
91 static const uint kOverlayEndVectors = 1u << 18;
92
93 static const uint kOverlayBoxWords = 8;
94
95 static const uint kMostOverlays = 64;
96
97 struct OverlayView {
98 Ptr<uint> overlay;
99 Ptr<float> depth;
100 Ptr<uint> mask;
101 Ptr<float> maskDepth;
102 Ptr<uint> maskTiles;
103 uint64_t overlays;
104 uint camera;
105 uint layer;
106 uint width;
107 uint height;
108 uint firstTile;
109 uint columnCount;
110 float missDistance;
111 uint outlined;
112 uint product;
113 uint padding0;
114 };
115
116 CHRONO_BATCH_RENDER_CHECK_SIZE(OverlayView, 88);
117
118 struct OverlayBatch {
119 Ptr<float> points;
120 Ptr<float> ends;
121 Ptr<uint> colors;
122 Ptr<float> sizes;
123 Ptr<uint> worlds;
124 Ptr<uint> itemCounts;
125 Ptr<uint> order;
126 Ptr<uint> groupStarts;
127 Ptr<float> rotations;
128 Ptr<float> scalars;
129 Ptr<uint> extras;
130 uint64_t chars;
131 Ptr<uint> prims;
132 Ptr<uint> primGroups;
133 Ptr<uint> boxes;
134 uint64_t image;
135 Ptr<uint> ids;
136 uint pointStride;
137 uint pointWorldStride;
138 uint endStride;
139 uint endWorldStride;
140 uint colorStride;
141 uint colorWorldStride;
142 uint sizeStride;
143 uint sizeWorldStride;
144 uint rotationStride;
145 uint rotationWorldStride;
146 uint scalarStride;
147 uint scalarWorldStride;
148 uint extraStride;
149 uint extraWorldStride;
150 uint worldStride;
151 uint itemCountStride;
152 uint capacity;
153 uint worldCount;
154 uint firstItem;
155 uint kind;
156 uint flags;
157 uint color;
158 float size;
159 uint world;
160 uint anchor;
161 uint overlay;
162 uint groups;
163 uint pieces;
164 uint trailLength;
165 float length;
166 float fade;
167 uint charStride;
168 uint maxChars;
169 uint prefix[4];
170 uint suffix[4];
171 uint prefixLength;
172 uint suffixLength;
173 uint decimals;
174 uint background;
175 float atX;
176 float atY;
177 float offsetX;
178 float offsetY;
179 float alignX;
180 float alignY;
181 uint depth;
182 uint marker;
183 uint dash;
184 uint gap;
185 uint primShape;
186 uint primCount;
187 uint imageWidth;
188 uint imageHeight;
189 uint imageRowStride;
190 uint imageLayerStride;
191 uint halo;
192 float justify;
193 uint id;
194 uint idStride;
195 float vectorScale;
196 };
197
198 CHRONO_BATCH_RENDER_CHECK_SIZE(OverlayBatch, 400);
199
200 struct OverlayRecord {
201 float ax;
202 float ay;
203 float bx;
204 float by;
205 float depthA;
206 float depthB;
207 uint color;
208 uint flags;
209 };
210
211 CHRONO_BATCH_RENDER_CHECK_SIZE(OverlayRecord, 32);
212
213 struct OverlayParams {
214 Ptr<RenderTables> tables;
215 Ptr<OverlayView> views;
216 Ptr<OverlayBatch> batches;
217 Ptr<OverlayRecord> records;
218 Ptr<uint> tileCounts;
219 Ptr<uint> offsets;
220 Ptr<uint> keys;
221 Ptr<uint> values;
222 Ptr<uint> pairCount;
223 Ptr<uint> occupied;
224 uint64_t font;
225 Ptr<OverlayGlyph> glyphs;
226 uint64_t kerning;
227 Ptr<OverlayFill> fills;
228 Ptr<uint> fillCount;
229 Ptr<OverlayCameraImage> cameraImages;
230 Ptr<OverlayOutline> outlines;
231 uint cameraImageCount;
232 uint fillCapacity;
233 uint outlineCount;
234 uint pickCount;
235 Ptr<OverlayPickQuery> picks;
236 Ptr<OverlayPickResult> pickResults;
237 uint viewCount;
238 uint batchCount;
239 uint viewItemCount;
240 uint workCount;
241 uint tileCount;
242 uint pairCapacity;
243 float textHeight;
244 uint padding;
245 };
246
247 CHRONO_BATCH_RENDER_CHECK_SIZE(OverlayParams, 200);
248
249 204 CHRONO_BATCH_RENDER_SHARED uint PackOverlayColor(float r, float g, float b, float a) {
250 204 return EncodeUnorm8(EncodeSrgb(r)) | EncodeUnorm8(EncodeSrgb(g)) << 8 |
251 204 EncodeUnorm8(EncodeSrgb(b)) << 16 | EncodeUnorm8(a) << 24;
252 }
253
254 }
255