What Does Sdl Stand for in Windows
SDL library in C/C++ with examples
SDL is Simple DirectMedia Layer.It is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D.It can be used to make animations and video games.
- It basically provides a set of APIs to interact with various devices like graphics hardware, audio, keyboard, mouse, etc.
- It is written in C programming language and works with C++ and various other languages like c# and python.
Installation on Linux ( For OS which uses the apt package manager eg : Ubuntu ):
Take a step-up from those "Hello World" programs. Learn to implement data structures like Heap, Stacks, Linked List and many more! Check out our Data Structures in C course to start learning today.
- Run command sudo apt-get update on your terminal.
- Run command sudo apt-get install clang on your terminal.
- Run command sudo apt-get install libsdl2-2.0-0 libsdl2-dbg libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dbg libsdl2-image-dev on your terminal.
- We need to make a Makefile.So open a text editor of your choice and start writing the code below.
# A simple Makefile for compiling small SDL projects # set the compiler CC := clang # set the compiler flags CFLAGS := `sdl2-config --libs --cflags` -ggdb3 -O0 --std=c99 -Wall -lSDL2_image -lm # add header files here HDRS := # add source files here SRCS := #file-name.c # generate names of object files OBJS := $(SRCS:.c=.o) # name of executable EXEC := #name your executable file # default recipe all: $(EXEC) showfont: showfont.c Makefile $(CC) -o $@ $@.c $(CFLAGS) $(LIBS) glfont: glfont.c Makefile $(CC) -o $@ $@.c $(CFLAGS) $(LIBS) # recipe for building the final executable $(EXEC): $(OBJS) $(HDRS) Makefile $(CC) -o $@ $(OBJS) $(CFLAGS) # recipe for building object files #$(OBJS): $(@:.o=.c) $(HDRS) Makefile # $(CC) -o $@ $(@:.o=.c) -c $(CFLAGS) # recipe to clean the workspace clean: rm -f $(EXEC) $(OBJS) .PHONY: all clean
Header Files:
C++
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_timer.h>
Initialization:
C++
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_timer.h>
int
main(
int
argc,
char
*argv[])
{
if
(SDL_Init(SDL_INIT_EVERYTHING) != 0) {
printf
(
"error initializing SDL: %s\n"
, SDL_GetError());
}
SDL_Window* win = SDL_CreateWindow(
"GAME"
,
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
1000, 1000, 0);
while
(1)
;
return
0;
}
That will create a empty window on your screen.
Output:
We will write a simple program to explain rendering and I/O handling:
C++
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_timer.h>
int
main(
int
argc,
char
*argv[])
{
if
(SDL_Init(SDL_INIT_EVERYTHING) != 0) {
printf
(
"error initializing SDL: %s\n"
, SDL_GetError());
}
SDL_Window* win = SDL_CreateWindow(
"GAME"
,
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
1000, 1000, 0);
Uint32 render_flags = SDL_RENDERER_ACCELERATED;
SDL_Renderer* rend = SDL_CreateRenderer(win, -1, render_flags);
SDL_Surface* surface;
surface = IMG_Load(
"path"
);
SDL_Texture* tex = SDL_CreateTextureFromSurface(rend, surface);
SDL_FreeSurface(surface);
SDL_Rect dest;
SDL_QueryTexture(tex, NULL, NULL, &dest.w, &dest.h);
dest.w /= 6;
dest.h /= 6;
dest.x = (1000 - dest.w) / 2;
dest.y = (1000 - dest.h) / 2;
int
close = 0;
int
speed = 300;
while
(!close) {
SDL_Event event;
while
(SDL_PollEvent(&event)) {
switch
(event.type) {
case
SDL_QUIT:
close = 1;
break
;
case
SDL_KEYDOWN:
switch
(event.key.keysym.scancode) {
case
SDL_SCANCODE_W:
case
SDL_SCANCODE_UP:
dest.y -= speed / 30;
break
;
case
SDL_SCANCODE_A:
case
SDL_SCANCODE_LEFT:
dest.x -= speed / 30;
break
;
case
SDL_SCANCODE_S:
case
SDL_SCANCODE_DOWN:
dest.y += speed / 30;
break
;
case
SDL_SCANCODE_D:
case
SDL_SCANCODE_RIGHT:
dest.x += speed / 30;
break
;
default
:
break
;
}
}
}
if
(dest.x + dest.w > 1000)
dest.x = 1000 - dest.w;
if
(dest.x < 0)
dest.x = 0;
if
(dest.y + dest.h > 1000)
dest.y = 1000 - dest.h;
if
(dest.y < 0)
dest.y = 0;
SDL_RenderClear(rend);
SDL_RenderCopy(rend, tex, NULL, &dest);
SDL_RenderPresent(rend);
SDL_Delay(1000 / 60);
}
SDL_DestroyTexture(tex);
SDL_DestroyRenderer(rend);
SDL_DestroyWindow(win);
SDL_Quit();
return
0;
}
That will render a image on the window which can be controlled via your keyboard up, down, left, right.
Output:
References: https://www.libsdl.org/, https://github.com/vivek9236/rocket_game
What Does Sdl Stand for in Windows
Source: https://www.geeksforgeeks.org/sdl-library-in-c-c-with-examples/