app.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include <GL/glew.h>
  2. #include "app.h"
  3. namespace app { // begin of namespace
  4. static SDL_Surface* main_surf;
  5. static SDL_Surface* icon_image;
  6. uint windowW = 1280;
  7. uint windowH = 800;
  8. uint timer_tick = 1000/40; // in ms. 1000/Hz
  9. static uint time = 0;
  10. uint desktopW;
  11. uint desktopH;
  12. /*
  13. =======================================================================================================================================
  14. initWindow =
  15. =======================================================================================================================================
  16. */
  17. void initWindow()
  18. {
  19. PRINT( "SDL window initializing..." );
  20. SDL_Init( SDL_INIT_VIDEO );
  21. // print driver name
  22. char charBuff [256];
  23. if( SDL_VideoDriverName(charBuff, sizeof(charBuff)) != NULL )
  24. {
  25. PRINT( "The video driver name is " << charBuff );
  26. }
  27. else
  28. {
  29. ERROR( "Failed to obtain the video driver name" );
  30. }
  31. // get desktop size
  32. const SDL_VideoInfo* info = SDL_GetVideoInfo();
  33. desktopW = info->current_w;
  34. desktopH = info->current_h;
  35. // the icon
  36. icon_image = SDL_LoadBMP("gfx/icon.bmp");
  37. if( icon_image == NULL )
  38. {
  39. ERROR( "Cannot load window icon" );
  40. }
  41. else
  42. {
  43. Uint32 colorkey = SDL_MapRGB( icon_image->format, 255, 0, 255 );
  44. SDL_SetColorKey( icon_image, SDL_SRCCOLORKEY, colorkey );
  45. SDL_WM_SetIcon( icon_image, NULL );
  46. }
  47. // set GL attribs
  48. SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 8 ); // WARNING: Set this only in deferred shading
  49. SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
  50. SDL_GL_SetAttribute( SDL_GL_ACCELERATED_VISUAL, 1 );
  51. // set the surface
  52. main_surf = SDL_SetVideoMode( windowW, windowH, 24, SDL_HWSURFACE | SDL_OPENGL );
  53. // move the window
  54. #ifdef WIN32
  55. SDL_SysWMinfo i;
  56. SDL_VERSION( &i.version );
  57. if( SDL_GetWMInfo(&i) )
  58. {
  59. HWND hwnd = i.window;
  60. SetWindowPos( hwnd, HWND_TOP, 10, 25, w, h, NULL );
  61. }
  62. #endif
  63. SDL_WM_SetCaption( "AnKi Engine", NULL );
  64. PRINT( "SDL window initialization ends" );
  65. }
  66. /*
  67. =======================================================================================================================================
  68. togleFullScreen =
  69. =======================================================================================================================================
  70. */
  71. void togleFullScreen()
  72. {
  73. SDL_WM_ToggleFullScreen( main_surf );
  74. }
  75. /*
  76. =======================================================================================================================================
  77. quitApp =
  78. =======================================================================================================================================
  79. */
  80. void quitApp( int code )
  81. {
  82. SDL_FreeSurface( main_surf );
  83. SDL_Quit();
  84. exit(code);
  85. }
  86. /*
  87. =======================================================================================================================================
  88. waitForNextFrame =
  89. =======================================================================================================================================
  90. */
  91. void waitForNextFrame()
  92. {
  93. uint now = SDL_GetTicks();
  94. if( now - time < timer_tick )
  95. {
  96. // the new time after the SDL_Delay will be...
  97. time += timer_tick;
  98. // sleep a little
  99. SDL_Delay( time - now);
  100. }
  101. else
  102. time = now;
  103. }
  104. //=====================================================================================================================================
  105. // printAppInfo =
  106. //=====================================================================================================================================
  107. void printAppInfo()
  108. {
  109. cout << "App info: ";
  110. #if defined( _DEBUG_ )
  111. cout << "Debug ";
  112. #else
  113. cout << "Release ";
  114. #endif
  115. cout << "GLEW_" << glewGetString(GLEW_VERSION) << " ";
  116. const SDL_version* v = SDL_Linked_Version();
  117. cout << "SDL_" << int(v->major) << '.' << int(v->minor) << '.' << int(v->patch) << endl;
  118. }
  119. } // end of namespace