gKitGL
EffectShaderManager.h
00001 
00002 #ifndef _GKEFFECT_SHADER_MANAGER_H
00003 #define _GKEFFECT_SHADER_MANAGER_H
00004 
00005 #include <string>
00006 
00007 #include "Name.h"
00008 #include "Effect.h"
00009 #include "IOFileManager.h"
00010 #include "GL/TPShaderProgram.h"
00011 
00012 
00013 namespace gk {
00014 
00015 //! creation simplifiee d'un shader program a partir d'un script.
00016 class  EffectShaderManager 
00017 {
00018     Effect *m_effect;
00019     
00020     std::map<Name, int> m_programs_map;
00021     std::vector<GLShaderProgram *> m_programs;
00022     std::vector<std::string> m_program_names;
00023     
00024     // non copyable.
00025     EffectShaderManager( const EffectShaderManager& );
00026     EffectShaderManager& operator= ( const EffectShaderManager& );
00027     
00028 public:
00029     //! constructeur par defaut
00030     EffectShaderManager( );
00031 
00032     //! charge le script.
00033     int read( const std::string& effect );
00034 
00035     //! constructeur. charge le script.
00036     EffectShaderManager( const std::string& effect );
00037 
00038     //! constructeur. reference un script deja charge.
00039     EffectShaderManager( Effect *effect );
00040     
00041     //! destructeur.
00042     ~EffectShaderManager( );
00043 
00044     //! recharge le fichier de configuration et reinitialise les shader programs deja references/crees par l'application.
00045     //! renvoie -1 en cas d'erreur, 0 si le fichier n'est pas modifie et 1 si le fichier est modifie + recharge.
00046     int reload( );
00047 
00048     //! insere un shader program existant dans le manager.
00049     GLShaderProgram *insert( GLShaderProgram *program, const std::string& name )
00050     {
00051         m_programs_map.insert( std::make_pair( name, m_programs.size()) );
00052         m_programs.push_back( program );
00053         m_program_names.push_back( name );
00054         assert(m_programs.size() == m_program_names.size());
00055         return program;
00056     }
00057 
00058     //! retrouve un shader program. renvoie eventuellement NULL si le programe n'existe pas.
00059     GLShaderProgram *program( const Name& name )
00060     {
00061         std::map<Name, int>::iterator found= m_programs_map.find(name);
00062         if(found == m_programs_map.end())
00063             return NULL;
00064         else
00065             return m_programs[found->second];
00066     }
00067 
00068     //! retouve un shader program. renvoie eventuellement NULL si le programe n'existe pas.
00069     GLShaderProgram *operator[] ( const Name &name )
00070     {
00071         return program(name);
00072     }
00073     
00074     //! cree un shader program opengl a partir d'une section complete.
00075     GLShaderProgram *createShaderProgram( const std::string& program_key );
00076 };
00077 
00078 }       // namespace gk
00079 
00080 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerator Friends