From b50d18f3f882865a94458c7113aedd7a0cccce80 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Fri, 25 Jun 2010 23:05:47 +0200 Subject: Moved Application to wriggle. --- engine/engine.cpp | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 engine/engine.cpp (limited to 'engine/engine.cpp') diff --git a/engine/engine.cpp b/engine/engine.cpp new file mode 100644 index 0000000..4c7d426 --- /dev/null +++ b/engine/engine.cpp @@ -0,0 +1,159 @@ +#include "engine.h" + +#include "config.h" + +#include + +#include + +#include + +#include + +#include + +void Engine::event_keypress(SDLKey key) { + switch(key) { + case SDLK_SPACE: + paused = !paused; + break; + default: + Application::event_keypress(key); + } +} + +Engine::Engine() { + init_window(Config::window_w, Config::window_h); + + // Texturing + glEnable(GL_TEXTURE_2D); + // Blending + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + // Smooth shading + glShadeModel(GL_SMOOTH); + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + + glEnable(GL_POINT_SPRITE); + glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE); + + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); + + glClearColor(0, 0, 0, 0); + glClearDepth(1); + + font = new FTTextureFont("fonts/VeraMono.ttf"); + font->FaceSize(20); + background = new TextureSDL("textures/background.png"); + + paused = false; +} + +void Engine::update() { + if(!paused) { + stage->update(); + } + + glClearColor(0, 0, 0, 0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glViewport(0, 0, Config::window_w, Config::window_h); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + float xo = float(Config::window_w)/float(Config::window_h)/2.5 - 0.5; + glOrtho(-xo, 1 + xo, 0, 0.8, 0, 10); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glBindTexture(GL_TEXTURE_2D, background->tex()); + glBegin(GL_QUADS); + glTexCoord2f(0, 1); + glVertex2f(-1.9/9.0, 0); + glTexCoord2f(0, 0); + glVertex2f(-1.9/9.0, 0.8); + glTexCoord2f(1, 0); + glVertex2f(10.9/9.0, 0.8); + glTexCoord2f(1, 1); + glVertex2f(10.9/9.0, 0); + glEnd(); + + glDisable(GL_TEXTURE_2D); + glColor4f(1, 1, 0, 1); + + unsigned int tick = SDL_GetTicks(); + if(tick - lastframes >= 1000) { + fps = (float)frames * ((float)(tick - lastframes) / 1000.0f); + frames = 1; + lastframes = tick; + } else { + frames++; + } + + glScalef(0.0005, 0.0005, 0.0005); + font->Render((boost::format("FPS: %.2f") % fps).str().c_str()); + + float v_x = Config::window_w * (Config::viewport_x + xo) / (1 + 2 * xo); + float v_y = Config::window_h * Config::viewport_y; + float v_w = Config::window_h * Config::viewport_w; + float v_h = Config::window_h * Config::viewport_h; + + glViewport( + v_x - Config::viewport_overscan, + v_y - Config::viewport_overscan, + v_w + Config::viewport_overscan * 2, + v_h + Config::viewport_overscan * 2); + glScissor(v_x, v_y, v_w, v_h); + glEnable(GL_SCISSOR_TEST); + + glClearColor(0.2, 0.2, 0.2, 0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45, (float)660 / (float)740, 1, 100); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + float f = tick * 0.0005; + + gluLookAt( + 5 * sinf(f), 1, 5 * cosf(f), + 0, 0, 0, + 5 * sinf(f), 2, 5 * cosf(f)); + + glBegin(GL_LINES); + for(int i = -10; i < 11; i++) { + if(i % 5 == 0) + glColor3f(1, 1, 1); + else + glColor3f(.5, .5, .5); + glVertex3f(i, 0, -10); + glVertex3f(i, 0, 10); + glVertex3f(-10, 0, i); + glVertex3f(10, 0, i); + } + glEnd(); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho( + -float(Config::viewport_overscan) / float(v_w), + 1.0 + float(Config::viewport_overscan) / float(v_w), + -float(Config::viewport_overscan) / float(v_w), + Config::viewport_aspect + float(Config::viewport_overscan) / float(v_w), + 0, 10); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + stage->draw(); + + glDisable(GL_SCISSOR_TEST); + + SDL_GL_SwapBuffers(); +} -- cgit v1.2.3