예제 #1
0
	void Shader::ValidateUniforms()
	{
		if (!HasUniform(SHADER_UNIFORM_PROJECTION_MATRIX_NAME))
			SP_WARN(m_Name, " shader does not contain pr_matrix uniform.");
		if (!HasUniform(SHADER_UNIFORM_VIEW_MATRIX_NAME))
			SP_WARN(m_Name, " shader does not contain vw_matrix uniform.");
		if (!HasUniform(SHADER_UNIFORM_MODEL_MATRIX_NAME))
			SP_WARN(m_Name, " shader does not contain ml_matrix uniform.");

		SP_INFO(m_Name, " shader successfully validated.");
	}
예제 #2
0
	void ShaderManager::Reload(const API::Shader* shader)
	{
		for (uint i = 0; i < s_Shaders.size(); i++)
		{
			if (s_Shaders[i] == shader)
			{
				String name = shader->GetName();
				String path = shader->GetFilePath();
				s_Shaders[i]->~Shader();
				s_Shaders[i] = API::Shader::CreateFromFile(name, path, s_Shaders[i]);
				return;
			}
		}
		SP_WARN("Could not find specified shader to reload.");
	}
예제 #3
0
	void ShaderManager::Reload(const String& name)
	{
		for (uint i = 0; i < s_Shaders.size(); i++)
		{
			if (s_Shaders[i]->GetName() == name)
			{
				String path = s_Shaders[i]->GetFilePath();
				String error;
				if (!API::Shader::TryCompileFromFile(path, error))
				{
					SP_ERROR(error);
				}
				else
				{
					s_Shaders[i]->~Shader();
					s_Shaders[i] = API::Shader::CreateFromFile(name, path, s_Shaders[i]);
					SP_INFO("Reloaded shader: " + name);
				}
				return;
			}
		}
		SP_WARN("Could not find '", name, "' shader to reload.");
	}