62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
#pragma once
|
|
#include "rtt.h"
|
|
#include "log.h"
|
|
#include "texture.h"
|
|
|
|
struct LayerFrame
|
|
{
|
|
std::array<RTT, 6> m_rtt;
|
|
std::array<glm::vec4, 6> m_dirty_box = SIXPLETTE(glm::vec4(0));
|
|
std::array<bool, 6> m_dirty_face = SIXPLETTE(false);
|
|
int m_duration = 1;
|
|
int w = 0, h = 0;
|
|
LayerFrame() = default;
|
|
bool create(int width, int height, int duration = 1);
|
|
bool resize(int width, int height);
|
|
};
|
|
|
|
class Layer
|
|
{
|
|
static uint32_t s_count;
|
|
public:
|
|
Layer() { id = s_count++; }
|
|
Layer(const Layer&) = delete;
|
|
uint32_t id;
|
|
std::vector<LayerFrame> 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<uint8_t[]> image[6] = SIXPLETTE(0);
|
|
std::array<glm::vec4, 6> m_dirty_box = SIXPLETTE(glm::vec4(0));
|
|
std::array<bool, 6> 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<glm::vec4, 6>* dirty_box = nullptr, std::array<bool, 6>* dirty_face = nullptr);
|
|
TextureCube gen_cube();
|
|
Texture2D gen_equirect();
|
|
void restore(const Snapshot& snap);
|
|
void destroy();
|
|
void optimize();
|
|
};
|