std::vector MeshPrimitiveUtils::GetColors()

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);
    }
}