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; }
//------------------------------------------------------------------------- // @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; }