Nameless Engine
|
#include <SpotlightNode.h>
Classes | |
struct | ShaderData |
struct | SpotlightShaderData |
Public Member Functions | |
SpotlightNode (const std::string &sNodeName) | |
void | setLightColor (const glm::vec3 &color) |
void | setLightIntensity (float intensity) |
void | setLightDistance (float distance) |
void | setLightInnerConeAngle (float innerConeAngle) |
void | setLightOuterConeAngle (float outerConeAngle) |
glm::vec3 | getLightColor () const |
float | getLightIntensity () const |
float | getLightDistance () const |
float | getLightInnerConeAngle () const |
float | getLightOuterConeAngle () const |
std::pair< std::mutex, Cone > * | getShape () |
Public Member Functions inherited from ne::SpatialNode | |
SpatialNode (const std::string &sNodeName) | |
void | setRelativeLocation (const glm::vec3 &location) |
void | setRelativeRotation (const glm::vec3 &rotation) |
void | setRelativeScale (const glm::vec3 &scale) |
void | setWorldLocation (const glm::vec3 &location) |
void | setWorldRotation (const glm::vec3 &rotation) |
void | setWorldScale (const glm::vec3 &scale) |
glm::vec3 | getRelativeLocation () const |
glm::vec3 | getRelativeRotation () const |
glm::vec3 | getRelativeScale () const |
glm::mat4x4 | getRelativeRotationMatrix () |
glm::vec3 | getWorldLocation () |
glm::vec3 | getWorldRotation () |
glm::quat | getWorldRotationQuaternion () |
glm::vec3 | getWorldScale () |
glm::vec3 | getWorldForwardDirection () |
glm::vec3 | getWorldRightDirection () |
glm::vec3 | getWorldUpDirection () |
glm::mat4x4 | getWorldMatrix () |
std::pair< std::recursive_mutex, sgc::GcPtr< SpatialNode > > * | getClosestSpatialParent () |
Public Member Functions inherited from ne::Node | |
Node () | |
Node (const std::string &sName) | |
Node (const Node &)=delete | |
Node & | operator= (const Node &)=delete |
Node (Node &&)=delete | |
Node & | operator= (Node &&)=delete |
virtual | ~Node () override |
void | setNodeName (const std::string &sName) |
void | detachFromParentAndDespawn () |
void | addChildNode (const sgc::GcPtr< Node > &pNode, AttachmentRule locationRule=AttachmentRule::KEEP_WORLD, AttachmentRule rotationRule=AttachmentRule::KEEP_WORLD, AttachmentRule scaleRule=AttachmentRule::KEEP_WORLD) |
void | setSerialize (bool bSerialize) |
std::optional< Error > | serializeNodeTree (const std::filesystem::path &pathToFile, bool bEnableBackup) |
std::string | getNodeName () const |
sgc::GcPtr< Node > | getWorldRootNode () |
std::pair< std::recursive_mutex, sgc::GcPtr< Node > > * | getParentNode () |
std::pair< std::recursive_mutex, sgc::GcVector< sgc::GcPtr< Node > > > * | getChildNodes () |
template<typename NodeType > requires std::derived_from<NodeType, Node> | |
sgc::GcPtr< NodeType > | getParentNodeOfType (const std::string &sParentNodeName="") |
template<typename NodeType > requires std::derived_from<NodeType, Node> | |
sgc::GcPtr< NodeType > | getChildNodeOfType (const std::string &sChildNodeName="") |
TickGroup | getTickGroup () const |
std::optional< size_t > | getNodeId () const |
bool | isCalledEveryFrame () |
bool | isReceivingInput () |
bool | isSpawned () |
bool | isParentOf (Node *pNode) |
bool | isChildOf (Node *pNode) |
bool | isSerialized () const |
Public Member Functions inherited from ne::Serializable | |
std::optional< Error > | serialize (std::filesystem::path pathToFile, bool bEnableBackup, const std::unordered_map< std::string, std::string > &customAttributes={}) |
std::variant< std::string, Error > | serialize (toml::value &tomlData, const std::string &sEntityId="", const std::unordered_map< std::string, std::string > &customAttributes={}, const std::optional< std::filesystem::path > &optionalPathToFile={}, bool bEnableBackup=false) |
std::variant< std::string, Error > | serialize (toml::value &tomlData, Serializable *pOriginalObject, std::string sEntityId="", const std::unordered_map< std::string, std::string > &customAttributes={}, const std::optional< std::filesystem::path > &optionalPathToFile={}, bool bEnableBackup=false) |
std::optional< std::pair< std::string, std::string > > | getPathDeserializedFromRelativeToRes () const |
Static Public Member Functions | |
static constexpr float | getMaxLightConeAngle () |
Static Public Member Functions inherited from ne::Node | |
static size_t | getAliveNodeCount () |
static std::variant< sgc::GcPtr< Node >, Error > | deserializeNodeTree (const std::filesystem::path &pathToFile) |
static GameInstance * | getGameInstance () |
Static Public Member Functions inherited from ne::Serializable | |
static std::variant< std::pair< std::set< std::string >, toml::value >, Error > | getIdsFromFile (std::filesystem::path pathToFile) |
static std::optional< Error > | serializeMultiple (std::filesystem::path pathToFile, std::vector< SerializableObjectInformation > vObjects, bool bEnableBackup) |
template<typename SmartPointer , typename InnerType = typename SmartPointer::element_type> requires std::derived_from<InnerType, Serializable> && (std::same_as<SmartPointer, sgc::GcPtr<InnerType>> || std::same_as<SmartPointer, std::unique_ptr<InnerType>>) | |
static std::variant< SmartPointer, Error > | deserialize (const std::filesystem::path &pathToFile) |
template<typename SmartPointer , typename InnerType = typename SmartPointer::element_type> requires std::derived_from<InnerType, Serializable> && (std::same_as<SmartPointer, sgc::GcPtr<InnerType>> || std::same_as<SmartPointer, std::unique_ptr<InnerType>>) | |
static std::variant< SmartPointer, Error > | deserialize (const std::filesystem::path &pathToFile, std::unordered_map< std::string, std::string > &customAttributes) |
template<typename SmartPointer , typename InnerType = typename SmartPointer::element_type> requires std::derived_from<InnerType, Serializable> && (std::same_as<SmartPointer, sgc::GcPtr<InnerType>> || std::same_as<SmartPointer, std::unique_ptr<InnerType>>) | |
static std::variant< SmartPointer, Error > | deserialize (std::filesystem::path pathToFile, std::unordered_map< std::string, std::string > &customAttributes, const std::string &sEntityId) |
template<typename SmartPointer , typename InnerType = typename SmartPointer::element_type> requires std::derived_from<InnerType, Serializable> && (std::same_as<SmartPointer, sgc::GcPtr<InnerType>> || std::same_as<SmartPointer, std::unique_ptr<InnerType>>) | |
static std::variant< SmartPointer, Error > | deserialize (const std::filesystem::path &pathToFile, const std::string &sEntityId) |
template<typename SmartPointer , typename InnerType = typename SmartPointer::element_type> requires std::same_as<SmartPointer, sgc::GcPtr<Serializable>> || std::same_as<SmartPointer, std::unique_ptr<Serializable>> | |
static std::variant< std::vector< DeserializedObjectInformation< SmartPointer > >, Error > | deserializeMultiple (std::filesystem::path pathToFile) |
template<typename SmartPointer , typename InnerType = typename SmartPointer::element_type> requires std::derived_from<InnerType, Serializable> && (std::same_as<SmartPointer, sgc::GcPtr<InnerType>> || std::same_as<SmartPointer, std::unique_ptr<InnerType>>) | |
static std::variant< SmartPointer, Error > | deserialize (const toml::value &tomlData, std::unordered_map< std::string, std::string > &customAttributes, std::string sEntityId="", const std::optional< std::filesystem::path > &optionalPathToFile={}) |
Protected Member Functions | |
virtual void | onAfterDeserialized () override |
virtual void | onSpawning () override |
virtual void | onDespawning () override |
virtual void | onWorldLocationRotationScaleChanged () override |
Protected Member Functions inherited from ne::SpatialNode | |
virtual void | onAfterDeserialized () override |
virtual void | onSpawning () override |
virtual void | onAfterAttachedToNewParent (bool bThisNodeBeingAttached) override |
virtual void | onWorldLocationRotationScaleChanged () |
Protected Member Functions inherited from ne::Node | |
void | setIsCalledEveryFrame (bool bEnable) |
void | setTickGroup (TickGroup tickGroup) |
void | setIsReceivingInput (bool bEnable) |
Timer * | createTimer (const std::string &sTimerName) |
template<typename FunctionType > | |
NodeNotificationBroadcaster< FunctionType > * | createNotificationBroadcaster () |
std::pair< std::recursive_mutex, std::unordered_map< unsigned int, std::function< void(KeyboardModifiers, bool)> > > * | getActionEventBindings () |
std::pair< std::recursive_mutex, std::unordered_map< unsigned int, std::function< void(KeyboardModifiers, float)> > > * | getAxisEventBindings () |
std::recursive_mutex * | getSpawnDespawnMutex () |
virtual void | onMouseMove (double xOffset, double yOffset) |
virtual void | onMouseScrollMove (int iOffset) |
virtual void | onBeforeNewFrame (float timeSincePrevFrameInSec) |
virtual void | onSpawning () |
virtual void | onChildNodesSpawned () |
virtual void | onDespawning () |
virtual void | onBeforeDetachedFromParent (bool bThisNodeBeingDetached) |
virtual void | onAfterAttachedToNewParent (bool bThisNodeBeingAttached) |
virtual void | onAfterDeserialized () |
Private Member Functions | |
ShadowMapHandle * | getShadowMapHandle () const |
unsigned int | getIndexIntoShadowPassInfoShaderArray () |
void | onShadowMapArrayIndexChanged (unsigned int iNewIndexIntoArray) |
void * | onStartedUpdatingShaderData () |
void | onFinishedUpdatingShaderData () |
void * | onStartedUpdatingShadowPassData () |
void | onFinishedUpdatingShadowPassData () |
void | recalculateShadowMappingShaderData () |
void | recalculateAndMarkShaderDataToBeCopiedToGpu () |
void | markShaderDataToBeCopiedToGpu () |
void | recalculateShape () |
Private Attributes | |
std::pair< std::recursive_mutex, ShaderData > | mtxShaderData |
std::pair< std::mutex, Cone > | mtxShape |
std::unique_ptr< ShadowMapHandle > | pShadowMapHandle |
glm::vec3 | color = glm::vec3(1.0F, 1.0F, 1.0F) |
float | intensity = 1.0F |
float | distance = 15.0F |
float | innerConeAngle = 25.0F |
float | outerConeAngle = 45.0F |
Static Private Attributes | |
static constexpr float | maxConeAngle = 80.0F |
Friends | |
class | Renderer |
Additional Inherited Members | |
Public Types inherited from ne::Node | |
enum class | AttachmentRule { RESET_RELATIVE , KEEP_RELATIVE , KEEP_WORLD } |
Represents a spotlight in world.
ne::SpotlightNode::SpotlightNode | ( | const std::string & | sNodeName | ) |
Creates a new node with the specified name.
sNodeName | Name of this node. |
|
private |
Used by renderer and returns the current index (because it may change later) into the shader array that stores shadow pass info of spawned light sources.
glm::vec3 ne::SpotlightNode::getLightColor | ( | ) | const |
Returns color of this light source.
float ne::SpotlightNode::getLightDistance | ( | ) | const |
Returns lit distance.
float ne::SpotlightNode::getLightInnerConeAngle | ( | ) | const |
Returns light cutoff angle of the inner cone (hard light edge).
float ne::SpotlightNode::getLightIntensity | ( | ) | const |
Returns intensity of this light source.
float ne::SpotlightNode::getLightOuterConeAngle | ( | ) | const |
Returns light cutoff angle of the outer cone (soft light edge).
|
inlinestaticconstexpr |
Returns the maximum angle for getLightInnerConeAngle and getLightOuterConeAngle.
|
private |
Used by renderer and returns handle to shadow map texture that this light source uses.
nullptr
if node is not spawned, otherwise valid pointer. std::pair< std::mutex, Cone > * ne::SpotlightNode::getShape | ( | ) |
Returns shape of this light source in world space.
|
private |
Marks array slot at mtxShaderData as "needs update" (if the slot is created) to later be copied to the GPU resource.
nullptr
.
|
overrideprotectedvirtual |
Called after the object was successfully deserialized. Used to execute post-deserialization logic.
Reimplemented from ne::SpatialNode.
|
overrideprotectedvirtual |
Called before this node is despawned from the world to execute custom despawn logic.
Reimplemented from ne::Node.
|
private |
Called after onStartedUpdatingShaderData to notify this node that the renderer has finished copying the data to the GPU resource.
|
private |
Called after onStartedUpdatingShadowPassData to notify this node that the renderer has finished copying the data to the GPU resource.
|
private |
Called after the index into a descriptor array of pShadowMapHandle was initialized/changed.
iNewIndexIntoArray | New index to use. |
|
overrideprotectedvirtual |
Called when this node was not spawned previously and it was either attached to a parent node that is spawned or set as world's root node to execute custom spawn logic.
Reimplemented from ne::SpatialNode.
|
private |
Callback that will be called by the renderer when it's ready to copy new (updated) mtxShaderData to the GPU resource.
|
private |
Callback that will be called by the renderer when it's ready to copy new (updated) viewProjectionMatrix
of the light source to the GPU resource.
viewProjectionMatrix
at mtxShaderData.
|
overrideprotectedvirtual |
Called after node's world location/rotation/scale was changed.
Reimplemented from ne::SpatialNode.
|
private |
Recalculates shader data according to the current spotlight data and calls markShaderDataToBeCopiedToGpu.
nullptr
.
|
private |
(Re)calculates data used for shadow pass and shadow mapping mapping.
|
private |
Recalculates mtxShaderData according to the current parameters (state).
void ne::SpotlightNode::setLightColor | ( | const glm::vec3 & | color | ) |
Sets light's color.
color | Color in RGB format in range [0.0; 1.0]. |
void ne::SpotlightNode::setLightDistance | ( | float | distance | ) |
Sets lit distance (i.e. attenuation distance).
distance | Lit distance. |
void ne::SpotlightNode::setLightInnerConeAngle | ( | float | innerConeAngle | ) |
Sets angle of spotlight's inner cone (cone that will have hard light edges), see setLightOuterConeAngle for configuring soft light edges.
innerConeAngle | Angle in degrees in range [0.0; getMaxLightConeAngle] (will be clamped if outside of the range). |
void ne::SpotlightNode::setLightIntensity | ( | float | intensity | ) |
Sets light's intensity.
intensity | Intensity in range [0.0; 1.0] (will be clamped if outside of the range). |
void ne::SpotlightNode::setLightOuterConeAngle | ( | float | outerConeAngle | ) |
Sets angle of spotlight's inner cone (cone that will have hard light edges), see setLightOuterConeAngle for configuring soft light edges.
outerConeAngle | Angle in degrees in range [getLightInnerConeAngle; getMaxLightConeAngle] (will be clamped if outside of the range). |
|
private |
Color of the light source.
|
private |
Lit distance.
|
private |
Light cutoff angle (in degrees) of the inner cone (hard light edge). Valid values range is [0.0F, maxConeAngle].
|
private |
Light intensity, valid values range is [0.0F; 1.0F].
|
staticconstexprprivate |
Maximum value for innerConeAngle and outerConeAngle.
|
private |
Only valid while spawned. Up to date data that will be copied to the GPU.
|
private |
Stores up-to-date cone shape (in world space) that represents the spotlight.
|
private |
Light cutoff angle (in degrees) of the outer cone (soft light edge). Valid values range is [innerConeAngle, maxConeAngle].
|
private |
References shadow map of the light source.