summaryrefslogtreecommitdiff
path: root/mogltk/glbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mogltk/glbase.cpp')
-rw-r--r--mogltk/glbase.cpp67
1 files changed, 65 insertions, 2 deletions
diff --git a/mogltk/glbase.cpp b/mogltk/glbase.cpp
index 71fcaa0..b2512ca 100644
--- a/mogltk/glbase.cpp
+++ b/mogltk/glbase.cpp
@@ -4,7 +4,7 @@
#include <SDL.h>
#include <SDL_opengl.h>
-int mogltk::glbase::width, mogltk::glbase::height, mogltk::glbase::inited = 0;
+int mogltk::glbase::width, mogltk::glbase::height, mogltk::glbase::inited = 0, mogltk::glbase::twoD = 0;
SDL_Surface * mogltk::glbase::surface = 0;
int mogltk::glbase::setup(int w, int h, int flags) throw(GeneralException) {
@@ -25,7 +25,10 @@ int mogltk::glbase::setup(int w, int h, int flags) throw(GeneralException) {
throw GeneralException(String("Couldn't set GL mode: ") + SDL_GetError());
}
- printm(M_INFO, "Video resolution: %dx%dx%d\n", surface->w, surface->h, surface->format->BitsPerPixel);
+ float ratio = surface->w;
+ ratio /= surface->h;
+
+ printm(M_INFO, "Video resolution: %dx%dx%d (ratio = %3.2f)\n", surface->w, surface->h, surface->format->BitsPerPixel, ratio);
printm(M_INFO, "\n");
printm(M_INFO, "OpenGL infos\n");
printm(M_INFO, "------------\n");
@@ -35,6 +38,27 @@ int mogltk::glbase::setup(int w, int h, int flags) throw(GeneralException) {
printm(M_INFO, String("Extensions: ") + (char *) glGetString(GL_EXTENSIONS) + "\n");
inited = 1;
+
+ glViewport(0, 0, surface->w, surface->h);
+
+ glCullFace(GL_BACK);
+ glFrontFace(GL_CCW);
+ glEnable(GL_CULL_FACE);
+
+ glClearColor(0, 0, 0, 0);
+ glShadeModel(GL_SMOOTH);
+
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LEQUAL);
+ glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(60.0, ratio, 1.0, 1024.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
return 0;
}
@@ -49,3 +73,42 @@ int mogltk::glbase::GetHeight(void) {
int mogltk::glbase::GetInited(void) {
return inited;
}
+
+void mogltk::glbase::Enter2DMode(void) {
+ if (twoD)
+ return;
+
+ glPushAttrib(GL_ENABLE_BIT);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_CULL_FACE);
+ glEnable(GL_TEXTURE_2D);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glOrtho(0.0, width, height, 0.0, 0.0, 1.0);
+
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
+
+ twoD = 1;
+}
+
+void mogltk::glbase::Leave2DMode(void) {
+ if (!twoD)
+ return;
+
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+
+ glPopAttrib();
+
+ twoD = 0;
+}