feat(physics): wire physx sdk into build
This commit is contained in:
385
engine/third_party/physx/source/pvd/src/PxPvdUserRenderImpl.h
vendored
Normal file
385
engine/third_party/physx/source/pvd/src/PxPvdUserRenderImpl.h
vendored
Normal file
@@ -0,0 +1,385 @@
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
// * Neither the name of NVIDIA CORPORATION nor the names of its
|
||||
// contributors may be used to endorse or promote products derived
|
||||
// from this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// Copyright (c) 2008-2025 NVIDIA Corporation. All rights reserved.
|
||||
|
||||
#ifndef PX_PVD_USER_RENDER_IMPL_H
|
||||
#define PX_PVD_USER_RENDER_IMPL_H
|
||||
|
||||
#include "PxPvdUserRenderer.h"
|
||||
|
||||
namespace physx
|
||||
{
|
||||
namespace pvdsdk
|
||||
{
|
||||
|
||||
struct PvdUserRenderTypes
|
||||
{
|
||||
enum Enum
|
||||
{
|
||||
Unknown = 0,
|
||||
#define DECLARE_PVD_IMMEDIATE_RENDER_TYPE(type) type,
|
||||
#define DECLARE_PVD_IMMEDIATE_RENDER_TYPE_NO_COMMA(type) type
|
||||
#include "PxPvdUserRenderTypes.h"
|
||||
#undef DECLARE_PVD_IMMEDIATE_RENDER_TYPE_NO_COMMA
|
||||
#undef DECLARE_PVD_IMMEDIATE_RENDER_TYPE
|
||||
};
|
||||
};
|
||||
|
||||
class RenderSerializer
|
||||
{
|
||||
protected:
|
||||
virtual ~RenderSerializer()
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
virtual void streamify(uint64_t& val) = 0;
|
||||
virtual void streamify(float& val) = 0;
|
||||
virtual void streamify(uint32_t& val) = 0;
|
||||
virtual void streamify(uint8_t& val) = 0;
|
||||
virtual void streamify(DataRef<uint8_t>& val) = 0;
|
||||
virtual void streamify(DataRef<PxDebugPoint>& val) = 0;
|
||||
virtual void streamify(DataRef<PxDebugLine>& val) = 0;
|
||||
virtual void streamify(DataRef<PxDebugTriangle>& val) = 0;
|
||||
virtual void streamify(PxDebugText& val) = 0;
|
||||
virtual bool isGood() = 0;
|
||||
virtual uint32_t hasData() = 0;
|
||||
|
||||
void streamify(PvdUserRenderTypes::Enum& val)
|
||||
{
|
||||
uint8_t data = static_cast<uint8_t>(val);
|
||||
streamify(data);
|
||||
val = static_cast<PvdUserRenderTypes::Enum>(data);
|
||||
}
|
||||
void streamify(PxVec3& val)
|
||||
{
|
||||
streamify(val[0]);
|
||||
streamify(val[1]);
|
||||
streamify(val[2]);
|
||||
}
|
||||
|
||||
void streamify(PvdColor& val)
|
||||
{
|
||||
streamify(val.r);
|
||||
streamify(val.g);
|
||||
streamify(val.b);
|
||||
streamify(val.a);
|
||||
}
|
||||
void streamify(PxTransform& val)
|
||||
{
|
||||
streamify(val.q.x);
|
||||
streamify(val.q.y);
|
||||
streamify(val.q.z);
|
||||
streamify(val.q.w);
|
||||
streamify(val.p.x);
|
||||
streamify(val.p.y);
|
||||
streamify(val.p.z);
|
||||
}
|
||||
void streamify(bool& val)
|
||||
{
|
||||
uint8_t tempVal = uint8_t(val ? 1 : 0);
|
||||
streamify(tempVal);
|
||||
val = tempVal ? true : false;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename TBulkRenderType>
|
||||
struct BulkRenderEvent
|
||||
{
|
||||
DataRef<TBulkRenderType> mData;
|
||||
BulkRenderEvent(const TBulkRenderType* data, uint32_t count) : mData(data, count)
|
||||
{
|
||||
}
|
||||
BulkRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(mData);
|
||||
}
|
||||
};
|
||||
struct SetInstanceIdRenderEvent
|
||||
{
|
||||
uint64_t mInstanceId;
|
||||
SetInstanceIdRenderEvent(uint64_t iid) : mInstanceId(iid)
|
||||
{
|
||||
}
|
||||
SetInstanceIdRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(mInstanceId);
|
||||
}
|
||||
};
|
||||
struct PointsRenderEvent : BulkRenderEvent<PxDebugPoint>
|
||||
{
|
||||
PointsRenderEvent(const PxDebugPoint* data, uint32_t count) : BulkRenderEvent<PxDebugPoint>(data, count)
|
||||
{
|
||||
}
|
||||
PointsRenderEvent()
|
||||
{
|
||||
}
|
||||
};
|
||||
struct LinesRenderEvent : BulkRenderEvent<PxDebugLine>
|
||||
{
|
||||
LinesRenderEvent(const PxDebugLine* data, uint32_t count) : BulkRenderEvent<PxDebugLine>(data, count)
|
||||
{
|
||||
}
|
||||
LinesRenderEvent()
|
||||
{
|
||||
}
|
||||
};
|
||||
struct TrianglesRenderEvent : BulkRenderEvent<PxDebugTriangle>
|
||||
{
|
||||
TrianglesRenderEvent(const PxDebugTriangle* data, uint32_t count) : BulkRenderEvent<PxDebugTriangle>(data, count)
|
||||
{
|
||||
}
|
||||
TrianglesRenderEvent()
|
||||
{
|
||||
}
|
||||
};
|
||||
struct DebugRenderEvent
|
||||
{
|
||||
DataRef<PxDebugPoint> mPointData;
|
||||
DataRef<PxDebugLine> mLineData;
|
||||
DataRef<PxDebugTriangle> mTriangleData;
|
||||
DebugRenderEvent(const PxDebugPoint* pointData, uint32_t pointCount, const PxDebugLine* lineData,
|
||||
uint32_t lineCount, const PxDebugTriangle* triangleData, uint32_t triangleCount)
|
||||
: mPointData(pointData, pointCount), mLineData(lineData, lineCount), mTriangleData(triangleData, triangleCount)
|
||||
{
|
||||
}
|
||||
|
||||
DebugRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(mPointData);
|
||||
serializer.streamify(mLineData);
|
||||
serializer.streamify(mTriangleData);
|
||||
}
|
||||
};
|
||||
|
||||
struct TextRenderEvent
|
||||
{
|
||||
PxDebugText mText;
|
||||
TextRenderEvent(const PxDebugText& text)
|
||||
{
|
||||
mText.color = text.color;
|
||||
mText.position = text.position;
|
||||
mText.size = text.size;
|
||||
mText.string = text.string;
|
||||
}
|
||||
TextRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(mText);
|
||||
}
|
||||
};
|
||||
|
||||
struct JointFramesRenderEvent
|
||||
{
|
||||
PxTransform parent;
|
||||
PxTransform child;
|
||||
JointFramesRenderEvent(const PxTransform& p, const PxTransform& c) : parent(p), child(c)
|
||||
{
|
||||
}
|
||||
JointFramesRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(parent);
|
||||
serializer.streamify(child);
|
||||
}
|
||||
};
|
||||
struct LinearLimitRenderEvent
|
||||
{
|
||||
PxTransform t0;
|
||||
PxTransform t1;
|
||||
float value;
|
||||
bool active;
|
||||
LinearLimitRenderEvent(const PxTransform& _t0, const PxTransform& _t1, float _value, bool _active)
|
||||
: t0(_t0), t1(_t1), value(_value), active(_active)
|
||||
{
|
||||
}
|
||||
LinearLimitRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(t0);
|
||||
serializer.streamify(t1);
|
||||
serializer.streamify(value);
|
||||
serializer.streamify(active);
|
||||
}
|
||||
};
|
||||
struct AngularLimitRenderEvent
|
||||
{
|
||||
PxTransform t0;
|
||||
float lower;
|
||||
float upper;
|
||||
bool active;
|
||||
AngularLimitRenderEvent(const PxTransform& _t0, float _lower, float _upper, bool _active)
|
||||
: t0(_t0), lower(_lower), upper(_upper), active(_active)
|
||||
{
|
||||
}
|
||||
AngularLimitRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(t0);
|
||||
serializer.streamify(lower);
|
||||
serializer.streamify(upper);
|
||||
serializer.streamify(active);
|
||||
}
|
||||
};
|
||||
struct LimitConeRenderEvent
|
||||
{
|
||||
PxTransform t;
|
||||
float ySwing;
|
||||
float zSwing;
|
||||
bool active;
|
||||
LimitConeRenderEvent(const PxTransform& _t, float _ySwing, float _zSwing, bool _active)
|
||||
: t(_t), ySwing(_ySwing), zSwing(_zSwing), active(_active)
|
||||
{
|
||||
}
|
||||
LimitConeRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(t);
|
||||
serializer.streamify(ySwing);
|
||||
serializer.streamify(zSwing);
|
||||
serializer.streamify(active);
|
||||
}
|
||||
};
|
||||
struct DoubleConeRenderEvent
|
||||
{
|
||||
PxTransform t;
|
||||
float angle;
|
||||
bool active;
|
||||
DoubleConeRenderEvent(const PxTransform& _t, float _angle, bool _active) : t(_t), angle(_angle), active(_active)
|
||||
{
|
||||
}
|
||||
DoubleConeRenderEvent()
|
||||
{
|
||||
}
|
||||
void serialize(RenderSerializer& serializer)
|
||||
{
|
||||
serializer.streamify(t);
|
||||
serializer.streamify(angle);
|
||||
serializer.streamify(active);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename TDataType>
|
||||
struct RenderSerializerMap
|
||||
{
|
||||
void serialize(RenderSerializer& s, TDataType& d)
|
||||
{
|
||||
d.serialize(s);
|
||||
}
|
||||
};
|
||||
template <>
|
||||
struct RenderSerializerMap<uint8_t>
|
||||
{
|
||||
void serialize(RenderSerializer& s, uint8_t& d)
|
||||
{
|
||||
s.streamify(d);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct RenderSerializerMap<PxDebugPoint>
|
||||
{
|
||||
void serialize(RenderSerializer& s, PxDebugPoint& d)
|
||||
{
|
||||
s.streamify(d.pos);
|
||||
s.streamify(d.color);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct RenderSerializerMap<PxDebugLine>
|
||||
{
|
||||
void serialize(RenderSerializer& s, PxDebugLine& d)
|
||||
{
|
||||
s.streamify(d.pos0);
|
||||
s.streamify(d.color0);
|
||||
s.streamify(d.pos1);
|
||||
s.streamify(d.color1);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct RenderSerializerMap<PxDebugTriangle>
|
||||
{
|
||||
void serialize(RenderSerializer& s, PxDebugTriangle& d)
|
||||
{
|
||||
s.streamify(d.pos0);
|
||||
s.streamify(d.color0);
|
||||
s.streamify(d.pos1);
|
||||
s.streamify(d.color1);
|
||||
s.streamify(d.pos2);
|
||||
s.streamify(d.color2);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename TDataType>
|
||||
struct PvdTypeToRenderType
|
||||
{
|
||||
bool compile_error;
|
||||
};
|
||||
|
||||
#define DECLARE_PVD_IMMEDIATE_RENDER_TYPE(type) \
|
||||
template <> \
|
||||
struct PvdTypeToRenderType<type##RenderEvent> \
|
||||
{ \
|
||||
enum Enum \
|
||||
{ \
|
||||
EnumVal = PvdUserRenderTypes::type \
|
||||
}; \
|
||||
};
|
||||
|
||||
#include "PxPvdUserRenderTypes.h"
|
||||
#undef DECLARE_PVD_IMMEDIATE_RENDER_TYPE
|
||||
|
||||
template <typename TDataType>
|
||||
PvdUserRenderTypes::Enum getPvdRenderTypeFromType()
|
||||
{
|
||||
return static_cast<PvdUserRenderTypes::Enum>(PvdTypeToRenderType<TDataType>::EnumVal);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user