aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/shared/internal/include/authoring/ApexCSGSerialization.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/shared/internal/include/authoring/ApexCSGSerialization.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/shared/internal/include/authoring/ApexCSGSerialization.h')
-rw-r--r--APEX_1.4/shared/internal/include/authoring/ApexCSGSerialization.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/APEX_1.4/shared/internal/include/authoring/ApexCSGSerialization.h b/APEX_1.4/shared/internal/include/authoring/ApexCSGSerialization.h
new file mode 100644
index 00000000..ff77d2dc
--- /dev/null
+++ b/APEX_1.4/shared/internal/include/authoring/ApexCSGSerialization.h
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
+ *
+ * NVIDIA CORPORATION and its licensors retain all intellectual property
+ * and proprietary rights in and to this software, related documentation
+ * and any modifications thereto. Any use, reproduction, disclosure or
+ * distribution of this software and related documentation without an express
+ * license agreement from NVIDIA CORPORATION is strictly prohibited.
+ */
+
+#ifndef APEX_CSG_SERIALIZATION_H
+#define APEX_CSG_SERIALIZATION_H
+
+#include "ApexUsingNamespace.h"
+#include "ApexSharedUtils.h"
+#include "ApexStream.h"
+#include "authoring/ApexCSGDefs.h"
+#include "authoring/ApexCSGHull.h"
+
+#ifndef WITHOUT_APEX_AUTHORING
+
+namespace nvidia
+{
+namespace apex
+{
+
+/* Version for serialization */
+struct Version
+{
+ enum Enum
+ {
+ Initial = 0,
+ RevisedMeshTolerances,
+ UsingOnlyPositionDataInVertex,
+ SerializingTriangleFrames,
+ UsingGSA,
+ SerializingMeshBounds,
+ AddedInternalTransform,
+ IncidentalMeshDistinction,
+
+ Count,
+ Current = Count - 1
+ };
+};
+
+
+// Vec<T,D>
+template<typename T, int D>
+PX_INLINE physx::PxFileBuf&
+operator << (physx::PxFileBuf& stream, const ApexCSG::Vec<T, D>& v)
+{
+ for (uint32_t i = 0; i < D; ++i)
+ {
+ stream << v[(int32_t)i];
+ }
+ return stream;
+}
+
+template<typename T, int D>
+PX_INLINE physx::PxFileBuf&
+operator >> (physx::PxFileBuf& stream, ApexCSG::Vec<T, D>& v)
+{
+ for (uint32_t i = 0; i < D; ++i)
+ {
+ stream >> v[(int32_t)i];
+ }
+
+ return stream;
+}
+
+
+// Edge
+PX_INLINE void
+serialize(physx::PxFileBuf& stream, const ApexCSG::Hull::Edge& e)
+{
+ stream << e.m_indexV0 << e.m_indexV1 << e.m_indexF1 << e.m_indexF2;
+}
+
+PX_INLINE void
+deserialize(physx::PxFileBuf& stream, uint32_t version, ApexCSG::Hull::Edge& e)
+{
+ PX_UNUSED(version); // Initial
+
+ stream >> e.m_indexV0 >> e.m_indexV1 >> e.m_indexF1 >> e.m_indexF2;
+}
+
+
+// Region
+PX_INLINE void
+serialize(physx::PxFileBuf& stream, const ApexCSG::Region& r)
+{
+ stream << r.side;
+}
+
+PX_INLINE void
+deserialize(physx::PxFileBuf& stream, uint32_t version, ApexCSG::Region& r)
+{
+ if (version < Version::UsingGSA)
+ {
+ ApexCSG::Hull hull;
+ hull.deserialize(stream, version);
+ }
+
+ stream >> r.side;
+}
+
+
+// Surface
+PX_INLINE void
+serialize(physx::PxFileBuf& stream, const ApexCSG::Surface& s)
+{
+ stream << s.planeIndex;
+ stream << s.triangleIndexStart;
+ stream << s.triangleIndexStop;
+ stream << s.totalTriangleArea;
+}
+
+PX_INLINE void
+deserialize(physx::PxFileBuf& stream, uint32_t version, ApexCSG::Surface& s)
+{
+ PX_UNUSED(version); // Initial
+
+ stream >> s.planeIndex;
+ stream >> s.triangleIndexStart;
+ stream >> s.triangleIndexStop;
+ stream >> s.totalTriangleArea;
+}
+
+
+// Triangle
+PX_INLINE void
+serialize(physx::PxFileBuf& stream, const ApexCSG::Triangle& t)
+{
+ for (uint32_t i = 0; i < 3; ++i)
+ {
+ stream << t.vertices[i];
+ }
+ stream << t.submeshIndex;
+ stream << t.smoothingMask;
+ stream << t.extraDataIndex;
+ stream << t.normal;
+ stream << t.area;
+}
+
+PX_INLINE void
+deserialize(physx::PxFileBuf& stream, uint32_t version, ApexCSG::Triangle& t)
+{
+ for (uint32_t i = 0; i < 3; ++i)
+ {
+ stream >> t.vertices[i];
+ if (version < Version::UsingOnlyPositionDataInVertex)
+ {
+ ApexCSG::Dir v;
+ stream >> v; // normal
+ stream >> v; // tangent
+ stream >> v; // binormal
+ ApexCSG::UV uv;
+ for (uint32_t uvN = 0; uvN < VertexFormat::MAX_UV_COUNT; ++uvN)
+ {
+ stream >> uv; // UVs
+ }
+ ApexCSG::Color c;
+ stream >> c; // color
+ }
+ }
+ stream >> t.submeshIndex;
+ stream >> t.smoothingMask;
+ stream >> t.extraDataIndex;
+ stream >> t.normal;
+ stream >> t.area;
+}
+
+// Interpolator
+PX_INLINE void
+serialize(physx::PxFileBuf& stream, const ApexCSG::Interpolator& t)
+{
+ t.serialize(stream);
+}
+
+PX_INLINE void
+deserialize(physx::PxFileBuf& stream, uint32_t version, ApexCSG::Interpolator& t)
+{
+ t.deserialize(stream, version);
+}
+
+}
+}; // namespace nvidia::apex
+
+#endif
+
+#endif // #define APEX_CSG_SERIALIZATION_H