Skip to content

Instantly share code, notes, and snippets.

View icculus's full-sized avatar

Ryan C. Gordon icculus

View GitHub Profile
@icculus
icculus / sdl3-audiostream-format-changes.diff
Created August 30, 2023 17:26
Attempt to generalize SDL3 audio stream format management
diff --git a/src/audio/SDL_audiocvt.c b/src/audio/SDL_audiocvt.c
index 5b3feb044..aac258b97 100644
--- a/src/audio/SDL_audiocvt.c
+++ b/src/audio/SDL_audiocvt.c
@@ -43,8 +43,9 @@ static Sint64 GetResampleRate(const int src_rate, const int dst_rate)
SDL_assert(src_rate > 0);
SDL_assert(dst_rate > 0);
- if (src_rate == dst_rate)
+ if (src_rate == dst_rate) {
@icculus
icculus / testdynaudiostream.c
Last active April 3, 2023 19:31
Changing audio stream samplerate on the fly with SDL3
/*
Copyright (C) 1997-2023 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
@icculus
icculus / obviously-not-valid-c-code.c
Created June 6, 2022 22:09
A pretty intense preprocessor input generated by American Fuzzy Lop
// T preprocessor.
#defin D0(5)
T
#elitA
#define y�a)oogoooooooooooooooooo ���es���������e�� x(a) y(t)n�� x(a= y(t)ne x*a) # this����\owF isn'tica����ڷ��������ŷ���������IGHU dIGHCy whaprte tPe$e\ror dssage.
t te s/�od� \or, w� @ns don'R togr fornincs ma ue y(a��������������������������)ooo �� st beld4i either~ tae>th
#define x(z),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@icculus
icculus / pacmac-power-gpio.c
Created January 26, 2022 18:38
Management of the power button on the PlayStation 1 playing card tin. https://twitter.com/icculus/status/1484628302853726208
// This C code is public domain. --ryan.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>
#include <time.h>
#include <errno.h>
#include <wiringPi.h>
@icculus
icculus / sdl-gpu-pitch.md
Last active September 28, 2023 08:42
This is the Epic MegaGrant pitch I wrote for the SDL GPU API, in case anyone is interested.

Describe your project:

Simple Directmedia Layer (SDL) is the gold standard for low-level, cross-platform game development. It is an open source library that is used at the layer where one might use DirectX, so it's useful both for from-scratch development and for powering game engines. It provides abstractions for video, audio, input, and various system-provided functionality. In many cases, if you're building a cross-platform game, SDL is extremely good at helping you delete a large number of #ifdefs in your project...and entire directories full of code.

SDL is used in the Steam Client, is crucial to the Linux game development ecosystem, and has been used for various platforms in every generation of the Unreal Engine, idTech, Source Engine, etc.

A game written to use SDL might work with almost no code changes across all major desktop operating systems, mobile phones, web browsers, and even the Raspberry Pi. Nintendo shipped SDL in over 7.5 million NES and SNES Classic devices. There are SDL-based games

@icculus
icculus / fnsince.txt
Created October 26, 2021 16:15
SDL/build-scripts/fnsince.pl output on Oct 26 2021...
SDL_AddEventWatch: 2.0.0
SDL_AddHintCallback: 2.0.0
SDL_AddTimer: 2.0.0
SDL_AllocFormat: 2.0.0
SDL_AllocPalette: 2.0.0
SDL_AllocRW: 2.0.0
SDL_AndroidGetActivity: 2.0.0
SDL_AndroidGetExternalStoragePath: 2.0.0
SDL_AndroidGetExternalStorageState: 2.0.0
SDL_AndroidGetInternalStoragePath: 2.0.0
@icculus
icculus / main.rb
Created March 24, 2020 07:22
Tetris in DragonRuby, code at the end of Part 2
$gtk.reset
class TetrisGame
def initialize args
@args = args
@next_piece = nil
@next_move = 30
@score = 0
@gameover = false
@grid_w = 10
@icculus
icculus / main.rb
Created March 23, 2020 20:44
Tetris in DragonRuby, code at the end of Part 1
# This is the code as it stands at the end of
# "Let's make Tetris with DragonRuby Game Toolkit!" Part 1:
# https://www.youtube.com/watch?v=xZMwRSbC4rY
$gtk.reset
class TetrisGame
def initialize args
@args = args
@next_move = 30
$gtk.reset
class TetrisGame
# This is just to get GTK to not complain in the console for now.
def serialize ; { args: '' } ; end
def inspect ; serialize.to_s ; end
def to_s ; serialize.to_s ; end
def render_cube_pixelpos x, y, r, g, b, a=255
@args.outputs.solids << [ x, y, @boxsize, @boxsize, r, g, b, a ]
@icculus
icculus / dragonruby-html5-loader-little-piece.js
Created May 20, 2019 04:59
Choose WebAssembly or asm.js at runtime
var hasWebAssembly = false;
if (typeof WebAssembly==="object" && typeof WebAssembly.Memory==="function") {
hasWebAssembly = true;
}
//console.log("Do we have WebAssembly? " + ((hasWebAssembly) ? "YES" : "NO"));
var buildtype = hasWebAssembly ? "wasm" : "asmjs";
var module = "dragonruby-" + buildtype + ".js";