This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
------------------------------------------------------------------------------ | |
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; |