47 m_shaderProgram->Bind();
49 for (
auto& param : m_floatParams)
51 m_shaderProgram->SetUniform(param.first, param.second);
54 for (
auto& param : m_float2Params)
56 m_shaderProgram->SetUniform(param.first, param.second.first, param.second.second);
59 for (
auto& param : m_float3Params)
61 m_shaderProgram->SetUniform(param.first, param.second);
64 for (
auto& param : m_textures)
66 m_shaderProgram->SetTexture(param.first, param.second.get());
79 nlohmann::json json = nlohmann::json::parse(contents);
80 std::shared_ptr<Material> result;
82 if (json.contains(
"shader"))
84 auto shaderObj = json[
"shader"];
85 std::string vertexPath = shaderObj.value(
"vertex",
"");
86 std::string fragmentPath = shaderObj.value(
"fragment",
"");
90 auto fragmentSrc = fs.LoadAssetFileText(fragmentPath);
99 result = std::make_shared<Material>();
100 result->SetShaderProgram(shaderProgram);
103 if (json.contains(
"params"))
105 auto paramsObj = json[
"params"];
108 if (paramsObj.contains(
"float"))
110 for (
auto& p : paramsObj[
"float"])
112 std::string name = p.value(
"name",
"");
113 float value = p.value(
"value", 0.0f);
114 result->SetParam(name, value);
119 if (paramsObj.contains(
"float2"))
121 for (
auto& p : paramsObj[
"float2"])
123 std::string name = p.value(
"name",
"");
124 float v0 = p.value(
"value0", 0.0f);
125 float v1 = p.value(
"value1", 0.0f);
126 result->SetParam(name, v0, v1);
131 if (paramsObj.contains(
"float3"))
133 for (
auto& p : paramsObj[
"float3"])
135 std::string name = p.value(
"name",
"");
136 float v0 = p.value(
"value0", 0.0f);
137 float v1 = p.value(
"value1", 0.0f);
138 float v2 = p.value(
"value2", 0.0f);
139 result->SetParam(name, glm::vec3(v0, v1, v2));
144 if (paramsObj.contains(
"textures"))
146 for (
auto& p : paramsObj[
"textures"])
148 std::string name = p.value(
"name",
"");
149 std::string texPath = p.value(
"path",
"");
152 result->SetParam(name, texture);
static std::shared_ptr< Texture > Load(const std::string &path)