namespace Msp {
namespace GL {
-enum ShaderType
-{
- FRAGMENT_SHADER = GL_FRAGMENT_SHADER_ARB,
- VERTEX_SHADER = GL_VERTEX_SHADER_ARB
-};
+/**
+A single shader stage. Shaders must be attached to a Program to be used.
+This class can't be instantiated directly. Use one of the VertexShader and
+FragmentShader classes to create Shaders.
+*/
class Shader
{
private:
unsigned id;
bool compiled;
-public:
- Shader(ShaderType t);
- Shader(ShaderType t, const std::string &);
+protected:
+ Shader(GLenum t);
+ Shader(GLenum t, const std::string &);
private:
- void init(ShaderType);
+ void init(GLenum);
public:
- ~Shader();
+ virtual ~Shader();
void source(unsigned count, const char **str, const int *len);
void source(const std::string &str);
std::string get_info_log() const;
};
+
+class VertexShader: public Shader
+{
+public:
+ VertexShader();
+ VertexShader(const std::string &);
+};
+
+
+class FragmentShader: public Shader
+{
+public:
+ FragmentShader();
+ FragmentShader(const std::string &);
+};
+
+
+class GeometryShader: public Shader
+{
+public:
+ GeometryShader();
+ GeometryShader(const std::string &);
+};
+
} // namespace GL
} // namespace Msp