All pastes #36648 Raw Edit

MrEntropy

public text v1 · immutable
#36648 ·published 2006-01-13 01:59 UTC
rendered paste body
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <SDL/SDL.h>
#include <GL/gl.h>

class Drawable {
public:
  virtual void draw() = 0;
};

class Engine {
  std::vector<Drawable*> drawables;

public:
  Engine(){
    SDL_Init(SDL_INIT_VIDEO);
    
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

    SDL_SetVideoMode(640, 480, 16, SDL_OPENGL|SDL_GL_DOUBLEBUFFER);

    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );

    
    
    glViewport( 0, 0, 640, 480 );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity( );
    //glFrustum(1.0, 1.0, 1.0, 1.0, 0.0, 20.0);
    //glOrtho(1.0, 1.0, 1.0, 1.0, 4.0, 4.0);
    //glRotatef(0.1, 0.0, 1.0, 0.0);
    //glTranslatef(0.0f, 0.0f, 2.0f);
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity( );
    
    
  }
  ~Engine(){
    SDL_Quit();
  }
  void mainLoop();
  void registerDrawable(Drawable* d);
};

void Engine::mainLoop(){
  bool requestExit = false;
  SDL_Event event;
  while(!requestExit){
    if(SDL_PollEvent(&event)){
      switch(event.type){
      case SDL_QUIT:
	requestExit=true;
	break;
      }
    }
    
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef( 0.0f, 0.0f, -6.0f );

    for_each(drawables.begin(), drawables.end(), std::mem_fun(&Drawable::draw));
    SDL_GL_SwapBuffers();
  }
}

void Engine::registerDrawable(Drawable* d){
  drawables.push_back(d);
}


class Window : public Drawable {
public:
  void draw();
};

void Window::draw(){
  glColor3f(1.0f, 1.0f, 1.0f);
  glBegin(GL_TRIANGLES);
  glColor3f(1.0f, 0.0f, 0.0f);
  glVertex3f(  0.0f,  1.0f, 0.0f ); /* Top */
  glColor3f(0.0f, 1.0f, 0.0f);
  glVertex3f( -1.0f, -1.0f, 0.0f ); /* Bottom Left */
  glColor3f(0.0f, 0.0f, 1.0f);
  glVertex3f(  1.0f, -1.0f, 0.0f ); 
  glEnd();
}

int main(){
  Engine engine;
  engine.registerDrawable(new Window);
  engine.mainLoop();
  return 0;
}