fermium 22605.0.0

An opinionated crate of SDL2 bindings.
Documentation
#![allow(clippy::uninlined_format_args)]

use fermium::{video::*, *};
use gl33::global_commands::load_global_gl_with;

fn main() {
  unsafe {
    assert_eq!(SDL_Init(SDL_INIT_EVERYTHING), 0);

    let win = SDL_CreateWindow(
      b"demo\0".as_ptr().cast(),
      SDL_WINDOWPOS_CENTERED,
      SDL_WINDOWPOS_CENTERED,
      800,
      600,
      (SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI).0,
    );
    assert!(!win.is_null());

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
    SDL_GL_SetAttribute(
      SDL_GL_CONTEXT_PROFILE_MASK,
      SDL_GL_CONTEXT_PROFILE_CORE.0 as _,
    );
    SDL_GL_SetAttribute(
      SDL_GL_CONTEXT_FLAGS,
      SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG.0 as _,
    );

    let ctx = SDL_GL_CreateContext(win);
    assert!(!ctx.0.is_null());

    let time_before = std::time::Instant::now();
    load_global_gl_with(|c| {
      let p = SDL_GL_GetProcAddress(c);
      if p.is_null() {
        print!("Failed to find fn `");
        let mut letter: *const u8 = c.cast::<u8>();
        while *letter != 0 {
          print!("{}", *letter as char);
          letter = letter.add(1);
        }
        println!("`");
      }
      p
    });
    let time_after = std::time::Instant::now();
    let dur = time_after.duration_since(time_before);
    println!("loading took {:?}", dur);

    SDL_Quit();
  }
}