blob: b33895fbe833610ea3e2eed8ee46cee315b93537 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
/*
* Copyright (c) 2008-2017, 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 __DESTRUCTIBLE_RENDERABLE_IMPL_H__
#define __DESTRUCTIBLE_RENDERABLE_IMPL_H__
#include "Apex.h"
#include "DestructibleActor.h"
#include "DestructibleRenderable.h"
#include "ApexRWLockable.h"
#include "ApexActor.h"
#if APEX_RUNTIME_FRACTURE
#include "../fracture/Renderable.h"
#endif
#include "ReadCheck.h"
namespace nvidia
{
namespace apex
{
class RenderMeshActor;
}
namespace destructible
{
class DestructibleActorImpl;
class DestructibleRenderableImpl : public DestructibleRenderable, public ApexRenderable, public UserAllocated, public ApexRWLockable
{
public:
APEX_RW_LOCKABLE_BOILERPLATE
DestructibleRenderableImpl(RenderMeshActor* renderMeshActors[DestructibleActorMeshType::Count], DestructibleAssetImpl* asset, int32_t listIndex);
~DestructibleRenderableImpl();
// Begin DestructibleRenderable methods
virtual RenderMeshActor* getRenderMeshActor(DestructibleActorMeshType::Enum type = DestructibleActorMeshType::Skinned) const
{
READ_ZONE();
return (uint32_t)type < DestructibleActorMeshType::Count ? mRenderMeshActors[type] : NULL;
}
virtual void release();
// End DestructibleRenderable methods
// Begin Renderable methods
virtual void updateRenderResources(bool rewriteBuffers, void* userRenderData);
virtual void dispatchRenderResources(UserRenderer& api);
virtual PxBounds3 getBounds() const
{
PxBounds3 bounds = ApexRenderable::getBounds();
#if APEX_RUNTIME_FRACTURE
bounds.include(mRTrenderable.getBounds());
#endif
return bounds;
}
virtual void lockRenderResources()
{
ApexRenderable::renderDataLock();
}
virtual void unlockRenderResources()
{
ApexRenderable::renderDataUnLock();
}
// End Renderable methods
// Begin DestructibleRenderable methods
// Returns this if successful, NULL otherwise
DestructibleRenderableImpl* incrementReferenceCount();
int32_t getReferenceCount()
{
return mRefCount;
}
void setBounds(const PxBounds3& bounds)
{
mRenderBounds = bounds;
}
// End DestructibleRenderable methods
#if APEX_RUNTIME_FRACTURE
::nvidia::fracture::Renderable& getRTrenderable() { return mRTrenderable; }
#endif
private:
RenderMeshActor* mRenderMeshActors[DestructibleActorMeshType::Count]; // Indexed by DestructibleActorMeshType::Enum
DestructibleAssetImpl* mAsset;
int32_t mListIndex;
volatile int32_t mRefCount;
#if APEX_RUNTIME_FRACTURE
::nvidia::fracture::Renderable mRTrenderable;
#endif
};
}
} // end namespace nvidia
#endif // __DESTRUCTIBLE_RENDERABLE_IMPL_H__
|