#pragma once #include "rtt.h" #include "log.h" #include "texture.h" struct LayerFrame { std::array m_rtt; std::array m_dirty_box = SIXPLETTE(glm::vec4(0)); std::array m_dirty_face = SIXPLETTE(false); int m_duration = 1; int w = 0, h = 0; //// default //LayerFrame() = default; //// copy //LayerFrame(const LayerFrame&) = delete; //LayerFrame& operator=(const LayerFrame&) = delete; //// move //LayerFrame(LayerFrame&& other); //LayerFrame& operator=(LayerFrame&&); bool create(int width, int height, int duration = 1); bool resize(int width, int height); void clear(const glm::vec4& c); }; class Layer { static uint32_t s_count; public: Layer() { id = s_count++; } Layer(const Layer&) = delete; uint32_t id; std::vector m_frames; int m_frame_index = 0; bool m_visible = true; bool m_alpha_locked = false; float m_opacity = 1.f; bool m_hightlight = false; int m_blend_mode = 0; std::string m_name; int w = 0; int h = 0; struct Snapshot { std::unique_ptr image[6] = SIXPLETTE(0); std::array m_dirty_box = SIXPLETTE(glm::vec4(0)); std::array m_dirty_face = SIXPLETTE(false); int width = 0; int height = 0; void create(int w, int h); void clear(); void optimize(); int memsize() const; }; RTT& rtt(int i); glm::vec4& box(int i); bool& face(int i); LayerFrame& frame(); void resize(int width, int height); bool create(int width, int height, std::string name); bool add_frame(); void clear(const glm::vec4& c); Snapshot snapshot(std::array* dirty_box = nullptr, std::array* dirty_face = nullptr); TextureCube gen_cube(); Texture2D gen_equirect(); void restore(const Snapshot& snap); void destroy(); void optimize(); };