]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/blend.h
Rearrange soucre files into subdirectories
[libs/gl.git] / source / core / blend.h
diff --git a/source/core/blend.h b/source/core/blend.h
new file mode 100644 (file)
index 0000000..e7b291e
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef MSP_GL_BLEND_H_
+#define MSP_GL_BLEND_H_
+
+#include <msp/strings/lexicalcast.h>
+#include "bindable.h"
+#include "gl.h"
+#include <msp/gl/extensions/ext_blend_minmax.h>
+
+namespace Msp {
+namespace GL {
+
+enum BlendEquation
+{
+       ADD              = GL_FUNC_ADD,
+       SUBTRACT         = GL_FUNC_SUBTRACT,
+       REVERSE_SUBTRACT = GL_FUNC_REVERSE_SUBTRACT,
+       MIN              = GL_MIN,
+       MAX              = GL_MAX
+};
+
+enum BlendFactor
+{
+       ZERO = GL_ZERO,
+       ONE = GL_ONE,
+       SRC_COLOR = GL_SRC_COLOR,
+       ONE_MINUS_SRC_COLOR = GL_ONE_MINUS_SRC_COLOR,
+       SRC_ALPHA = GL_SRC_ALPHA,
+       ONE_MINUS_SRC_ALPHA = GL_ONE_MINUS_SRC_ALPHA,
+       DST_COLOR = GL_DST_COLOR,
+       ONE_MINUS_DST_COLOR = GL_ONE_MINUS_DST_COLOR,
+       DST_ALPHA = GL_DST_ALPHA,
+       ONE_MINUS_DST_ALPHA = GL_ONE_MINUS_DST_ALPHA,
+       CONSTANT_COLOR = GL_CONSTANT_COLOR,
+       ONE_MINUS_CONSTANT_COLOR = GL_ONE_MINUS_CONSTANT_COLOR,
+       CONSTANT_ALPHA = GL_CONSTANT_ALPHA,
+       ONE_MINUS_CONSTANT_ALPHA = GL_ONE_MINUS_CONSTANT_ALPHA
+};
+
+/**
+Blends incoming fragments with those already in the framebuffer.
+*/
+class Blend: public Bindable<Blend>
+{
+private:
+       BlendEquation eq;
+       BlendFactor src_factor;
+       BlendFactor dst_factor;
+
+public:
+       Blend();
+       Blend(BlendFactor, BlendFactor);
+       Blend(BlendEquation, BlendFactor, BlendFactor);
+
+       void bind() const;
+
+       static void unbind();
+
+       static const Blend &alpha();
+       static const Blend &additive();
+       static const Blend &additive_alpha();
+};
+
+void operator>>(const LexicalConverter &, BlendFactor &);
+void operator<<(LexicalConverter &, BlendFactor);
+
+} // namespace GL
+} // namespace Msp
+
+#endif