Intro :
Prérequis :
– Savoir utiliser un peu DirectX 10
– Savoir utiliser la classe Singleton. Voir cet article.
– Savoir ce qu’est un fichier shader.
– Savoir utiliser la classe ShaderTechnique.
Explications :
Voici le fichier ShaderManager.h :
#ifndef SHADERS_MANAGER_H
#define SHADERS_MANAGER_H
class ShaderManager : public Singleton<ShaderManager>
{
public:
ShaderManager();
virtual ~ShaderManager();
void RegisterShader(ShaderTechnique* pShader, const std::string& sName);
void UnRegisterShader(std::string sName);
ShaderTechnique* GetShader(std::string sName);
private:
std::map<std::string, ShaderTechnique*> m_shaders;
};
#endif
Voici le fichier ShaderManager.cpp :
#include "ShaderManager.h"
template<> ShaderManager* Singleton<ShaderManager>::ms_instance = nullptr;
ShaderManager::ShaderManager()
{
}
ShaderManager::~ShaderManager()
{
}
void ShaderManager::RegisterShader(ShaderTechnique* pShader, const std::string& sName)
{
Assert(pShader);
m_shaders[sName] = pShader;
}
void ShaderManager::UnRegisterShader(std::string sName)
{
Assert(m_shaders.count(sName) > 0);
delete m_shaders[sName];
m_shaders.erase(sName);
}
ShaderTechnique* ShaderManager::GetShader(std::string sName)
{
Assert(m_shaders.count(sName) > 0);
return m_shaders[sName];
}
Résumé :
Voici une classe toute simple qui permettra de rassembler tous vos shaders encapsulés dans une collection std::map.

