Une classe ShaderManager pour gérer vos fichier shaders

AMD_6990

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *