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