summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/bgfx/effectreader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/render/bgfx/effectreader.cpp')
-rw-r--r--src/osd/modules/render/bgfx/effectreader.cpp52
1 files changed, 29 insertions, 23 deletions
diff --git a/src/osd/modules/render/bgfx/effectreader.cpp b/src/osd/modules/render/bgfx/effectreader.cpp
index 63a6a925a64..b787dec12a3 100644
--- a/src/osd/modules/render/bgfx/effectreader.cpp
+++ b/src/osd/modules/render/bgfx/effectreader.cpp
@@ -22,12 +22,19 @@
#include "effectreader.h"
-bgfx_effect* effect_reader::read_from_value(shader_manager& shaders, const Value& value)
+bgfx_effect* effect_reader::read_from_value(const Value& value, std::string prefix, shader_manager& shaders)
{
- validate_parameters(value);
+ if (!validate_parameters(value, prefix))
+ {
+ return nullptr;
+ }
- uint64_t blend = blend_reader::read_from_value(value["blend"]);
- uint64_t depth = depth_reader::read_from_value(value["depth"]);
+ uint64_t blend = 0;
+ if (value.HasMember("blend"))
+ {
+ blend = blend_reader::read_from_value(value["blend"]);
+ }
+ uint64_t depth = depth_reader::read_from_value(value["depth"], prefix + "depth: ");
uint64_t cull = cull_reader::read_from_value(value["cull"]);
uint64_t write = write_reader::read_from_value(value["write"]);
@@ -35,7 +42,12 @@ bgfx_effect* effect_reader::read_from_value(shader_manager& shaders, const Value
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]));
+ bgfx_uniform* uniform = uniform_reader::read_from_value(uniform_array[i], prefix + "uniforms[" + std::to_string(i) + "]: ");
+ if (uniform == nullptr)
+ {
+ return nullptr;
+ }
+ uniforms.push_back(uniform);
}
std::string vertex_name(value["vertex"].GetString());
@@ -55,23 +67,17 @@ bgfx_effect* effect_reader::read_from_value(shader_manager& shaders, const Value
return new bgfx_effect(blend | depth | cull | write, vertex_shader, fragment_shader, uniforms);
}
-void effect_reader::validate_parameters(const Value& value)
+bool effect_reader::validate_parameters(const Value& value, std::string prefix)
{
- 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("uniforms"));
- assert(value["uniforms"].IsArray());
+ if (!READER_CHECK(value.HasMember("depth"), (prefix + "Must have object value 'depth' (what are our Z-buffer settings?)\n").c_str())) return false;
+ if (!READER_CHECK(value.HasMember("cull"), (prefix + "Must have object value 'cull' (do we cull triangles based on winding?)\n").c_str())) return false;
+ if (!READER_CHECK(value.HasMember("write"), (prefix + "Must have object value 'write' (what are our color buffer write settings?)\n").c_str())) return false;
+ if (!READER_CHECK(value.HasMember("vertex"), (prefix + "Must have string value 'vertex' (what is our vertex shader?)\n").c_str())) return false;
+ if (!READER_CHECK(value["vertex"].IsString(), (prefix + "Value 'vertex' must be a string\n").c_str())) return false;
+ if (!READER_CHECK(value.HasMember("fragment") || value.HasMember("pixel"), (prefix + "Must have string value named 'fragment' or 'pixel' (what is our fragment/pixel shader?)\n").c_str())) return false;
+ if (!READER_CHECK(!value.HasMember("fragment") || value["fragment"].IsString(), (prefix + "Value 'fragment' must be a string\n").c_str())) return false;
+ if (!READER_CHECK(!value.HasMember("pixel") || value["pixel"].IsString(), (prefix + "Value 'pixel' must be a string\n").c_str())) return false;
+ if (!READER_CHECK(value.HasMember("uniforms"), (prefix + "Must have array value 'uniforms' (what are our shader's parameters?)\n").c_str())) return false;
+ if (!READER_CHECK(value["uniforms"].IsArray(), (prefix + "Value 'uniforms' must be an array\n").c_str())) return false;
+ return true;
}