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 |