示例#1
0
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;
}