A "port" of SDL3 in C++.
This basically wrap SDL3 naturally OO looking concepts into proper C++ classes and objects, trying to as straightforward as possible. It was inspired on SDL2pp, with the addition of flexible memory management and wrappers for string and callbacks.
Quick start / TLDR
Goals
- Be header only, we are only wrapping SDL here;
- Mostly wrap the naturally OO-looking API into actual OO C++ constructs;
- Also add little quick improvements like using vocabulary types to better fit C++ idioms;
- See transformations for more details;
 
- Put everything into a SDLnamespace instead of prefixes;
- For uniformity we also wrap non OO entities at lower priority (like aliases, functions, constants, etc);
 
- Interfaces should accept both C structs and the C++ wraps, so you can adapt a codebase gradually or just choose to use only what you deem necessary.
- Flexible, while we use RAII idiom by default, you have the choice to not use it and, for example, manage memory yourself.
Documentation
Example
#include <iostream>
#include <SDL3pp/SDL3pp.h>
#include <SDL3pp/SDL3pp_main.h>
 
using namespace std::chrono_literals;
 
int main(int argc, char** argv)
{
 
                           {128, 128});
 
  bool running = true;
  while (running) {
    }
    renderer.SetDrawColorFloat({.5f, .5f, .5f, 1.f});
    renderer.RenderClear();
    renderer.SetDrawColorFloat({0.f, 0.725f, 0.f, 1.f});
    renderer.RenderFillRect(
SDL::FRect{10, 10, 380, 380});
    renderer.RenderTexture(characterTexture, {}, characterRect);
 
    renderer.Present();
  }
 
  return 0;
}
An efficient driver-specific representation of pixel data.
Definition: SDL3pp_render.h:2142
std::optional< Event > PollEvent()
Poll for currently pending events.
Definition: SDL3pp_events.h:1087
const char * GetBasePath()
Get the directory where the application was run from.
Definition: SDL3pp_filesystem.h:133
void Init(InitFlags flags)
Initialize the SDL library.
Definition: SDL3pp_init.h:256
std::pair< Window, Renderer > CreateWindowAndRenderer(StringParam title, const PointRaw &size, WindowFlags window_flags=0)
Create a window and default renderer.
Definition: SDL3pp_render.h:3208
void Delay(std::chrono::nanoseconds duration)
Wait a specified duration before returning.
Definition: SDL3pp_timer.h:102
constexpr EventType EVENT_QUIT
User-requested quit.
Definition: SDL3pp_events.h:58
constexpr InitFlags INIT_VIDEO
INIT_VIDEO implies INIT_EVENTS, should be initialized on the main thread
Definition: SDL3pp_init.h:70
The structure that defines a point (using floating point values).
Definition: SDL3pp_rect.h:509
A rectangle, with the origin at the upper left (using floating point values).
Definition: SDL3pp_rect.h:1432
The structure that defines a point (using integers).
Definition: SDL3pp_rect.h:83
See more examples at examples directory
Building
Assuming you are on the source dir, you can build with:
cmake -S . -B build
cmake --build build
Installing
There are a few ways to install SDL3pp:
Copy into project
The most basic way is to copy the contents of amalgamation/ or include directly to your project.
System installation:
After build, you can install on you system with cmake:
Alteratively can move into a custom location with:
cmake --install build --install-prefix <directory>