diff options
Diffstat (limited to 'src/osd/modules/render/bgfx/chainreader.cpp')
-rw-r--r-- | src/osd/modules/render/bgfx/chainreader.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/osd/modules/render/bgfx/chainreader.cpp b/src/osd/modules/render/bgfx/chainreader.cpp new file mode 100644 index 00000000000..8a69e007872 --- /dev/null +++ b/src/osd/modules/render/bgfx/chainreader.cpp @@ -0,0 +1,95 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +//============================================================ +// +// chainreader.cpp - BGFX chain JSON reader +// +//============================================================ + +#include <string> +#include <vector> + +#include "emu.h" + +#include "chain.h" +#include "sliderreader.h" +#include "paramreader.h" +#include "chainentryreader.h" +#include "targetmanager.h" +#include "chainreader.h" + +bgfx_chain* chain_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height) +{ + validate_parameters(value); + + std::string name = value["name"].GetString(); + std::string author = value["author"].GetString(); + + std::vector<bgfx_slider*> sliders; + if (value.HasMember("sliders")) + { + const Value& slider_array = value["sliders"]; + for (UINT32 i = 0; i < slider_array.Size(); i++) + { + sliders.push_back(slider_reader::read_from_value(slider_array[i])); + } + } + + std::vector<bgfx_parameter*> parameters; + if (value.HasMember("parameters")) + { + const Value& param_array = value["parameters"]; + for (UINT32 i = 0; i < param_array.Size(); i++) + { + parameters.push_back(parameter_reader::read_from_value(param_array[i])); + } + } + + std::vector<bgfx_chain_entry*> entries; + if (value.HasMember("passes")) + { + const Value& entry_array = value["passes"]; + for (UINT32 i = 0; i < entry_array.Size(); i++) + { + entries.push_back(chain_entry_reader::read_from_value(entry_array[i], textures, targets, effects)); + } + } + + if (value.HasMember("targets")) + { + const Value& target_array = value["targets"]; + for (UINT32 i = 0; i < target_array.Size(); i++) + { + assert(target_array[i].HasMember("name")); + assert(target_array[i]["name"].IsString()); + uint32_t width = 0; + uint32_t height = 0; + if (target_array[i].HasMember("screen") && target_array[i]["screen"].IsBool()) + { + width = screen_width; + height = screen_height; + } + else + { + assert(target_array[i].HasMember("width")); + assert(target_array[i]["width"].IsDouble()); + assert(target_array[i].HasMember("height")); + assert(target_array[i]["height"].IsDouble()); + width = uint32_t(target_array[i]["width"].GetDouble()); + height = uint32_t(target_array[i]["height"].GetDouble()); + } + targets.create_target(target_array[i]["name"].GetString(), bgfx::TextureFormat::RGBA8, width, height); + } + } + + return new bgfx_chain(name, author, sliders, parameters, entries); +} + +void chain_reader::validate_parameters(const Value& value) +{ + assert(value.HasMember("name")); + assert(value["name"].IsString()); + assert(value.HasMember("author")); + assert(value["author"].IsString()); + assert(value.HasMember("passes")); +}
\ No newline at end of file |