chore: set vertex color to 1.0 when no value read from gltf

This commit is contained in:
Jan 2024-09-05 19:18:49 +02:00
parent db5e53e60d
commit 71819e46a4
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
3 changed files with 100 additions and 1 deletions

View File

@ -214,6 +214,7 @@ namespace
const auto vertexCount = positionAccessor->GetCount();
NullAccessor nullAccessor(vertexCount);
OnesAccessor onesAccessor(vertexCount);
// clang-format off
auto* normalAccessor = GetAccessorForIndex(
@ -237,7 +238,7 @@ namespace
accessorsForVertex.colorAccessor,
{JsonAccessorType::VEC3, JsonAccessorType::VEC4},
{JsonAccessorComponentType::FLOAT, JsonAccessorComponentType::UNSIGNED_BYTE, JsonAccessorComponentType::UNSIGNED_SHORT}
).value_or(&nullAccessor);
).value_or(&onesAccessor);
VerifyAccessorVertexCount("COLOR_0", colorAccessor, vertexCount);
auto* jointsAccessor = GetAccessorForIndex(

View File

@ -81,6 +81,85 @@ size_t NullAccessor::GetCount() const
return m_count;
}
OnesAccessor::OnesAccessor(const size_t count)
: m_count(count)
{
}
bool OnesAccessor::GetFloatVec2(const size_t index, float (&out)[2]) const
{
if (index >= m_count)
return false;
out[0] = 1.0f;
out[1] = 1.0f;
return true;
}
bool OnesAccessor::GetFloatVec3(const size_t index, float (&out)[3]) const
{
if (index >= m_count)
return false;
out[0] = 1.0f;
out[1] = 1.0f;
out[2] = 1.0f;
return true;
}
bool OnesAccessor::GetFloatVec4(const size_t index, float (&out)[4]) const
{
if (index >= m_count)
return false;
out[0] = 1.0f;
out[1] = 1.0f;
out[2] = 1.0f;
out[3] = 1.0f;
return true;
}
bool OnesAccessor::GetUnsigned(const size_t index, unsigned& out) const
{
if (index >= m_count)
return false;
out = 0xFFFFFFFFu;
return true;
}
bool OnesAccessor::GetUnsignedVec4(const size_t index, unsigned (&out)[4]) const
{
if (index >= m_count)
return false;
out[0] = 0xFFFFFFFFu;
out[1] = 0xFFFFFFFFu;
out[2] = 0xFFFFFFFFu;
out[3] = 0xFFFFFFFFu;
return true;
}
std::optional<JsonAccessorComponentType> OnesAccessor::GetComponentType() const
{
return std::nullopt;
}
std::optional<JsonAccessorType> OnesAccessor::GetType() const
{
return std::nullopt;
}
size_t OnesAccessor::GetCount() const
{
return m_count;
}
FloatAccessor::FloatAccessor(const BufferView* bufferView, const JsonAccessorType type, size_t byteOffset, const size_t count)
: m_buffer_view(bufferView),
m_type(type),

View File

@ -46,6 +46,25 @@ namespace gltf
size_t m_count;
};
class OnesAccessor final : public Accessor
{
public:
explicit OnesAccessor(size_t count);
[[nodiscard]] std::optional<JsonAccessorType> GetType() const override;
[[nodiscard]] std::optional<JsonAccessorComponentType> GetComponentType() const override;
[[nodiscard]] size_t GetCount() const override;
[[nodiscard]] bool GetFloatVec2(size_t index, float (&out)[2]) const override;
[[nodiscard]] bool GetFloatVec3(size_t index, float (&out)[3]) const override;
[[nodiscard]] bool GetFloatVec4(size_t index, float (&out)[4]) const override;
[[nodiscard]] bool GetUnsigned(size_t index, unsigned& out) const override;
[[nodiscard]] bool GetUnsignedVec4(size_t index, unsigned (&out)[4]) const override;
private:
size_t m_count;
};
class FloatAccessor final : public Accessor
{
public: