diff --git a/engine/include/GearSrc/GL.h b/engine/include/GearSrc/GL.h index 2316396..f64c381 100644 --- a/engine/include/GearSrc/GL.h +++ b/engine/include/GearSrc/GL.h @@ -37,7 +37,10 @@ GSDECL void GSGLClear(GSGL gl); GSDECL void GSGLIgnoreDepth(GSGL gl); GSDECL void GSGLCareDepth(GSGL gl); GSDECL void GSGLSetLight(GSGL gl); -GSDECL void GSGLPolygon(GSGL gl, int pairs, GSVector3* vert, GSVector2* tex); +GSDECL void GSGLPolygon(GSGL gl, int pairs, GSVector3* vert, GSVector2* tex, GSVector3 norm); +GSDECL void GSGLPolygon2D(GSGL gl, int pairs, GSVector2* vert, GSVector2* tex); +GSDECL void GSGLBegin2D(GSGL gl); +GSDECL void GSGLEnd2D(GSGL gl); /* gl_camera.c */ GSDECL void GSGLCameraPerspective(GSGL gl, GSNumber width, GSNumber height); diff --git a/engine/src/gl.c b/engine/src/gl.c index 57ab3f4..bbb28b1 100644 --- a/engine/src/gl.c +++ b/engine/src/gl.c @@ -61,13 +61,52 @@ void GSGLSetLight(GSGL gl) { glLightfv(GL_LIGHT0, GL_POSITION, f); } -void GSGLPolygon(GSGL gl, int pairs, GSVector3* vert, GSVector2* tex) { +void GSGLPolygon(GSGL gl, int pairs, GSVector3* vert, GSVector2* tex, GSVector3 norm) { int i; glBegin(GL_POLYGON); + glNormal3f(norm[0], norm[1], norm[2]); for(i = 0; i < pairs; i++) { if(tex != NULL) glTexCoord2f(tex[i][0], tex[i][1]); glVertex3f(vert[i][0], vert[i][1], vert[i][2]); } glEnd(); } + +void GSGLPolygon2D(GSGL gl, int pairs, GSVector2* vert, GSVector2* tex) { + int i; + + glBegin(GL_POLYGON); + for(i = 0; i < pairs; i++) { + if(tex != NULL) glTexCoord2f(tex[i][0], tex[i][1]); + glVertex2f(vert[i][0], vert[i][1]); + } + glEnd(); +} + +void GSGLBegin2D(GSGL gl) { + GSGLIgnoreDepth(gl); + GSGLShadowDisable(gl); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(0, gl->engine->width, gl->engine->height, 0, -1, 1); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); +} + +void GSGLEnd2D(GSGL gl) { + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + + glMatrixMode(GL_MODELVIEW); + + GSGLShadowEnable(gl); + GSGLCareDepth(gl); +} diff --git a/engine/src/skybox.c b/engine/src/skybox.c index c6e7c99..573ded3 100644 --- a/engine/src/skybox.c +++ b/engine/src/skybox.c @@ -44,6 +44,7 @@ void GSSkyBoxDraw(GSSkyBox skybox) { int i; GSVector3 v[4]; GSVector2 t[4]; + GSVector3 n = {0, 0, 0}; GSNumber s = 0.0001; t[0][0] = 0, t[0][1] = 0; @@ -60,7 +61,7 @@ void GSSkyBoxDraw(GSSkyBox skybox) { for(i = 0; i < 6; i++) { GLuint tex; int j, k; - + if(i == 0) { tex = skybox->left; @@ -114,7 +115,7 @@ void GSSkyBoxDraw(GSSkyBox skybox) { GSGLTextureSet(gl, tex); - GSGLPolygon(gl, 4, v, t); + GSGLPolygon(gl, 4, v, t, n); } GSGLTextureSet(gl, 0); @@ -125,7 +126,7 @@ void GSSkyBoxDraw(GSSkyBox skybox) { void GSSkyBoxClose(GSSkyBox skybox) { GLuint* ptr[6]; - int i; + int i; ptr[0] = &skybox->left; ptr[1] = &skybox->right; @@ -134,7 +135,7 @@ void GSSkyBoxClose(GSSkyBox skybox) { ptr[4] = &skybox->up; ptr[5] = &skybox->down; - for(i = 0; i < 6; i++){ + for(i = 0; i < 6; i++) { if(*ptr[i] > 0) GSGLTextureDelete(skybox->engine->client->gl, *ptr[i]); } free(skybox);