Skip to content

Instantly share code, notes, and snippets.

View mattiasgustavsson's full-sized avatar
💾

Mattias Gustavsson mattiasgustavsson

💾
View GitHub Profile
#ifdef __cplusplus
struct void_cast {
inline void_cast( void* x_ ) : x( x_ ) { }
inline void_cast( void const* x_ ) : x( (void*) x_ ) { }
template< typename T > inline operator T() { return (T)x; } // cast to whatever requested
void* x;
};
#define VOID_CAST( x ) void_cast( x )
#else
#define VOID_CAST( x ) x
// color1 and color2 are R4G4B4 12bit RGB color values, alpha is 0-255
uint16_t blend_12bit( uint16_t color1, uint16_t color2, uint8_t alpha ) {
uint64_t c1 = (uint64_t) color1;
uint64_t c2 = (uint64_t) color2;
uint64_t a = (uint64_t)( alpha >> 4 );
// bit magic to alpha blend R G B with single mul
c1 = ( c1 | ( c1 << 12 ) ) & 0x0f0f0f;
c2 = ( c2 | ( c2 << 12 ) ) & 0x0f0f0f;
uint32_t o = ( ( ( ( c2 - c1 ) * a ) >> 4 ) + c1 ) & 0x0f0f0f;
@mattiasgustavsson
mattiasgustavsson / bass_and_treble.h
Created January 30, 2025 13:06
Audio filters for a stereo widening effect and for simple bass/treble eq
/*
------------------------------------------------------------------------------
Licensing information can be found at the end of the file.
------------------------------------------------------------------------------
bass_and_treble.h - v1.0 - Simple audio filter to boost bass and treble.
Do this:
#define BASS_AND_TREBLE_IMPLEMENTATION
before you include this file in *one* C/C++ file to create the implementation.
@mattiasgustavsson
mattiasgustavsson / lowpass.h
Last active March 28, 2025 16:32
low pass filter
typedef struct filter_t {
double a0, a1, a2; // Feedforward coefficients
double b1, b2; // Feedback coefficients
double z1, z2; // Filter state (history)
} filter_t;
void filter_init(filter_t *filter, double cutoff, double sample_rate) {
double const PI = 3.14159265358979323846;
double omega = 2.0 * PI * cutoff / sample_rate;
@mattiasgustavsson
mattiasgustavsson / main.c
Created March 5, 2024 19:18
Minimal code example for creating a window to plot pixels to
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#include <windows.h>
#pragma comment( lib, "user32.lib" )
#pragma comment( lib, "gdi32.lib" )
#define SCRW 640
#define SCRH 480
@mattiasgustavsson
mattiasgustavsson / strpool.c
Last active March 30, 2025 11:00
Simple string allocation system, allowing for freeing all allocated strings in one go
#define STR_NEW( pool, str ) ( pool = memcpy( (char*) memcpy( malloc( ( str ? strlen( str ) : 0 ) + 1 + \
sizeof( char* ) ), &pool, sizeof( char* ) ) + sizeof( char*), str ? str : "", ( str ? strlen( str ) : 0 ) + 1 ) )
#define STR_FREE( pool ) while( pool ) { char* STR_FREE_TMP = ( pool - sizeof( char* ) ); \
pool = ( *(char**)STR_FREE_TMP ); free( STR_FREE_TMP ); }
//---------------------------
char* strpool = NULL;