Browse Source

OpenAL-soft binding (#38)

Mathieu Capdegelle 8 years ago
parent
commit
eab96f6138
8 changed files with 1097 additions and 2 deletions
  1. 1 0
      .gitignore
  2. 15 0
      hl.sln
  3. 534 0
      libs/openal/openal.c
  4. 248 0
      libs/openal/openal.vcxproj
  5. 6 0
      libs/openal/openal.vcxproj.filters
  6. 206 0
      libs/openal/openal/AL.hx
  7. 85 0
      libs/openal/openal/ALC.hx
  8. 2 2
      libs/ssl/ssl.vcxproj

+ 1 - 0
.gitignore

@@ -19,6 +19,7 @@ x64
 *.opendb
 *.VC.db
 /include/sdl
+/include/openal-soft
 ReleaseStatic
 /other/benchs/bench.*
 /other/benchs/cpp

+ 15 - 0
hl.sln

@@ -42,6 +42,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{0EC4330B-6
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ssl", "libs\ssl\ssl.vcxproj", "{F4D939D6-88D6-4FF2-874A-7BECF75A01C2}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openal", "libs\openal\openal.vcxproj", "{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -148,6 +150,18 @@ Global
 		{F4D939D6-88D6-4FF2-874A-7BECF75A01C2}.ReleaseStatic|Win32.Build.0 = ReleaseStatic|Win32
 		{F4D939D6-88D6-4FF2-874A-7BECF75A01C2}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64
 		{F4D939D6-88D6-4FF2-874A-7BECF75A01C2}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Debug|Win32.Build.0 = Debug|Win32
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Debug|x64.ActiveCfg = Debug|x64
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Debug|x64.Build.0 = Debug|x64
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Release|Win32.ActiveCfg = Release|Win32
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Release|Win32.Build.0 = Release|Win32
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Release|x64.ActiveCfg = Release|x64
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.Release|x64.Build.0 = Release|x64
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.ReleaseStatic|Win32.ActiveCfg = ReleaseStatic|Win32
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.ReleaseStatic|Win32.Build.0 = ReleaseStatic|Win32
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -158,5 +172,6 @@ Global
 		{6534D221-34DF-404A-AFCD-6DEC9BBC9798} = {0EC4330B-6B61-45F8-B297-CA7097AFFD98}
 		{43AAD9DB-4708-46B6-AAE8-A5DB95A0B573} = {0EC4330B-6B61-45F8-B297-CA7097AFFD98}
 		{F4D939D6-88D6-4FF2-874A-7BECF75A01C2} = {0EC4330B-6B61-45F8-B297-CA7097AFFD98}
+		{3D5C4255-60D5-44A1-9529-20BAABBDDCD0} = {0EC4330B-6B61-45F8-B297-CA7097AFFD98}
 	EndGlobalSection
 EndGlobal

+ 534 - 0
libs/openal/openal.c

@@ -0,0 +1,534 @@
+#define HL_NAME(n) openal_##n
+#include <hl.h>
+
+#include <AL/al.h>
+#include <AL/alc.h>
+
+// ----------------------------------------------------------------------------
+// ALC
+// ----------------------------------------------------------------------------
+
+// Context management
+
+HL_PRIM ALCcontext* HL_NAME(alc_create_context)(ALCdevice *device, vbyte *attrlist) {
+	return alcCreateContext(device, (ALCint*)attrlist);
+}
+
+HL_PRIM bool HL_NAME(alc_make_context_current)(ALCcontext *context) {
+	return alcMakeContextCurrent(context) == ALC_TRUE;
+}
+
+HL_PRIM void HL_NAME(alc_process_context)(ALCcontext *context) {
+	alcProcessContext(context);
+}
+
+HL_PRIM void HL_NAME(alc_suspend_context)(ALCcontext *context) {
+	alcSuspendContext(context);
+}
+
+HL_PRIM void HL_NAME(alc_destroy_context)(ALCcontext *context) {
+	alcDestroyContext(context);
+}
+
+HL_PRIM ALCcontext* HL_NAME(alc_get_current_context)() {
+	return alcGetCurrentContext();
+}
+
+HL_PRIM ALCdevice* HL_NAME(alc_get_contexts_device)(ALCcontext *context) {
+	return alcGetContextsDevice(context);
+}
+
+// Device management
+
+HL_PRIM ALCdevice* HL_NAME(alc_open_device)(vbyte *devicename) {
+	return alcOpenDevice(devicename);
+}
+
+HL_PRIM bool HL_NAME(alc_close_device)(ALCdevice *device) {
+	return alcCloseDevice(device) == ALC_TRUE;
+}
+
+// Error support
+
+HL_PRIM int HL_NAME(alc_get_error)(ALCdevice *device) {
+	return alcGetError(device);
+}
+
+// Extension support
+
+HL_PRIM bool HL_NAME(alc_is_extension_present)(ALCdevice *device, vbyte *extname) {
+	return alcIsExtensionPresent(device, extname) == ALC_TRUE;
+}
+
+HL_PRIM int HL_NAME(alc_get_enum_value)(ALCdevice *device, vbyte *enumname) {
+	return alcGetEnumValue(device, enumname);
+}
+
+//HL_PRIM void* HL_NAME(alcGetProcAddress)(ALCdevice *device, const ALCchar *funcname);
+
+// Query function
+
+HL_PRIM vbyte* HL_NAME(alc_get_string)(ALCdevice *device, int param) {
+	return (vbyte*)alcGetString(device, param);
+}
+
+HL_PRIM void HL_NAME(alc_get_integerv)(ALCdevice *device, int param, int size, vbyte *values) {
+	alcGetIntegerv(device, param, size, (ALCint*)values);
+}
+
+// Capture function
+
+HL_PRIM ALCdevice* HL_NAME(alc_capture_open_device)(vbyte *devicename, int frequency, int format, int buffersize) {
+	return alcCaptureOpenDevice(devicename, (ALCuint)frequency, format, buffersize);
+}
+
+HL_PRIM bool HL_NAME(alc_capture_close_device)(ALCdevice *device) {
+	return alcCaptureCloseDevice(device) == ALC_TRUE;
+}
+
+HL_PRIM void HL_NAME(alc_capture_start)(ALCdevice *device) {
+	alcCaptureStart(device);
+}
+
+HL_PRIM void HL_NAME(alc_capture_stop)(ALCdevice *device) {
+	alcCaptureStop(device);
+}
+
+HL_PRIM void HL_NAME(alc_capture_samples)(ALCdevice *device, vbyte *buffer, int samples) {
+	alcCaptureSamples(device, buffer, samples);
+}
+
+#define TDEVICE  _ABSTRACT(alc_device)
+#define TCONTEXT _ABSTRACT(alc_context)
+
+DEFINE_PRIM(TCONTEXT, alc_create_context,       TDEVICE _BYTES);
+DEFINE_PRIM(_BOOL,    alc_make_context_current, TCONTEXT);
+DEFINE_PRIM(_VOID,    alc_process_context,      TCONTEXT);
+DEFINE_PRIM(_VOID,    alc_suspend_context,      TCONTEXT);
+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(_BOOL,    alc_close_device, TDEVICE);
+
+DEFINE_PRIM(_I32,     alc_get_error, TDEVICE _NO_ARG);
+
+DEFINE_PRIM(_BOOL,    alc_is_extension_present, 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);
+
+DEFINE_PRIM(TDEVICE,  alc_capture_open_device,  _BYTES _I32 _I32 _I32);
+DEFINE_PRIM(_BOOL,    alc_capture_close_device, TDEVICE);
+DEFINE_PRIM(_VOID,    alc_capture_start,        TDEVICE);
+DEFINE_PRIM(_VOID,    alc_capture_stop,         TDEVICE);
+DEFINE_PRIM(_VOID,    alc_capture_samples,      TDEVICE _BYTES _I32);
+
+// ----------------------------------------------------------------------------
+// AL
+// ----------------------------------------------------------------------------
+
+HL_PRIM void HL_NAME(al_doppler_factor)(float value) {
+	alDopplerFactor(value);
+}
+
+HL_PRIM void HL_NAME(al_doppler_velocity)(float value) {
+	alDopplerVelocity(value);
+}
+
+HL_PRIM void HL_NAME(al_speed_of_sound)(float value) {
+	alSpeedOfSound(value);
+}
+
+HL_PRIM void HL_NAME(al_distance_model)(int value) {
+	alDistanceModel(value);
+}
+
+// Renderer State management
+
+HL_PRIM void HL_NAME(al_enable)(int capability) {
+	alEnable(capability);
+}
+
+HL_PRIM void HL_NAME(al_disable)(int capability) {
+	alDisable(capability);
+}
+
+HL_PRIM bool HL_NAME(al_is_enabled)(int capability) {
+	return alIsEnabled(capability) == AL_TRUE;
+}
+
+// State retrieval
+
+HL_PRIM void HL_NAME(al_get_booleanv)(int param, vbyte *values) {
+	alGetBooleanv(param, (ALboolean*)values);
+}
+
+HL_PRIM void HL_NAME(al_get_integerv)(int param, vbyte *values) {
+	alGetIntegerv(param, (ALint*)values);
+}
+
+HL_PRIM void HL_NAME(al_get_floatv)(int param, vbyte *values) {
+	alGetFloatv(param, (ALfloat*)values);
+}
+
+HL_PRIM void HL_NAME(al_get_doublev)(int param, vbyte *values) {
+	alGetDoublev(param, (ALdouble*)values);
+}
+
+HL_PRIM vbyte *HL_NAME(al_get_string)(int param) {
+	return (vbyte*)alGetString(param);
+}
+
+HL_PRIM bool HL_NAME(al_get_boolean)(int param) {
+	return alGetBoolean(param) == AL_TRUE;
+}
+
+HL_PRIM int HL_NAME(al_get_integer)(int param) {
+	return alGetInteger(param);
+}
+
+HL_PRIM float HL_NAME(al_get_float)(int param) {
+	return alGetFloat(param);
+}
+
+HL_PRIM double HL_NAME(al_get_double)(int param) {
+	return alGetDouble(param);
+}
+
+// Error retrieval
+
+HL_PRIM int HL_NAME(al_get_error)() {
+	return alGetError();
+}
+
+// Extension support
+
+HL_PRIM bool HL_NAME(al_is_extension_present)(vbyte *extname) {
+	return alIsExtensionPresent(extname) == AL_TRUE;
+}
+
+HL_PRIM int HL_NAME(al_get_enum_value)(vbyte *ename) {
+	return alGetEnumValue(ename);
+}
+
+// Set Listener parameters
+
+HL_PRIM void HL_NAME(al_listenerf)(int param, float value) {
+	alListenerf(param, value);
+}
+
+HL_PRIM void HL_NAME(al_listener3f)(int param, float value1, float value2, float value3) {
+	alListener3f(param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_listenerfv)(int param, vbyte *values) {
+	alListenerfv(param, (ALfloat*)values);
+}
+
+HL_PRIM void HL_NAME(al_listeneri)(int param, int value) {
+	alListeneri(param, value);
+}
+
+HL_PRIM void HL_NAME(al_listener3i)(int param, int value1, int value2, int value3) {
+	alListener3i(param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_listeneriv)(int param, vbyte *values) {
+	alListeneriv(param, (ALint*)values);
+}
+
+// Get Listener parameters
+
+HL_PRIM void HL_NAME(al_get_listenerf)(int param, float *value) {
+	alGetListenerf(param, value);
+}
+
+HL_PRIM void HL_NAME(al_get_listener3f)(int param, float *value1, float *value2, float *value3) {
+	alGetListener3f(param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_get_listenerfv)(int param, vbyte *values) {
+	alGetListenerfv(param, (ALfloat*)values);
+}
+
+HL_PRIM void HL_NAME(al_get_listeneri)(int param, int *value) {
+	alGetListeneri(param, value);
+}
+
+HL_PRIM void HL_NAME(al_get_listener3i)(int param, int *value1, int *value2, int *value3) {
+	alGetListener3i(param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_get_listeneriv)(int param, vbyte *values) {
+	alGetListeneriv(param, (ALint*)values);
+}
+
+// Source management
+
+HL_PRIM void HL_NAME(al_gen_sources)(int n, vbyte *sources) {
+	alGenSources(n, (ALuint*)sources);
+}
+
+HL_PRIM void HL_NAME(al_delete_sources)(int n, vbyte *sources) {
+	alDeleteSources(n, (ALuint*)sources);
+}
+
+HL_PRIM bool HL_NAME(al_is_source)(unsigned source) {
+	return alIsSource(source) == AL_TRUE;
+}
+
+// Set Source parameters
+
+HL_PRIM void HL_NAME(al_sourcef)(unsigned source, int param, float value) {
+	alSourcef(source, param, value);
+}
+
+HL_PRIM void HL_NAME(al_source3f)(unsigned source, int param, float value1, float value2, float value3) {
+	alSource3f(source, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_sourcefv)(unsigned source, int param, vbyte *values) {
+	alSourcefv(source, param, (ALfloat*)values);
+}
+
+HL_PRIM void HL_NAME(al_sourcei)(unsigned source, int param, int value) {
+	alSourcei(source, param, value);
+}
+
+HL_PRIM void HL_NAME(al_source3i)(unsigned source, int param, int value1, int value2, int value3) {
+	alSource3i(source, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_sourceiv)(unsigned source, int param, vbyte *values) {
+	alSourceiv(source, param, (ALint*)values);
+}
+
+// Get Source parameters
+
+HL_PRIM void HL_NAME(al_get_sourcef)(unsigned source, int param, float *value) {
+	alGetSourcef(source, param, value);
+}
+
+HL_PRIM void HL_NAME(al_get_source3f)(unsigned source, int param, float *value1, float *value2, float *value3) {
+	alGetSource3f(source, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_get_sourcefv)(unsigned source, int param, vbyte *values) {
+	alGetSourcefv(source, param, (ALfloat*)values);
+}
+
+HL_PRIM void HL_NAME(al_get_sourcei)(unsigned source, int param, int *value) {
+	alGetSourcei(source, param, value);
+}
+
+HL_PRIM void HL_NAME(al_get_source3i)(unsigned source, int param, int *value1, int *value2, int *value3) {
+	alGetSource3i(source, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_get_sourceiv)(unsigned source, int param, vbyte *values) {
+	alGetSourceiv(source, param, (ALint*)values);
+}
+
+// Source controls
+
+HL_PRIM void HL_NAME(al_source_playv)(int n, vbyte *sources) {
+	alSourcePlayv(n, (ALuint*)sources);
+}
+
+HL_PRIM void HL_NAME(al_source_stopv)(int n, vbyte *sources) {
+	alSourceStopv(n, (ALuint*)sources);
+}
+
+HL_PRIM void HL_NAME(al_source_rewindv)(int n, vbyte *sources) {
+	alSourceRewindv(n, (ALuint*)sources);
+}
+
+HL_PRIM void HL_NAME(al_source_pausev)(int n, vbyte *sources) {
+	alSourcePausev(n, (ALuint*)sources);
+}
+
+HL_PRIM void HL_NAME(al_source_play)(unsigned source) {
+	alSourcePlay(source);
+}
+
+HL_PRIM void HL_NAME(al_source_stop)(unsigned source) {
+	alSourceStop(source);
+}
+
+HL_PRIM void HL_NAME(al_source_rewind)(unsigned source) {
+	alSourceRewind(source);
+}
+
+HL_PRIM void HL_NAME(al_source_pause)(unsigned source) {
+	alSourcePause(source);
+}
+
+// Queue buffers onto a source
+
+HL_PRIM void HL_NAME(al_source_queue_buffers)(unsigned source, int nb, vbyte *buffers) {
+	alSourceQueueBuffers(source, nb, (ALuint*)buffers);
+}
+
+HL_PRIM void HL_NAME(al_source_unqueue_buffers)(unsigned source, int nb, vbyte *buffers) {
+	alSourceUnqueueBuffers(source, nb, (ALuint*)buffers);
+}
+
+// Buffer management
+
+HL_PRIM void HL_NAME(al_gen_buffers)(int n, vbyte *buffers) {
+	alGenBuffers(n, (ALuint*)buffers);
+}
+
+HL_PRIM void HL_NAME(al_delete_buffers)(int n, vbyte *buffers) {
+	alDeleteBuffers(n, (ALuint*)buffers);
+}
+
+HL_PRIM bool HL_NAME(al_is_buffer)(unsigned buffer) {
+	return alIsBuffer(buffer) == AL_TRUE;
+}
+
+HL_PRIM void HL_NAME(al_buffer_data)(unsigned buffer, int format, vbyte *data, int size, int freq) {
+	alBufferData(buffer, format, data, size, freq);
+}
+
+// Set Buffer parameters
+
+HL_PRIM void HL_NAME(al_bufferf)(unsigned buffer, int param, float value) {
+	alBufferf(buffer, param, value);
+}
+
+HL_PRIM void HL_NAME(al_buffer3f)(unsigned buffer, int param, float value1, float value2, float value3) {
+	alBuffer3f(buffer, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_bufferfv)(unsigned buffer, int param, vbyte *values) {
+	alBufferfv(buffer, param, (ALfloat*)values);
+}
+
+HL_PRIM void HL_NAME(al_bufferi)(unsigned buffer, int param, int value) {
+	alBufferi(buffer, param, value);
+}
+
+HL_PRIM void HL_NAME(al_buffer3i)(unsigned buffer, int param, int value1, int value2, int value3) {
+	alBuffer3i(buffer, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_bufferiv)(unsigned buffer, int param, vbyte *values) {
+	alBufferiv(buffer, param, (ALint*)values);
+}
+
+// Get Buffer parameters
+
+HL_PRIM void HL_NAME(al_get_bufferf)(unsigned buffer, int param, float *value) {
+	alGetBufferf(buffer, param, value);
+}
+
+HL_PRIM void HL_NAME(al_get_buffer3f)(unsigned buffer, int param, float *value1, float *value2, float *value3) {
+	alGetBuffer3f(buffer, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_get_bufferfv)(unsigned buffer, int param, vbyte *values) {
+	alGetBufferfv(buffer, param, (ALfloat*)values);
+}
+
+HL_PRIM void HL_NAME(al_get_bufferi)(unsigned buffer, int param, int *value) {
+	alGetBufferi(buffer, param, value);
+}
+
+HL_PRIM void HL_NAME(al_get_buffer3i)(unsigned buffer, int param, int *value1, int *value2, int *value3) {
+	alGetBuffer3i(buffer, param, value1, value2, value3);
+}
+
+HL_PRIM void HL_NAME(al_get_bufferiv)(unsigned buffer, int param, vbyte *values) {
+	alGetBufferiv(buffer, param, (ALint*)values);
+}
+
+DEFINE_PRIM(_VOID, al_doppler_factor  , _F32);
+DEFINE_PRIM(_VOID, al_doppler_velocity, _F32);
+DEFINE_PRIM(_VOID, al_speed_of_sound  , _F32);
+DEFINE_PRIM(_VOID, al_distance_model  , _I32);
+
+DEFINE_PRIM(_VOID, al_enable,    _I32);
+DEFINE_PRIM(_VOID, al_disable,   _I32);
+DEFINE_PRIM(_BOOL, al_is_enabled, _I32);
+
+DEFINE_PRIM(_VOID, al_get_booleanv, _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_get_integerv, _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_get_floatv,   _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_get_doublev,  _I32 _BYTES);
+
+DEFINE_PRIM(_BYTES, al_get_string,  _I32);
+DEFINE_PRIM(_BOOL,  al_get_boolean, _I32);
+DEFINE_PRIM(_I32,   al_get_integer, _I32);
+DEFINE_PRIM(_F32,   al_get_float,   _I32);
+DEFINE_PRIM(_F64,   al_get_double,  _I32);
+DEFINE_PRIM(_I32,   al_get_error,   _NO_ARG);
+
+DEFINE_PRIM(_BOOL, al_is_extension_present, _BYTES);
+DEFINE_PRIM(_I32,  al_get_enum_value,       _BYTES);
+
+DEFINE_PRIM(_VOID, al_listenerf,  _I32 _F32);
+DEFINE_PRIM(_VOID, al_listener3f, _I32 _F32 _F32 _F32);
+DEFINE_PRIM(_VOID, al_listenerfv, _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_listeneri,  _I32 _I32);
+DEFINE_PRIM(_VOID, al_listener3i, _I32 _I32 _I32 _I32);
+DEFINE_PRIM(_VOID, al_listeneriv, _I32 _BYTES);
+
+DEFINE_PRIM(_VOID, al_get_listenerf,  _I32 _REF(_F32));
+DEFINE_PRIM(_VOID, al_get_listener3f, _I32 _REF(_F32) _REF(_F32) _REF(_F32));
+DEFINE_PRIM(_VOID, al_get_listenerfv, _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_get_listeneri,  _I32 _REF(_I32));
+DEFINE_PRIM(_VOID, al_get_listener3i, _I32 _REF(_I32) _REF(_I32) _REF(_I32));
+DEFINE_PRIM(_VOID, al_get_listeneriv, _I32 _BYTES);
+
+DEFINE_PRIM(_VOID, al_gen_sources,    _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_delete_sources, _I32 _BYTES);
+DEFINE_PRIM(_BOOL, al_is_source,      _I32);
+
+DEFINE_PRIM(_VOID, al_sourcef,  _I32 _I32 _F32);
+DEFINE_PRIM(_VOID, al_source3f, _I32 _I32 _F32 _F32 _F32);
+DEFINE_PRIM(_VOID, al_sourcefv, _I32 _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_sourcei,  _I32 _I32 _I32);
+DEFINE_PRIM(_VOID, al_source3i, _I32 _I32 _I32 _I32 _I32);
+DEFINE_PRIM(_VOID, al_sourceiv, _I32 _I32 _BYTES);
+
+DEFINE_PRIM(_VOID, al_get_sourcef,  _I32 _I32 _REF(_F32));
+DEFINE_PRIM(_VOID, al_get_source3f, _I32 _I32 _REF(_F32) _REF(_F32) _REF(_F32));
+DEFINE_PRIM(_VOID, al_get_sourcefv, _I32 _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_get_sourcei,  _I32 _I32 _REF(_I32));
+DEFINE_PRIM(_VOID, al_get_source3i, _I32 _I32 _REF(_I32) _REF(_I32) _REF(_I32));
+DEFINE_PRIM(_VOID, al_get_sourceiv, _I32 _I32 _BYTES);
+
+DEFINE_PRIM(_VOID, al_source_playv,   _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_source_stopv,   _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_source_rewindv, _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_source_pausev,  _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_source_play,    _I32);
+DEFINE_PRIM(_VOID, al_source_stop,    _I32);
+DEFINE_PRIM(_VOID, al_source_rewind,  _I32);
+DEFINE_PRIM(_VOID, al_source_pause,   _I32);
+
+DEFINE_PRIM(_VOID, al_source_queue_buffers,   _I32 _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_source_unqueue_buffers, _I32 _I32 _BYTES);
+
+DEFINE_PRIM(_VOID, al_gen_buffers,    _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_delete_buffers, _I32 _BYTES);
+DEFINE_PRIM(_BOOL, al_is_buffer,      _I32);
+DEFINE_PRIM(_VOID, al_buffer_data,    _I32 _I32 _BYTES _I32 _I32);
+
+DEFINE_PRIM(_VOID, al_bufferf,  _I32 _I32 _F32);
+DEFINE_PRIM(_VOID, al_buffer3f, _I32 _I32 _F32 _F32 _F32);
+DEFINE_PRIM(_VOID, al_bufferfv, _I32 _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_bufferi,  _I32 _I32 _I32);
+DEFINE_PRIM(_VOID, al_buffer3i, _I32 _I32 _I32 _I32 _I32);
+DEFINE_PRIM(_VOID, al_bufferiv, _I32 _I32 _BYTES);
+
+DEFINE_PRIM(_VOID, al_get_bufferf,  _I32 _I32 _REF(_F32));
+DEFINE_PRIM(_VOID, al_get_buffer3f, _I32 _I32 _REF(_F32) _REF(_F32) _REF(_F32));
+DEFINE_PRIM(_VOID, al_get_bufferfv, _I32 _I32 _BYTES);
+DEFINE_PRIM(_VOID, al_get_bufferi,  _I32 _I32 _REF(_I32));
+DEFINE_PRIM(_VOID, al_get_buffer3i, _I32 _I32 _REF(_I32) _REF(_I32) _REF(_I32));
+DEFINE_PRIM(_VOID, al_get_bufferiv, _I32 _I32 _BYTES);

+ 248 - 0
libs/openal/openal.vcxproj

@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="ReleaseStatic|Win32">
+      <Configuration>ReleaseStatic</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="ReleaseStatic|x64">
+      <Configuration>ReleaseStatic</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3D5C4255-60D5-44A1-9529-20BAABBDDCD0}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>openal</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <TargetExt>.hdll</TargetExt>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);../../include/openal-soft/include;../../src</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86;../../$(Configuration);../../include/openal-soft/libs/Win32</LibraryPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <TargetExt>.hdll</TargetExt>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);../../include/openal-soft/include;../../src</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;../../x64/$(Configuration);../../include/openal-soft/libs/Win64</LibraryPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <TargetExt>.hdll</TargetExt>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);../../include/openal-soft/include;../../src</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86;../../$(Configuration);../../include/openal-soft/libs/Win32</LibraryPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);../../include/openal-soft/include;../../src</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86;../../$(Configuration);../../include/openal-soft/libs/Win32</LibraryPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <TargetExt>.hdll</TargetExt>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);../../include/openal-soft/include;../../src</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;../../x64/$(Configuration);../../include/openal-soft/libs/Win64</LibraryPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <TargetExt>.hdll</TargetExt>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);../../include/openal-soft/include;../../src</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;../../x64/$(Configuration);../../include/openal-soft/libs/Win64</LibraryPath>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;OPENAL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OutputFile>../../$(Configuration)/$(TargetName).hdll</OutputFile>
+      <AdditionalDependencies>libhl.lib;OpenAl32.lib</AdditionalDependencies>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;OPENAL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>libhl.lib;OpenAl32.lib</AdditionalDependencies>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;OPENAL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OutputFile>../../$(Configuration)/$(TargetName).hdll</OutputFile>
+      <AdditionalDependencies>libhl.lib;OpenAl32.lib</AdditionalDependencies>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;OPENAL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <OutputFile>../../$(Configuration)/$(TargetName).hdll</OutputFile>
+      <AdditionalDependencies>libhl.lib;OpenAl32.lib</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;OPENAL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>libhl.lib;OpenAl32.lib</AdditionalDependencies>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;OPENAL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>libhl.lib;OpenAl32.lib</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="openal.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 6 - 0
libs/openal/openal.vcxproj.filters

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="openal.c" />
+  </ItemGroup>
+</Project>

+ 206 - 0
libs/openal/openal/AL.hx

@@ -0,0 +1,206 @@
+package openal;
+
+abstract Buffer(Int) to Int {}
+abstract Source(Int) to Int {}
+
+@:hlNative("openal","al_")
+extern class AL {
+	public static function dopplerFactor   (value : hl.F32) : Void;
+	public static function dopplerVelocity (value : hl.F32) : Void;
+	public static function speedOfSound    (value : hl.F32) : Void;
+	public static function distanceModel   (distanceModel : Int) : Void;
+
+	// Renderer State management
+	public static function enable    (capability : Int) : Void;
+	public static function disable   (capability : Int) : Void;
+	public static function isEnabled (capability : Int) : Bool;
+
+	// State retrieval
+	public static function getBooleanv (param : Int, values : hl.Bytes) : Void;
+	public static function getIntegerv (param : Int, values : hl.Bytes) : Void;
+	public static function getFloatv   (param : Int, values : hl.Bytes) : Void;
+	public static function getDoublev  (param : Int, values : hl.Bytes) : Void;
+
+	public static function getString   (param : Int) : hl.Bytes;
+	public static function getBoolean  (param : Int) : Bool;
+	public static function getInteger  (param : Int) : Int;
+	public static function getFloat    (param : Int) : hl.F32;
+	public static function getDouble   (param : Int) : hl.F64;
+
+	// Error retrieval
+	public static function getError() : Int;
+
+	// Extension support
+	public static function isExtensionPresent (extname : hl.Bytes) : Bool;
+	public static function getEnumValue       (ename   : hl.Bytes) : Int;
+	//public static function getProcAddress     (fname   : hl.Bytes) : Void*;
+	
+	// Set Listener parameters
+	public static function listenerf  (param : Int, value  : hl.F32) : Void;
+	public static function listener3f (param : Int, value1 : hl.F32, value2 : hl.F32, value3 : hl.F32) : Void;
+	public static function listenerfv (param : Int, values : hl.Bytes) : Void;
+	public static function listeneri  (param : Int, value  : Int) : Void;
+	public static function listener3i (param : Int, value1 : Int, value2 : Int, value3 : Int) : Void;
+	public static function listeneriv (param : Int, values : hl.Bytes) : Void;
+
+	// Get Listener parameters
+	public static function getListenerf  (param : Int, value  : hl.Ref<hl.F32>) : Void;
+	public static function getListener3f (param : Int, value1 : hl.Ref<hl.F32>, value2 : hl.Ref<hl.F32>, value3 : hl.Ref<hl.F32>) : Void;
+	public static function getListenerfv (param : Int, values : hl.Bytes) : Void;
+	public static function getListeneri  (param : Int, value  : hl.Ref<Int>) : Void;
+	public static function getListener3i (param : Int, value1 : hl.Ref<Int>, value2 : hl.Ref<Int>, value3 : hl.Ref<Int>) : Void;
+	public static function getListeneriv (param : Int, values : hl.Bytes) : Void;
+
+	// Source management
+	public static function genSources    (n : Int, sources : hl.Bytes) : Void;
+	public static function deleteSources (n : Int, sources : hl.Bytes) : Void;
+	public static function isSource      (source : Source) : Bool;
+
+	// Set Source parameters
+	public static function sourcef  (source : Source, param : Int, value  : hl.F32) : Void;
+	public static function source3f (source : Source, param : Int, value1 : hl.F32, value2 : hl.F32, value3 : hl.F32) : Void;
+	public static function sourcefv (source : Source, param : Int, values : hl.Bytes) : Void;
+	public static function sourcei  (source : Source, param : Int, value  : Int) : Void;
+	public static function source3i (source : Source, param : Int, value1 : Int, value2 : Int, value3 : Int) : Void;
+	public static function sourceiv (source : Source, param : Int, values : hl.Bytes) : Void;
+
+	// Get Source parameters
+	public static function getSourcef  (source : Source, param : Int, value  : hl.Ref<hl.F32>) : Void;
+	public static function getSource3f (source : Source, param : Int, value1 : hl.Ref<hl.F32>, value2 : hl.Ref<hl.F32>, value3 : hl.Ref<hl.F32>) : Void;
+	public static function getSourcefv (source : Source, param : Int, values : hl.Bytes) : Void;
+	public static function getSourcei  (source : Source, param : Int, value  : hl.Ref<Int>) : Void;
+	public static function getSource3i (source : Source, param : Int, value1 : hl.Ref<Int>, value2 : hl.Ref<Int>, value3 : hl.Ref<Int>) : Void;
+	public static function getSourceiv (source : Source, param : Int, values : hl.Bytes) : Void;
+
+	// Source controls
+	public static function sourcePlayv   (n : Int, sources : hl.Bytes) : Void;
+	public static function sourceStopv   (n : Int, sources : hl.Bytes) : Void;
+	public static function sourceRewindv (n : Int, sources : hl.Bytes) : Void;
+	public static function sourcePausev  (n : Int, sources : hl.Bytes) : Void;
+
+	public static function sourcePlay   (source : Source) : Void;
+	public static function sourceStop   (source : Source) : Void;
+	public static function sourceRewind (source : Source) : Void;
+	public static function sourcePause  (source : Source) : Void;
+
+	// Queue buffers onto a source
+	public static function sourceQueueBuffers   (source : Source, nb : Int, buffers : hl.Bytes) : Void;
+	public static function sourceUnqueueBuffers (source : Source, nb : Int, buffers : hl.Bytes) : Void;
+
+	// Buffer management
+	public static function genBuffers    (n : Int, buffers : hl.Bytes) : Void;
+	public static function deleteBuffers (n : Int, buffers : hl.Bytes) : Void;
+	public static function isBuffer      (buffer : Buffer) : Bool;
+	public static function bufferData    (buffer : Buffer, format : Int, data : hl.Bytes, size : Int, freq : Int) : Void;
+
+	// Set Buffer parameters
+	public static function bufferf  (buffer : Buffer, param : Int, value  : hl.F32) : Void;
+	public static function buffer3f (buffer : Buffer, param : Int, value1 : hl.F32, value2 : hl.F32, value3 : hl.F32) : Void;
+	public static function bufferfv (buffer : Buffer, param : Int, values : hl.Bytes) : Void;
+	public static function bufferi  (buffer : Buffer, param : Int, value  : Int) : Void;
+	public static function buffer3i (buffer : Buffer, param : Int, value1 : Int, value2 : Int, value3 : Int) : Void;
+	public static function bufferiv (buffer : Buffer, param : Int, values : hl.Bytes) : Void;
+
+	// Get Buffer parameters
+	public static function getBufferf  (buffer : Buffer, param : Int, value  : hl.Ref<hl.F32>) : Void;
+	public static function getBuffer3f (buffer : Buffer, param : Int, value1 : hl.Ref<hl.F32>, value2 : hl.Ref<hl.F32>, value3 : hl.Ref<hl.F32>) : Void;
+	public static function getBufferfv (buffer : Buffer, param : Int, values : hl.Bytes) : Void;
+	public static function getBufferi  (buffer : Buffer, param : Int, value  : hl.Ref<Int>) : Void;
+	public static function getBuffer3i (buffer : Buffer, param : Int, value1 : hl.Ref<Int>, value2 : hl.Ref<Int>, value3 : hl.Ref<Int>) : Void;
+	public static function getBufferiv (buffer : Buffer, param : Int, values : hl.Bytes) : Void;
+
+	// ------------------------------------------------------------------------
+	// Constants
+	// ------------------------------------------------------------------------
+
+	public static inline var NONE                       = 0;
+	public static inline var FALSE                      = 0;
+	public static inline var TRUE                       = 1;
+
+	public static inline var SOURCE_RELATIVE            = 0x202;
+	public static inline var CONE_INNER_ANGLE           = 0x1001;
+	public static inline var CONE_OUTER_ANGLE           = 0x1002;
+	public static inline var PITCH                      = 0x1003;
+
+	public static inline var POSITION                   = 0x1004;
+	public static inline var DIRECTION                  = 0x1005;
+
+	public static inline var VELOCITY                   = 0x1006;
+	public static inline var LOOPING                    = 0x1007;
+	public static inline var BUFFER                     = 0x1009;
+
+	public static inline var GAIN                       = 0x100A;
+	public static inline var MIN_GAIN                   = 0x100D;
+	public static inline var MAX_GAIN                   = 0x100E;
+	public static inline var ORIENTATION                = 0x100F;
+	public static inline var SOURCE_STATE               = 0x1010;
+
+	// Source state values
+	public static inline var INITIAL                    = 0x1011;
+	public static inline var PLAYING                    = 0x1012;
+	public static inline var PAUSED                     = 0x1013;
+	public static inline var STOPPED                    = 0x1014;
+
+	public static inline var BUFFERS_QUEUED             = 0x1015;
+	public static inline var BUFFERS_PROCESSED          = 0x1016;
+
+	public static inline var REFERENCE_DISTANCE         = 0x1020;
+	public static inline var ROLLOFF_FACTOR             = 0x1021;
+	public static inline var CONE_OUTER_GAIN            = 0x1022;
+	public static inline var MAX_DISTANCE               = 0x1023;
+
+	public static inline var SEC_OFFSET                 = 0x1024;
+	public static inline var SAMPLE_OFFSET              = 0x1025;
+	public static inline var BYTE_OFFSET                = 0x1026;
+	public static inline var SOURCE_TYPE                = 0x1027;
+
+	// Source type value
+	public static inline var STATIC                     = 0x1028;
+	public static inline var STREAMING                  = 0x1029;
+	public static inline var UNDETERMINED               = 0x1030;
+
+	// Buffer format specifier
+	public static inline var FORMAT_MONO8               = 0x1100;
+	public static inline var FORMAT_MONO16              = 0x1101;
+	public static inline var FORMAT_STEREO8             = 0x1102;
+	public static inline var FORMAT_STEREO16            = 0x1103;
+
+	// Buffer query
+	public static inline var FREQUENCY                  = 0x2001;
+	public static inline var BITS                       = 0x2002;
+	public static inline var CHANNELS                   = 0x2003;
+	public static inline var SIZE                       = 0x2004;
+
+	// Buffer state (private)
+	public static inline var UNUSED                     = 0x2010;
+	public static inline var PENDING                    = 0x2011;
+	public static inline var PROCESSED                  = 0x2012;
+
+	// Errors
+	public static inline var NO_ERROR                   = 0;
+	public static inline var INVALID_NAME               = 0xA001;
+	public static inline var INVALID_ENUM               = 0xA002;
+	public static inline var INVALID_VALUE              = 0xA003;
+	public static inline var INVALID_OPERATION          = 0xA004;
+	public static inline var OUT_OF_MEMORY              = 0xA005;
+
+	// Context strings
+	public static inline var VENDOR                     = 0xB001;
+	public static inline var VERSION                    = 0xB002;
+	public static inline var RENDERER                   = 0xB003;
+	public static inline var EXTENSIONS                 = 0xB004;
+
+	// Context values
+	public static inline var DOPPLER_FACTOR            = 0xC000;
+	public static inline var DOPPLER_VELOCITY          = 0xC001;
+	public static inline var SPEED_OF_SOUND            = 0xC003;
+	public static inline var DISTANCE_MODEL            = 0xD000;
+
+	// Distance model values
+	public static inline var INVERSE_DISTANCE          = 0xD001;
+	public static inline var INVERSE_DISTANCE_CLAMPED  = 0xD002;
+	public static inline var LINEAR_DISTANCE           = 0xD003;
+	public static inline var LINEAR_DISTANCE_CLAMPED   = 0xD004;
+	public static inline var EXPONENT_DISTANCE         = 0xD005;
+	public static inline var EXPONENT_DISTANCE_CLAMPED = 0xD006;
+}

+ 85 - 0
libs/openal/openal/ALC.hx

@@ -0,0 +1,85 @@
+package openal;
+
+typedef Device  = hl.Abstract<"alc_device">;
+typedef Context = hl.Abstract<"alc_context">;
+
+@:hlNative("openal","alc_")
+extern class ALC {
+	// Context management
+	public static function createContext      (device  : Device, attrlist : hl.Bytes) : Context;
+	public static function makeContextCurrent (context : Context) : Bool;
+	public static function processContext     (context : Context) : Void;
+	public static function suspendContext     (context : Context) : Void;
+	public static function destroyContext     (context : Context) : Void;
+	public static function getCurrentContext  () : Context;
+	public static function getContextsDevice  (context : Context) : Device;
+
+	// Device management
+	public static function openDevice  (devicename : hl.Bytes) : Device;
+	public static function closeDevice (device : Device) : Bool;
+
+	// Error support
+	public static function getError (device : Device) : Int;
+
+	// Extension support
+	public static function isExtensionPresent (device : Device, extname : hl.Bytes)  : Bool;
+	public static function getEnumValue       (device : Device, enumname : hl.Bytes) : Int;
+	// public static function alcGetProcAddress(device : Device, const ALCchar *funcname);
+
+	// Query function
+	public static function getString   (device : Device, param : Int) : hl.Bytes;
+	public static function getIntegerv (device : Device, param : Int, size : Int, values : hl.Bytes) : Void;
+
+	// Capture function
+	public static function captureOpenDevice  (devicename : hl.Bytes, frequency : Int, format : Int, buffersize : Int) : Device;
+	public static function captureCloseDevice (device : Device) : Bool;
+	public static function captureStart       (device : Device) : Void;
+	public static function captureStop        (device : Device) : Void;
+	public static function captureSamples     (device : Device, buffer : hl.Bytes, samples : Int) : Void;
+
+	// ------------------------------------------------------------------------
+	// Constants
+	// ------------------------------------------------------------------------
+
+	public static inline var ALC_FALSE                            = 0;
+	public static inline var ALC_TRUE                             = 1;
+
+	// Context attributes
+	public static inline var ALC_FREQUENCY                        = 0x1007;
+	public static inline var ALC_REFRESH                          = 0x1008;
+	public static inline var ALC_SYNC                             = 0x1009;
+	public static inline var ALC_MONO_SOURCES                     = 0x1010;
+	public static inline var ALC_STEREO_SOURCES                   = 0x1011;
+
+	// Errors
+	public static inline var ALC_NO_ERROR                         = 0;
+	public static inline var ALC_INVALID_DEVICE                   = 0xA001;
+	public static inline var ALC_INVALID_CONTEXT                  = 0xA002;
+	public static inline var ALC_INVALID_ENUM                     = 0xA003;
+	public static inline var ALC_INVALID_VALUE                    = 0xA004;
+	public static inline var ALC_OUT_OF_MEMORY                    = 0xA005;
+
+	// Runtime ALC version
+	public static inline var ALC_MAJOR_VERSION                    = 0x1000;
+	public static inline var ALC_MINOR_VERSION                    = 0x1001;
+
+	// Context attribute list properties
+	public static inline var ALC_ATTRIBUTES_SIZE                  = 0x1002;
+	public static inline var ALC_ALL_ATTRIBUTES                   = 0x1003;
+
+	// Device strings
+	public static inline var ALC_DEFAULT_DEVICE_SPECIFIER         = 0x1004;
+	public static inline var ALC_DEVICE_SPECIFIER                 = 0x1005;
+	public static inline var ALC_EXTENSIONS                       = 0x1006;
+
+	// Capture extension
+	public static inline var ALC_EXT_CAPTURE                      = 1;
+	public static inline var ALC_CAPTURE_DEVICE_SPECIFIER         = 0x310;
+	public static inline var ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER = 0x311;
+	public static inline var ALC_CAPTURE_SAMPLES                  = 0x312;
+
+	// Enumerate All extension
+	public static inline var ALC_ENUMERATE_ALL_EXT                = 1;
+	public static inline var ALC_DEFAULT_ALL_DEVICES_SPECIFIER    = 0x1012;
+	public static inline var ALC_ALL_DEVICES_SPECIFIER            = 0x1013;
+}

+ 2 - 2
libs/ssl/ssl.vcxproj

@@ -119,7 +119,7 @@
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <PlatformToolset>v140</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
@@ -189,7 +189,7 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|Win32'">
     <LinkIncremental>false</LinkIncremental>
-    <TargetExt>.hdll</TargetExt>
+    <TargetExt>.lib</TargetExt>
     <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86;../../$(Configuration)</LibraryPath>
     <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);../../src;../../include/mbedtls/include</IncludePath>
   </PropertyGroup>