Program Listing for File Noise.ixx#
↰ Return to documentation for file (Src/GraphicsEngineOpenGL/scene/atmospheric_effects/clouds/Noise.ixx)
module;
#include <glad/glad.h>
#include <glm/glm.hpp>
#include "host_device/bindings.hpp"
#include <array>
#include <memory>
#include <random>
#include <vector>
export module kataglyphis.opengl.noise;
import kataglyphis.opengl.compute_shader_program;
export class Noise
{
public:
Noise();
Noise(const Noise &) = delete;
Noise &operator=(const Noise &) = delete;
Noise(Noise &&) = delete;
Noise &operator=(Noise &&) = delete;
void create_res128_noise();
void create_res32_noise();
void read_res128_noise() const;
void read_res32_noise() const;
void update();
void set_num_cells(GLuint cells_per_axis, GLuint index);
~Noise();
private:
void create_shader_programs();
void generate_cells(GLuint cells_per_axis, GLuint cell_index);
void generate_textures();
void generate_num_cells_textures();
void generate_res128_noise_texture();
void generate_res32_noise_texture();
void delete_textures();
static void print_comp_shader_capabilities();
// first texture dim = 128^3
GLuint texture_1_id{};
GLuint texture_dim_1;
std::unique_ptr<ComputeShaderProgram> texture_1_shader_program;
// 2nd texture dim = 32^3
GLuint texture_2_id{};
GLuint texture_dim_2;
std::unique_ptr<ComputeShaderProgram> texture_2_shader_program;
GLuint cell_ids[NUM_CELL_POSITIONS]{};
GLuint num_cells_per_axis[NUM_CELL_POSITIONS]{};
std::array<std::vector<GLfloat>, NUM_CELL_POSITIONS> cell_data;
};