SDL2-C
My efforts to make coding with pure C and SDL2 more clear and fun.
A Collection of SDL2 C Tutorials and Demos, SDL2 with OpenGL / Vulkan (coming soon) and other APIs. Procedural Sounds and Graphics, plus GLSL Shaders for Game-Programming and general purpose. All done in pure C.
Why C?
Because C is seeing! =)
Foreword
Feel free to contact me for criticism, Demo Requests or whatever!
Oh, you can use the code as you wish, but don’t blame me!
Happy hacking!
Coverage
I am trying to cover the SDL2-API as needed, OpenGL, Vulkan and a couple of other common API’s like curl or jannson, tho this is pure C and mainly Linux orientated, doesn’t mean I don’t cross-compile for Windows or Android. If you need a german translation I could make that happen. SDL-Audio Series and Joystick/Gamecontroller Series are nearly finished, just polishing it. At the same time I am building up my C-Snippets, but I am pretty behind on that. SDL_net 2.0 isn’t covered yet.
Procedural Sound Annotation
I spent quite some time on that topic and decided that it’s not worth going further.The Hardware isn’t there yet. The focus of the past few decades was to improve GPU’s. Common audio chips are simpler than ever, if one compares the complexity of a GPU and an audio chip it is clear that the audio chip doesn’t reveal a lot functionality.
Requirements
You should have a working C-Environment and SDL2 Development Libs installed; preferable some of the extensions to SDL, like Mixer, Image and TTF.
If you struggle with getting things up and running, refer to one of those pages: Will Usher or Lazy Foo. For Mac OS: Setting Up An SDL2 Project in Xcode 9 or without Xcode. And if you wish to use SDL2 with CMake: Trenki’s Dev Blog or SDL2 with premake5
Entry Level
This is a set of small introductory programs. It’s about the window, the window icon, a custom cursor, surfaces, Pixel Manipulation and how to save a screenshot.
SDL-Renderer
An Introduction to the Rendering Subsystem.
SDL2-Renderer Repo
- Create a texture from surface, render it flipped, mirrored and rotated.
- Take Screenshot with RenderReadPixels.
- Render and animate a colorful gradient like a new shadertoy one.
- Shows a bit how glsl works and why we want shaders.
SDL-Timers
SDL2-Timer-01 Repo
Records the duration how long left MouseButton is pressed.
SDL2-Timer-02 Repo
Program quits after a certain amount of time.
Put it together
Create Spritesheet from gif and render it timed.
SDL2-GUI-Button Repo
Responsive Button.
Let rect follow the mouse.
It is a follow up from Mousegrab. Shows how to make a Slider.
Drag and Drop
SDL2-DnD Repo
Drag and Drop. Receiving Text and Files via SDL_DropEvent.
Audio
Play music with SDL2 Repo
Use of SDL-Mixer for Music.
SDL2-Mixer-play_mp3 Repo
Use of SDL-Mixer for Sound.
Put it together
SDL2_simple_music_player Repo
Use of SDL-Mixer and GUI-Elements.
Rapid Parallax implementation with 6 Layers.
Roll your own titlebar.
Fonts
This is a series about the SDL-Extension SDL_ttf 2.0
Non-Linear Animations
In the surfaces-series I did some naive linear animations and scaling. This is a demo series about non linear animations. To get more control I am gonna use floats here, now I need some non linear functions. Math provides tons of those functions. In computer graphics shaping functions are well known and used to create procedural graphics, too. But, one can use those functions also to shape the time-steps, positions or colors.
Repository with Python 3 mathplotlib sources included.
Procedural/algorithmic Textures
(Game-)Physics
SDL2-Game-Physics Repo
This is a series about physics - SI-Units, Velocity, Acceleration, Gravity, Friction etc.
Artificial intelligence (AI)
Curves
How to apply De Casteljau’s algorithm on a quadratic Bézier curve.
More Textures
SDL2-create_tex_part_of_win Repo
Re-Render a part of the screen using SetRenderTarget
and SDL_TEXTUREACCESS_TARGET
.
This small demo shows how to use TextureColorMod.
A simple Game
My scaleable Pong implementation. You can take over two player control anytime, the AI will take over if you go afk. A mingw Windows 64 build is in the Makefile.
Intermediate
You need to fully understand pointers, dynamic memory allocation and bit operations.
Strings/Input/Text
This is a small SDL2 text API demo
A GIF-Viewer
Plays an animated gif - pauseable and scaleable. uses: SDL_gifwrap Repo by Jonathan Dearborn
SDL and OpenGL
SDL2-OpenGL Repo
This is a starter series about GLSL Shaders using SDL2 as OpenGL Helper and a bit Shader-Language for C-Coders.
Boilerplate C code to get OpenGL with an 4.6 context rendered. Repository
NanoVG-SDL2 starter Repo Startup Code to use SDL2/OpenGL/NanoVG
Using SDL2 to show Shadertoy GLSL Fragment Shaders. Features “drag and drop”, Auto-Screenshot with shadername, editing with Auto-Compile. WIP: Finishing SDL2-Audio right now, to move on to FFT and finally implement visualization of GLSL shaders with low latency.
Misc Demos
Demo using SDL2 Image, SDL2 TTF, SDL2 Mixer.
Flipping Bits on a real char and visualize that.
Random Stuff
C&C++ mixed Code:
Classic Pong and Breakout stuff Ressources covering Atari’s classic game.
C++ game engine skeleton with GNU-Makefile
Misc
Light Template SDL2 Template for KDevelop
Heavy Template SDL2 Template for KDevelop - with TTF & Mixer
Simple-state-pattern High Level Game State Management - Code Flow diagram.
External ressources
C
Stephen Meier’s SDL2 Tutorials
SDL Mixer: change Frequency during runtime
C++
http://gigi.nullneuron.net/gigilabs/writing/sdl2-tutorials/