feat: individual bone tints

This commit is contained in:
MihailRis 2026-09-16 23:37:44 +03:00
parent dbeeef90a8
commit f5f17b7746
2 changed files with 5 additions and 2 deletions

View file

@ -46,7 +46,8 @@ Skeleton::Skeleton(std::shared_ptr<const SkeletonConfig> config)
flags(config ? config->getBones().size() : 0),
textures(),
modelOverrides(config ? config->getBones().size() : 0),
visible(true) {
visible(true),
boneTints(config ? config->getBones().size() : 0, glm::vec4(1.0f)) {
if (config == nullptr) {
return;
}
@ -99,6 +100,7 @@ void Skeleton::setConfig(std::shared_ptr<const SkeletonConfig> rigConfig) {
modelOverrides.resize(bonesCount);
flags.resize(bonesCount);
boneTints.resize(bonesCount, glm::vec4(1.0f));
for (size_t i = 0; i < bonesCount; i++) {
flags[i].visible = true;
@ -204,7 +206,7 @@ void SkeletonConfig::render(
if (model) {
batch.draw(
skeleton.calculated.matrices[i],
skeleton.tint,
skeleton.tint * skeleton.boneTints[i],
model,
&skeleton.textures
);

View file

@ -86,6 +86,7 @@ namespace rigging {
std::vector<ModelReference> modelOverrides;
bool visible;
glm::vec4 tint {1.0f, 1.0f, 1.0f, 1.0f};
std::vector<glm::vec4> boneTints;
util::VecInterpolation<3, float> interpolation {false};