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