feat: allow passing rgba color to entity skeletons and block wraps

This commit is contained in:
MihailRis 2026-09-16 23:28:03 +03:00
parent 85cc55c63b
commit ae082abaa2
12 changed files with 55 additions and 40 deletions

View file

@ -161,7 +161,7 @@ void BlockWrapsRenderer::draw(const DrawContext& pctx) {
u64id_t BlockWrapsRenderer::add(
const glm::ivec3& position,
const std::string& texture,
const glm::vec3& tint,
const glm::vec4& tint,
float emission
) {
u64id_t id = nextWrapper++;

View file

@ -20,7 +20,7 @@ class DrawContext;
struct BlockWrapper {
glm::ivec3 position;
std::array<std::string, 6> textureFaces {};
std::array<glm::vec3, 6> tints {};
std::array<glm::vec4, 6> tints {};
float emission = 0.0f;
// --- render cache ---
@ -56,7 +56,7 @@ public:
u64id_t add(
const glm::ivec3& position,
const std::string& texture,
const glm::vec3& tint,
const glm::vec4& tint,
float emission
);

View file

@ -87,7 +87,7 @@ void MainBatch::cube(
const glm::vec3& size,
const UVRegion(&texfaces)[6],
const glm::vec4& lights,
const glm::vec3 tints[],
const glm::vec4 tints[],
float emission,
uint8_t cullingBits
) {

View file

@ -17,14 +17,14 @@ class Chunks;
struct MainBatchVertex {
glm::vec3 position;
glm::vec2 uv;
glm::vec3 tint;
glm::vec4 tint;
std::array<uint8_t, 4> color;
std::array<uint8_t, 4> normal;
static constexpr VertexAttribute ATTRIBUTES[] = {
{VertexAttribute::Type::FLOAT, false, 3},
{VertexAttribute::Type::FLOAT, false, 2},
{VertexAttribute::Type::FLOAT, false, 3},
{VertexAttribute::Type::FLOAT, false, 4},
{VertexAttribute::Type::UNSIGNED_BYTE, true, 4},
{VertexAttribute::Type::UNSIGNED_BYTE, true, 4},
{{}, 0}};
@ -63,7 +63,7 @@ public:
const glm::vec3& pos,
const glm::vec2& uv,
const glm::vec4& light,
const glm::vec3& tint,
const glm::vec4& tint,
const glm::vec3& normal,
float emission
) {
@ -91,7 +91,7 @@ public:
const glm::vec3& normal,
const glm::vec2& size,
const glm::vec4& light,
const glm::vec3& tint,
const glm::vec4& tint,
const UVRegion& subregion,
float emission = 0.0f
) {
@ -152,7 +152,7 @@ public:
const glm::vec3& size,
const UVRegion(&texfaces)[6],
const glm::vec4& lights,
const glm::vec3 tints[],
const glm::vec4 tints[],
float emission,
uint8_t cullingBits = 0xFF
);

View file

@ -61,8 +61,8 @@ void ModelBatch::draw(
const model::Mesh& mesh,
const glm::mat4& matrix,
const glm::mat3& rotation,
glm::vec3 tint,
const texture_names_map* varTextures,
const glm::vec4& tint,
const TextureNamesMap* varTextures,
bool backlight
) {
setTexture(mesh.texture, varTextures);
@ -97,10 +97,12 @@ void ModelBatch::draw(
}
}
void ModelBatch::draw(glm::mat4 matrix,
glm::vec3 tint,
const model::Model* model,
const texture_names_map* varTextures) {
void ModelBatch::draw(
const glm::mat4& matrix,
const glm::vec4& tint,
const model::Model* model,
const TextureNamesMap* varTextures
) {
for (const auto& mesh : model->meshes) {
entries.push_back({
matrix, extract_rotation(matrix), tint, &mesh, varTextures
@ -134,7 +136,7 @@ void ModelBatch::setLightsOffset(const glm::vec3& offset) {
}
void ModelBatch::setTexture(const std::string& name,
const texture_names_map* varTextures) {
const TextureNamesMap* varTextures) {
if (varTextures && !name.empty() && name.at(0) == '$') {
const auto& found = varTextures->find(name);
if (found == varTextures->end()) {

View file

@ -18,7 +18,7 @@ namespace model {
struct Model;
}
using texture_names_map = std::unordered_map<std::string, std::string>;
using TextureNamesMap = std::unordered_map<std::string, std::string>;
class ModelBatch {
const Assets& assets;
@ -31,22 +31,24 @@ class ModelBatch {
std::unique_ptr<MainBatch> batch;
void draw(const model::Mesh& mesh,
const glm::mat4& matrix,
const glm::mat3& rotation,
glm::vec3 tint,
const texture_names_map* varTextures,
bool backlight);
void draw(
const model::Mesh& mesh,
const glm::mat4& matrix,
const glm::mat3& rotation,
const glm::vec4& tint,
const TextureNamesMap* varTextures,
bool backlight
);
void setTexture(const std::string& name,
const texture_names_map* varTextures);
const TextureNamesMap* varTextures);
struct DrawEntry {
glm::mat4 matrix;
glm::mat3 rotation;
glm::vec3 tint;
glm::vec4 tint;
const model::Mesh* mesh;
const texture_names_map* varTextures;
const TextureNamesMap* varTextures;
};
std::vector<DrawEntry> entries;
public:
@ -58,10 +60,12 @@ public:
);
~ModelBatch();
void draw(glm::mat4 matrix,
glm::vec3 tint,
const model::Model* model,
const texture_names_map* varTextures);
void draw(
const glm::mat4& matrix,
const glm::vec4& tint,
const model::Model* model,
const TextureNamesMap* varTextures
);
void render();
void setLightsOffset(const glm::vec3& offset);

View file

@ -160,7 +160,7 @@ void ParticlesRenderer::renderParticle(
-camera.front,
preset.size * scale,
light,
glm::vec3(1.0f),
glm::vec4(1.0f),
particle.region,
preset.lighting ? 0.0f : 1.0f
);

View file

@ -151,7 +151,7 @@ void PrecipitationRenderer::render(
glm::cross(glm::vec3(0, 1, 0), face.right),
FACE_SIZE,
light_at(chunks, pos.x, y, pos.z),
glm::vec3(1.0f),
glm::vec4(1.0f),
calc_uv(pos, face.right, timer, weather)
);
}