add PaletteAtlasBuilder

This commit is contained in:
MihailRis 2025-12-21 19:08:23 +03:00
parent 163a0a8c93
commit 99fe787cba
2 changed files with 48 additions and 0 deletions

View file

@ -0,0 +1,26 @@
#include "PaletteAtlasBuilder.hpp"
#include "../core/Atlas.hpp"
#include "../core/ImageData.hpp"
PaletteAtlasBuilder::PaletteAtlasBuilder() = default;
void PaletteAtlasBuilder::put(const std::string& name, const glm::vec4& color) {
entries[name] = { glm::clamp(color, glm::vec4(0.0f), glm::vec4(1.0f)) };
}
std::unique_ptr<Atlas> PaletteAtlasBuilder::build() const {
AtlasBuilder builder;
for (const auto& [name, entry] : entries) {
ubyte data[4] {
static_cast<ubyte>(entry.color.r * 255),
static_cast<ubyte>(entry.color.g * 255),
static_cast<ubyte>(entry.color.b * 255),
static_cast<ubyte>(entry.color.a * 255),
};
builder.add(name, std::make_unique<ImageData>(
ImageFormat::RGBA8888, 1, 1, data
));
}
return builder.build(1, true);
}

View file

@ -0,0 +1,22 @@
#pragma once
#include <memory>
#include <map>
#include <glm/vec4.hpp>
class Atlas;
class PaletteAtlasBuilder {
public:
struct Entry {
glm::vec4 color;
};
PaletteAtlasBuilder();
void put(const std::string& name, const glm::vec4& color);
std::unique_ptr<Atlas> build() const;
private:
std::map<std::string, Entry> entries;
};