forked from aya/aya
Initial commit
This commit is contained in:
129
engine/gfx/src/Render/CullableSceneNode.hpp
Normal file
129
engine/gfx/src/Render/CullableSceneNode.hpp
Normal file
@@ -0,0 +1,129 @@
|
||||
#pragma once
|
||||
|
||||
#include "Base/GfxPart.hpp"
|
||||
#include "Utility/Extents.hpp"
|
||||
|
||||
#include "RenderQueue.hpp"
|
||||
|
||||
namespace Aya
|
||||
{
|
||||
class Contact;
|
||||
}
|
||||
|
||||
namespace Aya
|
||||
{
|
||||
namespace Graphics
|
||||
{
|
||||
|
||||
class RenderCamera;
|
||||
class RenderQueue;
|
||||
class VisualEngine;
|
||||
|
||||
class SpatialHashNode;
|
||||
|
||||
class CullableSceneNode : public Aya::GfxPart
|
||||
{
|
||||
public:
|
||||
static const bool hasGetFirstContact = false; // simulate __if_exists
|
||||
static Aya::Contact* getContact(CullableSceneNode* p0, CullableSceneNode* p1)
|
||||
{
|
||||
AYAASSERT(0);
|
||||
return NULL;
|
||||
} // shouldn't be called if hasGetFirstContact is false
|
||||
static Aya::Contact* getFirstContact()
|
||||
{
|
||||
AYAASSERT(NULL);
|
||||
return NULL;
|
||||
}
|
||||
static Aya::Contact* getNextContact(Aya::Contact* prev)
|
||||
{
|
||||
AYAASSERT(NULL);
|
||||
return NULL;
|
||||
}
|
||||
static int getNumContacts()
|
||||
{
|
||||
AYAASSERT(NULL);
|
||||
return 0;
|
||||
}
|
||||
static CullableSceneNode* getContactOther(int id)
|
||||
{
|
||||
AYAASSERT(NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool requestFixed() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
const Extents& getFastFuzzyExtents()
|
||||
{
|
||||
return worldBounds;
|
||||
}
|
||||
|
||||
public:
|
||||
enum CullMode
|
||||
{
|
||||
CullMode_None,
|
||||
CullMode_Simple,
|
||||
CullMode_SpatialHash,
|
||||
};
|
||||
|
||||
enum Flags
|
||||
{
|
||||
Flags_LightObject = 1 << 0,
|
||||
Flags_ShadowCaster = 1 << 1,
|
||||
};
|
||||
|
||||
CullableSceneNode(VisualEngine* visualEngine, CullMode cullMode, unsigned int flags);
|
||||
~CullableSceneNode();
|
||||
|
||||
void setBlockCount(int blockCount)
|
||||
{
|
||||
this->blockCount = blockCount;
|
||||
}
|
||||
|
||||
virtual void updateRenderQueue(RenderQueue& queue, const RenderCamera& camera, RenderQueue::Pass pass);
|
||||
|
||||
float getSqDistanceToFocus() const
|
||||
{
|
||||
return sqDistanceToFocus;
|
||||
}
|
||||
|
||||
const Extents& getWorldBounds() const
|
||||
{
|
||||
return worldBounds;
|
||||
}
|
||||
|
||||
void updateWorldBounds(const Extents& aabb);
|
||||
|
||||
VisualEngine* getVisualEngine() const
|
||||
{
|
||||
return visualEngine;
|
||||
}
|
||||
|
||||
unsigned int getFlags() const
|
||||
{
|
||||
return flags;
|
||||
}
|
||||
|
||||
bool updateIsCulledByFRM();
|
||||
|
||||
Vector3 getCenter() const override
|
||||
{
|
||||
return worldBounds.center();
|
||||
}
|
||||
|
||||
private:
|
||||
VisualEngine* visualEngine;
|
||||
|
||||
CullMode cullMode;
|
||||
unsigned int flags;
|
||||
|
||||
int blockCount;
|
||||
float sqDistanceToFocus;
|
||||
|
||||
Extents worldBounds;
|
||||
};
|
||||
|
||||
} // namespace Graphics
|
||||
} // namespace Aya
|
||||
Reference in New Issue
Block a user