Program Listing for File CascadedShadowMap.ixx

Program Listing for File CascadedShadowMap.ixx#

Return to documentation for file (Src/GraphicsEngineOpenGL/scene/light/directional_light/CascadedShadowMap.ixx)

module;
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <cstdio>
#include <vector>
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>

#include "host_device/GlobalValues.hpp"
#include "host_device/host_device_shared.hpp"

export module kataglyphis.opengl.directional_light.cascaded_shadow_map;

export class CascadedShadowMap
{
  public:
    CascadedShadowMap();

    CascadedShadowMap(const CascadedShadowMap &) = delete;
    CascadedShadowMap &operator=(const CascadedShadowMap &) = delete;
    CascadedShadowMap(CascadedShadowMap &&) = delete;
    CascadedShadowMap &operator=(CascadedShadowMap &&) = delete;

    bool init(GLuint width, GLuint height, GLuint num_cascades);
    void write() const;
    void read(GLenum texture_unit) const;

    void write_light_matrices(std::vector<glm::mat4x4> &light_matrices) const;
    void set_pcf_radius(GLuint radius);
    void set_intensity(GLfloat intensity);

    GLfloat get_intensity() const { return intensity; };
    GLuint get_shadow_width() const { return shadow_width; };
    GLuint get_shadow_height() const { return shadow_height; }
    GLuint get_id() const { return shadow_maps; };
    GLuint get_num_active_cascades() const { return num_active_cascades; };
    GLuint get_pcf_radius() const { return pcf_radius; };

    ~CascadedShadowMap();

  protected:
    GLuint FBO, shadow_maps;

    GLuint shadow_width, shadow_height;

    GLuint matrices_UBO;

    GLuint num_active_cascades;

    GLuint pcf_radius;

    GLfloat intensity;
};