Serialize lights under as KHR_lights_cmn extension.

This commit is contained in:
Syoyo Fujita 2018-03-17 16:12:42 -05:00
parent 2a15f387bc
commit d5b0244e2c

View File

@ -1684,6 +1684,7 @@ static bool ParseParameterProperty(Parameter *param, std::string *err,
static bool ParseExtensionsProperty(ExtensionMap *ret, std::string* err, const json &o) static bool ParseExtensionsProperty(ExtensionMap *ret, std::string* err, const json &o)
{ {
// TODO: Fully parse extension properties.
json::const_iterator it = o.find("extensions"); json::const_iterator it = o.find("extensions");
if (it == o.end()) { if (it == o.end()) {
return false; return false;
@ -1704,7 +1705,7 @@ static bool ParseExtensionsProperty(ExtensionMap *ret, std::string* err, const j
ParameterMap extValues; ParameterMap extValues;
for (; itVal != itValEnd; itVal++) { for (; itVal != itValEnd; itVal++) {
Parameter param; Parameter param;
if (ParseParameterProperty(&param, err, values_object, itVal.key(), false)) { if (ParseParameterProperty(&param, err, itVal.value(), itVal.key(), false)) {
extValues[itVal.key()] = param; extValues[itVal.key()] = param;
} }
} }
@ -3870,14 +3871,26 @@ bool TinyGLTF::WriteGltfSceneToFile(
// EXTENSIONS // EXTENSIONS
SerializeExtensionMap(model->extensions, output); SerializeExtensionMap(model->extensions, output);
// LIGHTS // LIGHTS as KHR_lights_cmn
json lights; json lights;
for (unsigned int i = 0; i < model->lights.size(); ++i) { for (unsigned int i = 0; i < model->lights.size(); ++i) {
json light; json light;
SerializeGltfLight(model->lights[i], light); SerializeGltfLight(model->lights[i], light);
lights.push_back(light); lights.push_back(light);
} }
output["lights"] = lights; if (model->lights.size() > 0) {
json khr_lights_cmn;
khr_lights_cmn["lights"] = lights;
json ext_j;
if (output.find("extensions") != output.end()) {
ext_j = output["extensions"];
}
ext_j["KHR_lights_cmn"] = khr_lights_cmn;
output["extensions"] = ext_j;
}
WriteGltfFile(filename, output.dump()); WriteGltfFile(filename, output.dump());
return true; return true;