Your SlideShare is downloading. ×
0
Game Development With SDL2
Who Am I ?
● Eric Basile
– Engineer at Hitpoint Studios.
● Worked On Win8 & iOS titles
– Graduated From Champlain College ...
What Is SDL ?
● SDL stands for Simple Directmedia Layer
– Multimedia library that provides access to :
● Graphics, Sound, ...
History of SDL
● Created by Sam Lantinga at Loki Games 1998
– Used to port Doom to BeOS
– SMPEG and OpenAL developed to wo...
Whats new in 2
● SDL v2.0.0 stable Released in August 11 2013
– Not backwards compatible with SDL 1.2
● Most repos only ha...
Who's Using It ?
And Tons of Indie developers !!
Whats using it
AND SO MUCH MORE !!
Talk About Build Systems
● Cmake great for cross platform build systems
– Allows people to more or less use development
en...
Basic cmake syntax
file(GLOB game_files src/*.c src/*.cpp src/*.h src/*.hpp)
SOURCE_GROUP(Game FILES ${game_files})
add_ex...
Using Cmake
● Create Directory for your Project Build
– Avoid creating folder in Source Directory
● Run cmake
– Run cmake ...
Cmake gui
Basic SDL Application
Initialize SDL
Handle Events
Draw
Clean up
Handle logic
Initializing SDL
● SDL_Init(uint32 flags) ;
– We can pick and choose what parts of SDL we want to
use (IE just Audio or ju...
Create a window
● SDL_Window * MainWindow ;
– Pointer to what will be our main window
● SDL_Window* SDL_CreateWindow(const...
Create Render Context
● SDL_Renderer* Renderer ;
– Pointer to our Renderer
● SDL_Renderer* SDL_CreateRenderer(SDL_Window*
...
Extensions
● SDL Has Several Extensions Libraries
– Used to Abstract lower level but common SDL
functionality (Ex : Loadin...
Starting Extensions
● Initializing Extensions
– Image
● IMG_Init(int flags)
– What format libs to load for Decoding Ex : I...
SDL Event Handling
SDL_Event
● SDL_Event Handling
– Popular for abstracting input and other system
messages across OS's and platforms
● Can B...
Getting Events
● Use SDL_PollEvent(SDL_Event* event) to get
currently pending event.
– Works nicely with while loops in th...
Check Event Type
● Get event type
– Event->type
● Will tell you what this event is.
– Ex: SDL_CommonEvent,SDL_QuitEvent,
S...
Handling Event
● Use data from event Based on type
– Event->key.keysym.sym == SDLK_DOWN
● Handles down arrow.
– Keysym A s...
2D Drawing
Cartesian plane in SDL
+Y
+X{0,0}
Loading an Image as a texture
● SDL_texture*
– Is a structure that contains an efficient, driver-specific
representation o...
Drawing Images With
SDL_Renderer
● Will copy a portion of the texture to the
current rendering target
SDL_RenderCopyEx(Ren...
Sprite Sheet Animated Image
Drawing
● Two SDL Rects
● SDL_Rects are just struct's with int's for X, Y Width and
Height.
– ...
Sprite Sheet Animated Image
DrawingDestR = {128,128,128,128}
Drawing to The Screen
● SDL_RenderPresent(SDL_Renderer*
renderer)
– update the screen with rendering performed.
● SDL_Rend...
Drawing Simple shapes
● SDL_SetRenderDrawColor(SDL_Renderer*
renderer,Uint8 r,Uint8 g,Uint8 b,Uint8 a)
– Set our renderer'...
Sound
Loading A sound File
● Using SDL_mixer
– Mix_Chunk* SoundFile;
● Pointer to Audio Data in memory
– Mix_Chunk *Mix_LoadWAV(...
Playing Sounds
● Mix_PlayChannel (int channel, Mix_Chunk
*chunk, int loops);
– Channel we want to play on
● -1 to let SDL ...
Clean up
● Its Important to Clean all the assets you have
loaded into memory.
● Assets
– images
● SDL_DestroyTexture(OurTe...
Shutting Down SDL
● Renderer
– SDL_DestroyRenderer(Renderer) ;
● Window
– SDL_DestroyWindow(MainWindow) ;
● Image Extensio...
SDL2 Demo using Everything
Discussed.
Get It NOW !!
$ git clone https://github.com/Samurai336/SDL2_PONG.git
Reasons to use SDL beyond 2D
games.
● Able to pick and choose parts of SDL to use
– Input handler, Audio handler.. etc
● U...
Resources
● Official website
– http://www.libsdl.org/
– Documentation → http://wiki.libsdl.org/
● SDL 1.2 tutorials and in...
Upcoming SlideShare
Loading in...5
×

SDL2 Game Development VT Code Camp 2013

4,359

Published on

VT Code Camp 2013 SDL2 Presentation

Published in: Sports, Technology, Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,359
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
35
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "SDL2 Game Development VT Code Camp 2013"

  1. 1. Game Development With SDL2
  2. 2. Who Am I ? ● Eric Basile – Engineer at Hitpoint Studios. ● Worked On Win8 & iOS titles – Graduated From Champlain College in Burlington VT ● Game Programming BS – SDL has been my side project for the last year. – Website ● Portfolio : EricBasile.com ● Blog : FaceKeyboard.com – Contact ● Email : eric@ericbasile.com ● Twitter : @Samurai336
  3. 3. What Is SDL ? ● SDL stands for Simple Directmedia Layer – Multimedia library that provides access to : ● Graphics, Sound, and Input devices. – Cross Platform ● Set up to be a layer for interfacing with platform & operating-system-specific functions. – Written in C ● Supported Platforms include : – Windows, Linux, OSX, Android, iOS – Open Source ● SDL2 uses zlib license
  4. 4. History of SDL ● Created by Sam Lantinga at Loki Games 1998 – Used to port Doom to BeOS – SMPEG and OpenAL developed to work along side. ● SDL 1.3 Announced in 2008 (This would become 2.0) – Would use zlib license ● 1.2 and older use GNU LGPL ● SDL 2.0 officially announced July 14 2012 – Sam also announces he is joining valve software
  5. 5. Whats new in 2 ● SDL v2.0.0 stable Released in August 11 2013 – Not backwards compatible with SDL 1.2 ● Most repos only have 1.2 right now – SDL2 Hardware accelerated ● 2D rendering using Direct3D, OpenGL or OpenGL ES or software rendering in background. – Official Android and iOS support – Support for multiple windows – Much Much more. ● Over view at: http://wiki.libsdl.org/MigrationGuide
  6. 6. Who's Using It ? And Tons of Indie developers !!
  7. 7. Whats using it AND SO MUCH MORE !!
  8. 8. Talk About Build Systems ● Cmake great for cross platform build systems – Allows people to more or less use development environment of choice. – Cross Platform (Duh!) – Fairly straightforward scripting.
  9. 9. Basic cmake syntax file(GLOB game_files src/*.c src/*.cpp src/*.h src/*.hpp) SOURCE_GROUP(Game FILES ${game_files}) add_executable(${App_Name} ${game_files} ) find_package(SDL2) include_directories( ${SDL2_INCLUDE_DIR} ${INCLUDE_DIRECTORIES} ) target_link_libraries(${App_Name} ${SDL2_LIBRARY}) Complete cmake available at : https://github.com/Samurai336/SDL2_PONG/blob/master/CMakeLists.txt set (App_Name "SDL2_PONG")
  10. 10. Using Cmake ● Create Directory for your Project Build – Avoid creating folder in Source Directory ● Run cmake – Run cmake with path to directory containing CmakeLists.txt – $ cmake Path/to/folder/With/Cmake/List/
  11. 11. Cmake gui
  12. 12. Basic SDL Application Initialize SDL Handle Events Draw Clean up Handle logic
  13. 13. Initializing SDL ● SDL_Init(uint32 flags) ; – We can pick and choose what parts of SDL we want to use (IE just Audio or just input). ● Available flags – SDL_INIT_TIMER, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_INIT_JOYSTICK, SDL_INIT_HAPTIC, SDL_INIT_GAMECONTROLLER, SDL_INIT_EVENTS, SDL_INIT_EVERYTHING. ● Use or for multiple flags (SDL_INIT_TIMER|SDL_INIT_AUDIO) ● We will use SDL_INIT_EVERYTHING. – Check things Started ok. if(SDL_Init(SDL_INIT_EVERYTHING) < 0) { printf("failed to initin"); }
  14. 14. Create a window ● SDL_Window * MainWindow ; – Pointer to what will be our main window ● SDL_Window* SDL_CreateWindow(const char* title, int x,int y,int w,int h,Uint32 flags) – Will give us a pointer to a created window at with specified width, height, positon and title. – Flags for windows include: SDL_WINDOW_FULLSCREEN, SDL_WINDOW_BORDERLESS, SDL_WINDOW_RESIZABLE and more. MainWindow = SDL_CreateWindow("SDL2_PONG", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_RESIZABLE );
  15. 15. Create Render Context ● SDL_Renderer* Renderer ; – Pointer to our Renderer ● SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags); – Creates a 2D rendering context for a windows ● Pointer to the window ● the index of the rendering driver to initialize (-1 to initialize the first one supporting the requested flags) ● Enumerated flags to specify rendering context. – Example : SDL_RENDERER_ACCELERATED for hardware accelerated SDL_CreateRenderer(MainWindow , -1, SDL_RENDERER_ACCELERATED );
  16. 16. Extensions ● SDL Has Several Extensions Libraries – Used to Abstract lower level but common SDL functionality (Ex : Loading Compressed Image formats) – Extension Libraries Available: SDL_image, SDL_mixer,SDL_net, SDL_rtf, SDL_ttf. – We will be Covering: SDL_image & SDL_mixer.
  17. 17. Starting Extensions ● Initializing Extensions – Image ● IMG_Init(int flags) – What format libs to load for Decoding Ex : IMG_INIT_JPG for jpg ● We will be using png – Mixer ● Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize); – We will use 44100 for frequency – MIX_DEFAULT_FORMAT for our format – 2 channels – Chunk size of 4096 ● More or less whats Default in the Documentation :P Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 4096) IMG_Init(IMG_INIT_PNG);
  18. 18. SDL Event Handling
  19. 19. SDL_Event ● SDL_Event Handling – Popular for abstracting input and other system messages across OS's and platforms ● Can Be used independently – SDL_Init(SDL_INIT_EVENTS); ● Used for : – SDL_KeyboardEvent SDL_MouseButtonEvent SDL_MouseMotionEvent SDL_WindowEvent SDL_TouchFingerEvent and more...
  20. 20. Getting Events ● Use SDL_PollEvent(SDL_Event* event) to get currently pending event. – Works nicely with while loops in the main loop. while (SDL_PollEvent(&event)) { // handle your event here }
  21. 21. Check Event Type ● Get event type – Event->type ● Will tell you what this event is. – Ex: SDL_CommonEvent,SDL_QuitEvent, SDL_MouseButtonEvent, SDL_TouchEvent ● Works great in a Switch Statement switch(test_event->type) { case SDL_MOUSEMOTION: printf("We got a motion event.n"); printf("Current mouse position is: (%d, %d)n", test_event.motion.x, test_event.motion.y); break; default: printf("Unhandled Event!n"); break; } }
  22. 22. Handling Event ● Use data from event Based on type – Event->key.keysym.sym == SDLK_DOWN ● Handles down arrow. – Keysym A structure that contains key information and sym is an SDL virtual key code. if(sym == SDLK_DOWN) { Player2.SetY(Player2.GetY() + 25); } else if(sym == SDLK_UP) { Player2.SetY(Player2.GetY() - 25); }
  23. 23. 2D Drawing
  24. 24. Cartesian plane in SDL +Y +X{0,0}
  25. 25. Loading an Image as a texture ● SDL_texture* – Is a structure that contains an efficient, driver-specific representation of pixel data. ● Using SDL_image – SDL_Texture* IMG_LoadTexture(SDL_Renderer *renderer, const char *file) ● Pointer to the render context where we will display our image. ● Path to our file. ● 1.2 used SDL_Surface* OurTexture = IMG_LoadTexture(Renderer, "./ImageFile.png");
  26. 26. Drawing Images With SDL_Renderer ● Will copy a portion of the texture to the current rendering target SDL_RenderCopyEx(Renderer, OurTexture, NULL, &DestR, 0.0, NULL, SDL_FLIP_NONE); DestR = {128,128,128,128}
  27. 27. Sprite Sheet Animated Image Drawing ● Two SDL Rects ● SDL_Rects are just struct's with int's for X, Y Width and Height. – One for where on the sprite sheet and one for where to display in the windows render context. Here's our source rect parameter would be {128,128,128,128} SDL_RenderCopyEx(Renderer, OurTexture, &SrcR, &DestR, 0.0, NULL, SDL_FLIP_NONE);
  28. 28. Sprite Sheet Animated Image DrawingDestR = {128,128,128,128}
  29. 29. Drawing to The Screen ● SDL_RenderPresent(SDL_Renderer* renderer) – update the screen with rendering performed. ● SDL_RenderClear(SDL_Renderer* renderer) – clear the current rendering target with the drawing color. ● These Need to be done every frame to see what we have drawn on screen. SDL_RenderPresent(Renderer); SDL_RenderClear(Renderer);
  30. 30. Drawing Simple shapes ● SDL_SetRenderDrawColor(SDL_Renderer* renderer,Uint8 r,Uint8 g,Uint8 b,Uint8 a) – Set our renderer's rgb draw color. ● SDL_RenderFillRect(SDL_Renderer* renderer,const SDL_Rect* rect) – Draws a rect in the passed render context ● Also Available in SDL are : – SDL_RenderDrawLine, SDL_RenderDrawLines, SDL_RenderDrawPoint, SDL_RenderDrawPoints, SDL_RenderDrawRect, SDL_RenderDrawRects. SDL_RenderFillRect(Renderer, &DestR);
  31. 31. Sound
  32. 32. Loading A sound File ● Using SDL_mixer – Mix_Chunk* SoundFile; ● Pointer to Audio Data in memory – Mix_Chunk *Mix_LoadWAV(const char *fname); ● Will load fname file into memory and return a pointer to it. Mix_Chunk* SoundFile = Mix_LoadWAV("./SoundFIle.wav") ;
  33. 33. Playing Sounds ● Mix_PlayChannel (int channel, Mix_Chunk *chunk, int loops); – Channel we want to play on ● -1 to let SDL choose it for you – Pointer to our sound file – How many times to loop ● 0 for once and -1 for infinite. Mix_PlayChannel(-1, SoundFile, 0);
  34. 34. Clean up ● Its Important to Clean all the assets you have loaded into memory. ● Assets – images ● SDL_DestroyTexture(OurTexture); – Sounds ● Mix_FreeChunk(SoundFile) ;
  35. 35. Shutting Down SDL ● Renderer – SDL_DestroyRenderer(Renderer) ; ● Window – SDL_DestroyWindow(MainWindow) ; ● Image Extension – IMG_Quit(); ● Audio – Mix_CloseAudio() ; ● SDL – SDL_Quit() ;
  36. 36. SDL2 Demo using Everything Discussed. Get It NOW !! $ git clone https://github.com/Samurai336/SDL2_PONG.git
  37. 37. Reasons to use SDL beyond 2D games. ● Able to pick and choose parts of SDL to use – Input handler, Audio handler.. etc ● Used for 3D games – Great for creating OpenGL OpenGLes 1.0 & 2.0 and DirectX render contexts – Now you have a way to handle cross platform input ● Works on just about anything – Open source can compile it anywhere and add support yourself – Works on Windows, Linux, Mac OS X, iOS, Android – Sorta works on PSP and Raspberry Pi
  38. 38. Resources ● Official website – http://www.libsdl.org/ – Documentation → http://wiki.libsdl.org/ ● SDL 1.2 tutorials and information – http://lazyfoo.net/SDL_tutorials/index.php – http://www.sdltutorials.com/ ● History – http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer ● Game and company logos from – http://store.steampowered.com/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×