/* opengl.h
 *
 * An OpenGL interface
 */


#ifndef OPENGL_H
#define OPENGL_H

#ifdef GL

#include <GL/gl.h>
#include <GL/glu.h>
#include <glaux.h>
#include <math.h>

#endif

#include <iostream.h>

#ifdef GL
void reshape( GLsizei width, GLsizei height );
#endif

class OpenGL {

public:

    void clear() {
#ifdef GL
	glClearColor( 1, 1, 1, 0 );
	glClear( GL_COLOR_BUFFER_BIT );
#endif
    }

    void swap() {
#ifdef GL
	glFlush();
	auxSwapBuffers();
#endif
    }

    void init( float width, float height, float centre_x, float centre_y ) {
#ifdef GL
	int window_width, window_height;
	float pixels_per_unit;

	/* Assuming a 1024 x 768 screen here (bad idea) but I don't know how
	 * to get this information from OpenGL. */

	if ( 1024.0 / width < 768.0 / height )
	    pixels_per_unit = 1024.0 / width;
	else
	    pixels_per_unit = 768.0 / height;

	pixels_per_unit *= 0.8;

	if (pixels_per_unit > 70)
	    pixels_per_unit = 70;

	window_width = (int) floor((width * pixels_per_unit) + 0.5);
	window_height = (int) floor((height * pixels_per_unit) + 0.5);

	auxInitDisplayMode( (GLenum) (AUX_DOUBLE | AUX_RGBA) );
	auxInitPosition( 50, 50, window_width, window_height );

	auxReshapeFunc( reshape );
	auxInitWindow( "Elevators" );

	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
	glOrtho( centre_x-width/2.0, centre_x+width/2.0,
		 centre_y-height/2.0, centre_y+height/2.0,
		 -1000, 1000 );

	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
	gluLookAt( -3, 1, 5, 0, 0, 0, 0, 1, 0 ); 

	glColor3f( 0, 0, 0 );
#endif
    }
};

#endif
