Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
SceneNode.cpp
Go to the documentation of this file.
1
2
3#include "Headers/SceneNode.h"
4
11
13
14namespace Divide
15{
16
17constexpr U16 BYTE_BUFFER_VERSION = 1u;
18
19namespace Names
20{
22 {
23 "SPHERE_3D", "BOX_3D", "QUAD_3D", "MESH", "SUBMESH", "TERRAIN", "TRANSFORM",
24 "WATER", "PARTICLE_EMITTER", "SKY", "INFINITE_PLANE", "VEGETATION_GRASS", "UNKNOWN"
25 };
26}
27SceneNode::SceneNode( const ResourceDescriptorBase& descriptor, const SceneNodeType type, const U32 requiredComponentMask)
28 : CachedResource( descriptor, Names::sceneNodeType[to_base( type )] )
29 , _type(type)
30{
32}
33
35{
36 DIVIDE_ASSERT(_materialTemplate == INVALID_HANDLE<Material>);
37}
38
40{
41 _editorComponent = std::make_unique<EditorComponent>( context, ComponentType::COUNT, typeName() );
42}
43
44void SceneNode::sceneUpdate([[maybe_unused]] const U64 deltaTimeUS,
45 [[maybe_unused]] SceneGraphNode* sgn,
46 [[maybe_unused]] SceneState& sceneState)
47{
48}
49
50void SceneNode::prepareRender([[maybe_unused]] SceneGraphNode* sgn,
51 [[maybe_unused]] RenderingComponent& rComp,
52 [[maybe_unused]] RenderPackage& pkg,
53 [[maybe_unused]] GFX::MemoryBarrierCommand& postDrawMemCmd,
54 [[maybe_unused]] const RenderStagePass renderStagePass,
55 [[maybe_unused]] const CameraSnapshot& cameraSnapshot,
56 [[maybe_unused]] bool refreshData)
57{
59}
60
62{
63 sgn->postLoad();
64}
65
66void SceneNode::setBounds(const BoundingBox& aabb, const vec3<F32>& worldOffset)
67{
68 _boundsChanged = true;
69 _boundingBox.set(aabb);
70 _worldOffset.set(worldOffset);
71}
72
74{
75 return _materialTemplate;
76}
77
79{
80 if (_materialTemplate == material)
81 {
82 return;
83 }
84
85 if ( _materialTemplate != INVALID_HANDLE<Material> )
86 {
87 if ( material != INVALID_HANDLE<Material> )
88 {
89 Console::printfn( LOCALE_STR( "REPLACE_MATERIAL" ), to_U32(_materialTemplate._index), to_U32(material._index));
90 }
91
93 }
94
95 _materialTemplate = material;
96}
97
99{
100 return CachedResource::load( context );
101}
102
104{
106}
107
109{
110 setMaterialTpl(INVALID_HANDLE<Material>);
111 _editorComponent.reset();
112 return CachedResource::unload();
113}
114
116 [[maybe_unused]] GenericDrawCommandContainer& cmdsOut)
117{
118}
119
120void SceneNode::onNetworkSend([[maybe_unused]] SceneGraphNode* sgn, [[maybe_unused]] WorldPacket& dataOut) const
121{
122}
123
124void SceneNode::onNetworkReceive([[maybe_unused]] SceneGraphNode* sgn, [[maybe_unused]] WorldPacket& dataIn) const
125{
126}
127
128bool SceneNode::saveCache(ByteBuffer& outputBuffer) const
129{
130 outputBuffer << BYTE_BUFFER_VERSION;
131 if ( _editorComponent != nullptr )
132 {
134 }
135
136 return true;
137}
138
140{
141 auto tempVer = decltype(BYTE_BUFFER_VERSION){0};
142 inputBuffer >> tempVer;
143 if ( tempVer == BYTE_BUFFER_VERSION )
144 {
145 if ( _editorComponent != nullptr )
146 {
148 }
149
150 return true;
151 }
152
153 return false;
154}
155
156void SceneNode::saveToXML(boost::property_tree::ptree& pt) const
157{
158 if ( _editorComponent != nullptr )
159 {
161 }
162}
163
164void SceneNode::loadFromXML(const boost::property_tree::ptree& pt)
165{
166 if ( _editorComponent != nullptr )
167 {
169 }
170}
171
173 : SceneNode( descriptor,
176{
177}
178
179} //namespace Divide
#define LOCALE_STR(X)
Definition: Localization.h:91
#define DIVIDE_ASSERT(...)
static bool loadCache(EditorComponent &comp, ByteBuffer &inputBuffer)
static void loadFromXML(EditorComponent &comp, const boost::property_tree::ptree &pt)
static bool saveCache(const EditorComponent &comp, ByteBuffer &outputBuffer)
static void saveToXML(const EditorComponent &comp, boost::property_tree::ptree &pt)
void set(const BoundingBox &bb) noexcept
virtual bool postLoad()
Definition: Resource.cpp:60
virtual bool unload()
Definition: Resource.cpp:65
virtual bool load(PlatformContext &context)
Loading and unloading interface.
Definition: Resource.cpp:55
ResourceState getState() const noexcept
Definition: Resource.cpp:17
void postLoad()
Invoked by the contained SceneNode when it finishes all of its internal loading and is ready for proc...
void setBounds(const BoundingBox &aabb, const vec3< F32 > &worldOffset={})
Definition: SceneNode.cpp:66
virtual ~SceneNode() override
Definition: SceneNode.cpp:34
bool unload() override
Definition: SceneNode.cpp:108
virtual void saveToXML(boost::property_tree::ptree &pt) const
Definition: SceneNode.cpp:156
virtual void sceneUpdate(U64 deltaTimeUS, SceneGraphNode *sgn, SceneState &sceneState)
Called from SceneGraph "sceneUpdate".
Definition: SceneNode.cpp:44
BoundingBox _boundingBox
The initial bounding box as it was at object's creation (i.e. no transforms applied)
Definition: SceneNode.h:159
Handle< Material > _materialTemplate
Definition: SceneNode.h:153
virtual void prepareRender(SceneGraphNode *sgn, RenderingComponent &rComp, RenderPackage &pkg, GFX::MemoryBarrierCommand &postDrawMemCmd, RenderStagePass renderStagePass, const CameraSnapshot &cameraSnapshot, bool refreshData)
Definition: SceneNode.cpp:50
U32 requiredComponentMask() const noexcept
Definition: SceneNode.h:123
Handle< Material > getMaterialTpl() const
Definition: SceneNode.cpp:73
bool load(PlatformContext &context) override
Loading and unloading interface.
Definition: SceneNode.cpp:98
SceneNode(const ResourceDescriptorBase &descriptor, SceneNodeType type, U32 requiredComponentMask)
Definition: SceneNode.cpp:27
std::unique_ptr< EditorComponent > _editorComponent
Definition: SceneNode.h:152
virtual void buildDrawCommands(SceneGraphNode *sgn, GenericDrawCommandContainer &cmdsOut)
Definition: SceneNode.cpp:115
virtual void onNetworkReceive(SceneGraphNode *sgn, WorldPacket &dataIn) const
Definition: SceneNode.cpp:124
virtual bool saveCache(ByteBuffer &outputBuffer) const
Definition: SceneNode.cpp:128
virtual bool loadCache(ByteBuffer &inputBuffer)
Definition: SceneNode.cpp:139
vec3< F32 > _worldOffset
Definition: SceneNode.h:160
bool postLoad() override
Definition: SceneNode.cpp:103
void registerEditorComponent(PlatformContext &context)
Definition: SceneNode.cpp:39
virtual void onNetworkSend(SceneGraphNode *sgn, WorldPacket &dataOut) const
Definition: SceneNode.cpp:120
virtual void setMaterialTpl(Handle< Material > material)
Definition: SceneNode.cpp:78
virtual void loadFromXML(const boost::property_tree::ptree &pt)
Definition: SceneNode.cpp:164
U32 _requiredComponentMask
Definition: SceneNode.h:164
TransformNode(const ResourceDescriptor< TransformNode > &descriptor)
Definition: SceneNode.cpp:172
void set(const T *v) noexcept
set the 3 components of the vector manually using a source pointer to a (large enough) array
Definition: MathVectors.h:707
const char * sceneNodeType[to_base(SceneNodeType::COUNT)+1u]
Definition: SceneNode.cpp:21
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
constexpr SceneNodeType GetSceneNodeType()
Definition: SceneNodeFwd.h:111
constexpr U32 to_U32(const T value)
FORCE_INLINE void DestroyResource(Handle< T > &handle, const bool immediate=false)
@ RES_LOADED
The resource is available for usage.
SceneNodeType
ToDo: Move particle emitter to components (it will make them way more dynamic) - Ionut.
Definition: SceneNodeFwd.h:47
constexpr U16 BYTE_BUFFER_VERSION
uint16_t U16
eastl::fixed_vector< GenericDrawCommand, 1, true > GenericDrawCommandContainer
uint32_t U32
uint64_t U64
constexpr auto to_base(const Type value) -> Type
static NO_INLINE void printfn(const char *format, T &&... args)