#pragma once #include "../GFX/Binder.hpp" #include "../GFX/Shading/Program.hpp" #include "../GFX/Shading/Uniform.hpp" #include "../GFX/Camera.hpp" namespace MC::World { class Clouds { public: Clouds(Real ascept, Real fov, Real near, Real far, Vector<3, F32> sky_color); void update(U64 time); void render(const GFX::Camera& camera) const; private: constexpr static U32 CloudMatrixSize = 128; using CloudMatrix = Matrix; static CloudMatrix create_cloud_matrix(); static GFX::Mesh create_mesh(const CloudMatrix& cloud_matrix); static const Char* vertex; static const Char* fragment; Vector<3> m_position; GFX::Shading::Program m_program; GFX::BindableMesh m_mesh; GFX::Shading::Uniform m_model_uniform; GFX::Shading::Uniform m_view_uniform; GFX::Shading::Uniform m_projection_uniform; }; }