]> git.tdb.fi Git - libs/gl.git/blobdiff - source/shader.h
Add getter for Animation::looping
[libs/gl.git] / source / shader.h
index cd01f2acda49a8c3374bc97c356263bccb653b91..bab11a7e9603e8bcc32652427b20ade4e7796267 100644 (file)
@@ -1,44 +1,63 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_GL_SHADER_H_
 #define MSP_GL_SHADER_H_
 
 #include <string>
 #include "gl.h"
-#include "types.h"
 
 namespace Msp {
 namespace GL {
 
-enum ShaderType
-{
-       FRAGMENT_SHADER = GL_FRAGMENT_SHADER,
-       VERTEX_SHADER   = GL_VERTEX_SHADER
-};
+/**
+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;
+
+protected:
+       Shader(GLenum t);
+       Shader(GLenum t, const std::string &);
+private:
+       void init(GLenum);
 public:
-       Shader(ShaderType t);
-       Shader(ShaderType t, const std::string &);
-       ~Shader();
+       virtual ~Shader();
 
-       void source(sizei count, const char **str, const int *len);
+       void source(unsigned count, const char **str, const int *len);
        void source(const std::string &str);
        void source(const char *str, int len);
        void compile();
-       uint get_id() const { return id; }
-       bool get_compiled() const { return compiled; }
-       int get_param(GLenum param) const;
+       unsigned get_id() const { return id; }
+       bool is_compiled() const { return compiled; }
        std::string get_info_log() const;
-private:
-       uint id;
-       bool compiled;
+};
+
+
+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