bool ShaderLibrary::getMaterialShaders(string shader_list_name, Shader *&vertex_shader, Shader *&pixel_shader, bool no_light, bool no_gi, bool const_tex_coord) {
		ShaderList *shader_list=getShaderList(shader_list_name);
		if (shader_list) {
			ShaderSet *shader_set=shader_list->getShaderSet();
			
			if (shader_set) {
				// Pixel Shader
				string pixel_shader_name=shader_set->getPixelShaderName();
				if (no_light) pixel_shader_name += "_NoLight";
				if (no_gi) pixel_shader_name += "_NoGI";
				if (const_tex_coord) pixel_shader_name += "_ConstTexCoord";
				pixel_shader = getPixelShader(pixel_shader_name);

				// Vertex Shader
				string vertex_shader_name = shader_set->getVertexShaderName();

				if (const_tex_coord) vertex_shader_name += "_ConstTexCoord";

				if (vertex_shader_name.size()) {
					vertex_shader = getVertexShader(vertex_shader_name);
				}

				return true;
			}
		}

		return false;
	}
Example #2
0
//-------------------------------------------------------------------------
// @brief 
//-------------------------------------------------------------------------
const unsigned int ShaderCache::getPixelShader(const tinyxml2::XMLElement* element, const DeviceManager& deviceManager)
{
    PixelShader shader;
    shader.deserialise(element);
    unsigned int resourceName = hashString(getResourceNameFromFileName(shader.getFileName()));
    if (getPixelShader(resourceName) == nullptr)
    {
        if (shader.createShader(deviceManager))
        {
            m_pixelShaders.emplace(PixelShaderHandle(resourceName, shader));
        }
    }

    return resourceName;
}