69 static_assert(
sizeof(
VertexData) == 8,
"Compiler added padding");
78 static_assert(
sizeof(
TriangleBlock) == 16,
"Compiler added padding");
111 for (
int i = 0;
i < 3; ++
i)
186 outError =
"TriangleCodecIndexed8BitPackSOA4Flags: Offset doesn't fit in 8 bit";
195 outError =
"TriangleCodecIndexed8BitPackSOA4Flags: Material index doesn't fit in 8 bit";
209 if (mVertices.empty())
216 for (
uint o : mOffsetsToPatch)
246 uint mNumTriangles = 0;
248 VertexMap mVertexMap;
356 Vec4 distance =
RayTriangle4(
inRayOrigin,
inRayDirection,
v1x,
v1y,
v1z,
v2x,
v2y,
v2z,
v3x,
v3y,
v3z);
std::uint8_t uint8
Definition Core.h:440
unsigned int uint
Definition Core.h:439
#define JPH_NAMESPACE_END
Definition Core.h:367
std::uint32_t uint32
Definition Core.h:442
#define JPH_NAMESPACE_BEGIN
Definition Core.h:361
Array< Float3 > VertexList
Definition Float3.h:43
Array< IndexedTriangle > IndexedTriangleList
Definition IndexedTriangle.h:109
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
constexpr T Clamp(T inV, T inMin, T inMax)
Clamp a value between two values.
Definition Math.h:45
T AlignUp(T inV, uint64 inAlignment)
Align inV up to the next inAlignment bytes.
Definition Math.h:80
AllocateFunction Allocate
Definition Memory.cpp:59
JPH_INLINE Vec4 RayTriangle4(Vec3Arg inOrigin, Vec3Arg inDirection, Vec4Arg inV0X, Vec4Arg inV0Y, Vec4Arg inV0Z, Vec4Arg inV1X, Vec4Arg inV1Y, Vec4Arg inV1Z, Vec4Arg inV2X, Vec4Arg inV2Y, Vec4Arg inV2Z)
Intersect ray with 4 triangles in SOA format, returns 4 vector of closest points or FLT_MAX if no hit...
Definition RayTriangle.h:76
std::vector< T, STLAllocator< T > > Array
Definition STLAllocator.h:81
Axis aligned box.
Definition AABox.h:16
Vec3 GetSize() const
Get size of bounding box.
Definition AABox.h:117
Vec3 mMin
Bounding box min and max.
Definition AABox.h:300
void Encapsulate(Vec3Arg inPos)
Encapsulate point in bounding box.
Definition AABox.h:53
Simple byte buffer, aligned to a cache line.
Definition ByteBuffer.h:16
Class that holds 3 floats. Used as a storage class. Convert to Vec3 for calculations.
Definition Float3.h:13
Triangle with 32-bit indices and material index.
Definition IndexedTriangle.h:73
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
Definition Mat44.h:13
JPH_INLINE Mat44 Transposed() const
Transpose matrix.
Definition Mat44.inl:467
JPH_INLINE Vec3 GetColumn3(uint inCol) const
Definition Mat44.h:158
JPH_INLINE Vec3 GetAxisX() const
Access to the columns.
Definition Mat44.h:146
This class is used to decode and decompress triangle data packed by the EncodingContext.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:254
void GetTriangle(const void *inTriangleStart, uint32 inTriangleIdx, Vec3 &outV1, Vec3 &outV2, Vec3 &outV3) const
Decode a single triangle.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:379
static JPH_INLINE uint8 sGetFlags(const void *inTriangleStart, int inTriangleIndex)
Get flags for a particular triangle.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:432
static JPH_INLINE void sGetFlags(const void *inTriangleStart, uint32 inNumTriangles, uint8 *outTriangleFlags)
Get flags for entire triangle block.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:413
JPH_INLINE void Unpack(const void *inTriangleStart, uint32 inNumTriangles, Vec3 *outTriangles, uint8 *outTriangleFlags) const
Unpacks triangles and flags, convenience function.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:440
JPH_INLINE void Unpack(const void *inTriangleStart, uint32 inNumTriangles, Vec3 *outTriangles) const
Unpacks triangles in the format t1v1,t1v2,t1v3, t2v1,t2v2,t2v3, ...
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:286
JPH_INLINE float TestRay(Vec3Arg inRayOrigin, Vec3Arg inRayDirection, const void *inTriangleStart, uint32 inNumTriangles, float inClosest, uint32 &outClosestTriangleIndex) const
Tests a ray against the packed triangles.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:329
JPH_INLINE DecodingContext(const TriangleHeader *inHeader)
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:275
This class is used to encode and compress triangle data into a byte buffer.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:123
EncodingContext(const VertexList &inVertices)
Construct the encoding context.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:126
uint Pack(const IndexedTriangleList &inTriangles, ByteBuffer &ioBuffer, const char *&outError)
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:142
uint GetPessimisticMemoryEstimate(uint inTriangleCount) const
Get an upper bound on the amount of bytes needed to store inTriangleCount triangles.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:134
void Finalize(const VertexList &inVertices, TriangleHeader *ioHeader, ByteBuffer &ioBuffer) const
After all triangles have been packed, this finalizes the header and triangle buffer.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:206
This class is used to validate that the triangle data will not be degenerate after compression.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:93
bool IsDegenerate(const IndexedTriangle &inTriangle) const
Test if a triangle will be degenerate after quantization.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:106
ValidationContext(const IndexedTriangleList &inTriangles, const VertexList &inVertices)
Constructor.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:96
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:24
static constexpr bool ChangesOffsetOnPack
If this codec could return a different offset than the current buffer size when calling Pack()
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:37
static constexpr int TriangleHeaderSize
Size of the header (an empty struct is always > 0 bytes so this needs a separate variable)
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:34
EComponentData
Amount of bits per component.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:41
@ COMPONENT_BITS
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:42
@ COMPONENT_MASK
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:43
EVertexXY
Packed X and Y coordinate.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:48
@ COMPONENT_X
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:49
@ COMPONENT_Y1
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:50
@ COMPONENT_Y1_BITS
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:51
EVertexZY
Packed Z and Y coordinate.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:56
@ COMPONENT_Z
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:57
@ COMPONENT_Y2_BITS
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:59
@ COMPONENT_Y2
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:58
static JPH_INLINE UVec4 sReplicate(uint32 inV)
Replicate int inV across all components.
Definition UVec4.inl:56
JPH_INLINE UVec4 Expand4Byte4() const
Takes byte 4 .. 7 and expands them to X, Y, Z and W.
Definition UVec4.inl:502
JPH_INLINE UVec4 Expand4Byte0() const
Takes byte 0 .. 3 and expands them to X, Y, Z and W.
Definition UVec4.inl:487
static JPH_INLINE UVec4 sAnd(UVec4Arg inV1, UVec4Arg inV2)
Logical and (component wise)
Definition UVec4.inl:194
static JPH_INLINE UVec4 sOr(UVec4Arg inV1, UVec4Arg inV2)
Logical or (component wise)
Definition UVec4.inl:166
JPH_INLINE UVec4 Expand4Byte8() const
Takes byte 8 .. 11 and expands them to X, Y, Z and W.
Definition UVec4.inl:517
static JPH_INLINE UVec4 sLoadInt4(const uint32 *inV)
Load 4 ints from memory.
Definition UVec4.inl:78
static JPH_INLINE UVec4 sZero()
Vector with all zeros.
Definition UVec4.inl:45
static JPH_INLINE UVec4 sSelect(UVec4Arg inV1, UVec4Arg inV2, UVec4Arg inControl)
Component wise select, returns inV1 when highest bit of inControl = 0 and inV2 when highest bit of in...
Definition UVec4.inl:152
static JPH_INLINE Vec3 sMax(Vec3Arg inV1, Vec3Arg inV2)
Return the maximum of each of the components.
Definition Vec3.inl:159
static JPH_INLINE Vec3 sReplicate(float inV)
Replicate inV across all components.
Definition Vec3.inl:118
static JPH_INLINE void sSort4(Vec4 &ioValue, UVec4 &ioIndex)
Definition Vec4.inl:301
static JPH_INLINE UVec4 sLess(Vec4Arg inV1, Vec4Arg inV2)
Less than (component wise)
Definition Vec4.inl:180
static JPH_INLINE Vec4 sFusedMultiplyAdd(Vec4Arg inMul1, Vec4Arg inMul2, Vec4Arg inAdd)
Calculates inMul1 * inMul2 + inAdd.
Definition Vec4.inl:236
static JPH_INLINE Vec4 sSelect(Vec4Arg inV1, Vec4Arg inV2, UVec4Arg inControl)
Component wise select, returns inV1 when highest bit of inControl = 0 and inV2 when highest bit of in...
Definition Vec4.inl:254
static JPH_INLINE Vec4 sZero()
Vector with all zeros.
Definition Vec4.inl:63
static JPH_INLINE Vec4 sReplicate(float inV)
Replicate inV across all components.
Definition Vec4.inl:74
A block of 4 triangles.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:73
uint8 mFlags[4]
Triangle flags (could contain material and active edges)
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:75
uint8 mIndices[3][4]
8 bit indices to triangle vertices for 4 triangles in the form mIndices[vertex][triangle] where verte...
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:74
A single packed vertex.
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:64
uint32 mVertexXY
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:65
uint32 mVertexZY
Definition TriangleCodecIndexed8BitPackSOA4Flags.h:66