Beispiel #1
0
std::shared_ptr<Texture> Scene::fetchTexture(JsonPtr value, TexelConversion conversion) const
{
    // Note: TexelConversions are only honored by BitmapTexture.
    // This is inconsistent, but conversions do not really make sense for other textures,
    // unless the user expects e.g. a ConstantTexture with Vec3 argument to select the green
    // channel when used in a TransparencyBsdf.
    if (value.isString()) {
        return _textureCache->fetchTexture(fetchResource(value), conversion);
    } else if (value.isNumber()) {
        return std::make_shared<ConstantTexture>(value.cast<float>());
    } else if (value.isArray()) {
        return std::make_shared<ConstantTexture>(value.cast<Vec3f>());
    } else if (value.isObject()) {
        std::string type = value.castField<std::string>("type");
        if (type == "bitmap")
            return _textureCache->fetchTexture(value, conversion, this);
        else if (type == "ies")
            return _textureCache->fetchIesTexture(value, this);
        else
            return instantiate<Texture>(value, *this);
    } else {
        value.parseError("Type mismatch: Expecting a texture here");
    }
    return nullptr;
}
Beispiel #2
0
std::shared_ptr<T> fetchObject(const std::vector<std::shared_ptr<T>> &list, const Scene &scene, JsonPtr value)
{
    if (value.isString()) {
        return findObject(list, value.cast<std::string>(), value);
    } else if (value.isObject()) {
        return instantiate<T>(value, scene);
    } else {
        value.parseError("Type mismatch: Expecting either an object or an object reference here");
        return nullptr;
    }
}