Advertisement
Guest User

SDL2

a guest
Feb 19th, 2014
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include "SDL2/SDL.h"
  5. #include "SDL2/SDL_image.h"
  6. using std::cerr;
  7. using std::endl;
  8. using std::string;
  9.  
  10. bool sRunning;
  11.  
  12. bool sLoop(); //sLoop handles events and returns "true" if the program should run another frame.
  13. void sInit(); //initializes the screen
  14. void sHandleEvents(); //modify to handle events
  15. void sSync(); //flip the screen
  16. void sQuit(); //uninitialize screen resources
  17.  
  18. const int scwidth=640;
  19. const int scheight=480;
  20.  
  21. SDL_Window* gWindow=NULL;
  22. SDL_Renderer *gRenderer = NULL;
  23.  
  24.  
  25. SDL_Texture* loadTexture( string path )
  26. {
  27.     //The final optimized image
  28.     SDL_Texture* newTexture = NULL;
  29.  
  30.     //Load image at specified path
  31.     SDL_Surface* loadedSurface = IMG_Load( path.c_str() );
  32.     if( loadedSurface == NULL )
  33.     {
  34.         cerr<<"Unable to load image "<<path<<". Error: "<<IMG_GetError()<<endl;
  35.         return NULL;
  36.     }
  37.  
  38.     newTexture = SDL_CreateTextureFromSurface( gRenderer, loadedSurface);
  39.     if( newTexture == NULL )
  40.     {
  41.         cerr<<"Unable to create texture from image "<<path<<". Error: "<<SDL_GetError()<<endl;
  42.     }
  43.  
  44.     //Get rid of old loaded surface
  45.     SDL_FreeSurface( loadedSurface );
  46.  
  47.     return newTexture;
  48. }
  49.  
  50.  
  51.  
  52. int main(int argc, char** argv)
  53. {
  54.     sInit();
  55.    
  56.     SDL_Texture *myTexture=loadTexture("viewport.png");
  57.     SDL_Rect v1={scwidth/2,0,scwidth/2,scheight/2};
  58.     SDL_Rect v2={0,scheight/2,scwidth,scheight/2};
  59.     SDL_Rect v0={0,0,scwidth/2,scheight/2};
  60.  
  61.     while(sLoop())
  62.     {
  63.         SDL_RenderClear( gRenderer );
  64.         SDL_RenderSetViewport(gRenderer,&v0);
  65.         SDL_RenderCopy( gRenderer, myTexture, NULL, NULL );
  66.         SDL_RenderSetViewport(gRenderer,&v1);
  67.         SDL_RenderCopy( gRenderer, myTexture, NULL, NULL );
  68.         SDL_RenderSetViewport(gRenderer,&v2);
  69.         SDL_RenderCopy( gRenderer, myTexture, NULL, NULL );
  70.         sSync();
  71.     }
  72.     SDL_DestroyTexture(myTexture);
  73.     myTexture=NULL;
  74.     sQuit();
  75.     return 0;
  76. }
  77. bool sLoop()
  78. {
  79.     sHandleEvents();
  80.     return sRunning;
  81. }
  82. void sInit()
  83. {
  84.     sRunning=true;
  85.     if(SDL_Init(SDL_INIT_VIDEO)<0){
  86.         cerr<<"Video initialization failed: "<<SDL_GetError()<<endl;
  87.         sRunning=false;
  88.         return;
  89.     }
  90.     gWindow=SDL_CreateWindow("SDL Tutorial",
  91.         SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
  92.         scwidth,scheight,SDL_WINDOW_SHOWN);
  93.     if(gWindow==NULL){
  94.         cerr<<"Window creation failed: "<<SDL_GetError()<<endl;
  95.         sRunning=false;
  96.         return;
  97.     }
  98.  
  99.     gRenderer=SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED);
  100.     if(gRenderer==NULL){
  101.         cerr<<"Renderer Creation Failed: "<<SDL_GetError()<<endl;
  102.         sRunning=false;
  103.         return;
  104.     }
  105.     SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
  106.  
  107.     int imgFlags=IMG_INIT_PNG;
  108.     if(!(IMG_Init(imgFlags)&imgFlags)){
  109.         cerr<<"SDL_image initialization failed. "<<IMG_GetError<<endl;
  110.         sRunning=false;
  111.         return;
  112.     }
  113.  
  114. }
  115.  
  116. void sHandleEvents()
  117. {
  118.     SDL_Event e;
  119.     while(SDL_PollEvent(&e))
  120.     {
  121.         switch(e.type)
  122.         {
  123.             case SDL_QUIT:
  124.                 sRunning=false;
  125.                 break;
  126.             case SDL_KEYDOWN:
  127.                 switch(e.key.keysym.sym)
  128.                 {
  129.                     case SDLK_ESCAPE:
  130.                         sRunning=false;
  131.                         break;
  132.                     default:
  133.                         break;
  134.                 }
  135.                 break;
  136.             default:
  137.                 break;
  138.         }
  139.     }
  140. }
  141. void sSync(){
  142.     //Update screen
  143.     SDL_RenderPresent( gRenderer );
  144. }
  145. void sQuit()
  146. {
  147.     SDL_DestroyWindow(gWindow);
  148.     gWindow=NULL;
  149.     SDL_Quit();
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement