Sdl programming
1 / 30

SDL Programming - PowerPoint PPT Presentation

  • Uploaded on

SDL Programming. Introduction. Initialization. The first thing you must do is initialize SDL i nt SDL_Init ( SDL_INIT_EVERYTHING ) This will return -1 if it fails Various flags can be OR’ed together to enable various features In this case, we enable all features. Surfaces.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
Download Presentation

PowerPoint Slideshow about ' SDL Programming' - ria-davidson

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Sdl programming

SDL Programming



  • The first thing you must do is initialize SDL


      • This will return -1 if it fails

      • Various flags can be OR’ed together to enable various features

      • In this case, we enable all features


  • A surface is an area where you can draw

  • The screen is one such surface

  • You can create other surfaces to hold images or to draw on

  • You can copy one surface to another

  • Surfaces have properties

    • Height

    • Width

    • Number of bits per pixel

Creating the screen
Creating the Screen

  • After initializing SDL, you create the screen

    • SDL_Surface *screen;

    • screen = SDL_SetVideoMode( winWidth, winHeight, screenDepth, SDL_HWSURFACE | SDL_DOUBLEBUF);

  • The screen depth is usually 32

  • If the screen cannot be created, NULL will be returned

  • When a surface is no longer needed it should be freed

    • SDL_FreeSurface(surface);

Setting a window title
Setting a Window Title

  • You can set the title in the top of the window

    • SDL_WM_SetCaption( “Title", NULL );

  • The title will be displayed in the window decoration area, usually at the top of the window

Sdl coordinates
SDL Coordinates

(100, 0)

(0, 0)

(0, 100)

(100, 100)

  • The origin of a window is the top-left corner

  • Y coordinates increase as we go down

Loading images
Loading Images

  • SDL can load images in the BMP format

  • There are extensions which can load other formats

  • These extensions must be downloaded and installed into your SDL directories

  • Loaded images are stored on surfaces

  • Remember, the screen itself is a surface

  • You can then copy them from one surface to another to make them appear on the screen

Loading images1
Loading Images

  • To load an image

    • SDL_Surface *image = SDL_LoadBMP(“file.bmp”);

      • This will either load the image or return NULL if it cannot be loaded

  • The trouble is that the image might not have the same format as the screen you want to display it on

  • You can convert it to the correct format as follows

    • SDL_Surface *displayImage = SDL_DisplayFormat(image);

Loading images2
Loading Images

  • These steps are done often enough to warrant creating a function or method for loading an image

    SDL_Surface* loadImage(const char* fileName) {

    SDL_Surface *tmp = NULL, *image = NULL;

    tmp = SDL_LoadBMP(fileName);

    if(tmp) {

    image = SDL_DisplayFormat(tmp);


    return image;


Rendering images
Rendering Images

  • When you load an image

    • It is stored on a surface

  • This does not make the image visible

    • The image must be copied to the screen to be visible

  • We move an image using bit blitting

    • Bit block image transfer

    • This is done with the function SDL_BlitSurface

Sdl blitsurface

  • intSDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)

    • Src – source surface

    • Srcrect – rectangle delimiting areas to copy or NULL for entire image

    • Dst – the destination surface

    • Dstrect – position to place on destination surface. If NULL image will be placed at top-left corner

    • Returns 0 on success

Sdl rect

  • This is a common structure used to indicate the size and position of rectangular areas


    Sint16 x, y;

    Uint16 w, h;

    } SDL_Rect;

Event handling
Event Handling

  • Many events happen while a program is running

    • Key presses

    • Mouse movement

    • Window resizing

    • Window closing

  • Games are interested in these events and need to be able to find out when they occur

  • This can be done using

    • SDL_PollEvent(& event)

Sdl event

typedef union{

Uint8 type; SDL_ActiveEvent active; SDL_KeyboardEvent key; SDL_MouseMotionEvent motion; SDL_MouseButtonEvent button; SDL_JoyAxisEventjaxis; SDL_JoyBallEventjball; SDL_JoyHatEventjhat; SDL_JoyButtonEventjbutton; SDL_ResizeEvent resize; SDL_ExposeEvent expose; SDL_QuitEvent quit; SDL_UserEvent user; SDL_SysWMEventsyswm; } SDL_Event;

  • This is used for all event types

  • Note that it is a union

  • The type field indicates which member of the union is to be used

Sdl keyboardevent


Uint8 type;

Uint8 state;


} SDL_KeyboardEvent;

Sdl keysym

typedefstruct{ Uint8 scancode; SDLKey sym; SDLMod mod; Uint16 unicode; } SDL_keysym;

Event processing loop
Event Processing Loop

while(SDL_PollEvent(&event)){ switch(event.type){ case SDL_KEYDOWN: if(event.key.keysym.sym==SDLK_LEFT) move_left(); break; . . . } }

Poll for events and process each of the events

The game loop
The Game Loop

bool quit = false;

SDL_Event event;

while( quit == false ) {

if( SDL_PollEvent( &event ) ) {

if( event.type == SDL_QUIT ) {

quit = true;


if( SDL_Flip( screen ) == -1 ) {

//return 1;




This processes eventsand keeps the windowon the screen untilthe X in the top rightof the window is clicked.

Drawing text
Drawing Text

  • SDL does not support TTF fonts as distributed

  • You can download the extension from


  • Get the file


  • Open the zip file and

    • Copy the file in include to the include directory for your SDL

    • Copy the files in lib to the lib directory for your SDL

  • You will need to copy the new DLLs to any project that wants to use text

Preparing to use text
Preparing to Use Text

  • Set the text color


    textColor.r = textColor.g = textColor.b = 255;

  • Initialize the TTF extension

    if( TTF_Init() == -1 ) {

    return false;


  • Load the font

    if( NULL == (font = TTF_OpenFont( "lazy.ttf", 28 )) ) {

    return false;


Rendering the text
Rendering the Text

  • text is rendered to a newly created surface

  • You then copy this surface onto the surface where the text should appear

    textSurface = TTF_RenderText_Solid( font,

    "A-Maze-ing", textColor );

  • This surface is then blitted onto the destination surface


  • Colors are specified as

    • RGB with each value from 0 – 255

  • There are two different structures

    • An unsigned 32 bit int

    • An SDL_Color structure

  • SDL_Color has members

    • r, g, b

  • To create the 32 bit int

    unsigned int color = SD_MapRGB(screen->format,

    255, 255, 255);

Drawing lines rectangles
Drawing Lines & Rectangles

intSDL_DrawLine(SDL_Surface* dst,

int x1, int y1,

int x2, int y2,

Uint32 color)

intSDL_FillRect(SDL_Surface *dst,

SDL_Rect *dstrect,

Uint32 color)

  • Both functions return 0 on success