diff options
Diffstat (limited to 'src/3rdparty/ogl/OpenGL.h')
-rw-r--r-- | src/3rdparty/ogl/OpenGL.h | 178 |
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 |