Adding shadow casters to entities
Now that we have all of the rendering resolved, we still need to make sure entities can cast shadows. This will be achieved by actually attaching special components to entities that will hold pointers to 3D geometry used during shadow pass. This geometry will obviously need to be updated to match the position of the entities it represents, which is why the component data is going to be accompanied by a separate system, used to actually keep everything synced up.
Adding the shadow caster component
First, because our entities exist within the ECS paradigm, we need to add a component that represents the shadow volume of an entity:
class C_ShadowCaster : public C_Base { public: C_ShadowCaster() : C_Base(Component::ShadowCaster), m_shadowCaster(nullptr) {} void SetShadowCaster(ShadowCaster* l_caster) { m_shadowCaster = l_caster; } void UpdateCaster(const glm::vec3& l_pos) { m_shadowCaster->m_transform.SetPosition(l_pos); ...