From 2a32ded575046c7a9f9d78c1ac8f0e0325572879 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Tue, 12 Sep 2023 19:57:37 +0200 Subject: [PATCH] Update OpenAl from 1.20.1 to 1.23.1 --- 3rdparty/OpenAL/include/al.h | 219 +++++++++++++----------- 3rdparty/OpenAL/include/alc.h | 48 +++--- 3rdparty/OpenAL/include/alext.h | 113 +++++++++--- 3rdparty/OpenAL/libs/Win64/OpenAL32.def | 47 ----- 3rdparty/OpenAL/libs/Win64/OpenAL32.lib | Bin 130648 -> 98040 bytes 5 files changed, 236 insertions(+), 191 deletions(-) diff --git a/3rdparty/OpenAL/include/al.h b/3rdparty/OpenAL/include/al.h index 8749e1b77e..5071fa5e33 100644 --- a/3rdparty/OpenAL/include/al.h +++ b/3rdparty/OpenAL/include/al.h @@ -1,7 +1,7 @@ #ifndef AL_AL_H #define AL_AL_H -#if defined(__cplusplus) +#ifdef __cplusplus extern "C" { #endif @@ -15,7 +15,7 @@ extern "C" { #endif #endif -#if defined(_WIN32) +#ifdef _WIN32 #define AL_APIENTRY __cdecl #else #define AL_APIENTRY @@ -40,43 +40,43 @@ typedef char ALboolean; /** character */ typedef char ALchar; -/** signed 8-bit 2's complement integer */ +/** signed 8-bit integer */ typedef signed char ALbyte; /** unsigned 8-bit integer */ typedef unsigned char ALubyte; -/** signed 16-bit 2's complement integer */ +/** signed 16-bit integer */ typedef short ALshort; /** unsigned 16-bit integer */ typedef unsigned short ALushort; -/** signed 32-bit 2's complement integer */ +/** signed 32-bit integer */ typedef int ALint; /** unsigned 32-bit integer */ typedef unsigned int ALuint; -/** non-negative 32-bit binary integer size */ +/** non-negative 32-bit integer size */ typedef int ALsizei; -/** enumerated 32-bit value */ +/** 32-bit enumeration value */ typedef int ALenum; -/** 32-bit IEEE754 floating-point */ +/** 32-bit IEEE-754 floating-point */ typedef float ALfloat; -/** 64-bit IEEE754 floating-point */ +/** 64-bit IEEE-754 floating-point */ typedef double ALdouble; -/** void type (for opaque pointers only) */ +/** void type (opaque pointers only) */ typedef void ALvoid; -/* Enumerant values begin at column 50. No tabs. */ +/* Enumeration values begin at column 50. Do not use tabs. */ -/** "no distance model" or "no buffer" */ +/** No distance model or no buffer */ #define AL_NONE 0 /** Boolean False. */ @@ -89,10 +89,10 @@ typedef void ALvoid; /** * Relative source. * Type: ALboolean - * Range: [AL_TRUE, AL_FALSE] + * Range: [AL_FALSE, AL_TRUE] * Default: AL_FALSE * - * Specifies if the Source has relative coordinates. + * Specifies if the source uses relative coordinates. */ #define AL_SOURCE_RELATIVE 0x202 @@ -103,7 +103,8 @@ typedef void ALvoid; * Range: [0 - 360] * Default: 360 * - * The angle covered by the inner cone, where the source will not attenuate. + * The angle covered by the inner cone, the area within which the source will + * not be attenuated by direction. */ #define AL_CONE_INNER_ANGLE 0x1001 @@ -112,8 +113,8 @@ typedef void ALvoid; * Range: [0 - 360] * Default: 360 * - * The angle covered by the outer cone, where the source will be fully - * attenuated. + * The angle covered by the outer cone, the area outside of which the source + * will be fully attenuated by direction. */ #define AL_CONE_OUTER_ANGLE 0x1002 @@ -123,7 +124,7 @@ typedef void ALvoid; * Range: [0.5 - 2.0] * Default: 1.0 * - * A multiplier for the frequency (sample rate) of the source's buffer. + * A multiplier for the sample rate of the source's buffer. */ #define AL_PITCH 0x1003 @@ -134,12 +135,12 @@ typedef void ALvoid; * * The source or listener location in three dimensional space. * - * OpenAL, like OpenGL, uses a right handed coordinate system, where in a - * frontal default view X (thumb) points right, Y points up (index finger), and - * Z points towards the viewer/camera (middle finger). + * OpenAL uses a right handed coordinate system, like OpenGL, where with a + * default view, X points right (thumb), Y points up (index finger), and Z + * points towards the viewer/camera (middle finger). * - * To switch from a left handed coordinate system, flip the sign on the Z - * coordinate. + * To change from or to a left handed coordinate system, negate the Z + * component. */ #define AL_POSITION 0x1004 @@ -148,8 +149,11 @@ typedef void ALvoid; * Type: ALfloat[3], ALint[3] * Default: {0, 0, 0} * - * Specifies the current direction in local space. - * A zero-length vector specifies an omni-directional source (cone is ignored). + * Specifies the current direction in local space. A zero-length vector + * specifies an omni-directional source (cone is ignored). + * + * To change from or to a left handed coordinate system, negate the Z + * component. */ #define AL_DIRECTION 0x1005 @@ -158,26 +162,30 @@ typedef void ALvoid; * Type: ALfloat[3], ALint[3] * Default: {0, 0, 0} * - * Specifies the current velocity in local space. + * Specifies the current velocity, relative to the position. + * + * To change from or to a left handed coordinate system, negate the Z + * component. */ #define AL_VELOCITY 0x1006 /** * Source looping. * Type: ALboolean - * Range: [AL_TRUE, AL_FALSE] + * Range: [AL_FALSE, AL_TRUE] * Default: AL_FALSE * - * Specifies whether source is looping. + * Specifies whether source playback loops. */ #define AL_LOOPING 0x1007 /** * Source buffer. - * Type: ALuint - * Range: any valid Buffer. + * Type: ALuint + * Range: any valid Buffer ID + * Default: AL_NONE * - * Specifies the buffer to provide sound samples. + * Specifies the buffer to provide sound samples for a source. */ #define AL_BUFFER 0x1009 @@ -186,12 +194,12 @@ typedef void ALvoid; * Type: ALfloat * Range: [0.0 - ] * - * A value of 1.0 means unattenuated. Each division by 2 equals an attenuation - * of about -6dB. Each multiplicaton by 2 equals an amplification of about - * +6dB. + * For sources, an initial linear gain value (before attenuation is applied). + * For the listener, an output linear gain adjustment. * - * A value of 0.0 is meaningless with respect to a logarithmic scale; it is - * silent. + * A value of 1.0 means unattenuated. Each division by 2 equals an attenuation + * of about -6dB. Each multiplication by 2 equals an amplification of about + * +6dB. */ #define AL_GAIN 0x100A @@ -200,8 +208,8 @@ typedef void ALvoid; * Type: ALfloat * Range: [0.0 - 1.0] * - * The minimum gain allowed for a source, after distance and cone attenation is - * applied (if applicable). + * The minimum gain allowed for a source, after distance and cone attenuation + * are applied (if applicable). */ #define AL_MIN_GAIN 0x100D @@ -210,26 +218,28 @@ typedef void ALvoid; * Type: ALfloat * Range: [0.0 - 1.0] * - * The maximum gain allowed for a source, after distance and cone attenation is - * applied (if applicable). + * The maximum gain allowed for a source, after distance and cone attenuation + * are applied (if applicable). */ #define AL_MAX_GAIN 0x100E /** * Listener orientation. - * Type: ALfloat[6] + * Type: ALfloat[6] * Default: {0.0, 0.0, -1.0, 0.0, 1.0, 0.0} * * Effectively two three dimensional vectors. The first vector is the front (or - * "at") and the second is the top (or "up"). + * "at") and the second is the top (or "up"). Both vectors are relative to the + * listener position. * - * Both vectors are in local space. + * To change from or to a left handed coordinate system, negate the Z + * component of both vectors. */ #define AL_ORIENTATION 0x100F /** * Source state (query only). - * Type: ALint + * Type: ALenum * Range: [AL_INITIAL, AL_PLAYING, AL_PAUSED, AL_STOPPED] */ #define AL_SOURCE_STATE 0x1010 @@ -267,9 +277,9 @@ typedef void ALvoid; * Range: [0.0 - ] * Default: 1.0 * - * The distance in units that no attenuation occurs. + * The distance in units that no distance attenuation occurs. * - * At 0.0, no distance attenuation ever occurs on non-linear attenuation models. + * At 0.0, no distance attenuation occurs with non-linear attenuation models. */ #define AL_REFERENCE_DISTANCE 0x1020 @@ -292,7 +302,7 @@ typedef void ALvoid; * Default: 0.0 * * The gain attenuation applied when the listener is outside of the source's - * outer cone. + * outer cone angle. */ #define AL_CONE_OUTER_GAIN 0x1022 @@ -308,16 +318,16 @@ typedef void ALvoid; */ #define AL_MAX_DISTANCE 0x1023 -/** Source buffer position, in seconds */ +/** Source buffer offset, in seconds */ #define AL_SEC_OFFSET 0x1024 -/** Source buffer position, in sample frames */ +/** Source buffer offset, in sample frames */ #define AL_SAMPLE_OFFSET 0x1025 -/** Source buffer position, in bytes */ +/** Source buffer offset, in bytes */ #define AL_BYTE_OFFSET 0x1026 /** * Source type (query only). - * Type: ALint + * Type: ALenum * Range: [AL_STATIC, AL_STREAMING, AL_UNDETERMINED] * * A Source is Static if a Buffer has been attached using AL_BUFFER. @@ -344,13 +354,13 @@ typedef void ALvoid; /** Signed 16-bit stereo buffer format. */ #define AL_FORMAT_STEREO16 0x1103 -/** Buffer frequency (query only). */ +/** Buffer frequency/sample rate (query only). */ #define AL_FREQUENCY 0x2001 /** Buffer bits per sample (query only). */ #define AL_BITS 0x2002 /** Buffer channel count (query only). */ #define AL_CHANNELS 0x2003 -/** Buffer data size (query only). */ +/** Buffer data size in bytes (query only). */ #define AL_SIZE 0x2004 /* Buffer state. Not for public use. */ @@ -362,32 +372,31 @@ typedef void ALvoid; /** No error. */ #define AL_NO_ERROR 0 -/** Invalid name paramater passed to AL call. */ +/** Invalid name (ID) passed to an AL call. */ #define AL_INVALID_NAME 0xA001 -/** Invalid enum parameter passed to AL call. */ +/** Invalid enumeration passed to AL call. */ #define AL_INVALID_ENUM 0xA002 -/** Invalid value parameter passed to AL call. */ +/** Invalid value passed to AL call. */ #define AL_INVALID_VALUE 0xA003 /** Illegal AL call. */ #define AL_INVALID_OPERATION 0xA004 -/** Not enough memory. */ +/** Not enough memory to execute the AL call. */ #define AL_OUT_OF_MEMORY 0xA005 -/** Context string: Vendor ID. */ +/** Context string: Vendor name. */ #define AL_VENDOR 0xB001 /** Context string: Version. */ #define AL_VERSION 0xB002 -/** Context string: Renderer ID. */ +/** Context string: Renderer name. */ #define AL_RENDERER 0xB003 /** Context string: Space-separated extension list. */ #define AL_EXTENSIONS 0xB004 - /** * Doppler scale. * Type: ALfloat @@ -397,7 +406,6 @@ typedef void ALvoid; * Scale for source and listener velocities. */ #define AL_DOPPLER_FACTOR 0xC000 -AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); /** * Doppler velocity (deprecated). @@ -405,7 +413,6 @@ AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); * A multiplier applied to the Speed of Sound. */ #define AL_DOPPLER_VELOCITY 0xC001 -AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value); /** * Speed of Sound, in units per second. @@ -414,14 +421,13 @@ AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value); * Default: 343.3 * * The speed at which sound waves are assumed to travel, when calculating the - * doppler effect. + * doppler effect from source and listener velocities. */ #define AL_SPEED_OF_SOUND 0xC003 -AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value); /** * Distance attenuation model. - * Type: ALint + * Type: ALenum * Range: [AL_NONE, AL_INVERSE_DISTANCE, AL_INVERSE_DISTANCE_CLAMPED, * AL_LINEAR_DISTANCE, AL_LINEAR_DISTANCE_CLAMPED, * AL_EXPONENT_DISTANCE, AL_EXPONENT_DISTANCE_CLAMPED] @@ -438,7 +444,6 @@ AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value); * distance calculated is clamped between the reference and max distances. */ #define AL_DISTANCE_MODEL 0xD000 -AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); /* Distance model values. */ #define AL_INVERSE_DISTANCE 0xD001 @@ -448,12 +453,19 @@ AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); #define AL_EXPONENT_DISTANCE 0xD005 #define AL_EXPONENT_DISTANCE_CLAMPED 0xD006 +#ifndef AL_NO_PROTOTYPES /* Renderer State management. */ AL_API void AL_APIENTRY alEnable(ALenum capability); AL_API void AL_APIENTRY alDisable(ALenum capability); AL_API ALboolean AL_APIENTRY alIsEnabled(ALenum capability); -/* State retrieval. */ +/* Context state setting. */ +AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); +AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value); +AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value); +AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); + +/* Context state retrieval. */ AL_API const ALchar* AL_APIENTRY alGetString(ALenum param); AL_API void AL_APIENTRY alGetBooleanv(ALenum param, ALboolean *values); AL_API void AL_APIENTRY alGetIntegerv(ALenum param, ALint *values); @@ -464,9 +476,10 @@ AL_API ALint AL_APIENTRY alGetInteger(ALenum param); AL_API ALfloat AL_APIENTRY alGetFloat(ALenum param); AL_API ALdouble AL_APIENTRY alGetDouble(ALenum param); -/* Error retrieval. */ - -/** Obtain the first error generated in the AL context since the last check. */ +/** + * Obtain the first error generated in the AL context since the last call to + * this function. + */ AL_API ALenum AL_APIENTRY alGetError(void); /** Query for the presence of an extension on the AL context. */ @@ -482,7 +495,7 @@ AL_API void* AL_APIENTRY alGetProcAddress(const ALchar *fname); AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *ename); -/* Set Listener parameters */ +/* Set listener parameters. */ AL_API void AL_APIENTRY alListenerf(ALenum param, ALfloat value); AL_API void AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); AL_API void AL_APIENTRY alListenerfv(ALenum param, const ALfloat *values); @@ -490,7 +503,7 @@ AL_API void AL_APIENTRY alListeneri(ALenum param, ALint value); AL_API void AL_APIENTRY alListener3i(ALenum param, ALint value1, ALint value2, ALint value3); AL_API void AL_APIENTRY alListeneriv(ALenum param, const ALint *values); -/* Get Listener parameters */ +/* Get listener parameters. */ AL_API void AL_APIENTRY alGetListenerf(ALenum param, ALfloat *value); AL_API void AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); AL_API void AL_APIENTRY alGetListenerfv(ALenum param, ALfloat *values); @@ -499,14 +512,14 @@ AL_API void AL_APIENTRY alGetListener3i(ALenum param, ALint *value1, ALint *valu AL_API void AL_APIENTRY alGetListeneriv(ALenum param, ALint *values); -/** Create Source objects. */ +/** Create source objects. */ AL_API void AL_APIENTRY alGenSources(ALsizei n, ALuint *sources); -/** Delete Source objects. */ +/** Delete source objects. */ AL_API void AL_APIENTRY alDeleteSources(ALsizei n, const ALuint *sources); -/** Verify a handle is a valid Source. */ +/** Verify an ID is for a valid source. */ AL_API ALboolean AL_APIENTRY alIsSource(ALuint source); -/* Set Source parameters. */ +/* Set source parameters. */ AL_API void AL_APIENTRY alSourcef(ALuint source, ALenum param, ALfloat value); AL_API void AL_APIENTRY alSource3f(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); AL_API void AL_APIENTRY alSourcefv(ALuint source, ALenum param, const ALfloat *values); @@ -514,7 +527,7 @@ AL_API void AL_APIENTRY alSourcei(ALuint source, ALenum param, ALint value); AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3); AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum param, const ALint *values); -/* Get Source parameters. */ +/* Get source parameters. */ AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value); AL_API void AL_APIENTRY alGetSource3f(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); AL_API void AL_APIENTRY alGetSourcefv(ALuint source, ALenum param, ALfloat *values); @@ -523,41 +536,44 @@ AL_API void AL_APIENTRY alGetSource3i(ALuint source, ALenum param, ALint *value1 AL_API void AL_APIENTRY alGetSourceiv(ALuint source, ALenum param, ALint *values); -/** Play, replay, or resume (if paused) a list of Sources */ -AL_API void AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources); -/** Stop a list of Sources */ -AL_API void AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources); -/** Rewind a list of Sources */ -AL_API void AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources); -/** Pause a list of Sources */ -AL_API void AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources); - -/** Play, replay, or resume a Source */ +/** Play, restart, or resume a source, setting its state to AL_PLAYING. */ AL_API void AL_APIENTRY alSourcePlay(ALuint source); -/** Stop a Source */ +/** Stop a source, setting its state to AL_STOPPED if playing or paused. */ AL_API void AL_APIENTRY alSourceStop(ALuint source); -/** Rewind a Source (set playback postiton to beginning) */ +/** Rewind a source, setting its state to AL_INITIAL. */ AL_API void AL_APIENTRY alSourceRewind(ALuint source); -/** Pause a Source */ +/** Pause a source, setting its state to AL_PAUSED if playing. */ AL_API void AL_APIENTRY alSourcePause(ALuint source); +/** Play, restart, or resume a list of sources atomically. */ +AL_API void AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources); +/** Stop a list of sources atomically. */ +AL_API void AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources); +/** Rewind a list of sources atomically. */ +AL_API void AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources); +/** Pause a list of sources atomically. */ +AL_API void AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources); + /** Queue buffers onto a source */ AL_API void AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei nb, const ALuint *buffers); /** Unqueue processed buffers from a source */ AL_API void AL_APIENTRY alSourceUnqueueBuffers(ALuint source, ALsizei nb, ALuint *buffers); -/** Create Buffer objects */ +/** Create buffer objects */ AL_API void AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers); -/** Delete Buffer objects */ +/** Delete buffer objects */ AL_API void AL_APIENTRY alDeleteBuffers(ALsizei n, const ALuint *buffers); -/** Verify a handle is a valid Buffer */ +/** Verify an ID is a valid buffer (including the NULL buffer) */ AL_API ALboolean AL_APIENTRY alIsBuffer(ALuint buffer); -/** Specifies the data to be copied into a buffer */ -AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq); +/** + * Copies data into the buffer, interpreting it using the specified format and + * samplerate. + */ +AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei samplerate); -/* Set Buffer parameters, */ +/* Set buffer parameters. */ AL_API void AL_APIENTRY alBufferf(ALuint buffer, ALenum param, ALfloat value); AL_API void AL_APIENTRY alBuffer3f(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); AL_API void AL_APIENTRY alBufferfv(ALuint buffer, ALenum param, const ALfloat *values); @@ -565,15 +581,18 @@ AL_API void AL_APIENTRY alBufferi(ALuint buffer, ALenum param, ALint value); AL_API void AL_APIENTRY alBuffer3i(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3); AL_API void AL_APIENTRY alBufferiv(ALuint buffer, ALenum param, const ALint *values); -/* Get Buffer parameters. */ +/* Get buffer parameters. */ AL_API void AL_APIENTRY alGetBufferf(ALuint buffer, ALenum param, ALfloat *value); AL_API void AL_APIENTRY alGetBuffer3f(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); AL_API void AL_APIENTRY alGetBufferfv(ALuint buffer, ALenum param, ALfloat *values); AL_API void AL_APIENTRY alGetBufferi(ALuint buffer, ALenum param, ALint *value); AL_API void AL_APIENTRY alGetBuffer3i(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3); AL_API void AL_APIENTRY alGetBufferiv(ALuint buffer, ALenum param, ALint *values); +#endif /* AL_NO_PROTOTYPES */ -/* Pointer-to-function type, useful for dynamically getting AL entry points. */ +/* Pointer-to-function types, useful for storing dynamically loaded AL entry + * points. + */ typedef void (AL_APIENTRY *LPALENABLE)(ALenum capability); typedef void (AL_APIENTRY *LPALDISABLE)(ALenum capability); typedef ALboolean (AL_APIENTRY *LPALISENABLED)(ALenum capability); @@ -630,7 +649,7 @@ typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint source, ALs typedef void (AL_APIENTRY *LPALGENBUFFERS)(ALsizei n, ALuint *buffers); typedef void (AL_APIENTRY *LPALDELETEBUFFERS)(ALsizei n, const ALuint *buffers); typedef ALboolean (AL_APIENTRY *LPALISBUFFER)(ALuint buffer); -typedef void (AL_APIENTRY *LPALBUFFERDATA)(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq); +typedef void (AL_APIENTRY *LPALBUFFERDATA)(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei samplerate); typedef void (AL_APIENTRY *LPALBUFFERF)(ALuint buffer, ALenum param, ALfloat value); typedef void (AL_APIENTRY *LPALBUFFER3F)(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); typedef void (AL_APIENTRY *LPALBUFFERFV)(ALuint buffer, ALenum param, const ALfloat *values); @@ -648,7 +667,7 @@ typedef void (AL_APIENTRY *LPALDOPPLERVELOCITY)(ALfloat value); typedef void (AL_APIENTRY *LPALSPEEDOFSOUND)(ALfloat value); typedef void (AL_APIENTRY *LPALDISTANCEMODEL)(ALenum distanceModel); -#if defined(__cplusplus) +#ifdef __cplusplus } /* extern "C" */ #endif diff --git a/3rdparty/OpenAL/include/alc.h b/3rdparty/OpenAL/include/alc.h index c73b6e9179..6d21033350 100644 --- a/3rdparty/OpenAL/include/alc.h +++ b/3rdparty/OpenAL/include/alc.h @@ -1,7 +1,7 @@ #ifndef AL_ALC_H #define AL_ALC_H -#if defined(__cplusplus) +#ifdef __cplusplus extern "C" { #endif @@ -15,7 +15,7 @@ extern "C" { #endif #endif -#if defined(_WIN32) +#ifdef _WIN32 #define ALC_APIENTRY __cdecl #else #define ALC_APIENTRY @@ -41,41 +41,41 @@ typedef char ALCboolean; /** character */ typedef char ALCchar; -/** signed 8-bit 2's complement integer */ +/** signed 8-bit integer */ typedef signed char ALCbyte; /** unsigned 8-bit integer */ typedef unsigned char ALCubyte; -/** signed 16-bit 2's complement integer */ +/** signed 16-bit integer */ typedef short ALCshort; /** unsigned 16-bit integer */ typedef unsigned short ALCushort; -/** signed 32-bit 2's complement integer */ +/** signed 32-bit integer */ typedef int ALCint; /** unsigned 32-bit integer */ typedef unsigned int ALCuint; -/** non-negative 32-bit binary integer size */ +/** non-negative 32-bit integer size */ typedef int ALCsizei; -/** enumerated 32-bit value */ +/** 32-bit enumeration value */ typedef int ALCenum; -/** 32-bit IEEE754 floating-point */ +/** 32-bit IEEE-754 floating-point */ typedef float ALCfloat; -/** 64-bit IEEE754 floating-point */ +/** 64-bit IEEE-754 floating-point */ typedef double ALCdouble; /** void type (for opaque pointers only) */ typedef void ALCvoid; -/* Enumerant values begin at column 50. No tabs. */ +/* Enumeration values begin at column 50. Do not use tabs. */ /** Boolean False. */ #define ALC_FALSE 0 @@ -107,10 +107,10 @@ typedef void ALCvoid; /** Invalid context handle. */ #define ALC_INVALID_CONTEXT 0xA002 -/** Invalid enum parameter passed to an ALC call. */ +/** Invalid enumeration passed to an ALC call. */ #define ALC_INVALID_ENUM 0xA003 -/** Invalid value parameter passed to an ALC call. */ +/** Invalid value passed to an ALC call. */ #define ALC_INVALID_VALUE 0xA004 /** Out of memory. */ @@ -130,9 +130,9 @@ typedef void ALCvoid; /** String for the default device specifier. */ #define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 /** - * String for the given device's specifier. + * Device specifier string. * - * If device handle is NULL, it is instead a null-char separated list of + * If device handle is NULL, it is instead a null-character separated list of * strings of known device specifiers (list ends with an empty string). */ #define ALC_DEVICE_SPECIFIER 0x1005 @@ -143,9 +143,9 @@ typedef void ALCvoid; /** Capture extension */ #define ALC_EXT_CAPTURE 1 /** - * String for the given capture device's specifier. + * Capture device specifier string. * - * If device handle is NULL, it is instead a null-char separated list of + * If device handle is NULL, it is instead a null-character separated list of * strings of known capture device specifiers (list ends with an empty string). */ #define ALC_CAPTURE_DEVICE_SPECIFIER 0x310 @@ -160,14 +160,15 @@ typedef void ALCvoid; /** String for the default extended device specifier. */ #define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012 /** - * String for the given extended device's specifier. + * Device's extended specifier string. * - * If device handle is NULL, it is instead a null-char separated list of + * If device handle is NULL, it is instead a null-character separated list of * strings of known extended device specifiers (list ends with an empty string). */ #define ALC_ALL_DEVICES_SPECIFIER 0x1013 +#ifndef ALC_NO_PROTOTYPES /* Context management. */ /** Create and attach a context to the given device. */ @@ -234,14 +235,17 @@ ALC_API void ALC_APIENTRY alcGetIntegerv(ALCdevice *device, ALCenum pa ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize); /** Closes the given capture device. */ ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice(ALCdevice *device); -/** Starts capturing samples into the device buffer. */ +/** Starts capturing samples into the device buffer. */ ALC_API void ALC_APIENTRY alcCaptureStart(ALCdevice *device); /** Stops capturing samples. Samples in the device buffer remain available. */ ALC_API void ALC_APIENTRY alcCaptureStop(ALCdevice *device); /** Reads samples from the device buffer. */ ALC_API void ALC_APIENTRY alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples); +#endif /* ALC_NO_PROTOTYPES */ -/* Pointer-to-function type, useful for dynamically getting ALC entry points. */ +/* Pointer-to-function types, useful for storing dynamically loaded ALC entry + * points. + */ typedef ALCcontext* (ALC_APIENTRY *LPALCCREATECONTEXT)(ALCdevice *device, const ALCint *attrlist); typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)(ALCcontext *context); typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)(ALCcontext *context); @@ -263,8 +267,8 @@ typedef void (ALC_APIENTRY *LPALCCAPTURESTART)(ALCdevice *device); typedef void (ALC_APIENTRY *LPALCCAPTURESTOP)(ALCdevice *device); typedef void (ALC_APIENTRY *LPALCCAPTURESAMPLES)(ALCdevice *device, ALCvoid *buffer, ALCsizei samples); -#if defined(__cplusplus) -} +#ifdef __cplusplus +} /* extern "C" */ #endif #endif /* AL_ALC_H */ diff --git a/3rdparty/OpenAL/include/alext.h b/3rdparty/OpenAL/include/alext.h index f80b0708ab..d313a999a1 100644 --- a/3rdparty/OpenAL/include/alext.h +++ b/3rdparty/OpenAL/include/alext.h @@ -1,23 +1,3 @@ -/** - * OpenAL cross platform audio library - * Copyright (C) 2008 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - #ifndef AL_ALEXT_H #define AL_ALEXT_H @@ -161,9 +141,9 @@ extern "C" { #ifndef AL_EXT_STATIC_BUFFER #define AL_EXT_STATIC_BUFFER 1 -typedef void (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALint,ALenum,ALvoid*,ALsizei,ALsizei); +typedef void (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALuint,ALenum,ALvoid*,ALsizei,ALsizei); #ifdef AL_ALEXT_PROTOTYPES -AL_API void AL_APIENTRY alBufferDataStatic(const ALint buffer, ALenum format, ALvoid *data, ALsizei len, ALsizei freq); +void AL_APIENTRY alBufferDataStatic(const ALuint buffer, ALenum format, ALvoid *data, ALsizei size, ALsizei freq); #endif #endif @@ -411,6 +391,13 @@ AL_API void AL_APIENTRY alProcessUpdatesSOFT(void); /*#define AL_SEC_LENGTH_SOFT 0x200B*/ #endif +#ifndef AL_SOFT_buffer_length_query +#define AL_SOFT_buffer_length_query 1 +/*#define AL_BYTE_LENGTH_SOFT 0x2009*/ +/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/ +/*#define AL_SEC_LENGTH_SOFT 0x200B*/ +#endif + #ifndef ALC_SOFT_pause_device #define ALC_SOFT_pause_device 1 typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device); @@ -579,6 +566,88 @@ AL_API void AL_APIENTRY alGetPointervSOFT(ALenum pname, void **values); #endif #endif +#ifndef ALC_SOFT_reopen_device +#define ALC_SOFT_reopen_device +typedef ALCboolean (ALC_APIENTRY*LPALCREOPENDEVICESOFT)(ALCdevice *device, + const ALCchar *deviceName, const ALCint *attribs); +#ifdef AL_ALEXT_PROTOTYPES +ALCboolean ALC_APIENTRY alcReopenDeviceSOFT(ALCdevice *device, const ALCchar *deviceName, + const ALCint *attribs); +#endif +#endif + +#ifndef AL_SOFT_callback_buffer +#define AL_SOFT_callback_buffer +#define AL_BUFFER_CALLBACK_FUNCTION_SOFT 0x19A0 +#define AL_BUFFER_CALLBACK_USER_PARAM_SOFT 0x19A1 +typedef ALsizei (AL_APIENTRY*ALBUFFERCALLBACKTYPESOFT)(ALvoid *userptr, ALvoid *sampledata, ALsizei numbytes); +typedef void (AL_APIENTRY*LPALBUFFERCALLBACKSOFT)(ALuint buffer, ALenum format, ALsizei freq, ALBUFFERCALLBACKTYPESOFT callback, ALvoid *userptr); +typedef void (AL_APIENTRY*LPALGETBUFFERPTRSOFT)(ALuint buffer, ALenum param, ALvoid **value); +typedef void (AL_APIENTRY*LPALGETBUFFER3PTRSOFT)(ALuint buffer, ALenum param, ALvoid **value1, ALvoid **value2, ALvoid **value3); +typedef void (AL_APIENTRY*LPALGETBUFFERPTRVSOFT)(ALuint buffer, ALenum param, ALvoid **values); +#ifdef AL_ALEXT_PROTOTYPES +AL_API void AL_APIENTRY alBufferCallbackSOFT(ALuint buffer, ALenum format, ALsizei freq, ALBUFFERCALLBACKTYPESOFT callback, ALvoid *userptr); +AL_API void AL_APIENTRY alGetBufferPtrSOFT(ALuint buffer, ALenum param, ALvoid **ptr); +AL_API void AL_APIENTRY alGetBuffer3PtrSOFT(ALuint buffer, ALenum param, ALvoid **ptr0, ALvoid **ptr1, ALvoid **ptr2); +AL_API void AL_APIENTRY alGetBufferPtrvSOFT(ALuint buffer, ALenum param, ALvoid **ptr); +#endif +#endif + +#ifndef AL_SOFT_UHJ +#define AL_SOFT_UHJ +#define AL_FORMAT_UHJ2CHN8_SOFT 0x19A2 +#define AL_FORMAT_UHJ2CHN16_SOFT 0x19A3 +#define AL_FORMAT_UHJ2CHN_FLOAT32_SOFT 0x19A4 +#define AL_FORMAT_UHJ3CHN8_SOFT 0x19A5 +#define AL_FORMAT_UHJ3CHN16_SOFT 0x19A6 +#define AL_FORMAT_UHJ3CHN_FLOAT32_SOFT 0x19A7 +#define AL_FORMAT_UHJ4CHN8_SOFT 0x19A8 +#define AL_FORMAT_UHJ4CHN16_SOFT 0x19A9 +#define AL_FORMAT_UHJ4CHN_FLOAT32_SOFT 0x19AA + +#define AL_STEREO_MODE_SOFT 0x19B0 +#define AL_NORMAL_SOFT 0x0000 +#define AL_SUPER_STEREO_SOFT 0x0001 +#define AL_SUPER_STEREO_WIDTH_SOFT 0x19B1 +#endif + +#ifndef AL_SOFT_UHJ_ex +#define AL_SOFT_UHJ_ex +#define AL_FORMAT_UHJ2CHN_MULAW_SOFT 0x19B3 +#define AL_FORMAT_UHJ2CHN_ALAW_SOFT 0x19B4 +#define AL_FORMAT_UHJ2CHN_IMA4_SOFT 0x19B5 +#define AL_FORMAT_UHJ2CHN_MSADPCM_SOFT 0x19B6 +#define AL_FORMAT_UHJ3CHN_MULAW_SOFT 0x19B7 +#define AL_FORMAT_UHJ3CHN_ALAW_SOFT 0x19B8 +#define AL_FORMAT_UHJ4CHN_MULAW_SOFT 0x19B9 +#define AL_FORMAT_UHJ4CHN_ALAW_SOFT 0x19BA +#endif + +#ifndef ALC_SOFT_output_mode +#define ALC_SOFT_output_mode +#define ALC_OUTPUT_MODE_SOFT 0x19AC +#define ALC_ANY_SOFT 0x19AD +/*#define ALC_MONO_SOFT 0x1500*/ +/*#define ALC_STEREO_SOFT 0x1501*/ +#define ALC_STEREO_BASIC_SOFT 0x19AE +#define ALC_STEREO_UHJ_SOFT 0x19AF +#define ALC_STEREO_HRTF_SOFT 0x19B2 +/*#define ALC_QUAD_SOFT 0x1503*/ +#define ALC_SURROUND_5_1_SOFT 0x1504 +#define ALC_SURROUND_6_1_SOFT 0x1505 +#define ALC_SURROUND_7_1_SOFT 0x1506 +#endif + +#ifndef AL_SOFT_source_start_delay +#define AL_SOFT_source_start_delay +typedef void (AL_APIENTRY*LPALSOURCEPLAYATTIMESOFT)(ALuint source, ALint64SOFT start_time); +typedef void (AL_APIENTRY*LPALSOURCEPLAYATTIMEVSOFT)(ALsizei n, const ALuint *sources, ALint64SOFT start_time); +#ifdef AL_ALEXT_PROTOTYPES +void AL_APIENTRY alSourcePlayAtTimeSOFT(ALuint source, ALint64SOFT start_time); +void AL_APIENTRY alSourcePlayAtTimevSOFT(ALsizei n, const ALuint *sources, ALint64SOFT start_time); +#endif +#endif + #ifdef __cplusplus } #endif diff --git a/3rdparty/OpenAL/libs/Win64/OpenAL32.def b/3rdparty/OpenAL/libs/Win64/OpenAL32.def index a5c4c00097..1c63c47183 100644 --- a/3rdparty/OpenAL/libs/Win64/OpenAL32.def +++ b/3rdparty/OpenAL/libs/Win64/OpenAL32.def @@ -1,25 +1,15 @@ EXPORTS - alAuxiliaryEffectSlotPlaySOFT - alAuxiliaryEffectSlotPlayvSOFT - alAuxiliaryEffectSlotStopSOFT - alAuxiliaryEffectSlotStopvSOFT alAuxiliaryEffectSlotf alAuxiliaryEffectSlotfv alAuxiliaryEffectSloti alAuxiliaryEffectSlotiv alBuffer3f alBuffer3i - alBufferCallbackSOFT alBufferData - alBufferSamplesSOFT - alBufferStorageSOFT - alBufferSubDataSOFT - alBufferSubSamplesSOFT alBufferf alBufferfv alBufferi alBufferiv - alDeferUpdatesSOFT alDeleteAuxiliaryEffectSlots alDeleteBuffers alDeleteEffects @@ -34,13 +24,10 @@ EXPORTS alEffecti alEffectiv alEnable - alEventCallbackSOFT - alEventControlSOFT alFilterf alFilterfv alFilteri alFilteriv - alFlushMappedBufferSOFT alGenAuxiliaryEffectSlots alGenBuffers alGenEffects @@ -52,12 +39,8 @@ EXPORTS alGetAuxiliaryEffectSlotiv alGetBoolean alGetBooleanv - alGetBuffer3PtrSOFT alGetBuffer3f alGetBuffer3i - alGetBufferPtrSOFT - alGetBufferPtrvSOFT - alGetBufferSamplesSOFT alGetBufferf alGetBufferfv alGetBufferi @@ -77,8 +60,6 @@ EXPORTS alGetFloat alGetFloatv alGetInteger - alGetInteger64SOFT - alGetInteger64vSOFT alGetIntegerv alGetListener3f alGetListener3i @@ -86,26 +67,16 @@ EXPORTS alGetListenerfv alGetListeneri alGetListeneriv - alGetPointerSOFT - alGetPointervSOFT alGetProcAddress - alGetSource3dSOFT alGetSource3f alGetSource3i - alGetSource3i64SOFT - alGetSourcedSOFT - alGetSourcedvSOFT alGetSourcef alGetSourcefv alGetSourcei - alGetSourcei64SOFT - alGetSourcei64vSOFT alGetSourceiv alGetString - alGetStringiSOFT alIsAuxiliaryEffectSlot alIsBuffer - alIsBufferFormatSupportedSOFT alIsEffect alIsEnabled alIsExtensionPresent @@ -117,12 +88,8 @@ EXPORTS alListenerfv alListeneri alListeneriv - alMapBufferSOFT - alProcessUpdatesSOFT - alSource3dSOFT alSource3f alSource3i - alSource3i64SOFT alSourcePause alSourcePausev alSourcePlay @@ -133,16 +100,11 @@ EXPORTS alSourceStop alSourceStopv alSourceUnqueueBuffers - alSourcedSOFT - alSourcedvSOFT alSourcef alSourcefv alSourcei - alSourcei64SOFT - alSourcei64vSOFT alSourceiv alSpeedOfSound - alUnmapBufferSOFT alcCaptureCloseDevice alcCaptureOpenDevice alcCaptureSamples @@ -151,26 +113,17 @@ EXPORTS alcCloseDevice alcCreateContext alcDestroyContext - alcDevicePauseSOFT - alcDeviceResumeSOFT alcGetContextsDevice alcGetCurrentContext alcGetEnumValue alcGetError - alcGetInteger64vSOFT alcGetIntegerv alcGetProcAddress alcGetString - alcGetStringiSOFT alcGetThreadContext alcIsExtensionPresent - alcIsRenderFormatSupportedSOFT - alcLoopbackOpenDeviceSOFT alcMakeContextCurrent alcOpenDevice alcProcessContext - alcRenderSamplesSOFT - alcResetDeviceSOFT alcSetThreadContext alcSuspendContext - alsoft_get_version diff --git a/3rdparty/OpenAL/libs/Win64/OpenAL32.lib b/3rdparty/OpenAL/libs/Win64/OpenAL32.lib index 9c6ec3e4fca624ac0c1f0f202b7da16522ed174b..3a6d90f2054dab57fa9eb2ca3863b6332a8edf82 100644 GIT binary patch literal 98040 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 literal 130648 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