00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GFX_SHADER_HH
00020 #define OST_GFX_SHADER_HH
00021
00022
00023
00024
00025
00026
00027
00028 #include <string>
00029 #include <map>
00030 #include <stack>
00031 #include <vector>
00032
00033 #include <ost/gfx/module_config.hh>
00034 #include "glext_include.hh"
00035
00036 namespace ost { namespace gfx {
00037
00038 class DLLEXPORT_OST_GFX Shader {
00039 public:
00040
00041 static Shader& Instance();
00042
00043 void PreGLInit();
00044 void Setup();
00045 void Activate(const String& name);
00046
00047 bool IsValid() const;
00048 bool IsActive() const;
00049
00050 GLuint GetCurrentProgram() const;
00051 String GetCurrentName() const;
00052
00053 void PushProgram();
00054 void PopProgram();
00055
00056 void UpdateState();
00057
00058 void Link(const std::string& pr_name, const std::string& vs_code, const std::string& fs_code);
00059
00060 static bool Compile(const std::string& shader_name,
00061 const std::string& shader_code,
00062 GLenum shader_type,
00063 GLuint& shader_id);
00064
00065 private:
00066 Shader();
00067
00068 bool valid_;
00069 GLuint current_program_;
00070 String current_name_;
00071
00072 std::stack<String> program_stack_;
00073
00074 std::map<String,GLuint> shader_program_map_;
00075 };
00076
00077 }}
00078
00079 #endif