Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- #include <stdlib.h>
- #include "SDL2/SDL.h"
- #include "SDL2/SDL_image.h"
- using std::cerr;
- using std::endl;
- using std::string;
- bool sRunning;
- bool sLoop(); //sLoop handles events and returns "true" if the program should run another frame.
- void sInit(); //initializes the screen
- void sHandleEvents(); //modify to handle events
- void sSync(); //flip the screen
- void sQuit(); //uninitialize screen resources
- const int scwidth=640;
- const int scheight=480;
- SDL_Window* gWindow=NULL;
- SDL_Renderer *gRenderer = NULL;
- SDL_Texture* loadTexture( string path )
- {
- //The final optimized image
- SDL_Texture* newTexture = NULL;
- //Load image at specified path
- SDL_Surface* loadedSurface = IMG_Load( path.c_str() );
- if( loadedSurface == NULL )
- {
- cerr<<"Unable to load image "<<path<<". Error: "<<IMG_GetError()<<endl;
- return NULL;
- }
- newTexture = SDL_CreateTextureFromSurface( gRenderer, loadedSurface);
- if( newTexture == NULL )
- {
- cerr<<"Unable to create texture from image "<<path<<". Error: "<<SDL_GetError()<<endl;
- }
- //Get rid of old loaded surface
- SDL_FreeSurface( loadedSurface );
- return newTexture;
- }
- int main(int argc, char** argv)
- {
- sInit();
- SDL_Texture *myTexture=loadTexture("viewport.png");
- SDL_Rect v1={scwidth/2,0,scwidth/2,scheight/2};
- SDL_Rect v2={0,scheight/2,scwidth,scheight/2};
- SDL_Rect v0={0,0,scwidth/2,scheight/2};
- while(sLoop())
- {
- SDL_RenderClear( gRenderer );
- SDL_RenderSetViewport(gRenderer,&v0);
- SDL_RenderCopy( gRenderer, myTexture, NULL, NULL );
- SDL_RenderSetViewport(gRenderer,&v1);
- SDL_RenderCopy( gRenderer, myTexture, NULL, NULL );
- SDL_RenderSetViewport(gRenderer,&v2);
- SDL_RenderCopy( gRenderer, myTexture, NULL, NULL );
- sSync();
- }
- SDL_DestroyTexture(myTexture);
- myTexture=NULL;
- sQuit();
- return 0;
- }
- bool sLoop()
- {
- sHandleEvents();
- return sRunning;
- }
- void sInit()
- {
- sRunning=true;
- if(SDL_Init(SDL_INIT_VIDEO)<0){
- cerr<<"Video initialization failed: "<<SDL_GetError()<<endl;
- sRunning=false;
- return;
- }
- gWindow=SDL_CreateWindow("SDL Tutorial",
- SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
- scwidth,scheight,SDL_WINDOW_SHOWN);
- if(gWindow==NULL){
- cerr<<"Window creation failed: "<<SDL_GetError()<<endl;
- sRunning=false;
- return;
- }
- gRenderer=SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED);
- if(gRenderer==NULL){
- cerr<<"Renderer Creation Failed: "<<SDL_GetError()<<endl;
- sRunning=false;
- return;
- }
- SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
- int imgFlags=IMG_INIT_PNG;
- if(!(IMG_Init(imgFlags)&imgFlags)){
- cerr<<"SDL_image initialization failed. "<<IMG_GetError<<endl;
- sRunning=false;
- return;
- }
- }
- void sHandleEvents()
- {
- SDL_Event e;
- while(SDL_PollEvent(&e))
- {
- switch(e.type)
- {
- case SDL_QUIT:
- sRunning=false;
- break;
- case SDL_KEYDOWN:
- switch(e.key.keysym.sym)
- {
- case SDLK_ESCAPE:
- sRunning=false;
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- }
- }
- void sSync(){
- //Update screen
- SDL_RenderPresent( gRenderer );
- }
- void sQuit()
- {
- SDL_DestroyWindow(gWindow);
- gWindow=NULL;
- SDL_Quit();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement