1 // license:BSD-3-Clause
2 // copyright-holders:Ryan Holtz
3 //============================================================
4 //
5 // entryuniformreader.cpp - BGFX chain entry uniform reader
6 //
7 //============================================================
8
9 #include "entryuniformreader.h"
10
11 #include "entryuniform.h"
12 #include "effect.h"
13 #include "slideruniformreader.h"
14 #include "valueuniformreader.h"
15 #include "paramuniformreader.h"
16 #include "uniform.h"
17
read_from_value(const Value & value,std::string prefix,bgfx_effect * effect,std::map<std::string,bgfx_slider * > & sliders,std::map<std::string,bgfx_parameter * > & params)18 bgfx_entry_uniform* entry_uniform_reader::read_from_value(const Value& value, std::string prefix, bgfx_effect* effect, std::map<std::string, bgfx_slider*>& sliders, std::map<std::string, bgfx_parameter*>& params)
19 {
20 if (!validate_parameters(value, prefix))
21 {
22 return nullptr;
23 }
24
25 std::string name = value["uniform"].GetString();
26 bgfx_uniform* uniform = effect->uniform(name);
27
28 if (!READER_CHECK(uniform != nullptr, (prefix + "Uniform '" + name + " does not appear to exist\n").c_str()))
29 {
30 return nullptr;
31 }
32
33 if (value.HasMember("slider"))
34 {
35 return slider_uniform_reader::read_from_value(value, prefix, uniform, sliders);
36 }
37 else if (value.HasMember("value"))
38 {
39 return value_uniform_reader::read_from_value(value, prefix, uniform);
40 }
41 else if (value.HasMember("parameter"))
42 {
43 return param_uniform_reader::read_from_value(value, prefix, uniform, params);
44 }
45 else
46 {
47 READER_CHECK(false, (prefix + "Unrecognized uniform type for uniform binding " + name).c_str());
48 }
49
50
51 return nullptr;
52 }
53
validate_parameters(const Value & value,std::string prefix)54 bool entry_uniform_reader::validate_parameters(const Value& value, std::string prefix)
55 {
56 if (!READER_CHECK(value.HasMember("uniform"), (prefix + "Must have string value 'uniform' (what uniform are we mapping?)\n").c_str())) return false;
57 if (!READER_CHECK(value["uniform"].IsString(), (prefix + "Value 'effect' must be a string\n").c_str())) return false;
58 return true;
59 }
60