aboutsummaryrefslogtreecommitdiff
path: root/src/3rdparty/ogl/OpenGL.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/ogl/OpenGL.h')
-rw-r--r--src/3rdparty/ogl/OpenGL.h178
1 files changed, 178 insertions, 0 deletions
diff --git a/src/3rdparty/ogl/OpenGL.h b/src/3rdparty/ogl/OpenGL.h
new file mode 100644
index 0000000..04043fe
--- /dev/null
+++ b/src/3rdparty/ogl/OpenGL.h
@@ -0,0 +1,178 @@
+#ifndef __OGL2D_H
+#define __OGL2D_H
+#include <vector>
+
+/* include gl.h before this file */
+namespace ogl2d
+{
+ /* 2d wrap of opengl 3.0 */
+ class OpenGL
+ {
+ public:
+ OpenGL();
+ ~OpenGL();
+
+ inline void enable(GLenum cap)
+ {
+ glEnable(cap);
+ }
+
+ inline void disable(GLenum cap)
+ {
+ glDisable(cap);
+ }
+
+ inline void setBlendFunc(GLenum sfactor, GLenum dfactor)
+ {
+ glBlendFunc(sfactor, dfactor);
+ }
+
+ inline void setClearColor(GLubyte r, GLubyte g, GLubyte b, GLubyte a)
+ {
+ glClearColor(r / 255.f, g / 255.f, b / 255.f, a / 255.f);
+ }
+
+ void pushColor(GLubyte r, GLubyte g, GLubyte b, GLubyte a = 255);
+ void popColor();
+ void flushError();
+ GLuint genTexture();
+ void bindTexture(GLuint texture = 0);
+ inline GLuint curTexture()
+ {
+ return _texture;
+ }
+ void setTexParameter(GLenum pname, GLint param);
+ void texImage(GLint internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels = NULL);
+ void texSubImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+ void activeTexUnit(unsigned int unit = 0);
+
+ inline void drawArrays(GLenum mode, GLint first, GLsizei count)
+ {
+ glDrawArrays(mode, first, count);
+ }
+
+ inline void drawBuffer(GLenum mode)
+ {
+
+ }
+
+ inline void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
+ {
+
+ }
+
+ inline void enableClientState(GLenum arr)
+ {
+ glEnableClientState(arr);
+ }
+
+ inline void disableClientState(GLenum arr)
+ {
+ glDisableClientState(arr);
+ }
+
+ inline GLuint genFrameBuffer()
+ {
+ GLuint fbo;
+ glGenFramebuffers(1, &fbo);
+ return fbo;
+ }
+
+ inline void bindFrameBuffer(GLuint fbo)
+ {
+ glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+ }
+
+ // Ļһ
+ inline void ortho(int w, float radio)
+ {
+ glOrtho(0, w, w*radio, 0, -1, 1);
+ }
+
+ inline void orthox(int w, int h)
+ {
+ glOrtho(0, w, h, 0, -1, 1);
+ }
+
+ protected:
+ struct { GLubyte r, g, b, a; } _color; // current draw color
+ struct { GLubyte r, g, b, a; } _precolor; // previous draw color
+ GLuint _texture; // current binded texture
+
+ };
+
+ ///* OpenGL instance singleton */
+ extern OpenGL gl;
+
+#if defined(OGL2D_IMPLEMENT)
+
+ OpenGL gl;
+
+ OpenGL::OpenGL()
+ {
+ memset(&_color, 0xff, sizeof(_color));
+ memset(&_precolor, 0xff, sizeof(_precolor));
+ }
+
+ OpenGL::~OpenGL()
+ {
+ }
+
+ void OpenGL::pushColor(GLubyte r, GLubyte g, GLubyte b, GLubyte a)
+ {
+ memcpy(&_precolor, &_color, sizeof(_precolor));
+ _color.r = r;
+ _color.g = g;
+ _color.b = b;
+ _color.a = a;
+ glColor4ub(r, g, b, a);
+ }
+
+ void OpenGL::popColor()
+ {
+ memcpy(&_color, &_precolor, sizeof(_precolor));
+ glColor4ub(_color.r, _color.g, _color.b, _color.a);
+ }
+
+ void OpenGL::flushError()
+ {
+ while (glGetError() != GL_NO_ERROR);
+ }
+
+ GLuint OpenGL::genTexture()
+ {
+ GLuint t;
+ glGenTextures(1, &t);
+ return t;
+ }
+
+ void OpenGL::bindTexture(GLuint texture)
+ {
+ glBindTexture(GL_TEXTURE_2D, texture);
+ }
+
+ void OpenGL::setTexParameter(GLenum pname, GLint param)
+ {
+ glTexParameteri(GL_TEXTURE_2D, pname, param);
+ }
+
+ void OpenGL::texImage(GLint internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
+ {
+ glTexImage2D(GL_TEXTURE_2D, 0, internalformat, width, height, 0, format, type, pixels);
+ }
+
+ void OpenGL::texSubImage(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
+ {
+ glTexSubImage2D(GL_TEXTURE_2D, 0, xoffset, yoffset, width, height, format, type, pixels);
+ }
+
+ void OpenGL::activeTexUnit(unsigned int unit)
+ {
+ // glActiveTexture selects which texture unit subsequent texture state calls will affect.
+ glActiveTexture(GL_TEXTURE0 + unit);
+ }
+
+#endif // OGL2D_IMPLEMENT
+}
+
+#endif \ No newline at end of file