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 "ShaderManager.h"
00010
00011
00012 namespace gk {
00013
00014
00015 class EffectShaderManager
00016 {
00017 Effect *m_effect;
00018 std::map<Name, GLShaderProgram *> m_programs_map;
00019
00020
00021 EffectShaderManager( );
00022 EffectShaderManager( const EffectShaderManager& );
00023 EffectShaderManager& operator= ( const EffectShaderManager& );
00024
00025 public:
00026
00027 EffectShaderManager( const std::string& effect );
00028
00029
00030 EffectShaderManager( Effect *effect );
00031
00032
00033 ~EffectShaderManager( );
00034
00035
00036 GLShaderProgram *insert( GLShaderProgram *program, const Name& name )
00037 {
00038 m_programs_map.insert( std::make_pair(name, program) );
00039 return program;
00040 }
00041
00042
00043 GLShaderProgram *program( const Name& name )
00044 {
00045 std::map<Name, GLShaderProgram *>::iterator found= m_programs_map.find(name);
00046 if(found == m_programs_map.end())
00047 return NULL;
00048 else
00049 return found->second;
00050 }
00051
00052
00053 GLShaderProgram *operator[] ( const Name &name )
00054 {
00055 return program(name);
00056 }
00057
00058
00059 GLShaderProgram *createShaderProgram( const std::string& program_key )
00060 {
00061 return createShaderProgram2(program_key);
00062 }
00063
00064
00065 GLShaderProgram *createShaderProgram(
00066 const TextValue& vertex_key,
00067 const TextValue& fragment_key )
00068 {
00069 return createShaderProgram2(vertex_key, fragment_key);
00070 }
00071
00072
00073 GLShaderProgram *createShaderProgram2( const std::string& program_key );
00074
00075
00076 GLShaderProgram *createShaderProgram2(
00077 const TextValue& vertex_key,
00078 const TextValue& fragment_key );
00079
00080 #if defined GK_OPENGL3 || defined GK_OPENGL4
00081
00082 GLShaderProgram *createShaderProgram3( const std::string& program_key );
00083
00084
00085 GLShaderProgram *createShaderProgram3(
00086 const TextValue& vertex_key,
00087 const TextValue& geometry_key,
00088 const TextValue& fragment_key );
00089 #endif
00090
00091 #ifdef GK_OPENGL4
00092
00093 GLShaderProgram *createShaderProgram4( const std::string& program_key );
00094
00095
00096 GLShaderProgram *createShaderProgram4(
00097 const TextValue& vertex_key,
00098 const TextValue& control_key,
00099 const TextValue& evaluation_key,
00100 const TextValue& goemetry_key,
00101 const TextValue& fragment_key );
00102 #endif
00103 };
00104
00105 }
00106
00107 #endif