summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/bgfx/statereader.cpp
diff options
context:
space:
mode:
author therealmogminer@gmail.com <therealmogminer@gmail.com>2016-02-18 15:57:34 +0100
committer therealmogminer@gmail.com <therealmogminer@gmail.com>2016-02-21 03:03:23 +0100
commit9a47a870df619656e9092f2f77622e84e640307a (patch)
treeb8640bf79ffb55d0c9ed6fc27bbd4ce16a5e1a2e /src/osd/modules/render/bgfx/statereader.cpp
parentdadf8e7d79696996ab3ef840fe99a588ede538fa (diff)
First take on render API reorg, nw
Diffstat (limited to 'src/osd/modules/render/bgfx/statereader.cpp')
-rw-r--r--src/osd/modules/render/bgfx/statereader.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/osd/modules/render/bgfx/statereader.cpp b/src/osd/modules/render/bgfx/statereader.cpp
new file mode 100644
index 00000000000..2f222b19bdf
--- /dev/null
+++ b/src/osd/modules/render/bgfx/statereader.cpp
@@ -0,0 +1,107 @@
+#include "statereader.h"
+
+uint64_t state_reader::get_enum_from_value(const Value& value, std::string name, const uint64_t default_value, const string_to_enum* enums, const int count)
+{
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsString());
+ return get_param_from_string(value[name.c_str()].GetString(), enums, count);
+ }
+ else
+ {
+ return default_value;
+ }
+}
+
+uint64_t state_reader::get_param_from_string(std::string value, const string_to_enum* enums, const int count)
+{
+ for (int i = 0; i < count; i++)
+ {
+ if (value == enums[i].m_string)
+ {
+ return enums[i].m_enum;
+ }
+ }
+ assert(false);
+ return 0;
+}
+
+void state_reader::validate_array_parameter(const Value& value, std::string typeName, std::string paramName, const int count)
+{
+ const char* name = paramName.c_str();
+ if (value.HasMember(name))
+ {
+ assert(value[name].IsArray());
+ assert(value[name].Size() == count);
+ }
+}
+
+void state_reader::validate_double_parameter(const Value& value, std::string typeName, std::string name)
+{
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsDouble());
+ }
+}
+
+void state_reader::validate_string_parameter(const Value& value, std::string typeName, std::string name)
+{
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsString());
+ }
+}
+
+void state_reader::validate_boolean_parameter(const Value& value, std::string typeName, std::string name)
+{
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsBool());
+ }
+}
+
+bool state_reader::get_bool(const Value& value, const std::string name, const bool default_value)
+{
+ if (value.HasMember(name.c_str()))
+ {
+ return value[name.c_str()].GetBool();
+ }
+ return default_value;
+}
+
+void state_reader::get_float(const Value& value, const std::string name, float* out, float* default_value, int count)
+{
+ if (value.HasMember(name.c_str()))
+ {
+ if (count == 1)
+ {
+ *out = (float) value[name.c_str()].GetDouble();
+ return;
+ }
+ else
+ {
+ get_vec_values(value[name.c_str()], out, count);
+ }
+ }
+ for (int def = 0; def < count; def++)
+ {
+ out[def] = default_value[def];
+ }
+}
+
+void state_reader::get_vec_values(const Value& value_array, float* data, const unsigned int count)
+{
+ for (unsigned int i = 0; i < count && i < value_array.Size(); i++)
+ {
+ data[i] = (float) value_array[i].GetDouble();
+ }
+}
+
+std::string state_reader::get_string(const Value& value, const std::string name, const std::string default_value)
+{
+ if (value.HasMember(name.c_str()))
+ {
+ return std::string(value[name.c_str()].GetString());
+ }
+ return default_value;
+}