00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef GLSLSET_HPP
00025 #define GLSLSET_HPP
00026
00027 #include "ShBackend.hpp"
00028
00029 namespace shgl {
00030
00031 class GlslCode;
00032
00033 class GlslSet : public SH::ShBackendSet {
00034 public:
00035 GlslSet();
00036 GlslSet(const SH::ShPointer<GlslCode>& code);
00037 GlslSet(const SH::ShProgramSet& s);
00038 GlslSet(const GlslSet& s);
00039 ~GlslSet();
00040
00041 GlslSet& operator=(const GlslSet& s);
00042
00043 void link();
00044 void bind();
00045 void unbind();
00046
00047 bool empty() const;
00048
00049 void attach(const SH::ShPointer<GlslCode>& code);
00050 void detach(const SH::ShPointer<GlslCode>& code);
00051 void replace(const SH::ShPointer<GlslCode>& code);
00052
00053
00054 static GlslSet* current() { return m_current; }
00055
00056 private:
00057 SH::ShPointer<GlslCode> m_shaders[2];
00058 GLhandleARB m_arb_program;
00059
00060 bool m_linked, m_bound;
00061
00062 static GlslSet* m_current;
00063 };
00064
00065 typedef SH::ShPointer<GlslSet> GlslSetPtr;
00066 typedef SH::ShPointer<const GlslSet> GlslSetCPtr;
00067
00068 }
00069 #endif