Пример #1
0
void MeshViewApp::loadConfig(const std::string& fileName, bool isReload)
{
	try
	{
		if (fs::exists(fileName))
			m_configFileName = fileName; 
		else
			m_configFileName = getAssetPath(fileName).string();

		m_fileMonitorConfig = FileMonitor::create(m_configFileName);

		Config cfg(m_configFileName);
		m_shaderFileName = cfg.getString("Shader", "FileName");
		loadShader(m_shaderFileName);

		if (!isReload)
		{
			m_assimpLoader = AssimpLoader(getAssetPath(cfg.getString("Model", "FileName")), false);
			m_assimpLoader.setAnimation(0);
			m_assimpLoader.enableTextures(false);
			m_assimpLoader.enableSkinning(false);
			m_assimpLoader.enableAnimation(false);
			m_assimpLoader.enableMaterials(false);
		}

		cfg.setSection("Textures");

		if(m_texDiffuse)
			m_texDiffuse = NULL;
		if (m_texNormal)
			m_texNormal = NULL;
		if (m_texSpecular)
			m_texSpecular = NULL;
		if(m_texAO)
			m_texAO = NULL;
		if(m_texEmissive)
			m_texEmissive = NULL;

		m_texDiffusePower = 1.0f;
		m_texNormalPower = 1.0f;
		m_texSpecularPower = 1.0f;
		m_texAOPower = 1.0f;
		m_texEmissivePower = 1.0f;

		m_diffuseEnabled = false;
		m_normalEnabled = false;
		m_specularEnabled = false;
		m_aoEnabled = false;
		m_emissiveEnabled = false;

		std::string diffuseFileName = cfg.getString("Diffuse");
		if(diffuseFileName != std::string())
		{
			m_texDiffuse = gl::Texture::create(loadImage(loadAsset(diffuseFileName)));
			m_texDiffusePower = cfg.getFloat("DiffusePower");
			m_diffuseEnabled = true;
		}

		std::string normalFileName = cfg.getString("Normal");
		if (normalFileName != std::string())
		{
			m_texNormal = gl::Texture::create(loadImage(loadAsset(normalFileName)));
			m_texNormalPower = cfg.getFloat("NormalPower");
			m_normalEnabled = true;
		}

		std::string specularFileName = cfg.getString("Specular");
		if (specularFileName != std::string())
		{
			m_texSpecular = gl::Texture::create(loadImage(loadAsset(specularFileName)));
			m_texSpecularPower = cfg.getFloat("SpecularPower");
			m_specularEnabled = true;
		}

		std::string aoFileName = cfg.getString("AO");
		if(aoFileName != std::string())
		{
			m_texAO = gl::Texture::create(loadImage(loadAsset(aoFileName)));
			m_texAOPower = cfg.getFloat("AOPower");
			m_aoEnabled = true;
		}

		std::string emissiveFileName = cfg.getString("Emissive");
		if(emissiveFileName != std::string())
		{
			m_texEmissive = gl::Texture::create(loadImage(loadAsset(emissiveFileName)));
			m_texEmissivePower = cfg.getFloat("EmissivePower");
			m_emissiveEnabled = true;
		}

		cfg.setSection("Material");
		m_matAmbient = cfg.getVec3f("Ambient");
		m_matDiffuse = cfg.getVec3f("Diffuse");
		m_matSpecular = cfg.getVec3f("Specular");
		m_matShininess = cfg.getFloat("Shininess");
		m_gamma = cfg.getFloat("Gamma");
	}
	catch(const std::exception& e)
	{
		console() << "Failed to load assets:" << std::endl;
		console() << e.what();
	}
}