diff options
author | 2016-02-18 15:57:34 +0100 | |
---|---|---|
committer | 2016-02-21 03:03:23 +0100 | |
commit | 9a47a870df619656e9092f2f77622e84e640307a (patch) | |
tree | b8640bf79ffb55d0c9ed6fc27bbd4ce16a5e1a2e /src/osd/modules/render/bgfx/effectreader.cpp | |
parent | dadf8e7d79696996ab3ef840fe99a588ede538fa (diff) |
First take on render API reorg, nw
Diffstat (limited to 'src/osd/modules/render/bgfx/effectreader.cpp')
-rw-r--r-- | src/osd/modules/render/bgfx/effectreader.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/osd/modules/render/bgfx/effectreader.cpp b/src/osd/modules/render/bgfx/effectreader.cpp new file mode 100644 index 00000000000..0fe24ec92dc --- /dev/null +++ b/src/osd/modules/render/bgfx/effectreader.cpp @@ -0,0 +1,69 @@ +#include <string> + +#include <bgfx/bgfx.h> + +#include "emu.h" + +#include "effect.h" +#include "blendreader.h" +#include "depthreader.h" +#include "cullreader.h" +#include "writereader.h" +#include "shadermanager.h" +#include "uniformreader.h" + +#include "effectreader.h" + +bgfx_effect* effect_reader::read_from_value(shader_manager& shaders, const Value& value) +{ + validate_parameters(value); + + uint64_t blend = blend_reader::read_from_value(value["blend"]); + uint64_t depth = depth_reader::read_from_value(value["depth"]); + uint64_t cull = cull_reader::read_from_value(value["cull"]); + uint64_t write = write_reader::read_from_value(value["write"]); + + std::vector<bgfx_uniform*> uniforms; + const Value& uniform_array = value["uniforms"]; + for (UINT32 i = 0; i < uniform_array.Size(); i++) + { + uniforms.push_back(uniform_reader::read_from_value(uniform_array[i])); + } + + std::string vertex_name(value["vertex"].GetString()); + bgfx::ShaderHandle vertex_shader = shaders.shader(vertex_name); + + std::string fragment_name(""); + if (value.HasMember("fragment")) + { + fragment_name = value["fragment"].GetString(); + } + else if (value.HasMember("pixel")) + { + fragment_name = value["pixel"].GetString(); + } + bgfx::ShaderHandle fragment_shader = shaders.shader(fragment_name); + + return new bgfx_effect(blend | depth | cull | write, vertex_shader, fragment_shader, uniforms); +} + +void effect_reader::validate_parameters(const Value& value) +{ + assert(value.HasMember("blend")); + assert(value.HasMember("depth")); + assert(value.HasMember("cull")); + assert(value.HasMember("write")); + assert(value.HasMember("vertex")); + assert(value["vertex"].IsString()); + assert(value.HasMember("fragment") || value.HasMember("pixel")); + if (value.HasMember("fragment")) + { + assert(value["fragment"].IsString()); + } + if (value.HasMember("pixel")) + { + assert(value["pixel"].IsString()); + } + assert(value.HasMember("uniform")); + assert(value["uniform"].IsArray()); +}
\ No newline at end of file |