diff options
author | chai <chaifix@163.com> | 2018-10-04 21:19:51 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-10-04 21:19:51 +0800 |
commit | f64bde8fe125393fa8a2a5de869c44aaed47b621 (patch) | |
tree | 696756093d27692eaae8472d6d9f6f37f375c01b | |
parent | c6f9d4182aaa868a72acac59cf8837f5924ed11e (diff) |
*update
24 files changed, 544 insertions, 497 deletions
diff --git a/build/Debug/05Font.exe b/build/Debug/05Font.exe Binary files differnew file mode 100644 index 0000000..2ec8e30 --- /dev/null +++ b/build/Debug/05Font.exe diff --git a/build/Debug/font.ttf b/build/Debug/font.ttf Binary files differnew file mode 100644 index 0000000..ac64abe --- /dev/null +++ b/build/Debug/font.ttf diff --git a/build/Debug/font2.ttf b/build/Debug/font2.ttf Binary files differnew file mode 100644 index 0000000..933b9d3 --- /dev/null +++ b/build/Debug/font2.ttf diff --git a/build/Debug/img.png b/build/Debug/img.png Binary files differnew file mode 100644 index 0000000..a762388 --- /dev/null +++ b/build/Debug/img.png diff --git a/build/libjin/libjin.vcxproj b/build/libjin/libjin.vcxproj index b5026d1..ebd95dc 100644 --- a/build/libjin/libjin.vcxproj +++ b/build/libjin/libjin.vcxproj @@ -96,6 +96,7 @@ <ClInclude Include="..\..\libjin\Graphics\Shaders\base.shader.h" /> <ClInclude Include="..\..\libjin\Graphics\Shaders\default.shader.h" /> <ClInclude Include="..\..\libjin\Graphics\Shaders\font.shader.h" /> + <ClInclude Include="..\..\libjin\Graphics\Shaders\texture.shader.h" /> <ClInclude Include="..\..\libjin\Graphics\Shapes.h" /> <ClInclude Include="..\..\libjin\Graphics\Texture.h" /> <ClInclude Include="..\..\libjin\Graphics\Utf8.h" /> diff --git a/build/libjin/libjin.vcxproj.filters b/build/libjin/libjin.vcxproj.filters index 1ef8c0e..f79e814 100644 --- a/build/libjin/libjin.vcxproj.filters +++ b/build/libjin/libjin.vcxproj.filters @@ -364,6 +364,9 @@ <ClInclude Include="..\..\libjin\Graphics\Utf8.h"> <Filter>Graphics</Filter> </ClInclude> + <ClInclude Include="..\..\libjin\Graphics\Shaders\texture.shader.h"> + <Filter>Graphics\Shaders</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="..\..\libjin\README.md" /> diff --git a/libjin/3rdparty/ogl/OpenGL.h b/libjin/3rdparty/ogl/OpenGL.h index 7c1c599..33b14d2 100644 --- a/libjin/3rdparty/ogl/OpenGL.h +++ b/libjin/3rdparty/ogl/OpenGL.h @@ -103,14 +103,14 @@ namespace ogl2d glOrtho(0, w, h, 0, -1, 1); } - private: + 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 */ + ///* OpenGL instance singleton */ extern OpenGL gl; #if defined(OGL2D_IMPLEMENT) @@ -125,7 +125,6 @@ namespace ogl2d OpenGL::~OpenGL() { - } void OpenGL::pushColor(GLubyte r, GLubyte g, GLubyte b, GLubyte a) @@ -185,4 +184,346 @@ namespace ogl2d #endif // OGL2D_IMPLEMENT } -#endif
\ No newline at end of file +#endif + + +/* GL.h + +WINGDIAPI void APIENTRY glAccum(GLenum op, GLfloat value); +WINGDIAPI void APIENTRY glAlphaFunc(GLenum func, GLclampf ref); +WINGDIAPI GLboolean APIENTRY glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences); +WINGDIAPI void APIENTRY glArrayElement(GLint i); +WINGDIAPI void APIENTRY glBegin(GLenum mode); +WINGDIAPI void APIENTRY glBindTexture(GLenum target, GLuint texture); +WINGDIAPI void APIENTRY glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); +WINGDIAPI void APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor); +WINGDIAPI void APIENTRY glCallList(GLuint list); +WINGDIAPI void APIENTRY glCallLists(GLsizei n, GLenum type, const GLvoid *lists); +WINGDIAPI void APIENTRY glClear(GLbitfield mask); +WINGDIAPI void APIENTRY glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +WINGDIAPI void APIENTRY glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +WINGDIAPI void APIENTRY glClearDepth(GLclampd depth); +WINGDIAPI void APIENTRY glClearIndex(GLfloat c); +WINGDIAPI void APIENTRY glClearStencil(GLint s); +WINGDIAPI void APIENTRY glClipPlane(GLenum plane, const GLdouble *equation); +WINGDIAPI void APIENTRY glColor3b(GLbyte red, GLbyte green, GLbyte blue); +WINGDIAPI void APIENTRY glColor3bv(const GLbyte *v); +WINGDIAPI void APIENTRY glColor3d(GLdouble red, GLdouble green, GLdouble blue); +WINGDIAPI void APIENTRY glColor3dv(const GLdouble *v); +WINGDIAPI void APIENTRY glColor3f(GLfloat red, GLfloat green, GLfloat blue); +WINGDIAPI void APIENTRY glColor3fv(const GLfloat *v); +WINGDIAPI void APIENTRY glColor3i(GLint red, GLint green, GLint blue); +WINGDIAPI void APIENTRY glColor3iv(const GLint *v); +WINGDIAPI void APIENTRY glColor3s(GLshort red, GLshort green, GLshort blue); +WINGDIAPI void APIENTRY glColor3sv(const GLshort *v); +WINGDIAPI void APIENTRY glColor3ub(GLubyte red, GLubyte green, GLubyte blue); +WINGDIAPI void APIENTRY glColor3ubv(const GLubyte *v); +WINGDIAPI void APIENTRY glColor3ui(GLuint red, GLuint green, GLuint blue); +WINGDIAPI void APIENTRY glColor3uiv(const GLuint *v); +WINGDIAPI void APIENTRY glColor3us(GLushort red, GLushort green, GLushort blue); +WINGDIAPI void APIENTRY glColor3usv(const GLushort *v); +WINGDIAPI void APIENTRY glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); +WINGDIAPI void APIENTRY glColor4bv(const GLbyte *v); +WINGDIAPI void APIENTRY glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); +WINGDIAPI void APIENTRY glColor4dv(const GLdouble *v); +WINGDIAPI void APIENTRY glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +WINGDIAPI void APIENTRY glColor4fv(const GLfloat *v); +WINGDIAPI void APIENTRY glColor4i(GLint red, GLint green, GLint blue, GLint alpha); +WINGDIAPI void APIENTRY glColor4iv(const GLint *v); +WINGDIAPI void APIENTRY glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha); +WINGDIAPI void APIENTRY glColor4sv(const GLshort *v); +WINGDIAPI void APIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +WINGDIAPI void APIENTRY glColor4ubv(const GLubyte *v); +WINGDIAPI void APIENTRY glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha); +WINGDIAPI void APIENTRY glColor4uiv(const GLuint *v); +WINGDIAPI void APIENTRY glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha); +WINGDIAPI void APIENTRY glColor4usv(const GLushort *v); +WINGDIAPI void APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +WINGDIAPI void APIENTRY glColorMaterial(GLenum face, GLenum mode); +WINGDIAPI void APIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +WINGDIAPI void APIENTRY glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); +WINGDIAPI void APIENTRY glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); +WINGDIAPI void APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +WINGDIAPI void APIENTRY glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +WINGDIAPI void APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +WINGDIAPI void APIENTRY glCullFace(GLenum mode); +WINGDIAPI void APIENTRY glDeleteLists(GLuint list, GLsizei range); +WINGDIAPI void APIENTRY glDeleteTextures(GLsizei n, const GLuint *textures); +WINGDIAPI void APIENTRY glDepthFunc(GLenum func); +WINGDIAPI void APIENTRY glDepthMask(GLboolean flag); +WINGDIAPI void APIENTRY glDepthRange(GLclampd zNear, GLclampd zFar); +WINGDIAPI void APIENTRY glDisable(GLenum cap); +WINGDIAPI void APIENTRY glDisableClientState(GLenum array); +WINGDIAPI void APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count); +WINGDIAPI void APIENTRY glDrawBuffer(GLenum mode); +WINGDIAPI void APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); +WINGDIAPI void APIENTRY glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +WINGDIAPI void APIENTRY glEdgeFlag(GLboolean flag); +WINGDIAPI void APIENTRY glEdgeFlagPointer(GLsizei stride, const GLvoid *pointer); +WINGDIAPI void APIENTRY glEdgeFlagv(const GLboolean *flag); +WINGDIAPI void APIENTRY glEnable(GLenum cap); +WINGDIAPI void APIENTRY glEnableClientState(GLenum array); +WINGDIAPI void APIENTRY glEnd(void); +WINGDIAPI void APIENTRY glEndList(void); +WINGDIAPI void APIENTRY glEvalCoord1d(GLdouble u); +WINGDIAPI void APIENTRY glEvalCoord1dv(const GLdouble *u); +WINGDIAPI void APIENTRY glEvalCoord1f(GLfloat u); +WINGDIAPI void APIENTRY glEvalCoord1fv(const GLfloat *u); +WINGDIAPI void APIENTRY glEvalCoord2d(GLdouble u, GLdouble v); +WINGDIAPI void APIENTRY glEvalCoord2dv(const GLdouble *u); +WINGDIAPI void APIENTRY glEvalCoord2f(GLfloat u, GLfloat v); +WINGDIAPI void APIENTRY glEvalCoord2fv(const GLfloat *u); +WINGDIAPI void APIENTRY glEvalMesh1(GLenum mode, GLint i1, GLint i2); +WINGDIAPI void APIENTRY glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +WINGDIAPI void APIENTRY glEvalPoint1(GLint i); +WINGDIAPI void APIENTRY glEvalPoint2(GLint i, GLint j); +WINGDIAPI void APIENTRY glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer); +WINGDIAPI void APIENTRY glFinish(void); +WINGDIAPI void APIENTRY glFlush(void); +WINGDIAPI void APIENTRY glFogf(GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glFogfv(GLenum pname, const GLfloat *params); +WINGDIAPI void APIENTRY glFogi(GLenum pname, GLint param); +WINGDIAPI void APIENTRY glFogiv(GLenum pname, const GLint *params); +WINGDIAPI void APIENTRY glFrontFace(GLenum mode); +WINGDIAPI void APIENTRY glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +WINGDIAPI GLuint APIENTRY glGenLists(GLsizei range); +WINGDIAPI void APIENTRY glGenTextures(GLsizei n, GLuint *textures); +WINGDIAPI void APIENTRY glGetBooleanv(GLenum pname, GLboolean *params); +WINGDIAPI void APIENTRY glGetClipPlane(GLenum plane, GLdouble *equation); +WINGDIAPI void APIENTRY glGetDoublev(GLenum pname, GLdouble *params); +WINGDIAPI GLenum APIENTRY glGetError(void); +WINGDIAPI void APIENTRY glGetFloatv(GLenum pname, GLfloat *params); +WINGDIAPI void APIENTRY glGetIntegerv(GLenum pname, GLint *params); +WINGDIAPI void APIENTRY glGetLightfv(GLenum light, GLenum pname, GLfloat *params); +WINGDIAPI void APIENTRY glGetLightiv(GLenum light, GLenum pname, GLint *params); +WINGDIAPI void APIENTRY glGetMapdv(GLenum target, GLenum query, GLdouble *v); +WINGDIAPI void APIENTRY glGetMapfv(GLenum target, GLenum query, GLfloat *v); +WINGDIAPI void APIENTRY glGetMapiv(GLenum target, GLenum query, GLint *v); +WINGDIAPI void APIENTRY glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params); +WINGDIAPI void APIENTRY glGetMaterialiv(GLenum face, GLenum pname, GLint *params); +WINGDIAPI void APIENTRY glGetPixelMapfv(GLenum map, GLfloat *values); +WINGDIAPI void APIENTRY glGetPixelMapuiv(GLenum map, GLuint *values); +WINGDIAPI void APIENTRY glGetPixelMapusv(GLenum map, GLushort *values); +WINGDIAPI void APIENTRY glGetPointerv(GLenum pname, GLvoid* *params); +WINGDIAPI void APIENTRY glGetPolygonStipple(GLubyte *mask); +WINGDIAPI const GLubyte * APIENTRY glGetString(GLenum name); +WINGDIAPI void APIENTRY glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params); +WINGDIAPI void APIENTRY glGetTexEnviv(GLenum target, GLenum pname, GLint *params); +WINGDIAPI void APIENTRY glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params); +WINGDIAPI void APIENTRY glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params); +WINGDIAPI void APIENTRY glGetTexGeniv(GLenum coord, GLenum pname, GLint *params); +WINGDIAPI void APIENTRY glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); +WINGDIAPI void APIENTRY glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params); +WINGDIAPI void APIENTRY glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params); +WINGDIAPI void APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params); +WINGDIAPI void APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint *params); +WINGDIAPI void APIENTRY glHint(GLenum target, GLenum mode); +WINGDIAPI void APIENTRY glIndexMask(GLuint mask); +WINGDIAPI void APIENTRY glIndexPointer(GLenum type, GLsizei stride, const GLvoid *pointer); +WINGDIAPI void APIENTRY glIndexd(GLdouble c); +WINGDIAPI void APIENTRY glIndexdv(const GLdouble *c); +WINGDIAPI void APIENTRY glIndexf(GLfloat c); +WINGDIAPI void APIENTRY glIndexfv(const GLfloat *c); +WINGDIAPI void APIENTRY glIndexi(GLint c); +WINGDIAPI void APIENTRY glIndexiv(const GLint *c); +WINGDIAPI void APIENTRY glIndexs(GLshort c); +WINGDIAPI void APIENTRY glIndexsv(const GLshort *c); +WINGDIAPI void APIENTRY glIndexub(GLubyte c); +WINGDIAPI void APIENTRY glIndexubv(const GLubyte *c); +WINGDIAPI void APIENTRY glInitNames(void); +WINGDIAPI void APIENTRY glInterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer); +WINGDIAPI GLboolean APIENTRY glIsEnabled(GLenum cap); +WINGDIAPI GLboolean APIENTRY glIsList(GLuint list); +WINGDIAPI GLboolean APIENTRY glIsTexture(GLuint texture); +WINGDIAPI void APIENTRY glLightModelf(GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glLightModelfv(GLenum pname, const GLfloat *params); +WINGDIAPI void APIENTRY glLightModeli(GLenum pname, GLint param); +WINGDIAPI void APIENTRY glLightModeliv(GLenum pname, const GLint *params); +WINGDIAPI void APIENTRY glLightf(GLenum light, GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat *params); +WINGDIAPI void APIENTRY glLighti(GLenum light, GLenum pname, GLint param); +WINGDIAPI void APIENTRY glLightiv(GLenum light, GLenum pname, const GLint *params); +WINGDIAPI void APIENTRY glLineStipple(GLint factor, GLushort pattern); +WINGDIAPI void APIENTRY glLineWidth(GLfloat width); +WINGDIAPI void APIENTRY glListBase(GLuint base); +WINGDIAPI void APIENTRY glLoadIdentity(void); +WINGDIAPI void APIENTRY glLoadMatrixd(const GLdouble *m); +WINGDIAPI void APIENTRY glLoadMatrixf(const GLfloat *m); +WINGDIAPI void APIENTRY glLoadName(GLuint name); +WINGDIAPI void APIENTRY glLogicOp(GLenum opcode); +WINGDIAPI void APIENTRY glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +WINGDIAPI void APIENTRY glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +WINGDIAPI void APIENTRY glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +WINGDIAPI void APIENTRY glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +WINGDIAPI void APIENTRY glMapGrid1d(GLint un, GLdouble u1, GLdouble u2); +WINGDIAPI void APIENTRY glMapGrid1f(GLint un, GLfloat u1, GLfloat u2); +WINGDIAPI void APIENTRY glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); +WINGDIAPI void APIENTRY glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); +WINGDIAPI void APIENTRY glMaterialf(GLenum face, GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glMaterialfv(GLenum face, GLenum pname, const GLfloat *params); +WINGDIAPI void APIENTRY glMateriali(GLenum face, GLenum pname, GLint param); +WINGDIAPI void APIENTRY glMaterialiv(GLenum face, GLenum pname, const GLint *params); +WINGDIAPI void APIENTRY glMatrixMode(GLenum mode); +WINGDIAPI void APIENTRY glMultMatrixd(const GLdouble *m); +WINGDIAPI void APIENTRY glMultMatrixf(const GLfloat *m); +WINGDIAPI void APIENTRY glNewList(GLuint list, GLenum mode); +WINGDIAPI void APIENTRY glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz); +WINGDIAPI void APIENTRY glNormal3bv(const GLbyte *v); +WINGDIAPI void APIENTRY glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz); +WINGDIAPI void APIENTRY glNormal3dv(const GLdouble *v); +WINGDIAPI void APIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz); +WINGDIAPI void APIENTRY glNormal3fv(const GLfloat *v); +WINGDIAPI void APIENTRY glNormal3i(GLint nx, GLint ny, GLint nz); +WINGDIAPI void APIENTRY glNormal3iv(const GLint *v); +WINGDIAPI void APIENTRY glNormal3s(GLshort nx, GLshort ny, GLshort nz); +WINGDIAPI void APIENTRY glNormal3sv(const GLshort *v); +WINGDIAPI void APIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer); +WINGDIAPI void APIENTRY glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +WINGDIAPI void APIENTRY glPassThrough(GLfloat token); +WINGDIAPI void APIENTRY glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values); +WINGDIAPI void APIENTRY glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values); +WINGDIAPI void APIENTRY glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values); +WINGDIAPI void APIENTRY glPixelStoref(GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glPixelStorei(GLenum pname, GLint param); +WINGDIAPI void APIENTRY glPixelTransferf(GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glPixelTransferi(GLenum pname, GLint param); +WINGDIAPI void APIENTRY glPixelZoom(GLfloat xfactor, GLfloat yfactor); +WINGDIAPI void APIENTRY glPointSize(GLfloat size); +WINGDIAPI void APIENTRY glPolygonMode(GLenum face, GLenum mode); +WINGDIAPI void APIENTRY glPolygonOffset(GLfloat factor, GLfloat units); +WINGDIAPI void APIENTRY glPolygonStipple(const GLubyte *mask); +WINGDIAPI void APIENTRY glPopAttrib(void); +WINGDIAPI void APIENTRY glPopClientAttrib(void); +WINGDIAPI void APIENTRY glPopMatrix(void); +WINGDIAPI void APIENTRY glPopName(void); +WINGDIAPI void APIENTRY glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities); +WINGDIAPI void APIENTRY glPushAttrib(GLbitfield mask); +WINGDIAPI void APIENTRY glPushClientAttrib(GLbitfield mask); +WINGDIAPI void APIENTRY glPushMatrix(void); +WINGDIAPI void APIENTRY glPushName(GLuint name); +WINGDIAPI void APIENTRY glRasterPos2d(GLdouble x, GLdouble y); +WINGDIAPI void APIENTRY glRasterPos2dv(const GLdouble *v); +WINGDIAPI void APIENTRY glRasterPos2f(GLfloat x, GLfloat y); +WINGDIAPI void APIENTRY glRasterPos2fv(const GLfloat *v); +WINGDIAPI void APIENTRY glRasterPos2i(GLint x, GLint y); +WINGDIAPI void APIENTRY glRasterPos2iv(const GLint *v); +WINGDIAPI void APIENTRY glRasterPos2s(GLshort x, GLshort y); +WINGDIAPI void APIENTRY glRasterPos2sv(const GLshort *v); +WINGDIAPI void APIENTRY glRasterPos3d(GLdouble x, GLdouble y, GLdouble z); +WINGDIAPI void APIENTRY glRasterPos3dv(const GLdouble *v); +WINGDIAPI void APIENTRY glRasterPos3f(GLfloat x, GLfloat y, GLfloat z); +WINGDIAPI void APIENTRY glRasterPos3fv(const GLfloat *v); +WINGDIAPI void APIENTRY glRasterPos3i(GLint x, GLint y, GLint z); +WINGDIAPI void APIENTRY glRasterPos3iv(const GLint *v); +WINGDIAPI void APIENTRY glRasterPos3s(GLshort x, GLshort y, GLshort z); +WINGDIAPI void APIENTRY glRasterPos3sv(const GLshort *v); +WINGDIAPI void APIENTRY glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +WINGDIAPI void APIENTRY glRasterPos4dv(const GLdouble *v); +WINGDIAPI void APIENTRY glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +WINGDIAPI void APIENTRY glRasterPos4fv(const GLfloat *v); +WINGDIAPI void APIENTRY glRasterPos4i(GLint x, GLint y, GLint z, GLint w); +WINGDIAPI void APIENTRY glRasterPos4iv(const GLint *v); +WINGDIAPI void APIENTRY glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w); +WINGDIAPI void APIENTRY glRasterPos4sv(const GLshort *v); +WINGDIAPI void APIENTRY glReadBuffer(GLenum mode); +WINGDIAPI void APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); +WINGDIAPI void APIENTRY glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); +WINGDIAPI void APIENTRY glRectdv(const GLdouble *v1, const GLdouble *v2); +WINGDIAPI void APIENTRY glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); +WINGDIAPI void APIENTRY glRectfv(const GLfloat *v1, const GLfloat *v2); +WINGDIAPI void APIENTRY glRecti(GLint x1, GLint y1, GLint x2, GLint y2); +WINGDIAPI void APIENTRY glRectiv(const GLint *v1, const GLint *v2); +WINGDIAPI void APIENTRY glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2); +WINGDIAPI void APIENTRY glRectsv(const GLshort *v1, const GLshort *v2); +WINGDIAPI GLint APIENTRY glRenderMode(GLenum mode); +WINGDIAPI void APIENTRY glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +WINGDIAPI void APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +WINGDIAPI void APIENTRY glScaled(GLdouble x, GLdouble y, GLdouble z); +WINGDIAPI void APIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z); +WINGDIAPI void APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height); +WINGDIAPI void APIENTRY glSelectBuffer(GLsizei size, GLuint *buffer); +WINGDIAPI void APIENTRY glShadeModel(GLenum mode); +WINGDIAPI void APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask); +WINGDIAPI void APIENTRY glStencilMask(GLuint mask); +WINGDIAPI void APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); +WINGDIAPI void APIENTRY glTexCoord1d(GLdouble s); +WINGDIAPI void APIENTRY glTexCoord1dv(const GLdouble *v); +WINGDIAPI void APIENTRY glTexCoord1f(GLfloat s); +WINGDIAPI void APIENTRY glTexCoord1fv(const GLfloat *v); +WINGDIAPI void APIENTRY glTexCoord1i(GLint s); +WINGDIAPI void APIENTRY glTexCoord1iv(const GLint *v); +WINGDIAPI void APIENTRY glTexCoord1s(GLshort s); +WINGDIAPI void APIENTRY glTexCoord1sv(const GLshort *v); +WINGDIAPI void APIENTRY glTexCoord2d(GLdouble s, GLdouble t); +WINGDIAPI void APIENTRY glTexCoord2dv(const GLdouble *v); +WINGDIAPI void APIENTRY glTexCoord2f(GLfloat s, GLfloat t); +WINGDIAPI void APIENTRY glTexCoord2fv(const GLfloat *v); +WINGDIAPI void APIENTRY glTexCoord2i(GLint s, GLint t); +WINGDIAPI void APIENTRY glTexCoord2iv(const GLint *v); +WINGDIAPI void APIENTRY glTexCoord2s(GLshort s, GLshort t); +WINGDIAPI void APIENTRY glTexCoord2sv(const GLshort *v); +WINGDIAPI void APIENTRY glTexCoord3d(GLdouble s, GLdouble t, GLdouble r); +WINGDIAPI void APIENTRY glTexCoord3dv(const GLdouble *v); +WINGDIAPI void APIENTRY glTexCoord3f(GLfloat s, GLfloat t, GLfloat r); +WINGDIAPI void APIENTRY glTexCoord3fv(const GLfloat *v); +WINGDIAPI void APIENTRY glTexCoord3i(GLint s, GLint t, GLint r); +WINGDIAPI void APIENTRY glTexCoord3iv(const GLint *v); +WINGDIAPI void APIENTRY glTexCoord3s(GLshort s, GLshort t, GLshort r); +WINGDIAPI void APIENTRY glTexCoord3sv(const GLshort *v); +WINGDIAPI void APIENTRY glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q); +WINGDIAPI void APIENTRY glTexCoord4dv(const GLdouble *v); +WINGDIAPI void APIENTRY glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q); +WINGDIAPI void APIENTRY glTexCoord4fv(const GLfloat *v); +WINGDIAPI void APIENTRY glTexCoord4i(GLint s, GLint t, GLint r, GLint q); +WINGDIAPI void APIENTRY glTexCoord4iv(const GLint *v); +WINGDIAPI void APIENTRY glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q); +WINGDIAPI void APIENTRY glTexCoord4sv(const GLshort *v); +WINGDIAPI void APIENTRY glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +WINGDIAPI void APIENTRY glTexEnvf(GLenum target, GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params); +WINGDIAPI void APIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param); +WINGDIAPI void APIENTRY glTexEnviv(GLenum target, GLenum pname, const GLint *params); +WINGDIAPI void APIENTRY glTexGend(GLenum coord, GLenum pname, GLdouble param); +WINGDIAPI void APIENTRY glTexGendv(GLenum coord, GLenum pname, const GLdouble *params); +WINGDIAPI void APIENTRY glTexGenf(GLenum coord, GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params); +WINGDIAPI void APIENTRY glTexGeni(GLenum coord, GLenum pname, GLint param); +WINGDIAPI void APIENTRY glTexGeniv(GLenum coord, GLenum pname, const GLint *params); +WINGDIAPI void APIENTRY glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +WINGDIAPI void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +WINGDIAPI void APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param); +WINGDIAPI void APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params); +WINGDIAPI void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param); +WINGDIAPI void APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint *params); +WINGDIAPI void APIENTRY glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +WINGDIAPI void APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +WINGDIAPI void APIENTRY glTranslated(GLdouble x, GLdouble y, GLdouble z); +WINGDIAPI void APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z); +WINGDIAPI void APIENTRY glVertex2d(GLdouble x, GLdouble y); +WINGDIAPI void APIENTRY glVertex2dv(const GLdouble *v); +WINGDIAPI void APIENTRY glVertex2f(GLfloat x, GLfloat y); +WINGDIAPI void APIENTRY glVertex2fv(const GLfloat *v); +WINGDIAPI void APIENTRY glVertex2i(GLint x, GLint y); +WINGDIAPI void APIENTRY glVertex2iv(const GLint *v); +WINGDIAPI void APIENTRY glVertex2s(GLshort x, GLshort y); +WINGDIAPI void APIENTRY glVertex2sv(const GLshort *v); +WINGDIAPI void APIENTRY glVertex3d(GLdouble x, GLdouble y, GLdouble z); +WINGDIAPI void APIENTRY glVertex3dv(const GLdouble *v); +WINGDIAPI void APIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z); +WINGDIAPI void APIENTRY glVertex3fv(const GLfloat *v); +WINGDIAPI void APIENTRY glVertex3i(GLint x, GLint y, GLint z); +WINGDIAPI void APIENTRY glVertex3iv(const GLint *v); +WINGDIAPI void APIENTRY glVertex3s(GLshort x, GLshort y, GLshort z); +WINGDIAPI void APIENTRY glVertex3sv(const GLshort *v); +WINGDIAPI void APIENTRY glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +WINGDIAPI void APIENTRY glVertex4dv(const GLdouble *v); +WINGDIAPI void APIENTRY glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +WINGDIAPI void APIENTRY glVertex4fv(const GLfloat *v); +WINGDIAPI void APIENTRY glVertex4i(GLint x, GLint y, GLint z, GLint w); +WINGDIAPI void APIENTRY glVertex4iv(const GLint *v); +WINGDIAPI void APIENTRY glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w); +WINGDIAPI void APIENTRY glVertex4sv(const GLshort *v); +WINGDIAPI void APIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +WINGDIAPI void APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height); + +*/ diff --git a/libjin/Graphics/Bitmap.h b/libjin/Graphics/Bitmap.h index 5510569..af7f376 100644 --- a/libjin/Graphics/Bitmap.h +++ b/libjin/Graphics/Bitmap.h @@ -16,6 +16,7 @@ namespace graphics public: static Bitmap* createBitmap(const void* imgData, size_t size); static Bitmap* createBitmap(int w, int h, Color color = Color::BLACK); + static void destroyBitmap(Bitmap* bitmap); static Bitmap* clone(const Bitmap* bitmap); ~Bitmap(); diff --git a/libjin/Graphics/Canvas.cpp b/libjin/Graphics/Canvas.cpp index 827a5d2..d34731a 100644 --- a/libjin/Graphics/Canvas.cpp +++ b/libjin/Graphics/Canvas.cpp @@ -65,14 +65,11 @@ namespace graphics if (isBinded(canvas)) return; current = canvas; gl.bindFrameBuffer(canvas->fbo); - int w = canvas->size.w; int h = canvas->size.h; /* set view port to canvas */ glViewport(0, 0, w, h); - - projectionMatrix.setOrtho(0, w, 0, h, -1, 1); - + gl.ProjectionMatrix.setOrtho(0, w, 0, h, -1, 1); } /** @@ -87,15 +84,15 @@ namespace graphics current = DEFAULT_CANVAS; /* get window size as viewport */ Window* wnd = Window::get(); - int ww = wnd->getW(); - int wh = wnd->getH(); + int w = wnd->getW(); + int h = wnd->getH(); glBindFramebuffer(GL_FRAMEBUFFER, DEFAULT_CANVAS->fbo); /* set viewport on screen */ - glViewport(0, 0, ww, wh); + glViewport(0, 0, w, h); - projectionMatrix.setOrtho(0, ww, wh, 0, -1, 1); + gl.ProjectionMatrix.setOrtho(0, w, h, 0, -1, 1); } diff --git a/libjin/Graphics/Drawable.cpp b/libjin/Graphics/Drawable.cpp index 22ca935..f8ff131 100644 --- a/libjin/Graphics/Drawable.cpp +++ b/libjin/Graphics/Drawable.cpp @@ -41,10 +41,11 @@ namespace graphics void Drawable::draw(int x, int y, float sx, float sy, float r) { JSLProgram* jsl = JSLProgram::getCurrentJSL(); - modelMatrix.setTransformation(x, y, r, sx, sy, anchor.x, anchor.y); - jsl->sendMatrix4("_modelMatrix_", &modelMatrix); - jsl->bindVertexAttribPointer("_vert_coord_", 2, GL_FLOAT, GL_FALSE, 0, vertex_coords); - jsl->bindVertexAttribPointer("_tex_coord_", 2, GL_FLOAT, GL_FALSE, 0, texture_coords); + gl.ModelMatrix.setTransformation(x, y, r, sx, sy, anchor.x, anchor.y); + jsl->sendMatrix4("_modelMatrix_", &gl.ModelMatrix); + jsl->sendMatrix4("_projectionMatrix_", &gl.ProjectionMatrix); + jsl->bindVertexPointer(2, GL_FLOAT, 0, vertex_coords); + jsl->bindUVPointer(2, GL_FLOAT, 0, texture_coords); gl.bindTexture(texture); gl.drawArrays(GL_QUADS, 0, 4); gl.bindTexture(0); diff --git a/libjin/Graphics/Font.cpp b/libjin/Graphics/Font.cpp index d702dcf..9e65dcc 100644 --- a/libjin/Graphics/Font.cpp +++ b/libjin/Graphics/Font.cpp @@ -60,6 +60,12 @@ namespace graphics return font; } + void Font::destroyFont(Font* font) + { + if (font != nullptr) + delete font; + } + Font::Font(FontData* f, unsigned int fontSize) : cursor(0, 0) , font(f) @@ -101,7 +107,7 @@ namespace graphics GLuint t; gl.flushError(); t = gl.genTexture(); - gl.bindTexture(t); + gl.bindTexture(t); gl.setTexParameter(GL_TEXTURE_MAG_FILTER, GL_LINEAR); gl.setTexParameter(GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.setTexParameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); @@ -120,18 +126,19 @@ namespace graphics void Font::print(const char* t, int x, int y, int lineheight, int spacing) { - Page* page = typeset(t, x, y, lineheight, spacing); - render(page); + Page* page = typeset(t, lineheight, spacing); + print(page, x, y); delete page; } - Page* Font::typeset(const char* t, int x, int y, int lineheight, int spacing) + Page* Font::typeset(const char* text, int lineheight, int spacing) { // typesetting, for reducing draw call + const char* t = text; Page* page = new Page(); vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist; vector<GlyphVertex>& glyphvertices = page->glyphvertices; - Vector2<int> p(x, y); + Vector2<int> p(0, 0); Codepoint c; int texture = -1; Glyph* glyph = nullptr; @@ -148,7 +155,7 @@ namespace graphics if (c == 0x0A) { p.y += lineheight; - p.x = x; + p.x = 0; i -= 4; continue; } @@ -183,50 +190,27 @@ namespace graphics p.x += glyph->width + spacing; } + //getTextBox(text, &page->width, &page->height, lineheight, spacing); return page; } - void Font::render(const Page* page) + void Font::print(const Page* page, int x, int y) { JSLProgram* jsl = JSLProgram::getCurrentJSL(); - const vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist; const vector<GlyphVertex>& glyphvertices = page->glyphvertices; - gl.enableClientState(GL_VERTEX_ARRAY); - gl.enableClientState(GL_TEXTURE_COORD_ARRAY); + gl.ModelMatrix.setTransformation(x, y, 0, 1, 1, 0, 0); + jsl->sendMatrix4("_modelMatrix_", &gl.ModelMatrix); + jsl->sendMatrix4("_projectionMatrix_", &gl.ProjectionMatrix); for (int i = 0; i < glyphinfolist.size(); ++i) { const GlyphArrayDrawInfo& info = glyphinfolist[i]; - gl.bindTexture(info.texture); - gl.vertexPointer(2, GL_INT, sizeof(GlyphVertex), &glyphvertices[info.start].x); - gl.texCoordPointer(2, GL_FLOAT, sizeof(GlyphVertex), &glyphvertices[info.start].u); -//#define font_debug -#if !defined(font_debug) + jsl->bindVertexPointer(2, GL_INT, sizeof(GlyphVertex), &glyphvertices[info.start].x); + jsl->bindUVPointer(2, GL_FLOAT, sizeof(GlyphVertex), &glyphvertices[info.start].u); + gl.bindTexture(info.texture); gl.drawArrays(GL_QUADS, 0, info.count); -#endif gl.bindTexture(0); } -#if defined(font_debug) - gl.bindTexture(1); - float xy[] = { - 0,0, - 0,textureHeight, - textureWidth, textureHeight, - textureWidth, 0 - }; - float uv[] = { - 0, 0, - 0, 1, - 1, 1, - 1, 0 - }; - gl.vertexPointer(2, GL_FLOAT, 0, xy); - gl.texCoordPointer(2, GL_FLOAT, 0, uv); - gl.drawArrays(GL_QUADS, 0, 4); - gl.bindTexture(0); -#endif - gl.disableClientState(GL_VERTEX_ARRAY); - gl.disableClientState(GL_TEXTURE_COORD_ARRAY); } int Font::getCharWidth(int c) diff --git a/libjin/Graphics/Font.h b/libjin/Graphics/Font.h index 2a1032c..4525e8f 100644 --- a/libjin/Graphics/Font.h +++ b/libjin/Graphics/Font.h @@ -44,6 +44,7 @@ namespace graphics { std::vector<GlyphArrayDrawInfo> glyphinfolist; std::vector<GlyphVertex> glyphvertices; + int width, height; }; class Font @@ -52,10 +53,11 @@ namespace graphics typedef unsigned int Codepoint; static Font* createFont(FontData* fontData, unsigned int fontSzie); + static void destroyFont(Font* font); - Page* typeset(const char* text, int x, int y, int lineheight, int spacing); - void render(const Page* page); + Page* typeset(const char* text, int lineheight, int spacing); void print(const char* text, int x, int y, int lineheight, int spacing = 0); + void print(const Page* page, int x, int y); //Bitmap* bake(const char* text); #if defined(font_debug) void drawAtlas(); diff --git a/libjin/Graphics/OpenGL.cpp b/libjin/Graphics/OpenGL.cpp index 30a8a1f..f7bed9f 100644 --- a/libjin/Graphics/OpenGL.cpp +++ b/libjin/Graphics/OpenGL.cpp @@ -6,8 +6,7 @@ namespace jin namespace graphics { - math::Matrix projectionMatrix; - math::Matrix modelMatrix; + OpenGL gl; } } diff --git a/libjin/Graphics/OpenGL.h b/libjin/Graphics/OpenGL.h index 45e7499..51395ba 100644 --- a/libjin/Graphics/OpenGL.h +++ b/libjin/Graphics/OpenGL.h @@ -1,357 +1,29 @@ +#ifndef __LIBJIN_OPENGL_H +#define __LIBJIN_OPENGL_H #include "../3rdparty/GLee/GLee.h" #include "../3rdparty/ogl/OpenGL.h" #include "../Math/Matrix.h" -using namespace ogl2d; namespace jin { namespace graphics { - extern math::Matrix projectionMatrix; - extern math::Matrix modelMatrix; + class OpenGL : public ogl2d::OpenGL + { + public: + math::Matrix ProjectionMatrix; + math::Matrix ModelMatrix; -} -} + OpenGL() : ogl2d::OpenGL() + { + } + }; -/* GL.h + extern OpenGL gl; -WINGDIAPI void APIENTRY glAccum(GLenum op, GLfloat value); -WINGDIAPI void APIENTRY glAlphaFunc(GLenum func, GLclampf ref); -WINGDIAPI GLboolean APIENTRY glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences); -WINGDIAPI void APIENTRY glArrayElement(GLint i); -WINGDIAPI void APIENTRY glBegin(GLenum mode); -WINGDIAPI void APIENTRY glBindTexture(GLenum target, GLuint texture); -WINGDIAPI void APIENTRY glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); -WINGDIAPI void APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor); -WINGDIAPI void APIENTRY glCallList(GLuint list); -WINGDIAPI void APIENTRY glCallLists(GLsizei n, GLenum type, const GLvoid *lists); -WINGDIAPI void APIENTRY glClear(GLbitfield mask); -WINGDIAPI void APIENTRY glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -WINGDIAPI void APIENTRY glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -WINGDIAPI void APIENTRY glClearDepth(GLclampd depth); -WINGDIAPI void APIENTRY glClearIndex(GLfloat c); -WINGDIAPI void APIENTRY glClearStencil(GLint s); -WINGDIAPI void APIENTRY glClipPlane(GLenum plane, const GLdouble *equation); -WINGDIAPI void APIENTRY glColor3b(GLbyte red, GLbyte green, GLbyte blue); -WINGDIAPI void APIENTRY glColor3bv(const GLbyte *v); -WINGDIAPI void APIENTRY glColor3d(GLdouble red, GLdouble green, GLdouble blue); -WINGDIAPI void APIENTRY glColor3dv(const GLdouble *v); -WINGDIAPI void APIENTRY glColor3f(GLfloat red, GLfloat green, GLfloat blue); -WINGDIAPI void APIENTRY glColor3fv(const GLfloat *v); -WINGDIAPI void APIENTRY glColor3i(GLint red, GLint green, GLint blue); -WINGDIAPI void APIENTRY glColor3iv(const GLint *v); -WINGDIAPI void APIENTRY glColor3s(GLshort red, GLshort green, GLshort blue); -WINGDIAPI void APIENTRY glColor3sv(const GLshort *v); -WINGDIAPI void APIENTRY glColor3ub(GLubyte red, GLubyte green, GLubyte blue); -WINGDIAPI void APIENTRY glColor3ubv(const GLubyte *v); -WINGDIAPI void APIENTRY glColor3ui(GLuint red, GLuint green, GLuint blue); -WINGDIAPI void APIENTRY glColor3uiv(const GLuint *v); -WINGDIAPI void APIENTRY glColor3us(GLushort red, GLushort green, GLushort blue); -WINGDIAPI void APIENTRY glColor3usv(const GLushort *v); -WINGDIAPI void APIENTRY glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -WINGDIAPI void APIENTRY glColor4bv(const GLbyte *v); -WINGDIAPI void APIENTRY glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -WINGDIAPI void APIENTRY glColor4dv(const GLdouble *v); -WINGDIAPI void APIENTRY glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -WINGDIAPI void APIENTRY glColor4fv(const GLfloat *v); -WINGDIAPI void APIENTRY glColor4i(GLint red, GLint green, GLint blue, GLint alpha); -WINGDIAPI void APIENTRY glColor4iv(const GLint *v); -WINGDIAPI void APIENTRY glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha); -WINGDIAPI void APIENTRY glColor4sv(const GLshort *v); -WINGDIAPI void APIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -WINGDIAPI void APIENTRY glColor4ubv(const GLubyte *v); -WINGDIAPI void APIENTRY glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha); -WINGDIAPI void APIENTRY glColor4uiv(const GLuint *v); -WINGDIAPI void APIENTRY glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha); -WINGDIAPI void APIENTRY glColor4usv(const GLushort *v); -WINGDIAPI void APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -WINGDIAPI void APIENTRY glColorMaterial(GLenum face, GLenum mode); -WINGDIAPI void APIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -WINGDIAPI void APIENTRY glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); -WINGDIAPI void APIENTRY glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -WINGDIAPI void APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -WINGDIAPI void APIENTRY glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -WINGDIAPI void APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -WINGDIAPI void APIENTRY glCullFace(GLenum mode); -WINGDIAPI void APIENTRY glDeleteLists(GLuint list, GLsizei range); -WINGDIAPI void APIENTRY glDeleteTextures(GLsizei n, const GLuint *textures); -WINGDIAPI void APIENTRY glDepthFunc(GLenum func); -WINGDIAPI void APIENTRY glDepthMask(GLboolean flag); -WINGDIAPI void APIENTRY glDepthRange(GLclampd zNear, GLclampd zFar); -WINGDIAPI void APIENTRY glDisable(GLenum cap); -WINGDIAPI void APIENTRY glDisableClientState(GLenum array); -WINGDIAPI void APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count); -WINGDIAPI void APIENTRY glDrawBuffer(GLenum mode); -WINGDIAPI void APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -WINGDIAPI void APIENTRY glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -WINGDIAPI void APIENTRY glEdgeFlag(GLboolean flag); -WINGDIAPI void APIENTRY glEdgeFlagPointer(GLsizei stride, const GLvoid *pointer); -WINGDIAPI void APIENTRY glEdgeFlagv(const GLboolean *flag); -WINGDIAPI void APIENTRY glEnable(GLenum cap); -WINGDIAPI void APIENTRY glEnableClientState(GLenum array); -WINGDIAPI void APIENTRY glEnd(void); -WINGDIAPI void APIENTRY glEndList(void); -WINGDIAPI void APIENTRY glEvalCoord1d(GLdouble u); -WINGDIAPI void APIENTRY glEvalCoord1dv(const GLdouble *u); -WINGDIAPI void APIENTRY glEvalCoord1f(GLfloat u); -WINGDIAPI void APIENTRY glEvalCoord1fv(const GLfloat *u); -WINGDIAPI void APIENTRY glEvalCoord2d(GLdouble u, GLdouble v); -WINGDIAPI void APIENTRY glEvalCoord2dv(const GLdouble *u); -WINGDIAPI void APIENTRY glEvalCoord2f(GLfloat u, GLfloat v); -WINGDIAPI void APIENTRY glEvalCoord2fv(const GLfloat *u); -WINGDIAPI void APIENTRY glEvalMesh1(GLenum mode, GLint i1, GLint i2); -WINGDIAPI void APIENTRY glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -WINGDIAPI void APIENTRY glEvalPoint1(GLint i); -WINGDIAPI void APIENTRY glEvalPoint2(GLint i, GLint j); -WINGDIAPI void APIENTRY glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer); -WINGDIAPI void APIENTRY glFinish(void); -WINGDIAPI void APIENTRY glFlush(void); -WINGDIAPI void APIENTRY glFogf(GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glFogfv(GLenum pname, const GLfloat *params); -WINGDIAPI void APIENTRY glFogi(GLenum pname, GLint param); -WINGDIAPI void APIENTRY glFogiv(GLenum pname, const GLint *params); -WINGDIAPI void APIENTRY glFrontFace(GLenum mode); -WINGDIAPI void APIENTRY glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -WINGDIAPI GLuint APIENTRY glGenLists(GLsizei range); -WINGDIAPI void APIENTRY glGenTextures(GLsizei n, GLuint *textures); -WINGDIAPI void APIENTRY glGetBooleanv(GLenum pname, GLboolean *params); -WINGDIAPI void APIENTRY glGetClipPlane(GLenum plane, GLdouble *equation); -WINGDIAPI void APIENTRY glGetDoublev(GLenum pname, GLdouble *params); -WINGDIAPI GLenum APIENTRY glGetError(void); -WINGDIAPI void APIENTRY glGetFloatv(GLenum pname, GLfloat *params); -WINGDIAPI void APIENTRY glGetIntegerv(GLenum pname, GLint *params); -WINGDIAPI void APIENTRY glGetLightfv(GLenum light, GLenum pname, GLfloat *params); -WINGDIAPI void APIENTRY glGetLightiv(GLenum light, GLenum pname, GLint *params); -WINGDIAPI void APIENTRY glGetMapdv(GLenum target, GLenum query, GLdouble *v); -WINGDIAPI void APIENTRY glGetMapfv(GLenum target, GLenum query, GLfloat *v); -WINGDIAPI void APIENTRY glGetMapiv(GLenum target, GLenum query, GLint *v); -WINGDIAPI void APIENTRY glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params); -WINGDIAPI void APIENTRY glGetMaterialiv(GLenum face, GLenum pname, GLint *params); -WINGDIAPI void APIENTRY glGetPixelMapfv(GLenum map, GLfloat *values); -WINGDIAPI void APIENTRY glGetPixelMapuiv(GLenum map, GLuint *values); -WINGDIAPI void APIENTRY glGetPixelMapusv(GLenum map, GLushort *values); -WINGDIAPI void APIENTRY glGetPointerv(GLenum pname, GLvoid* *params); -WINGDIAPI void APIENTRY glGetPolygonStipple(GLubyte *mask); -WINGDIAPI const GLubyte * APIENTRY glGetString(GLenum name); -WINGDIAPI void APIENTRY glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params); -WINGDIAPI void APIENTRY glGetTexEnviv(GLenum target, GLenum pname, GLint *params); -WINGDIAPI void APIENTRY glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params); -WINGDIAPI void APIENTRY glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params); -WINGDIAPI void APIENTRY glGetTexGeniv(GLenum coord, GLenum pname, GLint *params); -WINGDIAPI void APIENTRY glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -WINGDIAPI void APIENTRY glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params); -WINGDIAPI void APIENTRY glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params); -WINGDIAPI void APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params); -WINGDIAPI void APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint *params); -WINGDIAPI void APIENTRY glHint(GLenum target, GLenum mode); -WINGDIAPI void APIENTRY glIndexMask(GLuint mask); -WINGDIAPI void APIENTRY glIndexPointer(GLenum type, GLsizei stride, const GLvoid *pointer); -WINGDIAPI void APIENTRY glIndexd(GLdouble c); -WINGDIAPI void APIENTRY glIndexdv(const GLdouble *c); -WINGDIAPI void APIENTRY glIndexf(GLfloat c); -WINGDIAPI void APIENTRY glIndexfv(const GLfloat *c); -WINGDIAPI void APIENTRY glIndexi(GLint c); -WINGDIAPI void APIENTRY glIndexiv(const GLint *c); -WINGDIAPI void APIENTRY glIndexs(GLshort c); -WINGDIAPI void APIENTRY glIndexsv(const GLshort *c); -WINGDIAPI void APIENTRY glIndexub(GLubyte c); -WINGDIAPI void APIENTRY glIndexubv(const GLubyte *c); -WINGDIAPI void APIENTRY glInitNames(void); -WINGDIAPI void APIENTRY glInterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer); -WINGDIAPI GLboolean APIENTRY glIsEnabled(GLenum cap); -WINGDIAPI GLboolean APIENTRY glIsList(GLuint list); -WINGDIAPI GLboolean APIENTRY glIsTexture(GLuint texture); -WINGDIAPI void APIENTRY glLightModelf(GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glLightModelfv(GLenum pname, const GLfloat *params); -WINGDIAPI void APIENTRY glLightModeli(GLenum pname, GLint param); -WINGDIAPI void APIENTRY glLightModeliv(GLenum pname, const GLint *params); -WINGDIAPI void APIENTRY glLightf(GLenum light, GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat *params); -WINGDIAPI void APIENTRY glLighti(GLenum light, GLenum pname, GLint param); -WINGDIAPI void APIENTRY glLightiv(GLenum light, GLenum pname, const GLint *params); -WINGDIAPI void APIENTRY glLineStipple(GLint factor, GLushort pattern); -WINGDIAPI void APIENTRY glLineWidth(GLfloat width); -WINGDIAPI void APIENTRY glListBase(GLuint base); -WINGDIAPI void APIENTRY glLoadIdentity(void); -WINGDIAPI void APIENTRY glLoadMatrixd(const GLdouble *m); -WINGDIAPI void APIENTRY glLoadMatrixf(const GLfloat *m); -WINGDIAPI void APIENTRY glLoadName(GLuint name); -WINGDIAPI void APIENTRY glLogicOp(GLenum opcode); -WINGDIAPI void APIENTRY glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -WINGDIAPI void APIENTRY glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -WINGDIAPI void APIENTRY glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -WINGDIAPI void APIENTRY glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -WINGDIAPI void APIENTRY glMapGrid1d(GLint un, GLdouble u1, GLdouble u2); -WINGDIAPI void APIENTRY glMapGrid1f(GLint un, GLfloat u1, GLfloat u2); -WINGDIAPI void APIENTRY glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -WINGDIAPI void APIENTRY glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -WINGDIAPI void APIENTRY glMaterialf(GLenum face, GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glMaterialfv(GLenum face, GLenum pname, const GLfloat *params); -WINGDIAPI void APIENTRY glMateriali(GLenum face, GLenum pname, GLint param); -WINGDIAPI void APIENTRY glMaterialiv(GLenum face, GLenum pname, const GLint *params); -WINGDIAPI void APIENTRY glMatrixMode(GLenum mode); -WINGDIAPI void APIENTRY glMultMatrixd(const GLdouble *m); -WINGDIAPI void APIENTRY glMultMatrixf(const GLfloat *m); -WINGDIAPI void APIENTRY glNewList(GLuint list, GLenum mode); -WINGDIAPI void APIENTRY glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz); -WINGDIAPI void APIENTRY glNormal3bv(const GLbyte *v); -WINGDIAPI void APIENTRY glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz); -WINGDIAPI void APIENTRY glNormal3dv(const GLdouble *v); -WINGDIAPI void APIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz); -WINGDIAPI void APIENTRY glNormal3fv(const GLfloat *v); -WINGDIAPI void APIENTRY glNormal3i(GLint nx, GLint ny, GLint nz); -WINGDIAPI void APIENTRY glNormal3iv(const GLint *v); -WINGDIAPI void APIENTRY glNormal3s(GLshort nx, GLshort ny, GLshort nz); -WINGDIAPI void APIENTRY glNormal3sv(const GLshort *v); -WINGDIAPI void APIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer); -WINGDIAPI void APIENTRY glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -WINGDIAPI void APIENTRY glPassThrough(GLfloat token); -WINGDIAPI void APIENTRY glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values); -WINGDIAPI void APIENTRY glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values); -WINGDIAPI void APIENTRY glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values); -WINGDIAPI void APIENTRY glPixelStoref(GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glPixelStorei(GLenum pname, GLint param); -WINGDIAPI void APIENTRY glPixelTransferf(GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glPixelTransferi(GLenum pname, GLint param); -WINGDIAPI void APIENTRY glPixelZoom(GLfloat xfactor, GLfloat yfactor); -WINGDIAPI void APIENTRY glPointSize(GLfloat size); -WINGDIAPI void APIENTRY glPolygonMode(GLenum face, GLenum mode); -WINGDIAPI void APIENTRY glPolygonOffset(GLfloat factor, GLfloat units); -WINGDIAPI void APIENTRY glPolygonStipple(const GLubyte *mask); -WINGDIAPI void APIENTRY glPopAttrib(void); -WINGDIAPI void APIENTRY glPopClientAttrib(void); -WINGDIAPI void APIENTRY glPopMatrix(void); -WINGDIAPI void APIENTRY glPopName(void); -WINGDIAPI void APIENTRY glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities); -WINGDIAPI void APIENTRY glPushAttrib(GLbitfield mask); -WINGDIAPI void APIENTRY glPushClientAttrib(GLbitfield mask); -WINGDIAPI void APIENTRY glPushMatrix(void); -WINGDIAPI void APIENTRY glPushName(GLuint name); -WINGDIAPI void APIENTRY glRasterPos2d(GLdouble x, GLdouble y); -WINGDIAPI void APIENTRY glRasterPos2dv(const GLdouble *v); -WINGDIAPI void APIENTRY glRasterPos2f(GLfloat x, GLfloat y); -WINGDIAPI void APIENTRY glRasterPos2fv(const GLfloat *v); -WINGDIAPI void APIENTRY glRasterPos2i(GLint x, GLint y); -WINGDIAPI void APIENTRY glRasterPos2iv(const GLint *v); -WINGDIAPI void APIENTRY glRasterPos2s(GLshort x, GLshort y); -WINGDIAPI void APIENTRY glRasterPos2sv(const GLshort *v); -WINGDIAPI void APIENTRY glRasterPos3d(GLdouble x, GLdouble y, GLdouble z); -WINGDIAPI void APIENTRY glRasterPos3dv(const GLdouble *v); -WINGDIAPI void APIENTRY glRasterPos3f(GLfloat x, GLfloat y, GLfloat z); -WINGDIAPI void APIENTRY glRasterPos3fv(const GLfloat *v); -WINGDIAPI void APIENTRY glRasterPos3i(GLint x, GLint y, GLint z); -WINGDIAPI void APIENTRY glRasterPos3iv(const GLint *v); -WINGDIAPI void APIENTRY glRasterPos3s(GLshort x, GLshort y, GLshort z); -WINGDIAPI void APIENTRY glRasterPos3sv(const GLshort *v); -WINGDIAPI void APIENTRY glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); -WINGDIAPI void APIENTRY glRasterPos4dv(const GLdouble *v); -WINGDIAPI void APIENTRY glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -WINGDIAPI void APIENTRY glRasterPos4fv(const GLfloat *v); -WINGDIAPI void APIENTRY glRasterPos4i(GLint x, GLint y, GLint z, GLint w); -WINGDIAPI void APIENTRY glRasterPos4iv(const GLint *v); -WINGDIAPI void APIENTRY glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w); -WINGDIAPI void APIENTRY glRasterPos4sv(const GLshort *v); -WINGDIAPI void APIENTRY glReadBuffer(GLenum mode); -WINGDIAPI void APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -WINGDIAPI void APIENTRY glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -WINGDIAPI void APIENTRY glRectdv(const GLdouble *v1, const GLdouble *v2); -WINGDIAPI void APIENTRY glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -WINGDIAPI void APIENTRY glRectfv(const GLfloat *v1, const GLfloat *v2); -WINGDIAPI void APIENTRY glRecti(GLint x1, GLint y1, GLint x2, GLint y2); -WINGDIAPI void APIENTRY glRectiv(const GLint *v1, const GLint *v2); -WINGDIAPI void APIENTRY glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2); -WINGDIAPI void APIENTRY glRectsv(const GLshort *v1, const GLshort *v2); -WINGDIAPI GLint APIENTRY glRenderMode(GLenum mode); -WINGDIAPI void APIENTRY glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -WINGDIAPI void APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -WINGDIAPI void APIENTRY glScaled(GLdouble x, GLdouble y, GLdouble z); -WINGDIAPI void APIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z); -WINGDIAPI void APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height); -WINGDIAPI void APIENTRY glSelectBuffer(GLsizei size, GLuint *buffer); -WINGDIAPI void APIENTRY glShadeModel(GLenum mode); -WINGDIAPI void APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask); -WINGDIAPI void APIENTRY glStencilMask(GLuint mask); -WINGDIAPI void APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); -WINGDIAPI void APIENTRY glTexCoord1d(GLdouble s); -WINGDIAPI void APIENTRY glTexCoord1dv(const GLdouble *v); -WINGDIAPI void APIENTRY glTexCoord1f(GLfloat s); -WINGDIAPI void APIENTRY glTexCoord1fv(const GLfloat *v); -WINGDIAPI void APIENTRY glTexCoord1i(GLint s); -WINGDIAPI void APIENTRY glTexCoord1iv(const GLint *v); -WINGDIAPI void APIENTRY glTexCoord1s(GLshort s); -WINGDIAPI void APIENTRY glTexCoord1sv(const GLshort *v); -WINGDIAPI void APIENTRY glTexCoord2d(GLdouble s, GLdouble t); -WINGDIAPI void APIENTRY glTexCoord2dv(const GLdouble *v); -WINGDIAPI void APIENTRY glTexCoord2f(GLfloat s, GLfloat t); -WINGDIAPI void APIENTRY glTexCoord2fv(const GLfloat *v); -WINGDIAPI void APIENTRY glTexCoord2i(GLint s, GLint t); -WINGDIAPI void APIENTRY glTexCoord2iv(const GLint *v); -WINGDIAPI void APIENTRY glTexCoord2s(GLshort s, GLshort t); -WINGDIAPI void APIENTRY glTexCoord2sv(const GLshort *v); -WINGDIAPI void APIENTRY glTexCoord3d(GLdouble s, GLdouble t, GLdouble r); -WINGDIAPI void APIENTRY glTexCoord3dv(const GLdouble *v); -WINGDIAPI void APIENTRY glTexCoord3f(GLfloat s, GLfloat t, GLfloat r); -WINGDIAPI void APIENTRY glTexCoord3fv(const GLfloat *v); -WINGDIAPI void APIENTRY glTexCoord3i(GLint s, GLint t, GLint r); -WINGDIAPI void APIENTRY glTexCoord3iv(const GLint *v); -WINGDIAPI void APIENTRY glTexCoord3s(GLshort s, GLshort t, GLshort r); -WINGDIAPI void APIENTRY glTexCoord3sv(const GLshort *v); -WINGDIAPI void APIENTRY glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q); -WINGDIAPI void APIENTRY glTexCoord4dv(const GLdouble *v); -WINGDIAPI void APIENTRY glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q); -WINGDIAPI void APIENTRY glTexCoord4fv(const GLfloat *v); -WINGDIAPI void APIENTRY glTexCoord4i(GLint s, GLint t, GLint r, GLint q); -WINGDIAPI void APIENTRY glTexCoord4iv(const GLint *v); -WINGDIAPI void APIENTRY glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q); -WINGDIAPI void APIENTRY glTexCoord4sv(const GLshort *v); -WINGDIAPI void APIENTRY glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -WINGDIAPI void APIENTRY glTexEnvf(GLenum target, GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params); -WINGDIAPI void APIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param); -WINGDIAPI void APIENTRY glTexEnviv(GLenum target, GLenum pname, const GLint *params); -WINGDIAPI void APIENTRY glTexGend(GLenum coord, GLenum pname, GLdouble param); -WINGDIAPI void APIENTRY glTexGendv(GLenum coord, GLenum pname, const GLdouble *params); -WINGDIAPI void APIENTRY glTexGenf(GLenum coord, GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params); -WINGDIAPI void APIENTRY glTexGeni(GLenum coord, GLenum pname, GLint param); -WINGDIAPI void APIENTRY glTexGeniv(GLenum coord, GLenum pname, const GLint *params); -WINGDIAPI void APIENTRY glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -WINGDIAPI void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -WINGDIAPI void APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param); -WINGDIAPI void APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params); -WINGDIAPI void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param); -WINGDIAPI void APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint *params); -WINGDIAPI void APIENTRY glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -WINGDIAPI void APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -WINGDIAPI void APIENTRY glTranslated(GLdouble x, GLdouble y, GLdouble z); -WINGDIAPI void APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z); -WINGDIAPI void APIENTRY glVertex2d(GLdouble x, GLdouble y); -WINGDIAPI void APIENTRY glVertex2dv(const GLdouble *v); -WINGDIAPI void APIENTRY glVertex2f(GLfloat x, GLfloat y); -WINGDIAPI void APIENTRY glVertex2fv(const GLfloat *v); -WINGDIAPI void APIENTRY glVertex2i(GLint x, GLint y); -WINGDIAPI void APIENTRY glVertex2iv(const GLint *v); -WINGDIAPI void APIENTRY glVertex2s(GLshort x, GLshort y); -WINGDIAPI void APIENTRY glVertex2sv(const GLshort *v); -WINGDIAPI void APIENTRY glVertex3d(GLdouble x, GLdouble y, GLdouble z); -WINGDIAPI void APIENTRY glVertex3dv(const GLdouble *v); -WINGDIAPI void APIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z); -WINGDIAPI void APIENTRY glVertex3fv(const GLfloat *v); -WINGDIAPI void APIENTRY glVertex3i(GLint x, GLint y, GLint z); -WINGDIAPI void APIENTRY glVertex3iv(const GLint *v); -WINGDIAPI void APIENTRY glVertex3s(GLshort x, GLshort y, GLshort z); -WINGDIAPI void APIENTRY glVertex3sv(const GLshort *v); -WINGDIAPI void APIENTRY glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w); -WINGDIAPI void APIENTRY glVertex4dv(const GLdouble *v); -WINGDIAPI void APIENTRY glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -WINGDIAPI void APIENTRY glVertex4fv(const GLfloat *v); -WINGDIAPI void APIENTRY glVertex4i(GLint x, GLint y, GLint z, GLint w); -WINGDIAPI void APIENTRY glVertex4iv(const GLint *v); -WINGDIAPI void APIENTRY glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w); -WINGDIAPI void APIENTRY glVertex4sv(const GLshort *v); -WINGDIAPI void APIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -WINGDIAPI void APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height); +} +} -*/
\ No newline at end of file +#endif
\ No newline at end of file diff --git a/libjin/Graphics/Shader.cpp b/libjin/Graphics/Shader.cpp index 13207b6..e2aaf63 100644 --- a/libjin/Graphics/Shader.cpp +++ b/libjin/Graphics/Shader.cpp @@ -140,7 +140,7 @@ namespace graphics glUseProgram(pid); currentJSLProgram = this; sendInt("_tex0_", DEFAULT_TEXTURE_UNIT); - sendMatrix4("_projectionMatrix_", &projectionMatrix); + //sendMatrix4("_projectionMatrix_", &projectionMatrix); } /*static*/ void JSLProgram::unuse() @@ -269,13 +269,20 @@ namespace graphics glUniformMatrix4fv(loc, 1, GL_FALSE, mat4->getElements()); } - void JSLProgram::bindVertexAttribPointer(const char* name, int n, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) - { - GLint loc = glGetAttribLocation(pid, name); - glEnableVertexAttribArray(1); - glVertexAttribPointer(loc, n, type, normalized, stride, pointer); - } - + void JSLProgram::bindVertexPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers) + { + GLint loc = glGetAttribLocation(pid, "_vert_coord_"); + glEnableVertexAttribArray(0); + glVertexAttribPointer(loc, n, type, GL_FALSE, stride, pointers); + } + + void JSLProgram::bindUVPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers) + { + GLint loc = glGetAttribLocation(pid, "_tex_coord_"); + glEnableVertexAttribArray(1); + glVertexAttribPointer(loc, n, type, GL_FALSE, stride, pointers); + } + } // graphics } // jin diff --git a/libjin/Graphics/Shader.h b/libjin/Graphics/Shader.h index 963607d..6a92b88 100644 --- a/libjin/Graphics/Shader.h +++ b/libjin/Graphics/Shader.h @@ -36,7 +36,8 @@ namespace graphics void sendColor(const char* name, const Color* col); void sendMatrix4(const char* name, const math::Matrix* mat4); - void bindVertexAttribPointer(const char* name, int n, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); + void bindVertexPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers); + void bindUVPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers); protected: static JSLProgram* currentJSLProgram; diff --git a/libjin/Graphics/Shaders/base.shader.h b/libjin/Graphics/Shaders/base.shader.h index 0fc7dd6..477d1b1 100644 --- a/libjin/Graphics/Shaders/base.shader.h +++ b/libjin/Graphics/Shaders/base.shader.h @@ -26,13 +26,17 @@ vec4 frag(vec4 color, Texture tex, vertex v) */ static const char* base_shared = R"( -#define number float +#define Number float #define Texture sampler2D #define Canvas sampler2D #define Color vec4 -#define Texel texture2D +#define Vec2 vec2 +#define Vec3 vec3 +#define Vec4 vec4 -struct vertex +#define texel texture2D + +struct Vertex { vec2 xy; vec2 uv; @@ -40,7 +44,7 @@ struct vertex )"; -static const int BASE_MACRO_SIZE = strlen(base_shared); +static const int BASE_SHARED_SIZE = strlen(base_shared); static const char* base_vertex = R"( #version 130 core @@ -53,6 +57,7 @@ uniform mat4 _modelMatrix_; in vec2 _vert_coord_; in vec2 _tex_coord_; +out vec4 _color; out vec2 _xy; out vec2 _uv; @@ -60,19 +65,16 @@ out vec2 _uv; void main() { - _xy = (_projectionMatrix_ * _modelMatrix_ * vec4(_vert_coord_, 0, 0)).xy; - _uv = _tex_coord_; - vertex _v; - _v.xy = _xy; - _v.uv = _uv; - _v = vert(_v); + vec4 v = _modelMatrix_ * vec4(_vert_coord_, 0, 1.0); + Vertex _v = vert(Vertex(v.xy, _tex_coord_)); + gl_Position = _projectionMatrix_ * v; + _color = gl_Color; _xy = _v.xy; - _uv = _v.uv; - gl_Position = vec4(_xy, 0, 0); + _uv = _v.uv; } )"; -static const int BASE_VERTEX_SHADER_SIZE = strlen(base_vertex) + BASE_MACRO_SIZE; +static const int BASE_VERTEX_SHADER_SIZE = strlen(base_vertex) + BASE_SHARED_SIZE; #define formatVertexShader(buf, program) sprintf(buf,base_vertex, base_shared, program) @@ -83,6 +85,7 @@ static const char* base_fragment = R"( uniform Texture _tex0_; +in vec4 _color; in vec2 _xy; in vec2 _uv; @@ -92,14 +95,10 @@ out vec4 _outColor_; void main() { - vertex v; - v.xy = _xy; - v.uv = _uv; - _outColor_ = frag(gl_Color, _tex0_, v); - _outColor_ = vec4( 1, 1, 1, 1); + _outColor_ = frag(_color, _tex0_, Vertex(_xy, _uv)); } )"; -static const int BASE_FRAGMENT_SHADER_SIZE = strlen(base_fragment) + BASE_MACRO_SIZE; +static const int BASE_FRAGMENT_SHADER_SIZE = strlen(base_fragment) + BASE_SHARED_SIZE; #define formatFragmentShader(buf, program) sprintf(buf, base_fragment, base_shared, program) diff --git a/libjin/Graphics/Shaders/default.shader.h b/libjin/Graphics/Shaders/default.shader.h index 40c72e0..f0175d7 100644 --- a/libjin/Graphics/Shaders/default.shader.h +++ b/libjin/Graphics/Shaders/default.shader.h @@ -3,7 +3,7 @@ static const char* default_shader = R"( #VERTEX_SHADER -vertex vert(vertex v) +Vertex vert(Vertex v) { return v; } @@ -12,9 +12,9 @@ vertex vert(vertex v) #FRAGMENT_SHADER -Color frag(Color col, Texture tex, vertex v) +Color frag(Color col, Texture tex, Vertex v) { - return Texel(tex, v.uv); + return col; } #END_FRAGMENT_SHADER diff --git a/libjin/Graphics/Shaders/font.shader.h b/libjin/Graphics/Shaders/font.shader.h index 7904077..e04c225 100644 --- a/libjin/Graphics/Shaders/font.shader.h +++ b/libjin/Graphics/Shaders/font.shader.h @@ -3,7 +3,7 @@ static const char* font_shader = R"( #VERTEX_SHADER -vertex vert(vertex v) +Vertex vert(Vertex v) { return v; } @@ -12,9 +12,9 @@ vertex vert(vertex v) #FRAGMENT_SHADER -Color frag(Color col, Texture tex, vertex v) +Color frag(Color col, Texture tex, Vertex v) { - return Texel(tex, v.uv); + return Color(col.rgb, texel(tex, v.uv).a); } #END_FRAGMENT_SHADER diff --git a/libjin/Graphics/Shaders/texture.shader.h b/libjin/Graphics/Shaders/texture.shader.h new file mode 100644 index 0000000..d1fc86f --- /dev/null +++ b/libjin/Graphics/Shaders/texture.shader.h @@ -0,0 +1,21 @@ +// ͼshader +static const char* texture_shader = R"( + +#VERTEX_SHADER + +Vertex vert(Vertex v) +{ + return v; +} + +#END_VERTEX_SHADER + +#FRAGMENT_SHADER + +Color frag(Color col, Texture tex, Vertex v) +{ + return col * texel(tex, v.uv); +} + +#END_FRAGMENT_SHADER +)";
\ No newline at end of file diff --git a/libjin/Graphics/Shapes.cpp b/libjin/Graphics/Shapes.cpp index f80aa18..e054c96 100644 --- a/libjin/Graphics/Shapes.cpp +++ b/libjin/Graphics/Shapes.cpp @@ -1,6 +1,7 @@ #include "../jin_configuration.h" #if LIBJIN_MODULES_RENDER +#include "Shader.h" #include "Shapes.h" #include "../math/matrix.h" #include "../math/constant.h" @@ -11,34 +12,38 @@ namespace jin namespace graphics { + using namespace math; + void point(int x, int y) { - float vers[] = { x + 0.5f , y + 0.5f }; - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, (GLvoid*)vers); + JSLProgram* jsl = JSLProgram::getCurrentJSL(); + float verts[] = { x + 0.5f , y + 0.5f }; + jsl->bindVertexPointer(2, GL_FLOAT, 0, verts); + jsl->sendMatrix4("_modelMatrix_", &Matrix::Identity); + jsl->sendMatrix4("_projectionMatrix_", &gl.ProjectionMatrix); glDrawArrays(GL_POINTS, 0, 1); - glDisableClientState(GL_VERTEX_ARRAY); } void points(int n, GLshort* p) { - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_SHORT, 0, (GLvoid*)p); + JSLProgram* jsl = JSLProgram::getCurrentJSL(); + jsl->bindVertexPointer(2, GL_SHORT, 0, p); + jsl->sendMatrix4("_modelMatrix_", &Matrix::Identity); + jsl->sendMatrix4("_projectionMatrix_", &gl.ProjectionMatrix); glDrawArrays(GL_POINTS, 0, n); - glDisableClientState(GL_VERTEX_ARRAY); } void line(int x1, int y1, int x2, int y2) { + JSLProgram* jsl = JSLProgram::getCurrentJSL(); float verts[] = { x1, y1, x2, y2 }; - - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, (const GLvoid*)verts); + jsl->bindVertexPointer(2, GL_FLOAT, 0, verts); + jsl->sendMatrix4("_modelMatrix_", &Matrix::Identity); + jsl->sendMatrix4("_projectionMatrix_", &gl.ProjectionMatrix); glDrawArrays(GL_LINES, 0, 2); - glDisableClientState(GL_VERTEX_ARRAY); } void circle(RenderMode mode, int x, int y, int r) @@ -80,10 +85,11 @@ namespace graphics void polygon_line(float* p, int count) { - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, (const GLvoid*)p); + JSLProgram* jsl = JSLProgram::getCurrentJSL(); + jsl->sendMatrix4("_modelMatrix_", &Matrix::Identity); + jsl->sendMatrix4("_projectionMatrix_", &gl.ProjectionMatrix); + jsl->bindVertexPointer(2, GL_FLOAT, 0, p); glDrawArrays(GL_LINE_LOOP, 0, count); - glDisableClientState(GL_VERTEX_ARRAY); } void polygon(RenderMode mode, float* p, int count) @@ -94,10 +100,11 @@ namespace graphics } else if (mode == FILL) { - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, (const GLvoid*)p); + JSLProgram* jsl = JSLProgram::getCurrentJSL(); + jsl->sendMatrix4("_modelMatrix_", &Matrix::Identity); + jsl->sendMatrix4("_projectionMatrix_", &gl.ProjectionMatrix); + jsl->bindVertexPointer(2, GL_FLOAT, 0, p); glDrawArrays(GL_POLYGON, 0, count); - glDisableClientState(GL_VERTEX_ARRAY); } } diff --git a/libjin/Math/Matrix.cpp b/libjin/Math/Matrix.cpp index beed1c8..a80f37a 100644 --- a/libjin/Math/Matrix.cpp +++ b/libjin/Math/Matrix.cpp @@ -8,6 +8,8 @@ namespace jin namespace math { + const Matrix Matrix::Identity; + // | e0 e4 e8 e12 | // | e1 e5 e9 e13 | // | e2 e6 e10 e14 | @@ -24,13 +26,17 @@ namespace math void Matrix::setOrtho(float l, float r, float b, float t, float n, float f) { + float w = r - l; + float h = t - b; + float z = f - n; setIdentity(); - e[0] = 2 / (r - l); - e[5] = 2 / (t - b); - e[10] = -2 / (f - n); - e[3] = -(r + l) / (r - l); - e[7] = -(t + b) / (t - b); - e[11] = -(f + n) / (f - n); + e[0] = 2 / w; + e[5] = 2 / h; + e[10] = -2 / z; + e[12] = -(r + l) / w; + e[13] = -(t + b) / h; + e[14] = -(f + n) / z; + e[15] = 1; } // | e0 e4 e8 e12 | diff --git a/libjin/Math/Matrix.h b/libjin/Math/Matrix.h index f02e317..52fc9c8 100644 --- a/libjin/Math/Matrix.h +++ b/libjin/Math/Matrix.h @@ -33,6 +33,8 @@ namespace math public: + static const Matrix Identity; + /** * Creates a new identity matrix. **/ diff --git a/test/05Font/main.cpp b/test/05Font/main.cpp index cdda3f0..f6d9bce 100644 --- a/test/05Font/main.cpp +++ b/test/05Font/main.cpp @@ -19,7 +19,7 @@ void onLoad() const char* program = R"( #VERTEX_SHADER -vertex vert(vertex v) +Vertex vert(Vertex v) { return v; } @@ -28,10 +28,11 @@ vertex vert(vertex v) #FRAGMENT_SHADER -Color frag(Color col, Texture tex, vertex v) +vec2 stepSize = vec2(0.02f, 0.02f); + +Color frag(Color col, Texture tex, Vertex v) { - //return Texel(tex, v.uv); - return vec4(1, 1, 1, 1); + return vec4(col.rgb, texel(tex, v.uv).a); } #END_FRAGMENT_SHADER @@ -42,13 +43,33 @@ Color frag(Color col, Texture tex, vertex v) Buffer buffer; fs->read("font.ttf", &buffer); data = FontData::createFontData((const unsigned char*)buffer.data, buffer.size); - font = Font::createFont(data, 15); + font = Font::createFont(data, 18); + page = font->typeset(u8R"( +平安時代中期の物語。紫式部著。ただし,そのすべてが紫式部の筆に成るのでは +ないとする説もある。 54帖。寛弘 (1004~12) 頃成立か。物語は3部に分けてみ +ることができる。第1部は,容貌,才能などすべてにすぐれた主人公光源氏が,多 +啊哈噶科膜卡して広く迎えられている。貴族社会の苦悩を摘出したところに磁瓷得 +ることができる。第1部は,容貌,才能などすべてにすぐれた主人公光源氏が,多 +くの女性と関係をもちながら,運命に導かれて栄華をきわめる姿を描く。これに対 +して第2部は苦悩の世界であって,光源氏は最愛の紫の上を失い,栄華は内側から崩 +壊する。第3部 (宇治十帖) は光源氏没後の物語で,不義によって生れた薫大将を主 +人公として,不安に満ちた暗い世界が展開される。さまざまな恋愛と運命的な人生の +うちに,貴族社会の苦悩を摘出したところに価値があり,現代では,世界的な文学と +して広く迎えられている。abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +漫画自1999年开始在日本集英社旗下的少年漫画杂志《周刊少年Jump》上连载。2002年 +,由日本动画工作室Studio Pierrot根据漫画原作所改编制作的电视动画版《火影忍者 +》开始在日本东京电视台播出。2004年,漫画进而改编成电影。2006年,漩涡鸣人入选 +美国《新闻周刊》日文版于10月18日发行的特集中选出的“全世界最受尊敬的100位日本 +人”。[2] +)", 20, 0); + delete data; //canvas = Canvas::createCanvas(100, 100); //page = font->typeset("こんにちは世界!", 120, 20); buffer.clear(); fs->read("img.png", &buffer); Bitmap* bitmap = Bitmap::createBitmap(buffer.data, buffer.size); tex = Texture::createTexture(bitmap); + canvas = Canvas::createCanvas(100, 100); } void onEvent(jin::input::Event* e) @@ -65,45 +86,27 @@ void onUpdate(int ms) void onDraw() { + glClear(GL_COLOR_BUFFER_BIT); + glColor4f(1, 1, 1, 1); //gl.pushColor(32, 32, 32, 255); //rect(FILL, 0, 0, 500, 500); - gl.pushColor(255, 255, 255, 255); shader->use(); - tex->draw(0, 0, 1, 1, 0); + //circle(RenderMode::LINE, 50, 50, 30); + //tex->draw(0, 0, 1, 1, 0); + //tex->draw(20, 50, 1, 1, 0); //shader->sendFloat("dt", dt); - //Canvas::bind(canvas); -// if (font != nullptr) -// { -// glColor4f(1, 1, 1, 1); -// //font->print(u8"Hello,你好\n啊 world!", 10, 10); -// //font->print(u8"Привет мир!", 10, 10 + 15 * 1); -// font->print(u8R"( -//One of the most enjoyable arcade game. -//abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -//平安時代中期の物語。紫式部著。ただし,そのすべてが紫式部の筆に成るのでは -//ないとする説もある。 54帖。寛弘 (1004~12) 頃成立か。物語は3部に分けてみ -//ることができる。第1部は,容貌,才能などすべてにすぐれた主人公光源氏が,多 -//啊哈噶科膜卡して広く迎えられている。貴族社会の苦悩を摘出したところに磁瓷得 -//ることができる。第1部は,容貌,才能などすべてにすぐれた主人公光源氏が,多 -//くの女性と関係をもちながら,運命に導かれて栄華をきわめる姿を描く。これに対 -//して第2部は苦悩の世界であって,光源氏は最愛の紫の上を失い,栄華は内側から崩 -//壊する。第3部 (宇治十帖) は光源氏没後の物語で,不義によって生れた薫大将を主 -//人公として,不安に満ちた暗い世界が展開される。さまざまな恋愛と運命的な人生の -//うちに,貴族社会の苦悩を摘出したところに価値があり,現代では,世界的な文学と -//して広く迎えられている。abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -//漫画自1999年开始在日本集英社旗下的少年漫画杂志《周刊少年Jump》上连载。2002年 -//,由日本动画工作室Studio Pierrot根据漫画原作所改编制作的电视动画版《火影忍者 -//》开始在日本东京电视台播出。2004年,漫画进而改编成电影。2006年,漩涡鸣人入选 -//美国《新闻周刊》日文版于10月18日发行的特集中选出的“全世界最受尊敬的100位日本 -//人”。[2] -//)", 12, 10 + 15 * 2, 18); -// //font->print(u8"你好世界!", 10, 10 + 15*3); -// //font->render(page); -// glColor4f(1, 1, 1, 1); -// } - shader->unuse(); - //Canvas::unbind(); - //canvas->draw(0, 0, 2, 2, 0); + Canvas::bind(canvas); + if (font != nullptr) + { + //font->print(u8"Hello,你好\n啊 world!", 10, 10); + //font->print(u8"Привет мир!", 10, 10 + 15 * 1); + font->print(page, 12, 10 + 15 * 2); + //font->print(u8"你好世界!", 10, 10 + 15*3); + //font->render(page); + } + Canvas::unbind(); + canvas->draw(0, 0, 1, 1, 0); + shader->unuse(); } int main(int argc, char* argv[]) |