Skip to content

Vp::Entity

A scene entity base class.

#include "Viewport/entity/Entity.h"

Inherited by Vp::GameObject

Public Functions

Name
Entity()
virtual~Entity() =default
virtual voiddispose() =0
virtual DisplayTypegetDisplayType() const
virtual glm::vec3getHighlightColor() const
virtual boolisHighlighted() const
virtual voidonSceneAdd(Scene & scene)<br>Called when the entity is added to a scene.
virtual voidonSceneRemove(Scene & scene)<br>Called when the entity is removed from a scene.
voidrender(glm::mat4 view, glm::mat4 projection)
voidrender(glm::mat4 view, glm::mat4 projection, bool silhouette)
virtual voidsetDisplayType(DisplayType type)
virtual voidsetHighlightColor(glm::vec3 highlightColor)
virtual voidsetHighlighted(bool highlight)
virtual voidupdate(Scene & scene) =0

Protected Functions

Name
voidrender(Shader * shader, glm::mat4 view, glm::mat4 projection)
virtual voidrender(Shader * shader, glm::mat4 view, glm::mat4 projection, bool silhouette) =0<br>IMPLEMENTATION NOTE: Derived entity classes should expect a certain kind of shader and be able to directly static cast to it.

Public Attributes

Name
boolm_backFaceCull
unsigned intm_explicitTransparencyOrder <br>Explicit order for ordered transparency.
boolm_highlight <br>Whether to paint this entity with an outline, can be used for selection or just highlighting.
glm::vec3m_highlightColor
boolm_highlightUseDepth <br>Whether the highlight outline should respect the scene's depth buffer.
glm::mat4m_modelMatrix <br>Model transformation of the entity.
boolm_opaque
boolm_selectable <br>Whether this entity should be written into the selection stencil buffer.
intm_selectionId <br>Id of the object, -1 if not assigned, for selection purposes.
Shader *m_shader
boolm_visible
boolm_wboit <br>Whether this entity should be rendered using order independent transparency, relevant if using a shader that supports wboit.
intm_wboitFunc <br>Index of the weight function to be used in wboit.

Protected Attributes

Name
DisplayTypem_displayType

Public Functions Documentation

function Entity

cpp
Entity()
Entity()

function ~Entity

cpp
virtual ~Entity() =default
virtual ~Entity() =default

function dispose

cpp
virtual void dispose() =0
virtual void dispose() =0

Reimplemented by: Vp::GameObject::dispose

function getDisplayType

cpp
inline virtual DisplayType getDisplayType() const
inline virtual DisplayType getDisplayType() const

function getHighlightColor

cpp
inline virtual glm::vec3 getHighlightColor() const
inline virtual glm::vec3 getHighlightColor() const

function isHighlighted

cpp
inline virtual bool isHighlighted() const
inline virtual bool isHighlighted() const

function onSceneAdd

cpp
inline virtual void onSceneAdd(
    Scene & scene
)
inline virtual void onSceneAdd(
    Scene & scene
)

Called when the entity is added to a scene.

Parameters:

  • scene Scene to which it has been added

Reimplemented by: Vp::SceneCamera::onSceneAdd, Vp::SceneModel::onSceneAdd

function onSceneRemove

cpp
inline virtual void onSceneRemove(
    Scene & scene
)
inline virtual void onSceneRemove(
    Scene & scene
)

Called when the entity is removed from a scene.

Parameters:

  • scene Scene from which it has been removed

Reimplemented by: Vp::SceneCamera::onSceneRemove, Vp::SceneModel::onSceneRemove

function render

cpp
inline void render(
    glm::mat4 view,
    glm::mat4 projection
)
inline void render(
    glm::mat4 view,
    glm::mat4 projection
)

function render

cpp
inline void render(
    glm::mat4 view,
    glm::mat4 projection,
    bool silhouette
)
inline void render(
    glm::mat4 view,
    glm::mat4 projection,
    bool silhouette
)

function setDisplayType

cpp
inline virtual void setDisplayType(
    DisplayType type
)
inline virtual void setDisplayType(
    DisplayType type
)

function setHighlightColor

cpp
inline virtual void setHighlightColor(
    glm::vec3 highlightColor
)
inline virtual void setHighlightColor(
    glm::vec3 highlightColor
)

function setHighlighted

cpp
inline virtual void setHighlighted(
    bool highlight
)
inline virtual void setHighlighted(
    bool highlight
)

function update

cpp
virtual void update(
    Scene & scene
) =0
virtual void update(
    Scene & scene
) =0

Reimplemented by: Vp::FrustumObject::update, Vp::GameObject::update, Vp::SceneCamera::update, Vp::SceneModel::update

Protected Functions Documentation

function render

cpp
inline void render(
    Shader * shader,
    glm::mat4 view,
    glm::mat4 projection
)
inline void render(
    Shader * shader,
    glm::mat4 view,
    glm::mat4 projection
)

function render

cpp
virtual void render(
    Shader * shader,
    glm::mat4 view,
    glm::mat4 projection,
    bool silhouette
) =0
virtual void render(
    Shader * shader,
    glm::mat4 view,
    glm::mat4 projection,
    bool silhouette
) =0

IMPLEMENTATION NOTE: Derived entity classes should expect a certain kind of shader and be able to directly static cast to it.

Reimplemented by: Vp::ColoredObject::render, Vp::FrustumObject::render, Vp::GameObject::render, Vp::SceneModel::render, Vp::TexturedObject::render

Currently there is no error checking and wrongly passed shader type will CAUSE UNDEFINED BEHAVIOUR!

Using dynamic casts instead might be undesirable (slow) here (this might just be a premature optimalization) Generally the shader passed to this method is the m_shader of this entity. However we need functionality that allows us to change the shader temporarily (like for drawing silhouettes) Because of this the shader can also sometimes be something else, usually some derived type of the one the entity expects. I couldn't find a way to inform what kinds of shaders an entity is able to use in its render methods. The type of the shader must be the base Shader class and so some kind of casting must occur.

Another option could be to use some kind of a typeid/enum system that tells us what type a shader is (rather than use dynamic cast). But that approach ignores inheritance which we need and having multiple types of shaders and entity member variable seems very inflexible.

The true elegant solution probably doesn't involve inheritance at all and rather uses composition, together with an ECS or something. But it was decided to not dive into that realm and so we are stuck with this seemingly simple but not very flexible inheritance structure.

Public Attributes Documentation

variable m_backFaceCull

cpp
bool m_backFaceCull;
bool m_backFaceCull;

variable m_explicitTransparencyOrder

cpp
unsigned int m_explicitTransparencyOrder;
unsigned int m_explicitTransparencyOrder;

Explicit order for ordered transparency.

variable m_highlight

cpp
bool m_highlight;
bool m_highlight;

Whether to paint this entity with an outline, can be used for selection or just highlighting.

variable m_highlightColor

cpp
glm::vec3 m_highlightColor;
glm::vec3 m_highlightColor;

variable m_highlightUseDepth

cpp
bool m_highlightUseDepth;
bool m_highlightUseDepth;

Whether the highlight outline should respect the scene's depth buffer.

variable m_modelMatrix

cpp
glm::mat4 m_modelMatrix {1};
glm::mat4 m_modelMatrix {1};

Model transformation of the entity.

variable m_opaque

cpp
bool m_opaque;
bool m_opaque;

variable m_selectable

cpp
bool m_selectable;
bool m_selectable;

Whether this entity should be written into the selection stencil buffer.

variable m_selectionId

cpp
int m_selectionId {-1};
int m_selectionId {-1};

Id of the object, -1 if not assigned, for selection purposes.

variable m_shader

cpp
Shader * m_shader {nullptr};
Shader * m_shader {nullptr};

variable m_visible

cpp
bool m_visible;
bool m_visible;

variable m_wboit

cpp
bool m_wboit;
bool m_wboit;

Whether this entity should be rendered using order independent transparency, relevant if using a shader that supports wboit.

variable m_wboitFunc

cpp
int m_wboitFunc;
int m_wboitFunc;

Index of the weight function to be used in wboit.

Protected Attributes Documentation

variable m_displayType

cpp
DisplayType m_displayType {DisplayType::Default};
DisplayType m_displayType {DisplayType::Default};

Updated on 2024-03-16 at 19:15:01 +0000