Skip to content

Instantly share code, notes, and snippets.

@armornick
Created August 23, 2012 08:47
Show Gist options
  • Save armornick/3434362 to your computer and use it in GitHub Desktop.
Save armornick/3434362 to your computer and use it in GitHub Desktop.
Draw an Image with SDL2
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#define WIDTH 800
#define HEIGHT 600
#define IMG_PATH "exit.png"
int main (int argc, char *argv[]) {
// variable declarations
SDL_Window *win = NULL;
SDL_Renderer *renderer = NULL;
SDL_Texture *img = NULL;
int w, h; // texture width & height
// Initialize SDL.
if (SDL_Init(SDL_INIT_VIDEO) < 0)
return 1;
// create the window and renderer
// note that the renderer is accelerated
win = SDL_CreateWindow("Image Loading", 100, 100, WIDTH, HEIGHT, 0);
renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
// load our image
img = IMG_LoadTexture(renderer, IMG_PATH);
SDL_QueryTexture(img, NULL, NULL, &w, &h); // get the width and height of the texture
// put the location where we want the texture to be drawn into a rectangle
// I'm also scaling the texture 2x simply by setting the width and height
SDL_Rect texr; texr.x = WIDTH/2; texr.y = HEIGHT/2; texr.w = w*2; texr.h = h*2;
// main loop
while (1) {
// event handling
SDL_Event e;
if ( SDL_PollEvent(&e) ) {
if (e.type == SDL_QUIT)
break;
else if (e.type == SDL_KEYUP && e.key.keysym.sym == SDLK_ESCAPE)
break;
}
// clear the screen
SDL_RenderClear(renderer);
// copy the texture to the rendering context
SDL_RenderCopy(renderer, img, NULL, &texr);
// flip the backbuffer
// this means that everything that we prepared behind the screens is actually shown
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(img);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(win);
return 0;
}
Copy link

ghost commented Oct 4, 2023

WaitEvent, waits for events, which is more for applications than games, because if you use it in a game, the entire game would hang until it gets an event, so there is no definitive option, hence you can choose

the CPU of the example can be very easly bypassed while still using poll events, just add an SDL_Delay
best also to explain that if someone were to make a game using this, that itd be best to use PollEvents with a frame-limiter/vsync

@nikeedev
Copy link

nikeedev commented Apr 5, 2024

i love you

gay

How the heck is he or even she gay by loving someone??

@SH2282000
Copy link

SH2282000 commented May 2, 2024

Damn, why are all those people still here. Bros need to get a life.

Go contribute to some open-source projects!

@nikeedev
Copy link

nikeedev commented May 3, 2024

i love you

gay

How the heck is he or even she gay by loving someone??

i was joking

very funny

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment