in GLTFSDK/Source/MeshPrimitiveUtils.cpp [723:753]
std::vector<uint32_t> MeshPrimitiveUtils::GetColors(const Document& doc, const GLTFResourceReader& reader, const Accessor& colorsAccessor)
{
if (colorsAccessor.type != TYPE_VEC4 && colorsAccessor.type != TYPE_VEC3)
{
throw GLTFException("Invalid type for color accessor " + colorsAccessor.id);
}
if (colorsAccessor.componentType != COMPONENT_FLOAT && colorsAccessor.componentType != COMPONENT_UNSIGNED_BYTE && colorsAccessor.componentType != COMPONENT_UNSIGNED_SHORT)
{
throw GLTFException("Invalid component type for colors accessor " + colorsAccessor.id);
}
if (colorsAccessor.componentType == COMPONENT_UNSIGNED_BYTE)
{
std::vector<uint8_t> colorData = reader.ReadBinaryData<uint8_t>(doc, colorsAccessor);
if (colorsAccessor.type == TYPE_VEC4)
return PackColorsRGBA(colorData);
else
return PackColorsRGB(colorData);
}
else
{
std::vector<float> colorData = reader.ReadFloatData(doc, colorsAccessor);
if (colorsAccessor.type == TYPE_VEC4)
return PackColorsRGBA(colorData);
else
return PackColorsRGB(colorData);
}
}