Created
October 9, 2017 09:50
-
-
Save thebirk/d47486e6f26402fac446d5f8e2db018d to your computer and use it in GitHub Desktop.
OpenAL binding for Odin - odin-lang.org
This file contains hidden or 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
when ODIN_OS == "windows" { | |
foreign_library openal "OpenAL32.lib"; | |
} else { | |
_ := compile_assert(false); | |
} | |
/* | |
ALboolean -> u8 | |
ALchar -> u8 | |
ALbyte -> i8 | |
ALubyte -> u8 | |
ALshort -> i16 | |
ALushort -> u16 | |
ALint -> i32 | |
ALuint -> u32 | |
ALsizei -> i32 | |
ALenum -> i32 | |
ALfloat -> f32 | |
ALdouble -> f64 | |
ALvoid -> rawptr? | |
*/ | |
INVALID :: -1; | |
NONE :: 0; | |
FALSE :: 0; | |
TRUE :: 1; | |
SOURCE_RELATIVE :: 0x202; | |
CONE_INNER_ANGLE :: 0x1001; | |
CONE_OUTER_ANGLE :: 0x1002; | |
PITCH :: 0x1003; | |
POSITION :: 0x1004; | |
DIRECTION :: 0x1005; | |
VELOCITY :: 0x1006; | |
LOOPING :: 0x1007; | |
BUFFER :: 0x1009; | |
GAIN :: 0x100A; | |
MIN_GAIN :: 0x100D; | |
MAX_GAIN :: 0x100E; | |
ORIENTATION :: 0x100F; | |
CHANNEL_MASK :: 0x3000; | |
SOURCE_STATE :: 0x1010; | |
INITIAL :: 0x1011; | |
PLAYING :: 0x1012; | |
PAUSED :: 0x1013; | |
STOPPED :: 0x1014; | |
BUFFERS_QUEUED :: 0x1015; | |
BUFFERS_PROCESSED :: 0x1016; | |
SEC_OFFSET :: 0x1024; | |
SAMPLE_OFFSET :: 0x1025; | |
BYTE_OFFSET :: 0x1026; | |
SOURCE_TYPE :: 0x1027; | |
STATIC :: 0x1028; | |
STREAMING :: 0x1029; | |
UNDETERMINED :: 0x1030; | |
FORMAT_MONO8 :: 0x1100; | |
FORMAT_MONO16 :: 0x1101; | |
FORMAT_STEREO8 :: 0x1102; | |
FORMAT_STEREO16 :: 0x1103; | |
REFERENCE_DISTANCE :: 0x1020; | |
ROLLOFF_FACTOR :: 0x1021; | |
CONE_OUTER_GAIN :: 0x1022; | |
MAX_DISTANCE :: 0x1023; | |
FREQUENCY :: 0x2001; | |
BITS :: 0x2002; | |
CHANNELS :: 0x2003; | |
SIZE :: 0x2004; | |
UNUSED :: 0x2010; | |
PENDING :: 0x2011; | |
PROCESSED :: 0x2012; | |
NO_ERROR :: FALSE; | |
INVALID_NAME :: 0xA001; | |
ILLEGAL_ENUM :: 0xA002; | |
INVALID_ENUM :: 0xA002; | |
INVALID_VALUE :: 0xA003; | |
ILLEGAL_COMMAND :: 0xA004; | |
INVALID_OPERATION :: 0xA004; | |
OUT_OF_MEMORY :: 0xA005; | |
VENDOR :: 0xB001; | |
VERSION :: 0xB002; | |
RENDERER :: 0xB003; | |
EXTENSIONS :: 0xB004; | |
DOPPLER_FACTOR :: 0xC000; | |
DOPPLER_VELOCITY :: 0xC001; | |
SPEED_OF_SOUND :: 0xC003; | |
DISTANCE_MODEL :: 0xD000; | |
INVERSE_DISTANCE :: 0xD001; | |
INVERSE_DISTANCE_CLAMPED :: 0xD002; | |
LINEAR_DISTANCE :: 0xD003; | |
LINEAR_DISTANCE_CLAMPED :: 0xD004; | |
EXPONENT_DISTANCE :: 0xD005; | |
EXPONENT_DISTANCE_CLAMPED :: 0xD006; | |
foreign openal { | |
Enable :: proc(capability: i32) #cc_c #link_name "alEnable" ---; | |
Disable :: proc(capability: i32) #cc_c #link_name "alDisable" ---; | |
IsEnabled :: proc(capability: i32) -> u8 #cc_c #link_name "alIsEnabled" ---; | |
GetString :: proc(param: i32) -> ^u8 #cc_c #link_name "alGetString" ---; | |
GetBooleanv :: proc(param: i32, data: ^u8) #cc_c #link_name "alGetBooleanv" ---; | |
GetIntegerv :: proc(param: i32, data: ^i32) #cc_c #link_name "alGetIntegerv" ---; | |
GetFloatv :: proc(param: i32, data: ^f32) #cc_c #link_name "alGetFloatv" ---; | |
GetDoublev :: proc(param: i32, data: ^f64) #cc_c #link_name "alGetDoublev" ---; | |
GetBoolean :: proc(param: i32) -> u8 #cc_c #link_name "alGetBoolean" ---; | |
GetInteger :: proc(param: i32) -> i32 #cc_c #link_name "alGetInteger" ---; | |
GetFloat :: proc(param: i32) -> f32 #cc_c #link_name "alGetFloat" ---; | |
GetDouble :: proc(param: i32) -> f64 #cc_c #link_name "alGetDouble" ---; | |
GetError :: proc() -> i32 #cc_c #link_name "alGetError" ---; | |
IsExtensionPresent :: proc(extname: ^u8) -> u8 #cc_c #link_name "alIsExtensionPresent" ---; | |
GetProcAddress :: proc(fname: ^u8) -> rawptr #cc_c #link_name "alGetProcAddress" ---; | |
GetEnumValue :: proc(ename: ^u8) -> i32 #cc_c #link_name "alGetEnumValue" ---; | |
Listenerf :: proc(param: i32, value: f32) #cc_c #link_name "alListenerf" ---; | |
Listener3f :: proc(param: i32, value1, value2, value3: f32) #cc_c #link_name "alListener3f" ---; | |
Listenerfv :: proc(param: i32, values: ^f32) #cc_c #link_name "alListenerfv" ---; | |
Listeneri :: proc(param: i32, value: i32) #cc_c #link_name "alListeneri" ---; | |
Listener3i :: proc(param: i32, value1, value2, value3: i32) #cc_c #link_name "alListener3i" ---; | |
Listeneriv :: proc(param: i32, values: ^i32) #cc_c #link_name "alListeneriv" ---; | |
GetListenerf :: proc(param: i32, value: ^f32) #cc_c #link_name "alGetListenerf" ---; | |
GetListener3f :: proc(param: i32, value1, value2, value3: ^f32) #cc_c #link_name "alGetListener3f" ---; | |
GetListenerfv :: proc(param: i32, values: ^f32) #cc_c #link_name "alGetListenerfv" ---; | |
GetListeneri :: proc(param: i32, value: ^i32) #cc_c #link_name "alGetListeneri" ---; | |
GetListener3i :: proc(param: i32, value1, value2, value3: ^i32) #cc_c #link_name "alGetListener3i" ---; | |
GetListeneriv :: proc(param: i32, values: ^i32) #cc_c #link_name "alGetListeneriv" ---; | |
GenSources :: proc(n: i32, sources: ^u32) #cc_c #link_name "alGenSources" ---; | |
DeleteSources :: proc(n: i32, sources: ^u32) #cc_c #link_name "alDeleteSources" ---; | |
IsSource :: proc(sid: u32) -> u8 #cc_c #link_name "alIsSource" ---; | |
Sourcef :: proc(sid: u32, param: i32, value: f32) #cc_c #link_name "alSourcef" ---; | |
Source3f :: proc(sid: u32, param: i32, value1, value2, value3: f32) #cc_c #link_name "alSource3f" ---; | |
Sourcefv :: proc(sid: u32, param: i32, values: ^f32) #cc_c #link_name "alSourcefv" ---; | |
Sourcei :: proc(sid: u32, param: i32, value: i32) #cc_c #link_name "alSourcei" ---; | |
Source3i :: proc(sid: u32, param: i32, value1, value2, value3: i32) #cc_c #link_name "alSource3i" ---; | |
Sourceiv :: proc(sid: u32, param: i32, values: ^i32) #cc_c #link_name "alSourceiv" ---; | |
GetSourcef :: proc(sid: u32, param: i32, value: ^f32) #cc_c #link_name "alGetSourcef" ---; | |
GetSource3f :: proc(sid: u32, param: i32, value1, value2, value3: ^f32) #cc_c #link_name "alGetSource3f" ---; | |
GetSourcefv :: proc(sid: u32, param: i32, values: ^f32) #cc_c #link_name "alGetSourcefv" ---; | |
GetSourcei :: proc(sid: u32, param: i32, value: ^i32) #cc_c #link_name "alGetSourcei" ---; | |
GetSource3i :: proc(sid: u32, param: i32, value1, value2, value3: ^i32) #cc_c #link_name "alGetSource3i" ---; | |
GetSourceiv :: proc(sid: u32, param: i32, values: ^i32) #cc_c #link_name "alGetSourceiv" ---; | |
SourcePlayv :: proc(ns: i32, sids: ^u32) #cc_c #link_name "alSourcePlayv" ---; | |
SourceStopv :: proc(ns: i32, sids: ^u32) #cc_c #link_name "alSourceStopv" ---; | |
SourceRewindv :: proc(ns: i32, sids: ^u32) #cc_c #link_name "alSourceRewindv" ---; | |
SourcePausev :: proc(ns: i32, sids: ^u32) #cc_c #link_name "alSourcePausev" ---; | |
SourcePlay :: proc(sid: u32) #cc_c #link_name "alSourcePlay" ---; | |
SourceStop :: proc(sid: u32) #cc_c #link_name "alSourceStop" ---; | |
SourceRewind :: proc(sid: u32) #cc_c #link_name "alSourceRewind" ---; | |
SourcePause :: proc(sid: u32) #cc_c #link_name "alSourcePause" ---; | |
SourceQueueBuffers :: proc(sid: u32,numEntries: i32, bids: ^u32) #cc_c #link_name "alSourceQueueBuffers" ---; | |
SourceUnqueueBuffers :: proc(sid: u32,numEntries: i32, bids: ^u32) #cc_c #link_name "alSourceUnqueueBuffers" ---; | |
GenBuffers :: proc(n: i32, buffers: ^u32) #cc_c #link_name "alGenBuffers" ---; | |
DeleteBuffers :: proc(n: i32, buffers: ^u32) #cc_c #link_name "alDeleteBuffers" ---; | |
IsBuffer :: proc(bid: u32) -> u8 #cc_c #link_name "alIsBuffer" ---; | |
BufferData :: proc(bid: u32, format: i32, data: ^u8, size: i32, freq: i32) #cc_c #link_name "alBufferData" ---; | |
Bufferf :: proc(bid: u32,param: i32, value: f32) #cc_c #link_name "alBufferf" ---; | |
Buffer3f :: proc(bid: u32,param: i32, value1, value2, value3: f32) #cc_c #link_name "alBuffer3f" ---; | |
Bufferfv :: proc(bid: u32,param: i32, values: ^f32) #cc_c #link_name "alBufferfv" ---; | |
Bufferi :: proc(bid: u32,param: i32, value: i32) #cc_c #link_name "alBufferi" ---; | |
Buffer3i :: proc(bid: u32,param: i32, value1, value2, value3: i32) #cc_c #link_name "alBuffer3i" ---; | |
Bufferiv :: proc(bid: u32,param: i32, values: ^i32) #cc_c #link_name "alBufferiv" ---; | |
GetBufferf :: proc(bid: u32,param: i32, value: ^f32) #cc_c #link_name "alGetBufferf" ---; | |
GetBuffer3f :: proc(bid: u32,param: i32, value1, value2, value3: ^f32) #cc_c #link_name "alGetBuffer3f" ---; | |
GetBufferfv :: proc(bid: u32,param: i32, values: ^f32) #cc_c #link_name "alGetBufferfv" ---; | |
GetBufferi :: proc(bid: u32,param: i32, value: ^i32) #cc_c #link_name "alGetBufferi" ---; | |
GetBuffer3i :: proc(bid: u32,param: i32, value1, value2, value3: ^i32) #cc_c #link_name "alGetBuffer3i" ---; | |
GetBufferiv :: proc(bid: u32,param: i32, values: ^i32) #cc_c #link_name "alGetBufferiv" ---; | |
DopplerFactor :: proc(value: f32) #cc_c #link_name "alDopplerFactor" ---; | |
DopplerVelocity :: proc(value: f32) #cc_c #link_name "alDopplerVelocity" ---; | |
SpeedOfSound :: proc(value: f32) #cc_c #link_name "alSpeedOfSound" ---; | |
DistanceModel :: proc(distanceModel: i32) #cc_c #link_name "alDistanceModel" ---; | |
} |
This file contains hidden or 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
when ODIN_OS == "windows" { | |
foreign_library openal "OpenAL32.lib"; | |
} else { | |
_ := compile_assert(false); | |
} | |
FALSE :: 0; | |
TRUE :: 1; | |
FREQUENCY :: 0x1007; | |
REFRESH :: 0x1008; | |
SYNC :: 0x1009; | |
MONO_SOURCES :: 0x1010; | |
STEREO_SOURCES :: 0x1011; | |
NO_ERROR :: FALSE; | |
INVALID_DEVICE :: 0xA001; | |
INVALID_CONTEXT :: 0xA002; | |
INVALID_ENUM :: 0xA003; | |
INVALID_VALUE :: 0xA004; | |
OUT_OF_MEMORY :: 0xA005; | |
DEFAULT_DEVICE_SPECIFIER :: 0x1004; | |
DEVICE_SPECIFIER :: 0x1005; | |
EXTENSIONS :: 0x1006; | |
MAJOR_VERSION :: 0x1000; | |
MINOR_VERSION :: 0x1001; | |
ATTRIBUTES_SIZE :: 0x1002; | |
ALL_ATTRIBUTES :: 0x1003; | |
DEFAULT_ALL_DEVICES_SPECIFIER :: 0x1012; | |
ALL_DEVICES_SPECIFIER :: 0x1013; | |
CAPTURE_DEVICE_SPECIFIER :: 0x310; | |
CAPTURE_DEFAULT_DEVICE_SPECIFIER :: 0x311; | |
CAPTURE_SAMPLES :: 0x312; | |
Device :: struct #ordered {}; | |
Context :: struct #ordered {}; | |
foreign openal { | |
CreateContext :: proc(device: ^Device, attrlist: ^i32) -> ^Context #cc_c #link_name "alcCreateContext" ---; | |
MakeContextCurrent :: proc(contex: ^Context ) -> u8 #cc_c #link_name "alcMakeContextCurrent" ---; | |
ProcessContext :: proc(contex: ^Context) #cc_c #link_name "alcProcessContext" ---; | |
SuspendContext :: proc(contex: ^Context) #cc_c #link_name "alcSuspendContext" ---; | |
DestroyContext :: proc(contex: ^Context) #cc_c #link_name "alcDestroyContext" ---; | |
GetCurrentContext :: proc() -> ^Context #cc_c #link_name "alcGetCurrentContext" ---; | |
GetContextsDevice :: proc(contex: ^Context) -> ^Device #cc_c #link_name "alcGetContextsDevice" ---; | |
OpenDevice :: proc(devicename: ^u8) -> ^Device #cc_c #link_name "alcOpenDevice" ---; | |
CloseDevice :: proc(device: ^Device) -> u8 #cc_c #link_name "alcCloseDevice" ---; | |
GetError :: proc(device: ^Device) -> i32 #cc_c #link_name "alcGetError" ---; | |
IsExtensionPresent :: proc(device: ^Device, extname: ^u8) -> u8 #cc_c #link_name "alcIsExtensionPresent" ---; | |
GetProcAddress :: proc(device: ^Device, funcname: ^u8) -> rawptr #cc_c #link_name "alcGetProcAddress" ---; | |
GetEnumValue :: proc(device: ^Device, enumname: ^u8) -> i32 #cc_c #link_name "alcGetEnumValue" ---; | |
GetString :: proc(device: ^Device, param: i32) -> ^u8 #cc_c #link_name "alcGetString" ---; | |
GetIntegerv :: proc(device: ^Device, param: i32, size: i32, data: ^i32) #cc_c #link_name "alcGetIntegerv" ---; | |
CaptureOpenDevice :: proc(devicename: ^u8, frequency: u32, format: i32, buffersize: i32) -> ^Device #cc_c #link_name "alcCaptureOpenDevice" ---; | |
CaptureCloseDevice :: proc(device: ^Device) -> u8 #cc_c #link_name "alcCaptureCloseDevice" ---; | |
CaptureStart :: proc(device: ^Device) #cc_c #link_name "alcCaptureStart" ---; | |
CaptureStop :: proc(device: ^Device) #cc_c #link_name "alcCaptureStop" ---; | |
CaptureSamples :: proc(device: ^Device, buffer: ^u8, samples: i32) #cc_c #link_name "alcCaptureSamples" ---; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment