Beispiel #1
0
void MixedBsdf::fromJson(JsonPtr value, const Scene &scene)
{
    Bsdf::fromJson(value, scene);

    _bsdf0 = scene.fetchBsdf(value.getRequiredMember("bsdf0"));
    _bsdf1 = scene.fetchBsdf(value.getRequiredMember("bsdf1"));
    if (_bsdf0.get() == this || _bsdf1.get() == this)
        value.parseError("Recursive mixed BSDF not supported");
    if (auto ratio = value["ratio"])
        _ratio = scene.fetchTexture(ratio, TexelConversion::REQUEST_AVERAGE);
}
Beispiel #2
0
std::shared_ptr<T> instantiate(JsonPtr value, const Scene &scene)
{
    auto result = StringableEnum<std::function<std::shared_ptr<T>()>>(value.getRequiredMember("type")).toEnum()();
    result->fromJson(value, scene);
    return result;
}