mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +00:00
add PaletteAtlasBuilder
This commit is contained in:
parent
163a0a8c93
commit
99fe787cba
2 changed files with 48 additions and 0 deletions
26
src/graphics/core/PaletteAtlasBuilder.cpp
Normal file
26
src/graphics/core/PaletteAtlasBuilder.cpp
Normal 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);
|
||||
}
|
||||
22
src/graphics/core/PaletteAtlasBuilder.hpp
Normal file
22
src/graphics/core/PaletteAtlasBuilder.hpp
Normal 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;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue