Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef RENDER_MESH_ACTOR_H
00013 #define RENDER_MESH_ACTOR_H
00014
00020 #include "Actor.h"
00021 #include "Renderable.h"
00022 #include "UserRenderResourceManager.h"
00023 #include "foundation/PxVec3.h"
00024
00025 namespace nvidia
00026 {
00027 namespace apex
00028 {
00029
00030 PX_PUSH_PACK_DEFAULT
00031
00032 class UserRenderInstanceBuffer;
00033
00037 struct RenderMeshActorRaycastFlags
00038 {
00042 enum Enum
00043 {
00044 VISIBLE_PARTS = (1 << 0),
00045 INVISIBLE_PARTS = (1 << 1),
00046
00047 ALL_PARTS = VISIBLE_PARTS | INVISIBLE_PARTS
00048 };
00049 };
00050
00054 struct RenderMeshActorRaycastHitData
00055 {
00059 float time;
00060
00064 uint32_t partIndex;
00065
00069 uint32_t submeshIndex;
00070
00074 uint32_t vertexIndices[3];
00075
00079 PxVec3 normal;
00080
00084 PxVec3 tangent;
00085
00089 PxVec3 binormal;
00090 };
00091
00092
00096 class RenderMeshActor : public Actor, public Renderable
00097 {
00098 public:
00099
00100 enum
00101 {
00102 InvalidInstanceID = 0xFFFFFFFF
00103 };
00104
00113 virtual bool getVisibilities(uint8_t* visibilityArray, uint32_t visibilityArraySize) const = 0;
00114
00118 virtual bool setVisibility(bool visible, uint16_t partIndex = 0) = 0;
00119
00123 virtual bool isVisible(uint16_t partIndex = 0) const = 0;
00124
00128 virtual uint32_t visiblePartCount() const = 0;
00129
00136 virtual const uint32_t* getVisibleParts() const = 0;
00137
00141 virtual uint32_t getBoneCount() const = 0;
00142
00146 virtual void setTM(const PxMat44& tm, uint32_t boneIndex = 0) = 0;
00147
00155 virtual void setTM(const PxMat44& tm, const PxVec3& scale, uint32_t boneIndex = 0) = 0;
00156
00160 virtual void updateBounds() = 0;
00161
00165 virtual const PxMat44 getTM(uint32_t boneIndex = 0) const = 0;
00166
00171 virtual void setReleaseResourcesIfNothingToRender(bool value) = 0;
00172
00176 virtual void setBufferVisibility(bool bufferVisibility) = 0;
00177
00181 virtual void setOverrideMaterial(uint32_t submeshIndex, const char* overrideMaterialName) = 0;
00182
00190 virtual void syncVisibility(bool useLock = true) = 0;
00191
00195 virtual UserRenderInstanceBuffer* getInstanceBuffer() const = 0;
00199 virtual void setInstanceBuffer(UserRenderInstanceBuffer* instBuf) = 0;
00203 virtual void setMaxInstanceCount(uint32_t count) = 0;
00210 virtual void setInstanceBufferRange(uint32_t from, uint32_t count) = 0;
00211
00229 virtual bool rayCast(RenderMeshActorRaycastHitData& hitData,
00230 const PxVec3& worldOrig, const PxVec3& worldDisp,
00231 RenderMeshActorRaycastFlags::Enum flags = RenderMeshActorRaycastFlags::VISIBLE_PARTS,
00232 RenderCullMode::Enum winding = RenderCullMode::CLOCKWISE,
00233 int32_t partIndex = -1) const = 0;
00234
00235 protected:
00236
00237 virtual ~RenderMeshActor() {}
00238 };
00239
00240 PX_POP_PACK
00241
00242 }
00243 }
00244
00245 #endif // RENDER_MESH_ACTOR_H