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 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#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 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#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.


