#define VERSION "0.2.2 DEV" #include #include #include #include #include "gltexture.h" #include "glfontengine.h" // #define GL_DEBUG_MOVEMENT false void setupGL(); void resizeOpenGLWindow(int, int, float=1.0f, float=100.0f); int main(int argc, char **argv) { std::cout << "ARGV: " << argv[0] << std::endl; //Vars SDL_Surface *screen; bool quit = false; SDL_Event event; int w_width = 640; int w_height = 480; int w_bbp = 32; float znear = 1.0f; float zfar = 100.0f; if(SDL_Init(SDL_INIT_VIDEO)<0) { std::cerr << "Konnte SDL nicht initialisieren" << SDL_GetError() << std::endl; return 1; } // Setting video mode int videoFlags; const SDL_VideoInfo *videoInfo; videoInfo = SDL_GetVideoInfo(); if(!videoInfo) { std::cerr << "Video query failed: " << SDL_GetError() << std::endl; return 1; } videoFlags = SDL_OPENGL; videoFlags |= SDL_GL_DOUBLEBUFFER; videoFlags |= SDL_HWPALETTE; videoFlags |= SDL_RESIZABLE; if(videoInfo->hw_available) videoFlags |= SDL_HWSURFACE; else videoFlags |= SDL_SWSURFACE; if(videoInfo->blit_hw) videoFlags |= SDL_HWACCEL; // videoFlags |=SDL_FULLSCREEN; // SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); // SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); // SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); // SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); if(!(screen = SDL_SetVideoMode(w_width, w_height, w_bbp, videoFlags))) { std::cerr << "Kein SDL-Screen verfügbar: " << SDL_GetError() << std::endl; return 1; } SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); SDL_WM_SetCaption("GLGui Test, 0); // blank screen // SDL_FillRect(screen, 0, SDL_MapRGBA(screen->format, 0, 0, 0, 0)); // GL Optionen setupGL(); resizeOpenGLWindow(w_width, w_height, znear, zfar); // Keyrepeat, falls benötigt auskommentieren SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); // Fontengine initliaisieren, für alle die Fonts brauchen GLFontEngine::addFont("font_big_better_alpha.png", "default"); // Programmvariablen Snake3D snake3d; //movement & keyboardcontrol Uint8 *keys = SDL_GetKeyState(NULL);; SDLKey tkey; typedef enum { move_up=0, move_down, move_left, move_right} nummovekeys; SDLKey movekeys[4]; bool pause = true; bool blend = false; bool extralines = false; bool fullscreen = false; // splash screen bool splashscreen = true; snake3d.pause(true); SDL_Rect splashpos = { 40, 40, screen->w -80, 310 }; GLFontEngine fontengine("default"); #ifdef GL_DEBUG_MOVEMENT movekeys[move_up] = SDLK_i; movekeys[move_down] = SDLK_k; movekeys[move_left] = SDLK_j; movekeys[move_right] = SDLK_l; #else movekeys[move_up] = SDLK_UP; movekeys[move_down] = SDLK_DOWN; movekeys[move_left] = SDLK_LEFT; movekeys[move_right] = SDLK_RIGHT; #endif while(!quit) { if(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: quit = true; break; case SDL_KEYDOWN: keys = SDL_GetKeyState(NULL); tkey = event.key.keysym.sym; break; case SDL_KEYUP: keys = SDL_GetKeyState(NULL); break; } } else { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); SDL_Delay(10); } } GLFontEngine::quit(); SDL_Quit(); return 0; } void setupGL() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glBlendFunc(GL_SRC_ALPHA, GL_ONE); // glBlendFunc(GL_SRC_COLOR,GL_DST_COLOR); // glBlendFunc(GL_DST_COLOR, GL_SRC_ALPHA); // glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.1); } void resizeOpenGLWindow(int width, int height, float znear, float zfar) { if(height==0) height = 1; glViewport(0, 0, (GLsizei)width, (GLsizei)height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, znear, zfar); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }