2
0
Эх сурвалжийг харах

[openal] Fix extension and add new api (to 1.23.1) (#819)

Yuxiao Mao 1 долоо хоног өмнө
parent
commit
f404be1fd3

+ 9 - 1
libs/openal/ALCImports.h

@@ -17,4 +17,12 @@ ALC_IMPORT(alcDeviceResumeSOFT, LPALCDEVICERESUMESOFT);
 #ifdef ALC_SOFT_HRTF
 ALC_IMPORT(alcGetStringiSOFT, LPALCGETSTRINGISOFT);
 ALC_IMPORT(alcResetDeviceSOFT, LPALCRESETDEVICESOFT);
-#endif
+#endif
+
+#ifdef ALC_SOFT_device_clock
+ALC_IMPORT(alcGetInteger64vSOFT, LPALCGETINTEGER64VSOFT);
+#endif
+
+#ifdef ALC_SOFT_reopen_device
+ALC_IMPORT(alcReopenDeviceSOFT, LPALCREOPENDEVICESOFT);
+#endif

+ 24 - 1
libs/openal/ALImports.h

@@ -38,6 +38,29 @@ AL_IMPORT(alDeferUpdatesSOFT, LPALDEFERUPDATESSOFT);
 AL_IMPORT(alProcessUpdatesSOFT, LPALPROCESSUPDATESSOFT);
 #endif
 
+#ifdef AL_SOFT_source_resampler
+AL_IMPORT(alGetStringiSOFT, LPALGETSTRINGISOFT);
+#endif
+
+#ifdef AL_SOFT_events
+AL_IMPORT(alEventControlSOFT, LPALEVENTCONTROLSOFT);
+AL_IMPORT(alEventCallbackSOFT, LPALEVENTCALLBACKSOFT);
+AL_IMPORT(alGetPointerSOFT, LPALGETPOINTERSOFT);
+AL_IMPORT(alGetPointervSOFT, LPALGETPOINTERVSOFT);
+#endif
+
+#ifdef AL_SOFT_callback_buffer
+AL_IMPORT(alBufferCallbackSOFT, LPALBUFFERCALLBACKSOFT);
+AL_IMPORT(alGetBufferPtrSOFT, LPALGETBUFFERPTRSOFT);
+AL_IMPORT(alGetBuffer3PtrSOFT, LPALGETBUFFER3PTRSOFT);
+AL_IMPORT(alGetBufferPtrvSOFT, LPALGETBUFFERPTRVSOFT);
+#endif
+
+#ifdef AL_SOFT_source_start_delay
+AL_IMPORT(alSourcePlayAtTimeSOFT, LPALSOURCEPLAYATTIMESOFT);
+AL_IMPORT(alSourcePlayAtTimevSOFT, LPALSOURCEPLAYATTIMEVSOFT);
+#endif
+
 #ifdef ALC_EXT_EFX
 AL_IMPORT(alGenEffects, LPALGENEFFECTS);
 AL_IMPORT(alDeleteEffects, LPALDELETEEFFECTS);
@@ -74,4 +97,4 @@ AL_IMPORT(alGetAuxiliaryEffectSloti, LPALGETAUXILIARYEFFECTSLOTI);
 AL_IMPORT(alGetAuxiliaryEffectSlotiv, LPALGETAUXILIARYEFFECTSLOTIV);
 AL_IMPORT(alGetAuxiliaryEffectSlotf, LPALGETAUXILIARYEFFECTSLOTF);
 AL_IMPORT(alGetAuxiliaryEffectSlotfv, LPALGETAUXILIARYEFFECTSLOTFV);
-#endif
+#endif

+ 1 - 1
libs/openal/haxelib.json

@@ -4,6 +4,6 @@
 	"license" : "BSD",
 	"contributors" : ["ncannasse"],
 	"description" : "OpenAL support for Haxe/HL.",
-	"version" : "1.4.0",
+	"version" : "1.16.0",
 	"releasenote" : ""
 }

+ 127 - 13
libs/openal/openal.c

@@ -132,14 +132,14 @@ DEFINE_PRIM(_VOID,    alc_destroy_context,      TCONTEXT);
 DEFINE_PRIM(TCONTEXT, alc_get_current_context,  _NO_ARG);
 DEFINE_PRIM(TDEVICE,  alc_get_contexts_device,  TCONTEXT);
 
-DEFINE_PRIM(TDEVICE,  alc_open_device,  _BYTES); 
+DEFINE_PRIM(TDEVICE,  alc_open_device,  _BYTES);
 DEFINE_PRIM(_BOOL,    alc_close_device, TDEVICE);
 
 DEFINE_PRIM(_I32,     alc_get_error, TDEVICE);
 
 DEFINE_PRIM(_VOID,    alc_load_extensions,      TDEVICE);
 DEFINE_PRIM(_BOOL,    alc_is_extension_present, TDEVICE _BYTES);
-DEFINE_PRIM(_I32,     alc_get_enum_value,       TDEVICE _BYTES); 
+DEFINE_PRIM(_I32,     alc_get_enum_value,       TDEVICE _BYTES);
 
 DEFINE_PRIM(_BYTES,   alc_get_string,   TDEVICE _I32);
 DEFINE_PRIM(_VOID,    alc_get_integerv, TDEVICE _I32 _I32 _BYTES);
@@ -243,7 +243,6 @@ HL_PRIM void HL_NAME(al_load_extensions)() {
 #endif
 }
 
-
 HL_PRIM bool HL_NAME(al_is_extension_present)(vbyte *extname) {
 	return alIsExtensionPresent((char*)extname) == AL_TRUE;
 }
@@ -591,7 +590,7 @@ DEFINE_PRIM(_VOID, al_get_bufferiv, _I32 _I32 _BYTES);
 #define CHECK_EXT(fun) if(fun == NULL) hl_error("Unsupported extension function")
 
 // ----------------------------------------------------------------------------
-#ifdef EXT_thread_local_context
+#ifdef ALC_EXT_thread_local_context
 // ----------------------------------------------------------------------------
 
 HL_PRIM bool HL_NAME(alc_set_thread_context)(ALCcontext *context) {
@@ -651,7 +650,7 @@ DEFINE_PRIM(_VOID, alc_device_resume_soft, TDEVICE);
 #endif
 
 // ----------------------------------------------------------------------------
-#ifdef SOFT_HRTF
+#ifdef ALC_SOFT_HRTF
 // ----------------------------------------------------------------------------
 
 HL_PRIM vbyte* HL_NAME(alc_get_stringi_soft)(ALCdevice *device, int param, int index) {
@@ -668,6 +667,30 @@ DEFINE_PRIM(_BYTES, alc_get_stringi_soft,  TDEVICE _I32 _I32);
 DEFINE_PRIM(_BOOL,  alc_reset_device_soft, TDEVICE _BYTES);
 #endif
 
+// ----------------------------------------------------------------------------
+#ifdef ALC_SOFT_device_clock
+// ----------------------------------------------------------------------------
+
+HL_PRIM void HL_NAME(alc_get_integer64v_soft)(ALCdevice *device, int param, int index, vbyte *values) {
+	CHECK_EXT(alcGetInteger64vSOFT);
+	alcGetInteger64vSOFT(device, param, index, (ALCint64SOFT*)values);
+}
+
+DEFINE_PRIM(_VOID, alc_get_integer64v_soft,  TDEVICE _I32 _I32 _BYTES);
+#endif
+
+// ----------------------------------------------------------------------------
+#ifdef ALC_SOFT_reopen_device
+// ----------------------------------------------------------------------------
+
+HL_PRIM bool HL_NAME(alc_reopen_device_soft)(ALCdevice *device, vbyte *deviceName, vbyte *attribs) {
+	CHECK_EXT(alcReopenDeviceSOFT);
+	return alcReopenDeviceSOFT(device, deviceName, (ALCint*)attribs);
+}
+
+DEFINE_PRIM(_BOOL,  alc_reopen_device_soft, TDEVICE _BYTES _BYTES);
+#endif
+
 // ----------------------------------------------------------------------------
 #ifdef AL_EXT_STATIC_BUFFER
 // ----------------------------------------------------------------------------
@@ -698,7 +721,7 @@ DEFINE_PRIM(_VOID, al_buffer_sub_data_soft, _I32 _I32 _BYTES _I32 _I32);
 
 HL_PRIM void HL_NAME(al_request_foldback_start)(int mode, int count, int length, vbyte *mem, vclosure *callback) {
 	CHECK_EXT(alRequestFoldbackStart);
-	if (callback->hasValue) if( callback->hasValue ) hl_error("Cannot set foldback on closure callback");
+	if( callback->hasValue ) hl_error("Cannot set foldback on closure callback");
 	alRequestFoldbackStart(mode, count, length, (ALfloat*)mem, (LPALFOLDBACKCALLBACK)callback->fun);
 }
 
@@ -711,7 +734,6 @@ DEFINE_PRIM(_VOID, al_request_foldback_start, _I32 _I32 _I32 _BYTES _FUN(_VOID,
 DEFINE_PRIM(_VOID, al_request_foldback_stop,  _NO_ARG);
 #endif
 
-
 // ----------------------------------------------------------------------------
 #ifdef AL_SOFT_buffer_samples
 // ----------------------------------------------------------------------------
@@ -787,12 +809,12 @@ HL_PRIM void HL_NAME(al_sourcei64_soft)(unsigned source, int param, int valueHi,
 	alSourcei64SOFT(source, param, I64_COMBINE(valueHi, valueLo));
 }
 
-HL_PRIM void HL_NAME(al_source3i64_soft)(unsigned source, int param, 
+HL_PRIM void HL_NAME(al_source3i64_soft)(unsigned source, int param,
 		int value1Hi, int value1Lo, int value2Hi, int value2Lo, int value3Hi, int value3Lo) {
 	CHECK_EXT(alSource3i64SOFT);
-	alSource3i64SOFT(source, param, 
-		I64_COMBINE(value1Hi, value1Lo), 
-		I64_COMBINE(value2Hi, value2Lo), 
+	alSource3i64SOFT(source, param,
+		I64_COMBINE(value1Hi, value1Lo),
+		I64_COMBINE(value2Hi, value2Lo),
 		I64_COMBINE(value3Hi, value3Lo));
 }
 
@@ -809,7 +831,7 @@ HL_PRIM void HL_NAME(al_get_sourcei64_soft)(unsigned source, int param, int *val
 	*valueLo = I64_LO(value);
 }
 
-HL_PRIM void HL_NAME(al_get_source3i64_soft)(unsigned source, int param, 
+HL_PRIM void HL_NAME(al_get_source3i64_soft)(unsigned source, int param,
 		int *value1Hi, int *value1Lo, int *value2Hi, int *value2Lo, int *value3Hi, int *value3Lo) {
 	ALint64SOFT value1, value2, value3;
 	CHECK_EXT(alGetSource3i64SOFT);
@@ -862,6 +884,98 @@ DEFINE_PRIM(_VOID, al_defer_updates_soft,   _NO_ARG);
 DEFINE_PRIM(_VOID, al_process_updates_soft, _NO_ARG);
 #endif
 
+// ----------------------------------------------------------------------------
+#ifdef AL_SOFT_source_resampler
+// ----------------------------------------------------------------------------
+
+HL_PRIM vbyte* HL_NAME(al_get_stringi_soft)(int param, int index) {
+	CHECK_EXT(alGetStringiSOFT);
+	return (vbyte*)alGetStringiSOFT(param, index);
+}
+
+DEFINE_PRIM(_BYTES, al_get_stringi_soft, _I32 _I32);
+#endif
+
+// ----------------------------------------------------------------------------
+#ifdef AL_SOFT_events
+// ----------------------------------------------------------------------------
+
+HL_PRIM void HL_NAME(al_event_control_soft)(int count, int *types, bool enable) {
+	CHECK_EXT(alEventControlSOFT);
+	alEventControlSOFT(count, types, enable);
+}
+
+HL_PRIM void HL_NAME(al_event_callback_soft)(vclosure *callback, void *userParam) {
+	CHECK_EXT(alEventCallbackSOFT);
+	if( callback->hasValue ) hl_error("Cannot set closure callback");
+	alEventCallbackSOFT((ALEVENTPROCSOFT)callback->fun, userParam);
+}
+
+HL_PRIM vbyte* HL_NAME(al_get_pointer_soft)(int param) {
+	CHECK_EXT(alGetPointerSOFT);
+	return (vbyte*)alGetPointerSOFT(param);
+}
+
+HL_PRIM void HL_NAME(al_get_pointerv_soft)(int param, void **values) {
+	CHECK_EXT(alGetPointervSOFT);
+	alGetPointervSOFT(param, values);
+}
+
+DEFINE_PRIM(_VOID, al_event_control_soft, _I32 _REF(_I32) _BOOL);
+DEFINE_PRIM(_VOID, al_event_callback_soft, _FUN(_VOID, _I32 _I32 _I32 _I32 _BYTES _DYN) _DYN);
+DEFINE_PRIM(_DYN, al_get_pointer_soft, _I32);
+DEFINE_PRIM(_VOID, al_get_pointerv_soft, _I32 _REF(_DYN));
+#endif
+
+// ----------------------------------------------------------------------------
+#ifdef AL_SOFT_callback_buffer
+// ----------------------------------------------------------------------------
+
+HL_PRIM void HL_NAME(al_buffer_callback_soft)(int buffer, int format, int freq, vclosure *callback, void *userptr) {
+	CHECK_EXT(alBufferCallbackSOFT);
+	if( callback->hasValue ) hl_error("Cannot set closure callback");
+	alBufferCallbackSOFT(buffer, format, freq, (ALBUFFERCALLBACKTYPESOFT)callback->fun, userptr);
+}
+
+HL_PRIM void HL_NAME(al_get_buffer_ptr_soft)(int buffer, int param, void **ptr) {
+	CHECK_EXT(alGetBufferPtrSOFT);
+	alGetBufferPtrSOFT(buffer, param, ptr);
+}
+
+HL_PRIM void HL_NAME(al_get_buffer3_ptr_soft)(int buffer, int param, void **ptr0, void **ptr1, void **ptr2) {
+	CHECK_EXT(alGetBuffer3PtrSOFT);
+	alGetBuffer3PtrSOFT(buffer, param, ptr0, ptr1, ptr2);
+}
+
+HL_PRIM void HL_NAME(al_get_buffer_ptrv_soft)(int buffer, int param, void **ptr) {
+	CHECK_EXT(alGetBufferPtrvSOFT);
+	alGetBufferPtrvSOFT(buffer, param, ptr);
+}
+
+DEFINE_PRIM(_VOID, al_buffer_callback_soft, _I32 _I32 _I32 _FUN(_I32, _DYN _BYTES _I32) _DYN);
+DEFINE_PRIM(_VOID, al_get_buffer_ptr_soft, _I32 _I32 _REF(_DYN));
+DEFINE_PRIM(_VOID, al_get_buffer3_ptr_soft, _I32 _I32 _REF(_DYN) _REF(_DYN) _REF(_DYN));
+DEFINE_PRIM(_VOID, al_get_buffer_ptrv_soft, _I32 _I32 _REF(_DYN));
+#endif
+
+// ----------------------------------------------------------------------------
+#ifdef AL_SOFT_source_start_delay
+// ----------------------------------------------------------------------------
+
+HL_PRIM void HL_NAME(al_source_play_at_time_soft)(int source, int start_time_hi, int start_time_lo) {
+	CHECK_EXT(alSourcePlayAtTimeSOFT);
+	alSourcePlayAtTimeSOFT(source, I64_COMBINE(start_time_hi, start_time_lo));
+}
+
+HL_PRIM void HL_NAME(al_source_play_at_timev_soft)(int n, vbyte *sources, int start_time_hi, int start_time_lo) {
+	CHECK_EXT(alSourcePlayAtTimevSOFT);
+	alSourcePlayAtTimevSOFT(n, (ALuint*)sources, I64_COMBINE(start_time_hi, start_time_lo));
+}
+
+DEFINE_PRIM(_VOID, al_source_play_at_time_soft, _I32 _I32 _I32);
+DEFINE_PRIM(_VOID, al_source_play_at_timev_soft, _I32 _BYTES _I32 _I32);
+#endif
+
 // ----------------------------------------------------------------------------
 #ifdef ALC_EXT_EFX
 // ----------------------------------------------------------------------------
@@ -1055,4 +1169,4 @@ DEFINE_PRIM(_I32,  al_get_auxiliary_effect_sloti,    _I32 _I32);
 DEFINE_PRIM(_VOID, al_get_auxiliary_effect_slotiv,   _I32 _I32 _BYTES);
 DEFINE_PRIM(_F32,  al_get_auxiliary_effect_slotf,    _I32 _I32);
 DEFINE_PRIM(_VOID, al_get_auxiliary_effect_slotfv,   _I32 _I32 _BYTES);
-#endif
+#endif

+ 123 - 89
libs/openal/openal/Soft.hx → libs/openal/openal/ExtAL.hx

@@ -1,91 +1,8 @@
 package openal;
 import openal.AL;
 
-@:hlNative("openal","al_")
-extern class Soft {
-	// ----------------------------------------------------------------------------
-	// ALC_LOKI_audio_channel
-	// ----------------------------------------------------------------------------
-
-	public static inline var CHAN_MAIN_LOKI                   = 0x500001;
-	public static inline var CHAN_PCM_LOKI                    = 0x500002;
-	public static inline var CHAN_CD_LOKI                     = 0x500003;
-
-	// ----------------------------------------------------------------------------
-	// ALC_EXT_disconnect
-	// ----------------------------------------------------------------------------
-
-	public static inline var CONNECTED                        = 0x313;
-
-	// ----------------------------------------------------------------------------
-	// ALC_EXT_thread_local_context
-	// ----------------------------------------------------------------------------
-
-	public static function setThreadContext(context : Context) : Bool;
-	public static function getThreadContext() : Context;
-	
-	// ----------------------------------------------------------------------------
-	// ALC_SOFT_loopback
-	// ----------------------------------------------------------------------------
-
-	public static inline var FORMAT_CHANNELS_SOFT             = 0x1990;
-	public static inline var FORMAT_TYPE_SOFT                 = 0x1991;
-
-	// Sample types
-	public static inline var BYTE_SOFT                        = 0x1400;
-	public static inline var UNSIGNED_BYTE_SOFT               = 0x1401;
-	public static inline var SHORT_SOFT                       = 0x1402;
-	public static inline var UNSIGNED_SHORT_SOFT              = 0x1403;
-	public static inline var INT_SOFT                         = 0x1404;
-	public static inline var UNSIGNED_INT_SOFT                = 0x1405;
-	public static inline var FLOAT_SOFT                       = 0x1406;
-
-	// Channel configurations
-	public static inline var MONO_SOFT                        = 0x1500;
-	public static inline var STEREO_SOFT                      = 0x1501;
-	public static inline var QUAD_SOFT                        = 0x1503;
-	public static inline var _5POINT1_SOFT                    = 0x1504;
-	public static inline var _6POINT1_SOFT                    = 0x1505;
-	public static inline var _7POINT1_SOFT                    = 0x1506;
-	
-
-	public static function loopbackOpenDeviceSoft      (devicename : hl.Bytes) : Device;
-	public static function isRenderFormatSupportedSoft (device : Device, freq : Int, channels : Int, type : Int) : Bool;
-	public static function renderSamplesSoft           (device : Device, buffer : hl.Bytes, samples : Int) : Void;
-
-	// ----------------------------------------------------------------------------
-	// ALC_EXT_DEFAULT_FILTER_ORDER
-	// ----------------------------------------------------------------------------
-
-	public static inline var DEFAULT_FILTER_ORDER             = 0x1100;
-
-	// ----------------------------------------------------------------------------
-	// ALC_SOFT_pause_device
-	// ----------------------------------------------------------------------------
-
-	public static function devicePauseSoft  (device : Device) : Void;
-	public static function deviceResumeSoft (device : Device) : Void;
-
-	// ----------------------------------------------------------------------------
-	// ALC_SOFT_HRTF
-	// ----------------------------------------------------------------------------
-
-	public static inline var HRTF_SOFT                        = 0x1992;
-	public static inline var DONT_CARE_SOFT                   = 0x0002;
-	public static inline var HRTF_STATUS_SOFT                 = 0x1993;
-	public static inline var HRTF_DISABLED_SOFT               = 0x0000;
-	public static inline var HRTF_ENABLED_SOFT                = 0x0001;
-	public static inline var HRTF_DENIED_SOFT                 = 0x0002;
-	public static inline var HRTF_REQUIRED_SOFT               = 0x0003;
-	public static inline var HRTF_HEADPHONES_DETECTED_SOFT    = 0x0004;
-	public static inline var HRTF_UNSUPPORTED_FORMAT_SOFT     = 0x0005;
-	public static inline var NUM_HRTF_SPECIFIERS_SOFT         = 0x1994;
-	public static inline var HRTF_SPECIFIER_SOFT              = 0x1995;
-	public static inline var HRTF_ID_SOFT                     = 0x1996;
-
-	public static function getStringiSoft  (device : Device, param : Int, index : Int) : hl.Bytes;
-	public static function resetDeviceSoft (device : Device, attribs : hl.Bytes) : Bool;
-
+@:hlNative("?openal","al_")
+extern class ExtAL {
 	// ------------------------------------------------------------------------
 	// AL_LOKI_IMA_ADPCM_format
 	// ------------------------------------------------------------------------
@@ -94,7 +11,7 @@ extern class Soft {
 	public static inline var FORMAT_IMA_ADPCM_STEREO16_EXT         = 0x10001;
 
 	// ------------------------------------------------------------------------
-	// AL_LOKI_IMA_ADPCM_format
+	// AL_LOKI_WAVE_format
 	// ------------------------------------------------------------------------
 
 	public static inline var FORMAT_WAVE_EXT                       = 0x10002;
@@ -231,7 +148,7 @@ extern class Soft {
 	// AL_SOFT_buffer_samples
 	// ------------------------------------------------------------------------
 
-	// Channel configurations 
+	// Channel configurations
 	public static inline var MONO_SOFT                             = 0x1500;
 	public static inline var STEREO_SOFT                           = 0x1501;
 	public static inline var REAR_SOFT                             = 0x1502;
@@ -240,7 +157,7 @@ extern class Soft {
 	public static inline var _6POINT1_SOFT                         = 0x1505;
 	public static inline var _7POINT1_SOFT                         = 0x1506;
 
-	// Sample types 
+	// Sample types
 	public static inline var BYTE_SOFT                             = 0x1400;
 	public static inline var UNSIGNED_BYTE_SOFT                    = 0x1401;
 	public static inline var SHORT_SOFT                            = 0x1402;
@@ -367,4 +284,121 @@ extern class Soft {
 
 	public static inline var FORMAT_BFORMAT2D_MULAW                = 0x10031;
 	public static inline var FORMAT_BFORMAT3D_MULAW                = 0x10032;
-}
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_gain_clamp_ex
+	// ------------------------------------------------------------------------
+
+	public static inline var GAIN_LIMIT_SOFT                       = 0x200E;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_source_resampler
+	// ------------------------------------------------------------------------
+
+	public static inline var NUM_RESAMPLERS_SOFT                   = 0x1210;
+	public static inline var DEFAULT_RESAMPLER_SOFT                = 0x1211;
+	public static inline var SOURCE_RESAMPLER_SOFT                 = 0x1212;
+	public static inline var RESAMPLER_NAME_SOFT                   = 0x1213;
+
+	public static function getStringiSoft(param : Int, index : Int) : hl.Bytes;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_source_spatialize
+	// ------------------------------------------------------------------------
+
+	public static inline var SOURCE_SPATIALIZE_SOFT                = 0x1214;
+	public static inline var AUTO_SOFT                             = 0x0002;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_direct_channels_remix
+	// ------------------------------------------------------------------------
+
+	public static inline var DROP_UNMATCHED_SOFT                   = 0x0001;
+	public static inline var REMIX_UNMATCHED_SOFT                  = 0x0002;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_bformat_ex
+	// ------------------------------------------------------------------------
+
+	public static inline var AMBISONIC_LAYOUT_SOFT                 = 0x1997;
+	public static inline var AMBISONIC_SCALING_SOFT                = 0x1998;
+
+	// Ambisonic layouts
+	public static inline var FUMA_SOFT                             = 0x0000;
+	public static inline var ACN_SOFT                              = 0x0001;
+
+	// Ambisonic scalings (normalization)
+	public static inline var SN3D_SOFT                             = 0x0001;
+	public static inline var N3D_SOFT                              = 0x0002;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_effect_target
+	// ------------------------------------------------------------------------
+
+	public static inline var EFFECTSLOT_TARGET_SOFT                = 0x199C;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_events
+	// ------------------------------------------------------------------------
+
+	public static inline var EVENT_CALLBACK_FUNCTION_SOFT          = 0x19A2;
+	public static inline var EVENT_CALLBACK_USER_PARAM_SOFT        = 0x19A3;
+	public static inline var EVENT_TYPE_BUFFER_COMPLETED_SOFT      = 0x19A4;
+	public static inline var EVENT_TYPE_SOURCE_STATE_CHANGED_SOFT  = 0x19A5;
+	public static inline var EVENT_TYPE_DISCONNECTED_SOFT          = 0x19A6;
+
+	public static function eventControlSoft(count : Int, types : hl.Ref<Int>, enable : Bool) : Void;
+	public static function eventCallbackSoft(callback : (Int,Int,Int,Int,hl.Bytes,Dynamic)->Void, userParam : Dynamic) : Void;
+	public static function getPointerSoft(param : Int) : Dynamic;
+	public static function getPointervSoft(param : Int, values : hl.Ref<Dynamic>) : Void;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_callback_buffer
+	// ------------------------------------------------------------------------
+
+	public static inline var BUFFER_CALLBACK_FUNCTION_SOFT         = 0x19A0;
+	public static inline var BUFFER_CALLBACK_USER_PARAM_SOFT       = 0x19A1;
+
+	public static function bufferCallbackSoft(buffer : Int, format : Int, freq : Int, callback : (Dynamic,hl.Bytes,Int)->Int, userptr : Dynamic) : Void;
+	public static function getBufferPtrSoft(buffer : Int, param : Int, ptr : hl.Ref<Dynamic>) : Void;
+	public static function getBuffer3PtrSoft(buffer : Int, param : Int, ptr0 : hl.Ref<Dynamic>, ptr1 : hl.Ref<Dynamic>, ptr2 : hl.Ref<Dynamic>) : Void;
+	public static function getBufferPtrvSoft(buffer : Int, param : Int, ptr : hl.Ref<Dynamic>) : Void;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_UHJ
+	// ------------------------------------------------------------------------
+
+	public static inline var FORMAT_UHJ2CHN8_SOFT                  = 0x19A2;
+	public static inline var FORMAT_UHJ2CHN16_SOFT                 = 0x19A3;
+	public static inline var FORMAT_UHJ2CHN_FLOAT32_SOFT           = 0x19A4;
+	public static inline var FORMAT_UHJ3CHN8_SOFT                  = 0x19A5;
+	public static inline var FORMAT_UHJ3CHN16_SOFT                 = 0x19A6;
+	public static inline var FORMAT_UHJ3CHN_FLOAT32_SOFT           = 0x19A7;
+	public static inline var FORMAT_UHJ4CHN8_SOFT                  = 0x19A8;
+	public static inline var FORMAT_UHJ4CHN16_SOFT                 = 0x19A9;
+	public static inline var FORMAT_UHJ4CHN_FLOAT32_SOFT           = 0x19AA;
+	public static inline var STEREO_MODE_SOFT                      = 0x19B0;
+	public static inline var NORMAL_SOFT                           = 0x0000;
+	public static inline var SUPER_STEREO_SOFT                     = 0x0001;
+	public static inline var SUPER_STEREO_WIDTH_SOFT               = 0x19B1;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_UHJ_ex
+	// ------------------------------------------------------------------------
+
+	public static inline var FORMAT_UHJ2CHN_MULAW_SOFT             = 0x19B3;
+	public static inline var FORMAT_UHJ2CHN_ALAW_SOFT              = 0x19B4;
+	public static inline var FORMAT_UHJ2CHN_IMA4_SOFT              = 0x19B5;
+	public static inline var FORMAT_UHJ2CHN_MSADPCM_SOFT           = 0x19B6;
+	public static inline var FORMAT_UHJ3CHN_MULAW_SOFT             = 0x19B7;
+	public static inline var FORMAT_UHJ3CHN_ALAW_SOFT              = 0x19B8;
+	public static inline var FORMAT_UHJ4CHN_MULAW_SOFT             = 0x19B9;
+	public static inline var FORMAT_UHJ4CHN_ALAW_SOFT              = 0x19BA;
+
+	// ------------------------------------------------------------------------
+	// AL_SOFT_source_start_delay
+	// ------------------------------------------------------------------------
+
+	public static function sourcePlayAtTimeSoft(source : Int, startTimeHi : Int, startTimeLo : Int) : Void;
+	public static function sourcePlayAtTimevSoft(n : Int, sources : hl.Bytes, startTimeHi : Int, startTimeLo : Int) : Void;
+}

+ 143 - 0
libs/openal/openal/ExtALC.hx

@@ -0,0 +1,143 @@
+package openal;
+import openal.ALC;
+
+@:hlNative("?openal","alc_")
+extern class ExtALC {
+	// ------------------------------------------------------------------------
+	// ALC_LOKI_audio_channel
+	// ------------------------------------------------------------------------
+
+	public static inline var CHAN_MAIN_LOKI                        = 0x500001;
+	public static inline var CHAN_PCM_LOKI                         = 0x500002;
+	public static inline var CHAN_CD_LOKI                          = 0x500003;
+
+	// ------------------------------------------------------------------------
+	// ALC_EXT_disconnect
+	// ------------------------------------------------------------------------
+
+	public static inline var CONNECTED                             = 0x313;
+
+	// ------------------------------------------------------------------------
+	// ALC_EXT_thread_local_context
+	// ------------------------------------------------------------------------
+
+	public static function setThreadContext(context : Context) : Bool;
+	public static function getThreadContext() : Context;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_loopback
+	// ------------------------------------------------------------------------
+
+	public static inline var FORMAT_CHANNELS_SOFT                  = 0x1990;
+	public static inline var FORMAT_TYPE_SOFT                      = 0x1991;
+
+	// Sample types
+	public static inline var BYTE_SOFT                             = 0x1400;
+	public static inline var UNSIGNED_BYTE_SOFT                    = 0x1401;
+	public static inline var SHORT_SOFT                            = 0x1402;
+	public static inline var UNSIGNED_SHORT_SOFT                   = 0x1403;
+	public static inline var INT_SOFT                              = 0x1404;
+	public static inline var UNSIGNED_INT_SOFT                     = 0x1405;
+	public static inline var FLOAT_SOFT                            = 0x1406;
+
+	// Channel configurations
+	public static inline var MONO_SOFT                             = 0x1500;
+	public static inline var STEREO_SOFT                           = 0x1501;
+	public static inline var QUAD_SOFT                             = 0x1503;
+	public static inline var _5POINT1_SOFT                         = 0x1504;
+	public static inline var _6POINT1_SOFT                         = 0x1505;
+	public static inline var _7POINT1_SOFT                         = 0x1506;
+
+	public static function loopbackOpenDeviceSoft      (devicename : hl.Bytes) : Device;
+	public static function isRenderFormatSupportedSoft (device : Device, freq : Int, channels : Int, type : Int) : Bool;
+	public static function renderSamplesSoft           (device : Device, buffer : hl.Bytes, samples : Int) : Void;
+
+	// ------------------------------------------------------------------------
+	// ALC_EXT_DEFAULT_FILTER_ORDER
+	// ------------------------------------------------------------------------
+
+	public static inline var DEFAULT_FILTER_ORDER                  = 0x1100;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_pause_device
+	// ------------------------------------------------------------------------
+
+	public static function devicePauseSoft  (device : Device) : Void;
+	public static function deviceResumeSoft (device : Device) : Void;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_HRTF
+	// ------------------------------------------------------------------------
+
+	public static inline var HRTF_SOFT                             = 0x1992;
+	public static inline var DONT_CARE_SOFT                        = 0x0002;
+	public static inline var HRTF_STATUS_SOFT                      = 0x1993;
+	public static inline var HRTF_DISABLED_SOFT                    = 0x0000;
+	public static inline var HRTF_ENABLED_SOFT                     = 0x0001;
+	public static inline var HRTF_DENIED_SOFT                      = 0x0002;
+	public static inline var HRTF_REQUIRED_SOFT                    = 0x0003;
+	public static inline var HRTF_HEADPHONES_DETECTED_SOFT         = 0x0004;
+	public static inline var HRTF_UNSUPPORTED_FORMAT_SOFT          = 0x0005;
+	public static inline var NUM_HRTF_SPECIFIERS_SOFT              = 0x1994;
+	public static inline var HRTF_SPECIFIER_SOFT                   = 0x1995;
+	public static inline var HRTF_ID_SOFT                          = 0x1996;
+
+	public static function getStringiSoft  (device : Device, param : Int, index : Int) : hl.Bytes;
+	public static function resetDeviceSoft (device : Device, attribs : hl.Bytes) : Bool;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_output_limiter
+	// ------------------------------------------------------------------------
+
+	public static inline var OUTPUT_LIMITER_SOFT                   = 0x199A;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_device_clock
+	// ------------------------------------------------------------------------
+
+	public static inline var DEVICE_CLOCK_SOFT                     = 0x1600;
+	public static inline var DEVICE_LATENCY_SOFT                   = 0x1601;
+	public static inline var DEVICE_CLOCK_LATENCY_SOFT             = 0x1602;
+	public static inline var SAMPLE_OFFSET_CLOCK_SOFT              = 0x1202;
+	public static inline var SEC_OFFSET_CLOCK_SOFT                 = 0x1203;
+
+	public static function getInteger64vSoft(device : Device, param : Int, index : Int, values : hl.Bytes) : Void;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_loopback_bformat
+	// ------------------------------------------------------------------------
+
+	public static inline var AMBISONIC_LAYOUT_SOFT                 = 0x1997;
+	public static inline var AMBISONIC_SCALING_SOFT                = 0x1998;
+	public static inline var AMBISONIC_ORDER_SOFT                  = 0x1997;
+	public static inline var MAX_AMBISONIC_ORDER_SOFT              = 0x1998;
+	public static inline var BFORMAT3D_SOFT                        = 0x1998;
+
+	// Ambisonic layouts
+	public static inline var FUMA_SOFT                             = 0x0000;
+	public static inline var ACN_SOFT                              = 0x0001;
+
+	// Ambisonic scalings (normalization)
+	public static inline var SN3D_SOFT                             = 0x0001;
+	public static inline var N3D_SOFT                              = 0x0002;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_reopen_device
+	// ------------------------------------------------------------------------
+
+	public static inline var SOFT_reopen_device = "ALC_SOFT_reopen_device";
+	public static function reopenDeviceSoft(device : Device, deviceName : hl.Bytes, attribs : hl.Bytes) : Bool;
+
+	// ------------------------------------------------------------------------
+	// ALC_SOFT_output_mode
+	// ------------------------------------------------------------------------
+
+	public static inline var OUTPUT_MODE_SOFT                      = 0x19AC;
+	public static inline var ANY_SOFT                              = 0x19AD;
+	public static inline var STEREO_BASIC_SOFT                     = 0x19AE;
+	public static inline var STEREO_UHJ_SOFT                       = 0x19AF;
+	public static inline var STEREO_HRTF_SOFT                      = 0x19B2;
+	public static inline var SURROUND_5_1_SOFT                     = 0x1504;
+	public static inline var SURROUND_6_1_SOFT                     = 0x1505;
+	public static inline var SURROUND_7_1_SOFT                     = 0x1506;
+}