#include #include #include #include "gl/gl.h" #include "gl/glu.h" extern int global_EC; #ifndef VIEWGL_FOVY #define VIEWGL_FOVY 60.0f #endif #ifndef VIEWGL_ZNEAR #define VIEWGL_ZNEAR 0.1f #endif #ifndef VIEWGL_ZFAR #define VIEWGL_ZFAR 250.0f #endif extern SDL_Window* screen; int videoFlags = 0; /* void ERROR(const char* s) { std::cerr << "Error" << s << std::endl; std::cerr << "* last SDL error was: " << SDL_GetError() << std::endl; global_EC = 1; exit(1); }*/ int resize(int w, int h) { GLfloat ratio; if ( h == 0 ) h = 1; ratio = ( GLfloat )w / ( GLfloat )h; glViewport( 0, 0, ( GLint )w, ( GLint )h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity( ); //glRotatef(180, 0, 0, 1); gluPerspective( VIEWGL_FOVY, ratio, VIEWGL_ZNEAR, VIEWGL_ZFAR); //glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, 0.1f, 300.0f); glMatrixMode( GL_MODELVIEW ); glLoadIdentity( ); return(1); } void initVideo(int w, int h, int bpp) { screen = SDL_CreateWindow("My Game Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h, SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL); resize(w, h); //Xperimental -- Vladislav Khorev vladislav.khorev@fishrungames.com /* const SDL_VideoInfo *videoInfo; if (!videoInfo) ERROR("VideoInfo query failed"); videoFlags = SDL_OPENGL; videoFlags |= SDL_GL_DOUBLEBUFFER; videoFlags |= SDL_HWPALETTE; //videoFlags |= SDL_RESIZABLE; //videoFlags |= SDL_WINDOW_FULLSCREEN; if ( videoInfo->hw_available ) { std::cerr << "Info: Using HWSURFACE" << std::endl; videoFlags |= SDL_HWSURFACE; } else { std::cerr << "Info: Using SWSURFACE" << std::endl; videoFlags |= SDL_SWSURFACE; } if ( videoInfo->blit_hw ) { std::cerr << "Info: Using HWACCEL" << std::endl; videoFlags |= SDL_HWACCEL; } SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); screen = SDL_SetVideoMode( w, h, bpp, videoFlags ); if (!screen) ERROR("SDL failed to generate requested VideoSurface!"); resize(w, h);*/ } void initGL() { GLfloat LightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f }; GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat LightPosition[] = { 500.0f, 200.0f, 300.0f, 1.0f }; //glEnable( GL_TEXTURE_2D ); glShadeModel( GL_SMOOTH ); glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); //glClearDepth( 1.0f ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); //glDepthFunc( GL_LEQUAL ); glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); glLightfv( GL_LIGHT0, GL_AMBIENT, LightAmbient ); glLightfv( GL_LIGHT0, GL_DIFFUSE, LightDiffuse ); glLightfv( GL_LIGHT0, GL_POSITION, LightPosition ); glEnable( GL_LIGHT0 ); glEnable( GL_COLOR_MATERIAL); glCullFace(GL_BACK); glPolygonMode(GL_FRONT, GL_FILL); glPolygonMode(GL_BACK, GL_LINE); } /* SDL_Surface* createRGBASurface(int w, int h) { #if SDL_BYTEORDER == SDL_BIG_ENDIAN #define rmask 0xff000000 #define gmask 0x00ff0000 #define bmask 0x0000ff00 #define amask 0x000000ff #else #define rmask 0x000000ff #define gmask 0x0000ff00 #define bmask 0x00ff0000 #define amask 0xff000000 #endif return SDL_CreateRGBSurface(SDL_SWSURFACE|SDL_SRCALPHA, 64, 64, 32, rmask, gmask, bmask, amask); } SDL_Surface* createRGBSurface(int w, int h) { #if SDL_BYTEORDER == SDL_BIG_ENDIAN #define rmask 0xff000000 #define gmask 0x00ff0000 #define bmask 0x0000ff00 #define amask 0x000000ff #else #define rmask 0x000000ff #define gmask 0x0000ff00 #define bmask 0x00ff0000 #define amask 0xff000000 #endif return SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 24, rmask, gmask, bmask, amask); } */