void ShadingModel::construct_from_file(TextFile const& file) { shader_stages_ = std::vector<ShaderStage>(4); Json::Value value; Json::Reader reader; if (!reader.parse(file.get_content(), value)) { Logger::LOG_WARNING << "Failed to parse shading model \"" << file.get_file_name() << "\": " "File does not exist!" << std::endl; return; } if (value["gbuffer_vertex_stage"] == Json::Value::null) { Logger::LOG_WARNING << "Failed to parse shading model \"" << file.get_file_name() << "\": " "Gbuffer-Vertex-Stage is missing!" << std::endl; return; } if (value["gbuffer_fragment_stage"] == Json::Value::null) { Logger::LOG_WARNING << "Failed to parse shading model \"" << file.get_file_name() << "\": " "Gbuffer-Fragment-Stage is missing!" << std::endl; return; } if (value["lbuffer_stage"] == Json::Value::null) { Logger::LOG_WARNING << "Failed to parse shading model \"" << file.get_file_name() << "\": " "Lbuffer-stage is missing!" << std::endl; return; } if (value["final_shading_stage"] == Json::Value::null) { Logger::LOG_WARNING << "Failed to parse shading model \"" << file.get_file_name() << "\": " "Final-Shading-Stage is missing!" << std::endl; return; } shader_stages_[GBUFFER_VERTEX_STAGE] = ShaderStage(value["gbuffer_vertex_stage"]); shader_stages_[GBUFFER_FRAGMENT_STAGE] = ShaderStage(value["gbuffer_fragment_stage"]); shader_stages_[LIGHTING_STAGE] = ShaderStage(value["lbuffer_stage"]); shader_stages_[FINAL_STAGE] = ShaderStage(value["final_shading_stage"]); // add default layers shader_stages_[GBUFFER_VERTEX_STAGE].get_outputs()["gua_position"] = BufferComponent::F3; shader_stages_[GBUFFER_FRAGMENT_STAGE].get_outputs()["gua_normal"] = BufferComponent::F3; shader_stages_[FINAL_STAGE].get_outputs()["gua_color"] = BufferComponent::F3; }