diff options
Diffstat (limited to 'src/objects')
| -rw-r--r-- | src/objects/effect.cc | 21 | ||||
| -rw-r--r-- | src/objects/effect.h | 8 | ||||
| -rw-r--r-- | src/objects/material.cc | 2 | ||||
| -rw-r--r-- | src/objects/material.h | 1 | ||||
| -rw-r--r-- | src/objects/model.cc | 10 | ||||
| -rw-r--r-- | src/objects/model.h | 7 | ||||
| -rw-r--r-- | src/objects/object.cc | 69 | ||||
| -rw-r--r-- | src/objects/object.h | 22 | ||||
| -rw-r--r-- | src/objects/pass.cc | 58 | ||||
| -rw-r--r-- | src/objects/pass.h | 3 | ||||
| -rw-r--r-- | src/objects/scene.cc | 34 | ||||
| -rw-r--r-- | src/objects/scene.h | 21 |
12 files changed, 129 insertions, 127 deletions
diff --git a/src/objects/effect.cc b/src/objects/effect.cc index cbe0b7f..bc94c17 100644 --- a/src/objects/effect.cc +++ b/src/objects/effect.cc @@ -16,25 +16,25 @@ using namespace Mauri; -Effect::Effect(Json::Value root) +Effect::Effect(json root) { - id = root["id"].asInt(); + id = get_value<u32>(root["id"], INT); - visible = json_user_value(root.get("visible", true)).asBool(); + visible = get_value<bool>(root["visible"], BOOL); for (auto &pass0 : root["passes"]) { passes0.emplace_back(new Pass(pass0, EFFECT0_PASS)); } - auto asset = asset_manager()->get_file(root["file"].asString(), NONE); + auto asset = asset_manager()->get_file(root["file"], NONE); if (asset->type == ASSET_VOID) return; - Json::Value file = asset->as_json(); + auto file = json::parse(asset->as_string()); - name = file["name"].asString(); + name = get_value<std::string>(file["name"], STRING); for (auto &pass1 : file["passes"]) { @@ -43,17 +43,18 @@ Effect::Effect(Json::Value root) for (auto &fbo : file["fbos"]) { - fbos.emplace_back((EffectBuffer) { fbo["name"].asString(), fbo["scale"].asFloat() }); + fbos.emplace_back((EffectBuffer) { fbo["name"], fbo["scale"] }); } } void Effect::load(Engine *engine, Object *object, bool last_effect) { - buffer_id = fmt::format("{}_{}", id, object->id); + buffer_id = fmt::format("{}_{}", id.value, object->id.value); for (auto &fbo : fbos) { - engine->create_framebuffer(fbo.name + buffer_id, object->size[0], object->size[1], fbo.scale); + engine->create_framebuffer(fbo.name + buffer_id, object->size.value[0], + object->size.value[1], fbo.scale); } for (u32 i = 0; i < passes0.size(); i++) @@ -74,7 +75,7 @@ void Effect::load(Engine *engine, Object *object, bool last_effect) void Effect::draw(Engine *engine) { - if (!visible) + if (!visible.value) return; for (auto &pass : passes) diff --git a/src/objects/effect.h b/src/objects/effect.h index 010634c..29b4bb7 100644 --- a/src/objects/effect.h +++ b/src/objects/effect.h @@ -20,11 +20,11 @@ struct EffectBuffer class Effect { public: - Effect(Json::Value root); + Effect(json root); ~Effect(); - u32 id; - std::string name; + JsonValue<u32> id; + JsonValue<std::string> name; std::string buffer_id; @@ -32,7 +32,7 @@ class Effect void draw(Engine *engine); private: - bool visible; + JsonValue<bool> visible; std::vector<Pass *> passes0; std::vector<Pass *> passes1; diff --git a/src/objects/material.cc b/src/objects/material.cc index a1c2146..699c603 100644 --- a/src/objects/material.cc +++ b/src/objects/material.cc @@ -21,7 +21,7 @@ Material::Material(std::string path) return; } - Json::Value root = asset->as_json(); + auto root = json::parse(asset->as_string()); for (auto &pass : root["passes"]) { diff --git a/src/objects/material.h b/src/objects/material.h index 24c2ea0..c27c720 100644 --- a/src/objects/material.h +++ b/src/objects/material.h @@ -3,6 +3,7 @@ #include <iostream> +#include "json.h" #include "engine.h" namespace Mauri diff --git a/src/objects/model.cc b/src/objects/model.cc index c45ac12..0574a92 100644 --- a/src/objects/model.cc +++ b/src/objects/model.cc @@ -19,13 +19,13 @@ Model::Model(std::string path) return; } - Json::Value root = asset->as_json(); + auto root = json::parse(asset->as_string()); - autosize = root.get("autosize", true).asBool(); - fullscreen = root.get("fullscreen", false).asBool(); - passthrough = root.get("passthrough", false).asBool(); + autosize = get_value<bool>(root["autosize"], BOOL); + fullscreen = get_value<bool>(root["fullscreen"], BOOL); + passthrough = get_value<bool>(root["passthrough"], BOOL); - material = new Material(root["material"].asString()); + material = new Material(root["material"]); } void Model::load(Engine *engine, Object *object, bool no_effects) diff --git a/src/objects/model.h b/src/objects/model.h index bc6ea93..9e67f07 100644 --- a/src/objects/model.h +++ b/src/objects/model.h @@ -4,6 +4,7 @@ #include <iostream> #include "engine.h" +#include "json.h" #include "objects/material.h" @@ -16,9 +17,9 @@ class Model Model(std::string path); ~Model(); - bool autosize; - bool fullscreen; - bool passthrough; + JsonValue<bool> autosize; + JsonValue<bool> fullscreen; + JsonValue<bool> passthrough; void load(Engine *engine, Object *object, bool no_effects); diff --git a/src/objects/object.cc b/src/objects/object.cc index 0a57adf..a41cfaa 100644 --- a/src/objects/object.cc +++ b/src/objects/object.cc @@ -13,39 +13,37 @@ #include "../log.h" #include "objects/effect.h" +#include "objects/model.h" #include "objects/object.h" #include "objects/scene.h" #include "objects/pass.h" using namespace Mauri; -Object::Object(Json::Value root) +Object::Object(json root) { - id = root["id"].asInt(); - name = root["name"].asString(); + id = get_value<u32>(root["id"], INT); + name = get_value<std::string>(root["id"], STRING); for (auto &id : root["dependencies"]) - deps.push_back(id.asInt()); + deps.push_back(id); - sscanf_vec3(json_user_value(root.get("angles", "")).asCString(), angles); - sscanf_vec3(json_user_value(root.get("colors", "")).asCString(), color); - sscanf_vec2(json_user_value(root.get("size", "0 0")).asCString(), size); - sscanf_vec3(json_user_value(root.get("scale", "")).asCString(), scale); - sscanf_vec3(json_user_value(root.get("origin", "")).asCString(), origin); + angles = get_value<vec3>(root["angles"], VEC3); + color = get_value<vec3>(root["colors"], VEC3); + size = get_value<vec2>(root["size"], VEC2); + scale = get_value<vec3>(root["size"], VEC3); + origin = get_value<vec3>(root["origin"], VEC3); - color_blend_mode = (BlendMode)root.get("colorblendmode", 0).asInt(); + color_blend_mode = (BlendMode)root["colorblendmode"]; - visible = json_user_value(root.get("visible", true)).asBool(); + visible = get_value<bool>(root["visible"], BOOL); - auto _image = root["image"]; - - if (!_image.isNull()) - image = new Model(_image.asString()); + image = new Model(root["image"]); auto config = root["config"]; - if (!config.isNull()) - passthrough = config.get("passthrough", false).asBool(); + if (!config.is_null()) + passthrough = get_value<bool>(config["passthrough"], BOOL); for (auto &effect : root["effects"]) { @@ -59,13 +57,13 @@ void Object::get_model(f32 width, f32 height, bool flip) model = glm::translate(model, (vec3){-width, -height, 0.f}); - model = glm::translate(model, origin * 2.f); + model = glm::translate(model, origin.value * 2.f); - model = glm::scale(model, scale); + model = glm::scale(model, scale.value); - model = glm::rotate(model, angles[0], (vec3){1.f, 0.f, 0.f}); - model = glm::rotate(model, angles[1], (vec3){0.f, 1.f, 0.f}); - model = glm::rotate(model, angles[2], (vec3){0.f, 0.f, 1.f}); + model = glm::rotate(model, angles.value[0], (vec3){1.f, 0.f, 0.f}); + model = glm::rotate(model, angles.value[1], (vec3){0.f, 1.f, 0.f}); + model = glm::rotate(model, angles.value[2], (vec3){0.f, 0.f, 1.f}); mat4x4 _ortho = glm::ortho(-width, width, height, -height, 0.f, 1.f); @@ -84,27 +82,27 @@ void Object::load(Engine *engine) if (image != nullptr) { - if (image->passthrough) + if (image->passthrough.value) passthrough = true; - if (image->fullscreen || passthrough) + if (image->fullscreen.value || passthrough.value) { - if (size[0] == 0 && size[1] == 0) + if (size.value[0] == 0 && size.value[1] == 0) { - size[0] = engine->view.width; - size[1] = engine->view.height; - origin[0] = size[0] / 2.f; - origin[1] = size[1] / 2.f; + size.value[0] = engine->view.width; + size.value[1] = engine->view.height; + origin.value[0] = size.value[0] / 2.f; + origin.value[1] = size.value[1] / 2.f; } fullscreen = true; } } - auto width = size[0]; - auto height = size[1]; + auto width = size.value[0]; + auto height = size.value[1]; - abuffer = fmt::format("_rt_imageLayerComposite_{}_a", this->id); - bbuffer = fmt::format("_rt_imageLayerComposite_{}_b", this->id); + abuffer = fmt::format("_rt_imageLayerComposite_{}_a", this->id.value); + bbuffer = fmt::format("_rt_imageLayerComposite_{}_b", this->id.value); engine->create_framebuffer(abuffer, width, height, 1.f); engine->create_framebuffer(bbuffer, width, height, 1.f); @@ -116,8 +114,7 @@ void Object::load(Engine *engine) gl_object = new RenderObject(OBJECT, width, height); gl_uv_object = new RenderObject(UV_SCALE, width, height); - if (image != nullptr) - image->load(engine, this, effects.size() == 0); + image->load(engine, this, effects.size() == 0); for (u32 i = 0; i < effects.size(); i++) { @@ -136,7 +133,7 @@ void Object::update(Engine *engine) void Object::draw(Engine *engine) { - if (!visible) + if (!visible.value) return; for (auto &pass : passes) diff --git a/src/objects/object.h b/src/objects/object.h index 0b22122..14b6615 100644 --- a/src/objects/object.h +++ b/src/objects/object.h @@ -28,18 +28,18 @@ enum BlendMode class Object { public: - Object(Json::Value root); + Object(json root); ~Object(); - u32 id; - std::string name; + JsonValue<u32> id; + JsonValue<std::string> name; std::vector<int> deps; - bool passthrough = false; - bool fullscreen = false; + JsonValue<bool> passthrough; + JsonValue<bool> fullscreen; - vec2 size; + JsonValue<vec2> size; void get_model(f32 width, f32 height, bool flip); @@ -66,15 +66,15 @@ class Object void draw(Engine *engine); private: - bool visible; + JsonValue<bool> visible; Model *image = nullptr; - vec3 angles; - vec3 color; + JsonValue<vec3> angles; + JsonValue<vec3> color; - vec3 origin; - vec3 scale; + JsonValue<vec3> origin; + JsonValue<vec3> scale; std::string abuffer; std::string bbuffer; diff --git a/src/objects/pass.cc b/src/objects/pass.cc index f4c237a..333694a 100644 --- a/src/objects/pass.cc +++ b/src/objects/pass.cc @@ -20,39 +20,32 @@ using namespace Mauri; -Pass::Pass(Json::Value root, PassStage stage) +Pass::Pass(json root, PassStage stage) { switch (stage) { case EFFECT0_PASS: { - auto _uniforms = root["constantshadervalues"]; - - for (auto &name : _uniforms.getMemberNames()) + for (auto &value : root["constantshadervalues"].items()) { - auto uniform = Uniform(); - - uniform.name = name; - - auto value = json_user_value(_uniforms[name]); - json_number(value, glm::value_ptr(uniform.value)); - - uniforms.push_back(uniform); + // In this case type and uname are irrelevant because this is only used to + // override the value stored on the shader which contains the type and uname. + uniforms.push_back(Uniform(value.key(), get_value<vec4>(value.value(), VEC4))); } break; } case EFFECT1_PASS: { - auto _material = root["material"]; + material = new Material(root["material"]); - if (_material.isString()) - material = new Material(_material.asString()); + auto _target = root["target"]; - target = root.get("target", "previous").asString(); + if (_target.is_string()) + target = _target; for (auto &bind : root["bind"]) { - auto index = bind["index"].asInt(); - binds[index] = bind["name"].asString(); + u32 index = bind["index"]; + binds[index] = bind["name"]; } break; @@ -61,7 +54,7 @@ Pass::Pass(Json::Value root, PassStage stage) target = "previous"; [[fallthrough]]; case MATERIAL_PASS: { - shader = root["shader"].asString(); + shader = root["shader"]; //auto blending = root.get("blending", "normal").asString(); @@ -73,21 +66,26 @@ Pass::Pass(Json::Value root, PassStage stage) break; } } - - auto _textures = root["textures"]; - for (int i = 0; i < _textures.size(); i++) + for (int i = 0; i < 8; i++) { - auto texture = _textures[i]; - if (texture.isString()) - textures[i] = texture.asString(); + auto texture = root["textures"][i]; + if (texture.is_string()) + textures[i] = texture; } - auto _combos = root["combos"]; + //auto _textures = root["textures"]; + + //for (int i = 0; i < _textures.size(); i++) + //{ + // auto texture = _textures[i]; + // if (texture.is_string()) + // textures[i] = texture; + //} - for (auto &name : _combos.getMemberNames()) + for (auto &combo : root["combos"].items()) { - combos.emplace_back((Combo){name, _combos[name].asInt()}); + combos.emplace_back((Combo) { combo.key(), combo.value() }); } } @@ -249,12 +247,12 @@ RenderPass::RenderPass(Engine *engine, Pass *pass) if (pass->effect == nullptr) { - if (pass->object->passthrough || combine) + if (pass->object->passthrough.value || combine) model = &pass->object->model; else model = &pass->object->ortho; - if (pass->object->passthrough) + if (pass->object->passthrough.value) robject = pass->object->gl_object; else robject = pass->object->gl_uv_object; diff --git a/src/objects/pass.h b/src/objects/pass.h index 92aa3e5..78de015 100644 --- a/src/objects/pass.h +++ b/src/objects/pass.h @@ -4,6 +4,7 @@ #include <glm/glm.hpp> #include <jsoncpp/json/json.h> +#include "json.h" #include "context.h" #include "engine.h" #include "gl.h" @@ -29,7 +30,7 @@ class Pass { public: Pass() {} - Pass(Json::Value root, PassStage stage); + Pass(json root, PassStage stage); ~Pass(); diff --git a/src/objects/scene.cc b/src/objects/scene.cc index 3cab05c..1e95f4b 100644 --- a/src/objects/scene.cc +++ b/src/objects/scene.cc @@ -1,10 +1,10 @@ #include <istream> -#include <jsoncpp/json/json.h> #include <sstream> #include "assets.h" #include "json.h" #include "log.h" +#include "util.h" #include "objects/scene.h" #include "objects/pass.h" @@ -20,24 +20,26 @@ Scene::Scene(std::string path) log_error("err: failed to open scene.json"); return; } - - Json::Value root = asset->as_json(); + + auto root = json::parse(asset->as_string()); auto camera = root["camera"]; + + cam.center = get_value<vec3>(camera["center"], VEC3); + cam.eye = get_value<vec3>(camera["eye"], VEC3); + cam.up = get_value<vec3>(camera["up"], VEC3); + auto general = root["general"]; - auto ortho = general["orthogonalprojection"]; - - sscanf_vec3(json_user_value(camera.get("center", "")).asCString(), cam.center); - sscanf_vec3(json_user_value(camera.get("eye", "")).asCString(), cam.eye); - sscanf_vec3(json_user_value(camera.get("up", "")).asCString(), cam.up); - clear_enabled = general.get("clearenabled", true).asBool(); + clear_enabled = get_value<bool>(general["clearenabled"], BOOL); - sscanf_vec3(json_user_value(general.get("clearcolor", "")).asCString(), clear_color); - clear_color[3] = 1.f; + clear_color = get_value<vec4>(general["clearcolor"], VEC3); + clear_color.value[3] = 1.f; + + auto ortho = general["orthogonalprojection"]; - width = json_user_value(ortho.get("width", 0.f)).asFloat(); - height = json_user_value(ortho.get("height", 0.f)).asFloat(); + width = get_value<float>(ortho["width"], FLOAT); + height = get_value<float>(ortho["height"], FLOAT); for (auto &object : root["objects"]) { @@ -49,7 +51,7 @@ Object *Scene::get_object_by_id(u32 id) { for (auto &object : objects) { - if (object->id == id) + if (object->id.value == id) { return object; } @@ -60,8 +62,8 @@ Object *Scene::get_object_by_id(u32 id) void Scene::load(Engine *engine) { - engine->view.width = width; - engine->view.height = height; + engine->view.width = width.value; + engine->view.height = height.value; for (auto &object : objects) { diff --git a/src/objects/scene.h b/src/objects/scene.h index 2f6f210..43a4442 100644 --- a/src/objects/scene.h +++ b/src/objects/scene.h @@ -8,6 +8,7 @@ #include "assets.h" #include "engine.h" +#include "json.h" #include "objects/object.h" using namespace glm; @@ -16,13 +17,13 @@ namespace Mauri { struct Camera { - vec3 center; - vec3 eye; - vec3 up; + JsonValue<vec3> center; + JsonValue<vec3> eye; + JsonValue<vec3> up; - float farz; - float nearz; - float fov; + JsonValue<float> farz; + JsonValue<float> nearz; + JsonValue<float> fov; }; class Scene @@ -31,11 +32,11 @@ class Scene Scene(std::string path); ~Scene(); - f32 width; - f32 height; + JsonValue<f32> width; + JsonValue<f32> height; - bool clear_enabled; - vec4 clear_color; + JsonValue<bool> clear_enabled; + JsonValue<vec4> clear_color; void load(Engine *engine); void draw(Engine *engine); |