diff options
24 files changed, 1063 insertions, 489 deletions
diff --git a/make/config/joal-alc-CustomJavaCode.java b/make/config/joal-alc-CustomJavaCode.java index be28d8c..6615c01 100644 --- a/make/config/joal-alc-CustomJavaCode.java +++ b/make/config/joal-alc-CustomJavaCode.java @@ -1,3 +1,18 @@ +/** Specify if ALC_ENUMERATION_EXT is present */ +public boolean aclEnumerationExtIsPresent(); + +/** Specify if ALC_ENUMERATE_ALL_EXT is present */ +public boolean aclEnumerateAllExtIsPresent(); + +/** Specify if call of alGetString(device, param) must + must retrun a double null terminted string */ +public boolean alcIsDoubleNullTerminatedString(final com.jogamp.openal.ALCdevice device, final int param); + +/** Fetches all values of device and param supplied from result of call to alcGetString + Each value is extracted from string because is a string double null terminated + Equivalent to the C call alcGetString(device, param). */ +public java.lang.String[] alcGetStringAsDoubleNullTerminatedString(final com.jogamp.openal.ALCdevice device, final int param); + /** Fetches the names of the available ALC device specifiers. Equivalent to the C call alcGetString(NULL, ALC_DEVICE_SPECIFIER). */ public java.lang.String[] alcGetDeviceSpecifiers(); @@ -5,3 +20,7 @@ public java.lang.String[] alcGetDeviceSpecifiers(); /** Fetches the names of the available ALC capture device specifiers. Equivalent to the C call alcGetString(NULL, ALC_CAPTURE_DEVICE_SPECIFIER). */ public java.lang.String[] alcGetCaptureDeviceSpecifiers(); + +/** Fetches the names of the available ALC all capture device specifiers. + Equivalent to the C call alcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER). */ +public java.lang.String[] alcGetAllDeviceSpecifiers(); diff --git a/make/config/joal-alc-impl-CustomCCode.c b/make/config/joal-alc-impl-CustomCCode.c index 9207210..bb36ff1 100644 --- a/make/config/joal-alc-impl-CustomCCode.c +++ b/make/config/joal-alc-impl-CustomCCode.c @@ -1,6 +1,15 @@ + +static int alc_is_double_null_terminated_string(ALCdevice *device, int param) { + return device == NULL && ( + param == ALC_DEVICE_SPECIFIER || + param == ALC_CAPTURE_DEVICE_SPECIFIER || + param == ALC_ALL_DEVICES_SPECIFIER + ); +} + int strlen_alc(ALCdevice *device, int param, const char* str) { int len = 0; - if ((device == NULL) && (param == ALC_DEVICE_SPECIFIER)) { + if ( alc_is_double_null_terminated_string(device, param) ) { while (*str != 0) { while (*str != 0) { ++str; diff --git a/make/config/joal-alext.cfg b/make/config/joal-alext.cfg index 84baf22..2d3116d 100644 --- a/make/config/joal-alext.cfg +++ b/make/config/joal-alext.cfg @@ -31,6 +31,9 @@ ArgumentIsPascalString ALEVENTPROCSOFT 3 4 JavaCallbackDef alEventCallbackSOFT 1 ALEVENTPROCSOFT 5 ALCcontext ALContextKey JavaCallbackKey alEventCallbackSOFT 1 ALEVENTPROCSOFT 5 +JavaCallbackDef alBufferCallbackSOFT 4 ALBUFFERCALLBACKTYPESOFT 0 ALCcontext ALContextKey +JavaCallbackKey alBufferCallbackSOFT 4 ALBUFFERCALLBACKTYPESOFT 0 + Import java.io.UnsupportedEncodingException Import java.util.* Import com.jogamp.openal.* @@ -57,3 +60,7 @@ ReturnValueCapacity alcLoopbackOpenDeviceSOFT 0 IncludeAs CustomCCode joal-common-CustomCCode.c +ReturnsString alcGetStringiSOFT +ReturnsString alGetStringiSOFT + +ArgumentIsString alcReopenDeviceSOFT 1
\ No newline at end of file diff --git a/make/config/joal-common-CustomCCode.c b/make/config/joal-common-CustomCCode.c index e620735..3b2f590 100644 --- a/make/config/joal-common-CustomCCode.c +++ b/make/config/joal-common-CustomCCode.c @@ -1,3 +1 @@ -#include <al-types.h> -#include <alc-types.h> #include <string.h> diff --git a/make/config/joal-common.cfg b/make/config/joal-common.cfg index 36a8e8b..94a4402 100644 --- a/make/config/joal-common.cfg +++ b/make/config/joal-common.cfg @@ -59,3 +59,4 @@ ArgumentIsString alcLoopbackOpenDeviceSOFT 0 ## Specify the return length of this function with our own custom strlen ##ReturnValueCapacity alcGetStringImpl strlen_alc(_device_ptr, {1}, _res) +Ignore HAS_STDDEF diff --git a/make/scripts/cmpOld2New.sh b/make/scripts/cmpOld2New.sh new file mode 100755 index 0000000..76f7216 --- /dev/null +++ b/make/scripts/cmpOld2New.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +dirscript=`dirname $0` + +dirold=../build-old/gensrc/classes/com/jogamp/openal +dirnew=../build/gensrc/classes/com/jogamp/openal +dircmp=cmp-old2new + +rm -rf $dircmp +mkdir -p $dircmp + +for i in AL ALC ALCConstants ALCcontext ALCdevice ALConstants ALExt ALExtConstants ; do + echo + echo processing $i + awk -f $dirscript/strip-c-comments.awk $dirold/$i.java | sort -u > $dircmp/$i-old.java + echo created $dircmp/$i-old.java + awk -f $dirscript/strip-c-comments.awk $dirnew/$i.java | sort -u > $dircmp/$i-new.java + echo created $dircmp/$i-new.java + diff -Nurdw $dircmp/$i-old.java $dircmp/$i-new.java > $dircmp/$i-diff.txt + echo created $dircmp/$i-diff.txt +done + diff --git a/make/scripts/strip-c-comments.awk b/make/scripts/strip-c-comments.awk new file mode 100755 index 0000000..4f35452 --- /dev/null +++ b/make/scripts/strip-c-comments.awk @@ -0,0 +1,59 @@ +#!/usr/bin/awk + +BEGIN { ORS = "" ; C99=1 } + +{ code = code $0 "\n" } + +END { + while ( length(code) ) + code = process( code ) +} + +function process( text ) +{ + if ( C99 ) { + if ( match( text, /"|'|\/\*|\/\// ) ) { + return span( text ) + } + } else if ( match( text, /"|'|\/\*/ ) ) { + return span( text ) + } + print text + return "" +} + +function span( text , starter ) +{ + print substr( text, 1, RSTART - 1 ) + starter = substr( text, RSTART, RLENGTH ) + text = substr( text, RSTART + RLENGTH ) + + if ( "\"" == starter || "'" == starter ) { + return quoted( text, starter ) + } + if ( "//" == starter ) { + return remove( text, "\n", "\n" ) + } + ## Allow for + ## /* foo *\ + ## / + return remove( text, "\\*(\\\\\n)?/", " " ) +} + +function remove( text, ender, replacement ) +{ + print replacement + return substr( text, match(text, ender) + RLENGTH ) +} + +function quoted( text, starter ) +{ + if ( "'" == starter ) { + match( text, /^(\\.|[^'])*'/ ) + } else { + match( text, /^(\\.|\?\?\/.|[^"])*"/ ) + } + print starter substr( text, 1, RLENGTH ) + return substr( text, RSTART + RLENGTH ) +} + diff --git a/make/scripts/tests.sh b/make/scripts/tests.sh index b015604..fbb39bf 100755 --- a/make/scripts/tests.sh +++ b/make/scripts/tests.sh @@ -103,11 +103,11 @@ function testnormal() { } -#testnormal com.jogamp.openal.JoalVersion $* +testnormal com.jogamp.openal.JoalVersion $* #testnormal com.jogamp.openal.test.manual.OpenALTest $* #testnormal com.jogamp.openal.test.manual.Sound3DTest $* #testnormal com.jogamp.openal.test.manual.Synth01AL $* -testnormal com.jogamp.openal.test.manual.Synth02AL $* +#testnormal com.jogamp.openal.test.manual.Synth02AL $* #testnormal com.jogamp.openal.test.manual.Synth02bAL $* #testnormal com.jogamp.openal.test.junit.ALVersionTest $* #testnormal com.jogamp.openal.test.junit.ALutWAVLoaderTest $* diff --git a/make/stub_includes/openal/al-types.h b/make/stub_includes/openal/al-types.h deleted file mode 100644 index 86c952d..0000000 --- a/make/stub_includes/openal/al-types.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef AL_AL_TYPES_H -#define AL_AL_TYPES_H - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef AL_API - #if defined(AL_LIBTYPE_STATIC) - #define AL_API - #elif defined(_WIN32) - #define AL_API __declspec(dllimport) - #else - #define AL_API extern - #endif -#endif - -#if defined(_WIN32) - #define AL_APIENTRY __cdecl -#else - #define AL_APIENTRY -#endif - -#if defined(TARGET_OS_MAC) && TARGET_OS_MAC - #pragma export on -#endif - -/* - * The OPENAL, ALAPI, ALAPIENTRY, AL_INVALID, AL_ILLEGAL_ENUM, and - * AL_ILLEGAL_COMMAND macros are deprecated, but are included for - * applications porting code from AL 1.0 - */ -#define OPENAL -#define ALAPI AL_API -#define ALAPIENTRY AL_APIENTRY -#define AL_INVALID (-1) -#define AL_ILLEGAL_ENUM AL_INVALID_ENUM -#define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION - -/** Supported AL version. */ -#define AL_VERSION_1_0 -#define AL_VERSION_1_1 - - -/** 8-bit boolean */ -typedef char ALboolean; - -/** character */ -typedef char ALchar; - -/** signed 8-bit 2's complement integer */ -typedef signed char ALbyte; - -/** unsigned 8-bit integer */ -typedef unsigned char ALubyte; - -/** signed 16-bit 2's complement integer */ -typedef short ALshort; - -/** unsigned 16-bit integer */ -typedef unsigned short ALushort; - -/** signed 32-bit 2's complement integer */ -typedef int ALint; - -/** unsigned 32-bit integer */ -typedef unsigned int ALuint; - -/** non-negative 32-bit binary integer size */ -typedef int ALsizei; - -/** enumerated 32-bit value */ -typedef int ALenum; - -/** 32-bit IEEE754 floating-point */ -typedef float ALfloat; - -/** 64-bit IEEE754 floating-point */ -typedef double ALdouble; - -/** - * uint64_t: - * Using <gluegen_stddef.h> - * Using <gluegen_stdint.h> - */ -#include <gluegen_stddef.h> -#define HAS_STDDEF 1 -#include <gluegen_stdint.h> - -/** void type (for opaque pointers only) */ -typedef void ALvoid; - -/** void* function pointer type for all al*GetProcAddress (By JOAL/GlueGen) */ -typedef void* ALproc; - -#if defined(__cplusplus) -} /* extern "C" */ -#endif - -#endif /* AL_AL_TYPES_H */ diff --git a/make/stub_includes/openal/al.h b/make/stub_includes/openal/al.h index 49ed277..9ecbec7 100644 --- a/make/stub_includes/openal/al.h +++ b/make/stub_includes/openal/al.h @@ -1,18 +1,87 @@ +// Based on headers in submodule openal-soft/include/al.h + #ifndef AL_AL_H #define AL_AL_H -// joal: define prototypes, and disable ext_foldback (requires custom callback code) +// [GLUEGEN] Because gluegen expose all ext_prototypes #define AL_ALEXT_PROTOTYPES -#define AL_EXT_FOLDBACK -#include "al-types.h" -#if defined(__cplusplus) +#ifdef __cplusplus extern "C" { #endif -/* Enumerant values begin at column 50. No tabs. */ +#ifndef AL_API + #if defined(AL_LIBTYPE_STATIC) + #define AL_API + #elif defined(_WIN32) + #define AL_API __declspec(dllimport) + #else + #define AL_API extern + #endif +#endif + +#ifdef _WIN32 + #define AL_APIENTRY __cdecl +#else + #define AL_APIENTRY +#endif + + +/* Deprecated macros. */ +#define OPENAL +#define ALAPI AL_API +#define ALAPIENTRY AL_APIENTRY +#define AL_INVALID (-1) +#define AL_ILLEGAL_ENUM AL_INVALID_ENUM +#define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION + +/* Supported AL versions. */ +#define AL_VERSION_1_0 +#define AL_VERSION_1_1 + +/** 8-bit boolean */ +typedef char ALboolean; + +/** character */ +typedef char ALchar; + +/** signed 8-bit integer */ +typedef signed char ALbyte; + +/** unsigned 8-bit integer */ +typedef unsigned char ALubyte; + +/** signed 16-bit integer */ +typedef short ALshort; + +/** unsigned 16-bit integer */ +typedef unsigned short ALushort; + +/** signed 32-bit integer */ +typedef int ALint; + +/** unsigned 32-bit integer */ +typedef unsigned int ALuint; -/** "no distance model" or "no buffer" */ +/** non-negative 32-bit integer size */ +typedef int ALsizei; + +/** 32-bit enumeration value */ +typedef int ALenum; + +/** 32-bit IEEE-754 floating-point */ +typedef float ALfloat; + +/** 64-bit IEEE-754 floating-point */ +typedef double ALdouble; + +/** void type (opaque pointers only) */ +typedef void ALvoid; + + +/* Enumeration values begin at column 50. Do not use tabs. */ + +/** No distance model or no buffer */ #define AL_NONE 0 /** Boolean False. */ @@ -21,13 +90,14 @@ extern "C" { /** Boolean True. */ #define AL_TRUE 1 + /** * 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 @@ -38,7 +108,8 @@ extern "C" { * 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 @@ -47,8 +118,8 @@ extern "C" { * 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 @@ -58,7 +129,7 @@ extern "C" { * 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 @@ -69,12 +140,12 @@ extern "C" { * * 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 @@ -83,8 +154,11 @@ extern "C" { * 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 @@ -93,26 +167,30 @@ extern "C" { * 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 @@ -121,12 +199,12 @@ extern "C" { * Type: ALfloat * Range: [0.0 - ] * + * For sources, an initial linear gain value (before attenuation is applied). + * For the listener, an output linear gain adjustment. + * * 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 + * of about -6dB. Each multiplication by 2 equals an amplification of about * +6dB. - * - * A value of 0.0 is meaningless with respect to a logarithmic scale; it is - * silent. */ #define AL_GAIN 0x100A @@ -135,8 +213,8 @@ extern "C" { * 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 @@ -145,31 +223,33 @@ extern "C" { * 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 -/** Source state value. */ +/* Source state values. */ #define AL_INITIAL 0x1011 #define AL_PLAYING 0x1012 #define AL_PAUSED 0x1013 @@ -202,9 +282,9 @@ extern "C" { * 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 @@ -227,7 +307,7 @@ extern "C" { * 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 @@ -235,7 +315,7 @@ extern "C" { * Source maximum distance. * Type: ALfloat * Range: [0.0 - ] - * Default: +inf + * Default: FLT_MAX * * The distance above which the source is not attenuated any further with a * clamped distance model, or where attenuation reaches 0.0 gain for linear @@ -243,16 +323,16 @@ extern "C" { */ #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. @@ -265,31 +345,30 @@ extern "C" { */ #define AL_SOURCE_TYPE 0x1027 -/** Source type value. */ +/* Source type values. */ #define AL_STATIC 0x1028 #define AL_STREAMING 0x1029 #define AL_UNDETERMINED 0x1030 -/** Buffer format specifier. */ +/** Unsigned 8-bit mono buffer format. */ #define AL_FORMAT_MONO8 0x1100 +/** Signed 16-bit mono buffer format. */ #define AL_FORMAT_MONO16 0x1101 +/** Unsigned 8-bit stereo buffer format. */ #define AL_FORMAT_STEREO8 0x1102 +/** 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. - */ +/* Buffer state. Not for public use. */ #define AL_UNUSED 0x2010 #define AL_PENDING 0x2011 #define AL_PROCESSED 0x2012 @@ -298,32 +377,31 @@ extern "C" { /** 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 @@ -333,7 +411,6 @@ extern "C" { * Scale for source and listener velocities. */ #define AL_DOPPLER_FACTOR 0xC000 -AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); /** * Doppler velocity (deprecated). @@ -341,7 +418,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. @@ -350,14 +426,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] @@ -374,9 +449,8 @@ 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 value. */ +/* Distance model values. */ #define AL_INVERSE_DISTANCE 0xD001 #define AL_INVERSE_DISTANCE_CLAMPED 0xD002 #define AL_LINEAR_DISTANCE 0xD003 @@ -384,12 +458,19 @@ AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); #define AL_EXPONENT_DISTANCE 0xD005 #define AL_EXPONENT_DISTANCE_CLAMPED 0xD006 -/** Renderer State management. */ +#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); @@ -401,24 +482,25 @@ 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. */ +AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname); /** - * Extension support. - * - * Query for the presence of an extension, and obtain any appropriate function - * pointers and enum values. + * Retrieve the address of a function. The returned function may be context- + * specific. + */ +AL_API void* AL_APIENTRY alGetProcAddress(const ALchar *fname); +/** + * Retrieve the value of an enum. The returned value may be context-specific. */ -AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname); -AL_API ALproc 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); @@ -426,7 +508,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); @@ -435,14 +517,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); @@ -450,7 +532,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); @@ -459,41 +541,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); @@ -501,15 +586,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); @@ -566,7 +654,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); @@ -584,7 +672,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/make/stub_includes/openal/alc-types.h b/make/stub_includes/openal/alc-types.h deleted file mode 100644 index 2616af8..0000000 --- a/make/stub_includes/openal/alc-types.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef AL_ALC_TYPES_H -#define AL_ALC_TYPES_H - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef ALC_API - #if defined(AL_LIBTYPE_STATIC) - #define ALC_API - #elif defined(_WIN32) - #define ALC_API __declspec(dllimport) - #else - #define ALC_API extern - #endif -#endif - -#if defined(_WIN32) - #define ALC_APIENTRY __cdecl -#else - #define ALC_APIENTRY -#endif - -#if defined(TARGET_OS_MAC) && TARGET_OS_MAC - #pragma export on -#endif - -/* - * The ALCAPI, ALCAPIENTRY, and ALC_INVALID macros are deprecated, but are - * included for applications porting code from AL 1.0 - */ -#define ALCAPI ALC_API -#define ALCAPIENTRY ALC_APIENTRY -#define ALC_INVALID 0 - -/** ALC Version */ -#define ALC_VERSION_0_1 1 - -/** Opaque device handle */ -typedef struct ALCdevice_struct ALCdevice; -/** Opaque context handle */ -typedef struct ALCcontext_struct ALCcontext; - -/** 8-bit boolean */ -typedef char ALCboolean; - -/** character */ -typedef char ALCchar; - -/** signed 8-bit 2's complement integer */ -typedef signed char ALCbyte; - -/** unsigned 8-bit integer */ -typedef unsigned char ALCubyte; - -/** signed 16-bit 2's complement integer */ -typedef short ALCshort; - -/** unsigned 16-bit integer */ -typedef unsigned short ALCushort; - -/** signed 32-bit 2's complement integer */ -typedef int ALCint; - -/** unsigned 32-bit integer */ -typedef unsigned int ALCuint; - -/** non-negative 32-bit binary integer size */ -typedef int ALCsizei; - -/** enumerated 32-bit value */ -typedef int ALCenum; - -/** 32-bit IEEE754 floating-point */ -typedef float ALCfloat; - -/** 64-bit IEEE754 floating-point */ -typedef double ALCdouble; - -/** void type (for opaque pointers only) */ -typedef void ALCvoid; - -/** void* function pointer type for all al*GetProcAddress (By JOAL/GlueGen) */ -typedef void* ALCproc; - -/** - * intptr_t: - * Using <gluegen_stddef.h> - * Using <gluegen_stdint.h> - */ -#include <gluegen_stddef.h> -#define HAS_STDDEF 1 -#include <gluegen_stdint.h> - -#if defined(__cplusplus) -} /* extern "C" */ -#endif - -#endif /* AL_ALC_TYPES_H */ diff --git a/make/stub_includes/openal/alc.h b/make/stub_includes/openal/alc.h index 4170b62..f463a0e 100644 --- a/make/stub_includes/openal/alc.h +++ b/make/stub_includes/openal/alc.h @@ -1,13 +1,83 @@ +// Based on headers in submodule openal-soft/include/alc.h + #ifndef AL_ALC_H #define AL_ALC_H -#include "alc-types.h" - -#if defined(__cplusplus) +#ifdef __cplusplus extern "C" { #endif -/* Enumerant values begin at column 50. No tabs. */ +#ifndef ALC_API + #if defined(AL_LIBTYPE_STATIC) + #define ALC_API + #elif defined(_WIN32) + #define ALC_API __declspec(dllimport) + #else + #define ALC_API extern + #endif +#endif + +#ifdef _WIN32 + #define ALC_APIENTRY __cdecl +#else + #define ALC_APIENTRY +#endif + + +/* Deprecated macros. */ +#define ALCAPI ALC_API +#define ALCAPIENTRY ALC_APIENTRY +#define ALC_INVALID 0 + +/** Supported ALC version? */ +#define ALC_VERSION_0_1 1 + +/** Opaque device handle */ +typedef struct ALCdevice ALCdevice; +/** Opaque context handle */ +typedef struct ALCcontext ALCcontext; + +/** 8-bit boolean */ +typedef char ALCboolean; + +/** character */ +typedef char ALCchar; + +/** signed 8-bit integer */ +typedef signed char ALCbyte; + +/** unsigned 8-bit integer */ +typedef unsigned char ALCubyte; + +/** signed 16-bit integer */ +typedef short ALCshort; + +/** unsigned 16-bit integer */ +typedef unsigned short ALCushort; + +/** signed 32-bit integer */ +typedef int ALCint; + +/** unsigned 32-bit integer */ +typedef unsigned int ALCuint; + +/** non-negative 32-bit integer size */ +typedef int ALCsizei; + +/** 32-bit enumeration value */ +typedef int ALCenum; + +/** 32-bit IEEE-754 floating-point */ +typedef float ALCfloat; + +/** 64-bit IEEE-754 floating-point */ +typedef double ALCdouble; + +/** void type (for opaque pointers only) */ +typedef void ALCvoid; + + +/* Enumeration values begin at column 50. Do not use tabs. */ /** Boolean False. */ #define ALC_FALSE 0 @@ -21,7 +91,7 @@ extern "C" { /** Context attribute: <int> Hz. */ #define ALC_REFRESH 0x1008 -/** Context attribute: AL_TRUE or AL_FALSE. */ +/** Context attribute: AL_TRUE or AL_FALSE synchronous context? */ #define ALC_SYNC 0x1009 /** Context attribute: <int> requested Mono (3D) Sources. */ @@ -39,30 +109,32 @@ extern "C" { /** 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. */ #define ALC_OUT_OF_MEMORY 0xA005 -/** Runtime ALC version. */ +/** Runtime ALC major version. */ #define ALC_MAJOR_VERSION 0x1000 +/** Runtime ALC minor version. */ #define ALC_MINOR_VERSION 0x1001 -/** Context attribute list properties. */ +/** Context attribute list size. */ #define ALC_ATTRIBUTES_SIZE 0x1002 +/** Context attribute list properties. */ #define ALC_ALL_ATTRIBUTES 0x1003 /** 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 @@ -73,9 +145,9 @@ extern "C" { /** 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 @@ -90,57 +162,92 @@ extern "C" { /** 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 -/** Context management. */ -ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint* attrlist); +#ifndef ALC_NO_PROTOTYPES +/* Context management. */ + +/** Create and attach a context to the given device. */ +ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint *attrlist); +/** + * Makes the given context the active process-wide context. Passing NULL clears + * the active context. + */ ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context); +/** Resumes processing updates for the given context. */ ALC_API void ALC_APIENTRY alcProcessContext(ALCcontext *context); +/** Suspends updates for the given context. */ ALC_API void ALC_APIENTRY alcSuspendContext(ALCcontext *context); +/** Remove a context from its device and destroys it. */ ALC_API void ALC_APIENTRY alcDestroyContext(ALCcontext *context); +/** Returns the currently active context. */ ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void); +/** Returns the device that a particular context is attached to. */ ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *context); -/** Device management. */ +/* Device management. */ + +/** Opens the named playback device. */ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *devicename); +/** Closes the given playback device. */ ALC_API ALCboolean ALC_APIENTRY alcCloseDevice(ALCdevice *device); +/* Error support. */ -/** - * Error support. - * - * Obtain the most recent Device error. - */ +/** Obtain the most recent Device error. */ ALC_API ALCenum ALC_APIENTRY alcGetError(ALCdevice *device); +/* Extension support. */ + /** - * Extension support. - * - * Query for the presence of an extension, and obtain any appropriate - * function pointers and enum values. + * Query for the presence of an extension on the device. Pass a NULL device to + * query a device-inspecific extension. */ ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent(ALCdevice *device, const ALCchar *extname); -ALC_API ALCproc ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname); +/** + * Retrieve the address of a function. Given a non-NULL device, the returned + * function may be device-specific. + */ +ALC_API ALCvoid* ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname); +/** + * Retrieve the value of an enum. Given a non-NULL device, the returned value + * may be device-specific. + */ ALC_API ALCenum ALC_APIENTRY alcGetEnumValue(ALCdevice *device, const ALCchar *enumname); -/** Query function. */ +/* Query functions. */ + +/** Returns information about the device, and error strings. */ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum param); +/** Returns information about the device and the version of OpenAL. */ ALC_API void ALC_APIENTRY alcGetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values); -/** Capture function. */ +/* Capture functions. */ + +/** + * Opens the named capture device with the given frequency, format, and buffer + * size. + */ 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. */ 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); @@ -152,7 +259,7 @@ typedef ALCdevice* (ALC_APIENTRY *LPALCOPENDEVICE)(const ALCchar *devicename typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)(ALCdevice *device); typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)(ALCdevice *device); typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)(ALCdevice *device, const ALCchar *extname); -typedef void* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname); +typedef ALCvoid* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname); typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname); typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)(ALCdevice *device, ALCenum param); typedef void (ALC_APIENTRY *LPALCGETINTEGERV)(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values); @@ -162,8 +269,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/make/stub_includes/openal/alext.h b/make/stub_includes/openal/alext.h index 3c53033..3a5918c 100644 --- a/make/stub_includes/openal/alext.h +++ b/make/stub_includes/openal/alext.h @@ -1,29 +1,24 @@ -/** - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ +// Based on headers in submodule openal-soft/include/alext.h #ifndef AL_ALEXT_H #define AL_ALEXT_H -// JOAL removed include of -// stddef.h, inttypes.h, stdint.h or inttypes.h -// tese headers confuse gluegen if in use. +#include <stddef.h> +/* Define int64 and uint64 types */ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +#include <stdint.h> +typedef int64_t _alsoft_int64_t; +typedef uint64_t _alsoft_uint64_t; +#elif defined(_WIN32) +typedef __int64 _alsoft_int64_t; +typedef unsigned __int64 _alsoft_uint64_t; +#else +/* Fallback if nothing above works */ +#include <stdint.h> +typedef int64_t _alsoft_int64_t; +typedef uint64_t _alsoft_uint64_t; +#endif #include "alc.h" #include "al.h" @@ -87,6 +82,31 @@ extern "C" { #ifndef AL_EXT_MCFORMATS #define AL_EXT_MCFORMATS 1 +/* Provides support for surround sound buffer formats with 8, 16, and 32-bit + * samples. + * + * QUAD8: Unsigned 8-bit, Quadraphonic (Front Left, Front Right, Rear Left, + * Rear Right). + * QUAD16: Signed 16-bit, Quadraphonic. + * QUAD32: 32-bit float, Quadraphonic. + * REAR8: Unsigned 8-bit, Rear Stereo (Rear Left, Rear Right). + * REAR16: Signed 16-bit, Rear Stereo. + * REAR32: 32-bit float, Rear Stereo. + * 51CHN8: Unsigned 8-bit, 5.1 Surround (Front Left, Front Right, Front Center, + * LFE, Side Left, Side Right). Note that some audio systems may label + * 5.1's Side channels as Rear or Surround; they are equivalent for the + * purposes of this extension. + * 51CHN16: Signed 16-bit, 5.1 Surround. + * 51CHN32: 32-bit float, 5.1 Surround. + * 61CHN8: Unsigned 8-bit, 6.1 Surround (Front Left, Front Right, Front Center, + * LFE, Rear Center, Side Left, Side Right). + * 61CHN16: Signed 16-bit, 6.1 Surround. + * 61CHN32: 32-bit float, 6.1 Surround. + * 71CHN8: Unsigned 8-bit, 7.1 Surround (Front Left, Front Right, Front Center, + * LFE, Rear Left, Rear Right, Side Left, Side Right). + * 71CHN16: Signed 16-bit, 7.1 Surround. + * 71CHN32: 32-bit float, 7.1 Surround. + */ #define AL_FORMAT_QUAD8 0x1204 #define AL_FORMAT_QUAD16 0x1205 #define AL_FORMAT_QUAD32 0x1206 @@ -123,9 +143,9 @@ extern "C" { #ifndef AL_EXT_STATIC_BUFFER #define AL_EXT_STATIC_BUFFER 1 -typedef ALvoid (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 ALvoid 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 @@ -158,9 +178,9 @@ ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void); #define AL_SOFT_buffer_sub_data 1 #define AL_BYTE_RW_OFFSETS_SOFT 0x1031 #define AL_SAMPLE_RW_OFFSETS_SOFT 0x1032 -typedef ALvoid (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei); +typedef void (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei); #ifdef AL_ALEXT_PROTOTYPES -AL_API ALvoid AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length); +AL_API void AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length); #endif #endif @@ -308,8 +328,8 @@ ALC_API void ALC_APIENTRY alcRenderSamplesSOFT(ALCdevice *device, ALCvoid *buffe #define AL_SOFT_source_latency 1 #define AL_SAMPLE_OFFSET_LATENCY_SOFT 0x1200 #define AL_SEC_OFFSET_LATENCY_SOFT 0x1201 -typedef int64_t ALint64SOFT; -typedef uint64_t ALuint64SOFT; +typedef _alsoft_int64_t ALint64SOFT; +typedef _alsoft_uint64_t ALuint64SOFT; typedef void (AL_APIENTRY*LPALSOURCEDSOFT)(ALuint,ALenum,ALdouble); typedef void (AL_APIENTRY*LPALSOURCE3DSOFT)(ALuint,ALenum,ALdouble,ALdouble,ALdouble); typedef void (AL_APIENTRY*LPALSOURCEDVSOFT)(ALuint,ALenum,const ALdouble*); @@ -338,6 +358,194 @@ AL_API void AL_APIENTRY alGetSourcei64vSOFT(ALuint source, ALenum param, ALint64 #endif #endif +#ifndef ALC_EXT_DEFAULT_FILTER_ORDER +#define ALC_EXT_DEFAULT_FILTER_ORDER 1 +#define ALC_DEFAULT_FILTER_ORDER 0x1100 +#endif + +#ifndef AL_SOFT_deferred_updates +#define AL_SOFT_deferred_updates 1 +#define AL_DEFERRED_UPDATES_SOFT 0xC002 +typedef void (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void); +typedef void (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void); +#ifdef AL_ALEXT_PROTOTYPES +AL_API void AL_APIENTRY alDeferUpdatesSOFT(void); +AL_API void AL_APIENTRY alProcessUpdatesSOFT(void); +#endif +#endif + +#ifndef AL_SOFT_block_alignment +#define AL_SOFT_block_alignment 1 +#define AL_UNPACK_BLOCK_ALIGNMENT_SOFT 0x200C +#define AL_PACK_BLOCK_ALIGNMENT_SOFT 0x200D +#endif + +#ifndef AL_SOFT_MSADPCM +#define AL_SOFT_MSADPCM 1 +#define AL_FORMAT_MONO_MSADPCM_SOFT 0x1302 +#define AL_FORMAT_STEREO_MSADPCM_SOFT 0x1303 +#endif + +#ifndef AL_SOFT_source_length +#define AL_SOFT_source_length 1 +/*#define AL_BYTE_LENGTH_SOFT 0x2009*/ +/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/ +/*#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); +typedef void (ALC_APIENTRY*LPALCDEVICERESUMESOFT)(ALCdevice *device); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API void ALC_APIENTRY alcDevicePauseSOFT(ALCdevice *device); +ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device); +#endif +#endif + +#ifndef AL_EXT_BFORMAT +#define AL_EXT_BFORMAT 1 +/* Provides support for B-Format ambisonic buffers (first-order, FuMa scaling + * and layout). + * + * BFORMAT2D_8: Unsigned 8-bit, 3-channel non-periphonic (WXY). + * BFORMAT2D_16: Signed 16-bit, 3-channel non-periphonic (WXY). + * BFORMAT2D_FLOAT32: 32-bit float, 3-channel non-periphonic (WXY). + * BFORMAT3D_8: Unsigned 8-bit, 4-channel periphonic (WXYZ). + * BFORMAT3D_16: Signed 16-bit, 4-channel periphonic (WXYZ). + * BFORMAT3D_FLOAT32: 32-bit float, 4-channel periphonic (WXYZ). + */ +#define AL_FORMAT_BFORMAT2D_8 0x20021 +#define AL_FORMAT_BFORMAT2D_16 0x20022 +#define AL_FORMAT_BFORMAT2D_FLOAT32 0x20023 +#define AL_FORMAT_BFORMAT3D_8 0x20031 +#define AL_FORMAT_BFORMAT3D_16 0x20032 +#define AL_FORMAT_BFORMAT3D_FLOAT32 0x20033 +#endif + +#ifndef AL_EXT_MULAW_BFORMAT +#define AL_EXT_MULAW_BFORMAT 1 +#define AL_FORMAT_BFORMAT2D_MULAW 0x10031 +#define AL_FORMAT_BFORMAT3D_MULAW 0x10032 +#endif + +#ifndef ALC_SOFT_HRTF +#define ALC_SOFT_HRTF 1 +#define ALC_HRTF_SOFT 0x1992 +#define ALC_DONT_CARE_SOFT 0x0002 +#define ALC_HRTF_STATUS_SOFT 0x1993 +#define ALC_HRTF_DISABLED_SOFT 0x0000 +#define ALC_HRTF_ENABLED_SOFT 0x0001 +#define ALC_HRTF_DENIED_SOFT 0x0002 +#define ALC_HRTF_REQUIRED_SOFT 0x0003 +#define ALC_HRTF_HEADPHONES_DETECTED_SOFT 0x0004 +#define ALC_HRTF_UNSUPPORTED_FORMAT_SOFT 0x0005 +#define ALC_NUM_HRTF_SPECIFIERS_SOFT 0x1994 +#define ALC_HRTF_SPECIFIER_SOFT 0x1995 +#define ALC_HRTF_ID_SOFT 0x1996 +typedef const ALCchar* (ALC_APIENTRY*LPALCGETSTRINGISOFT)(ALCdevice *device, ALCenum paramName, ALCsizei index); +typedef ALCboolean (ALC_APIENTRY*LPALCRESETDEVICESOFT)(ALCdevice *device, const ALCint *attribs); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API const ALCchar* ALC_APIENTRY alcGetStringiSOFT(ALCdevice *device, ALCenum paramName, ALCsizei index); +ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs); +#endif +#endif + +#ifndef AL_SOFT_gain_clamp_ex +#define AL_SOFT_gain_clamp_ex 1 +#define AL_GAIN_LIMIT_SOFT 0x200E +#endif + +#ifndef AL_SOFT_source_resampler +#define AL_SOFT_source_resampler +#define AL_NUM_RESAMPLERS_SOFT 0x1210 +#define AL_DEFAULT_RESAMPLER_SOFT 0x1211 +#define AL_SOURCE_RESAMPLER_SOFT 0x1212 +#define AL_RESAMPLER_NAME_SOFT 0x1213 +typedef const ALchar* (AL_APIENTRY*LPALGETSTRINGISOFT)(ALenum pname, ALsizei index); +#ifdef AL_ALEXT_PROTOTYPES +AL_API const ALchar* AL_APIENTRY alGetStringiSOFT(ALenum pname, ALsizei index); +#endif +#endif + +#ifndef AL_SOFT_source_spatialize +#define AL_SOFT_source_spatialize +#define AL_SOURCE_SPATIALIZE_SOFT 0x1214 +#define AL_AUTO_SOFT 0x0002 +#endif + +#ifndef ALC_SOFT_output_limiter +#define ALC_SOFT_output_limiter +#define ALC_OUTPUT_LIMITER_SOFT 0x199A +#endif + +#ifndef ALC_SOFT_device_clock +#define ALC_SOFT_device_clock 1 +typedef _alsoft_int64_t ALCint64SOFT; +typedef _alsoft_uint64_t ALCuint64SOFT; +#define ALC_DEVICE_CLOCK_SOFT 0x1600 +#define ALC_DEVICE_LATENCY_SOFT 0x1601 +#define ALC_DEVICE_CLOCK_LATENCY_SOFT 0x1602 +#define AL_SAMPLE_OFFSET_CLOCK_SOFT 0x1202 +#define AL_SEC_OFFSET_CLOCK_SOFT 0x1203 +typedef void (ALC_APIENTRY*LPALCGETINTEGER64VSOFT)(ALCdevice *device, ALCenum pname, ALsizei size, ALCint64SOFT *values); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API void ALC_APIENTRY alcGetInteger64vSOFT(ALCdevice *device, ALCenum pname, ALsizei size, ALCint64SOFT *values); +#endif +#endif + +#ifndef AL_SOFT_direct_channels_remix +#define AL_SOFT_direct_channels_remix 1 +#define AL_DROP_UNMATCHED_SOFT 0x0001 +#define AL_REMIX_UNMATCHED_SOFT 0x0002 +#endif + +#ifndef AL_SOFT_bformat_ex +#define AL_SOFT_bformat_ex 1 +#define AL_AMBISONIC_LAYOUT_SOFT 0x1997 +#define AL_AMBISONIC_SCALING_SOFT 0x1998 + +/* Ambisonic layouts */ +#define AL_FUMA_SOFT 0x0000 +#define AL_ACN_SOFT 0x0001 + +/* Ambisonic scalings (normalization) */ +/*#define AL_FUMA_SOFT*/ +#define AL_SN3D_SOFT 0x0001 +#define AL_N3D_SOFT 0x0002 +#endif + +#ifndef ALC_SOFT_loopback_bformat +#define ALC_SOFT_loopback_bformat 1 +#define ALC_AMBISONIC_LAYOUT_SOFT 0x1997 +#define ALC_AMBISONIC_SCALING_SOFT 0x1998 +#define ALC_AMBISONIC_ORDER_SOFT 0x1999 +#define ALC_MAX_AMBISONIC_ORDER_SOFT 0x199B + +#define ALC_BFORMAT3D_SOFT 0x1507 + +/* Ambisonic layouts */ +#define ALC_FUMA_SOFT 0x0000 +#define ALC_ACN_SOFT 0x0001 + +/* Ambisonic scalings (normalization) */ +/*#define ALC_FUMA_SOFT*/ +#define ALC_SN3D_SOFT 0x0001 +#define ALC_N3D_SOFT 0x0002 +#endif + +#ifndef AL_SOFT_effect_target +#define AL_SOFT_effect_target +#define AL_EFFECTSLOT_TARGET_SOFT 0x199C +#endif + #ifndef AL_SOFT_events #define AL_SOFT_events 1 #define AL_EVENT_CALLBACK_FUNCTION_SOFT 0x19A2 @@ -360,6 +568,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/make/stub_includes/openal/efx-creative.h b/make/stub_includes/openal/efx-creative.h index 0a04c98..d413792 100644 --- a/make/stub_includes/openal/efx-creative.h +++ b/make/stub_includes/openal/efx-creative.h @@ -1,3 +1,5 @@ +// Based on headers in submodule openal-soft/include/efx-creative.h + /* The tokens that would be defined here are already defined in efx.h. This * empty file is here to provide compatibility with Windows-based projects * that would include it. */ diff --git a/make/stub_includes/openal/efx-presets.h b/make/stub_includes/openal/efx-presets.h index 86dcbda..fde336a 100644 --- a/make/stub_includes/openal/efx-presets.h +++ b/make/stub_includes/openal/efx-presets.h @@ -1,3 +1,5 @@ +// Based on headers in submodule openal-soft/include/efx-presets.h + /* Reverb presets for EFX */ #ifndef EFX_PRESETS_H @@ -345,7 +347,7 @@ typedef struct { /* Driving Presets */ #define EFX_REVERB_PRESET_DRIVING_COMMENTATOR \ - { 1.0000f, 0.0000f, 3.1623f, 0.5623f, 0.5012f, 2.4200f, 0.8800f, 0.6800f, 0.1995f, 0.0930f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + { 1.0000f, 0.0000f, 0.3162f, 0.5623f, 0.5012f, 2.4200f, 0.8800f, 0.6800f, 0.1995f, 0.0930f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } #define EFX_REVERB_PRESET_DRIVING_PITGARAGE \ { 0.4287f, 0.5900f, 0.3162f, 0.7079f, 0.5623f, 1.7200f, 0.9300f, 0.8700f, 0.5623f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } diff --git a/make/stub_includes/openal/efx.h b/make/stub_includes/openal/efx.h index 5776698..22f7019 100644 --- a/make/stub_includes/openal/efx.h +++ b/make/stub_includes/openal/efx.h @@ -1,6 +1,10 @@ +// Based on headers in submodule openal-soft/include/efx.h + #ifndef AL_EFX_H #define AL_EFX_H +// [GLUEGEN] Not needed by gluegen +// #include <float.h> #include "alc.h" #include "al.h" @@ -242,41 +246,41 @@ typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat* typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, ALfloat*); #ifdef AL_ALEXT_PROTOTYPES -AL_API ALvoid AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects); -AL_API ALvoid AL_APIENTRY alDeleteEffects(ALsizei n, const ALuint *effects); +AL_API void AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects); +AL_API void AL_APIENTRY alDeleteEffects(ALsizei n, const ALuint *effects); AL_API ALboolean AL_APIENTRY alIsEffect(ALuint effect); -AL_API ALvoid AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue); -AL_API ALvoid AL_APIENTRY alEffectiv(ALuint effect, ALenum param, const ALint *piValues); -AL_API ALvoid AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue); -AL_API ALvoid AL_APIENTRY alEffectfv(ALuint effect, ALenum param, const ALfloat *pflValues); -AL_API ALvoid AL_APIENTRY alGetEffecti(ALuint effect, ALenum param, ALint *piValue); -AL_API ALvoid AL_APIENTRY alGetEffectiv(ALuint effect, ALenum param, ALint *piValues); -AL_API ALvoid AL_APIENTRY alGetEffectf(ALuint effect, ALenum param, ALfloat *pflValue); -AL_API ALvoid AL_APIENTRY alGetEffectfv(ALuint effect, ALenum param, ALfloat *pflValues); - -AL_API ALvoid AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters); -AL_API ALvoid AL_APIENTRY alDeleteFilters(ALsizei n, const ALuint *filters); +AL_API void AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue); +AL_API void AL_APIENTRY alEffectiv(ALuint effect, ALenum param, const ALint *piValues); +AL_API void AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue); +AL_API void AL_APIENTRY alEffectfv(ALuint effect, ALenum param, const ALfloat *pflValues); +AL_API void AL_APIENTRY alGetEffecti(ALuint effect, ALenum param, ALint *piValue); +AL_API void AL_APIENTRY alGetEffectiv(ALuint effect, ALenum param, ALint *piValues); +AL_API void AL_APIENTRY alGetEffectf(ALuint effect, ALenum param, ALfloat *pflValue); +AL_API void AL_APIENTRY alGetEffectfv(ALuint effect, ALenum param, ALfloat *pflValues); + +AL_API void AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters); +AL_API void AL_APIENTRY alDeleteFilters(ALsizei n, const ALuint *filters); AL_API ALboolean AL_APIENTRY alIsFilter(ALuint filter); -AL_API ALvoid AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue); -AL_API ALvoid AL_APIENTRY alFilteriv(ALuint filter, ALenum param, const ALint *piValues); -AL_API ALvoid AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue); -AL_API ALvoid AL_APIENTRY alFilterfv(ALuint filter, ALenum param, const ALfloat *pflValues); -AL_API ALvoid AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue); -AL_API ALvoid AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues); -AL_API ALvoid AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue); -AL_API ALvoid AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues); - -AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots); -AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *effectslots); +AL_API void AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue); +AL_API void AL_APIENTRY alFilteriv(ALuint filter, ALenum param, const ALint *piValues); +AL_API void AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue); +AL_API void AL_APIENTRY alFilterfv(ALuint filter, ALenum param, const ALfloat *pflValues); +AL_API void AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue); +AL_API void AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues); +AL_API void AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue); +AL_API void AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues); + +AL_API void AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots); +AL_API void AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *effectslots); AL_API ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot); -AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue); -AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *piValues); -AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue); -AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const ALfloat *pflValues); -AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue); -AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues); -AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue); -AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues); +AL_API void AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue); +AL_API void AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *piValues); +AL_API void AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue); +AL_API void AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const ALfloat *pflValues); +AL_API void AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue); +AL_API void AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues); +AL_API void AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue); +AL_API void AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues); #endif /* Filter ranges and defaults. */ diff --git a/src/java/com/jogamp/openal/JoalVersion.java b/src/java/com/jogamp/openal/JoalVersion.java index f2ffc48..77dcabf 100644 --- a/src/java/com/jogamp/openal/JoalVersion.java +++ b/src/java/com/jogamp/openal/JoalVersion.java @@ -33,6 +33,7 @@ import com.jogamp.common.GlueGenVersion; import com.jogamp.common.os.Platform; import com.jogamp.common.util.VersionUtil; import com.jogamp.common.util.JogampVersion; +import com.jogamp.openal.util.ALHelpers; import java.util.jar.Manifest; @@ -110,29 +111,62 @@ public class JoalVersion extends JogampVersion { sb.append("ALC null"); return sb; } - final ALCdevice device = alc.alcOpenDevice(null); - final ALCcontext context = alc.alcCreateContext(device, null); - alc.alcMakeContextCurrent(context); + final ALCcontext initialContext = alc.alcGetCurrentContext(); + + final ALCcontext context; + final ALCdevice device; + if( null == initialContext) { + device = alc.alcOpenDevice(null); + context = alc.alcCreateContext(device, null); + alc.alcMakeContextCurrent(context); + } else { + context = initialContext; + device = alc.alcGetContextsDevice(initialContext); + } final AL al = ALFactory.getAL(); // valid after makeContextCurrent(..) final ALVersion alv = new ALVersion(al); alv.toString(true, sb); sb.append("AL_EXTENSIONS ").append(al.alGetString(ALConstants.AL_EXTENSIONS)); sb.append(Platform.getNewline()); + final boolean enumerationExtIsPresent = alc.aclEnumerationExtIsPresent(); + final boolean enumerateAllExtIsPresent = alc.aclEnumerateAllExtIsPresent(); + final String enumExtAvailInfo = "(enumExt[def "+enumerationExtIsPresent+", all "+enumerateAllExtIsPresent+"])"; { final int[] iversion = { 0, 0 }; alc.alcGetIntegerv(device, ALCConstants.ALC_MAJOR_VERSION, 1, iversion, 0); alc.alcGetIntegerv(device, ALCConstants.ALC_MINOR_VERSION, 1, iversion, 1); sb.append("ALC_VERSION ").append(iversion[0]).append(".").append(iversion[1]); sb.append(Platform.getNewline()); - sb.append("ALC_DEF_OUTPUT ").append(alc.alcGetString(device, ALCConstants.ALC_DEFAULT_DEVICE_SPECIFIER)); - sb.append(Platform.getNewline()); - sb.append("ALC_DEF_CAPTURE ").append(alc.alcGetString(device, ALCConstants.ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER)); + if (!enumerationExtIsPresent && !enumerateAllExtIsPresent) { + sb.append("ALC_DEF_OUTPUT Unknown ").append(enumExtAvailInfo); + sb.append(Platform.getNewline()); + } else { + if (enumerationExtIsPresent) { + sb.append("ALC_DEF_OUTPUT (With " + ALHelpers.ALC_ENUMERATION_EXT + ") ") + .append(alc.alcGetString(device, ALCConstants.ALC_DEFAULT_DEVICE_SPECIFIER)); + sb.append(Platform.getNewline()); + } + if (enumerateAllExtIsPresent) { + sb.append("ALC_DEF_OUTPUT (With " + ALHelpers.ALC_ENUMERATE_ALL_EXT + ") ") + .append(alc.alcGetString(device, ALCConstants.ALC_DEFAULT_ALL_DEVICES_SPECIFIER)); + sb.append(Platform.getNewline()); + } + } + if (enumerationExtIsPresent) { + sb.append("ALC_DEF_CAPTURE ").append(alc.alcGetString(device, ALCConstants.ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER)); + } else { + sb.append("ALC_DEF_CAPTURE Unknown ").append(enumExtAvailInfo); + } sb.append(Platform.getNewline()); } - alc.alcMakeContextCurrent(null); - alc.alcDestroyContext(context); - alc.alcCloseDevice(device); + + if( null == initialContext ) { + alc.alcMakeContextCurrent(null); + alc.alcDestroyContext(context); + alc.alcCloseDevice(device); + } + devicesToString(sb, alc); return sb; } @@ -157,6 +191,8 @@ public class JoalVersion extends JogampVersion { final String inOutStr = "output"; final int mixerFrequency, mixerRefresh, monoSourceCount, stereoSourceCount; final int[] val = { 0 }; + final ALCcontext initialContext = alc.alcGetCurrentContext(); + final ALCdevice initialDevice = initialContext != null ? alc.alcGetContextsDevice(initialContext) : null; final ALCdevice d = alc.alcOpenDevice(devName); if( null == d ) { System.err.println("Error: Failed to open "+defStr+inOutStr+" device "+devName); @@ -216,30 +252,65 @@ public class JoalVersion extends JogampVersion { " (min latency "+(1000f/mixerRefresh)+" ms)], sources[mono "+monoSourceCount+", stereo "+stereoSourceCount+"]"+ System.lineSeparator()); - alc.alcMakeContextCurrent(null); - alc.alcDestroyContext(c); - alc.alcCloseDevice(d); + if( null != initialContext ) { + alc.alcMakeContextCurrent(initialContext); + if( initialContext.getDirectBufferAddress() != c.getDirectBufferAddress() ) { + alc.alcDestroyContext(c); + } + } else { + alc.alcMakeContextCurrent(null); + alc.alcDestroyContext(c); + } + if( initialDevice == null || initialDevice.getDirectBufferAddress() != d.getDirectBufferAddress() ) { + alc.alcCloseDevice(d); + } } } public static void devicesToString(final StringBuilder sb, final ALC alc) { - final String defOutDeviceName = alc.alcGetString(null, ALCConstants.ALC_DEFAULT_DEVICE_SPECIFIER); - final String defInDeviceName = alc.alcGetString(null, ALCConstants.ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER); - sb.append("Output devices:"+System.lineSeparator()); - { - final String[] outDevices = alc.alcGetDeviceSpecifiers(); - if( null != outDevices ) { - for (final String devName : outDevices) { - deviceToString(sb, alc, devName, false, defOutDeviceName, defInDeviceName); + final boolean enumerationExtIsPresent = alc.aclEnumerationExtIsPresent(); + final boolean enumerateAllExtIsPresent = alc.aclEnumerateAllExtIsPresent(); + final String enumExtAvailInfo = "(enumExt[def "+enumerationExtIsPresent+", all "+enumerateAllExtIsPresent+"])"; + + if (!enumerationExtIsPresent && !enumerateAllExtIsPresent) { + sb.append("No output devices infos available ").append(enumExtAvailInfo); + } else { + if (enumerateAllExtIsPresent) { + final String defOutAllDeviceName = alc.alcGetString(null, ALCConstants.ALC_DEFAULT_ALL_DEVICES_SPECIFIER); + sb.append("Output devices (With " + ALHelpers.ALC_ENUMERATE_ALL_EXT + "):" + System.lineSeparator()); + { + final String[] outDevices = alc.alcGetAllDeviceSpecifiers(); + if (null != outDevices) { + for (final String devName : outDevices) { + deviceToString(sb, alc, devName, false, defOutAllDeviceName, null); + } + } + } + } + if (enumerationExtIsPresent) { + final String defOutDeviceName = alc.alcGetString(null, ALCConstants.ALC_DEFAULT_DEVICE_SPECIFIER); + sb.append("Output devices (With " + ALHelpers.ALC_ENUMERATION_EXT + "):" + System.lineSeparator()); + { + final String[] outDevices = alc.alcGetDeviceSpecifiers(); + if (null != outDevices) { + for (final String devName : outDevices) { + deviceToString(sb, alc, devName, false, defOutDeviceName, null); + } + } } } } - sb.append("Capture devices:"+System.lineSeparator()); - { - final String[] inDevices = alc.alcGetCaptureDeviceSpecifiers(); - if( null != inDevices ) { - for (final String devName : inDevices) { - deviceToString(sb, alc, devName, true, defOutDeviceName, defInDeviceName); + if (!enumerationExtIsPresent) { + sb.append("No capture devices infos available ").append(enumExtAvailInfo); + } else { + final String defInDeviceName = alc.alcGetString(null, ALCConstants.ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER); + sb.append("Capture devices:" + System.lineSeparator()); + { + final String[] inDevices = alc.alcGetCaptureDeviceSpecifiers(); + if (null != inDevices) { + for (final String devName : inDevices) { + deviceToString(sb, alc, devName, true, null, defInDeviceName); + } } } } diff --git a/src/java/com/jogamp/openal/sound3d/Context.java b/src/java/com/jogamp/openal/sound3d/Context.java index e42f9dc..7e20263 100644 --- a/src/java/com/jogamp/openal/sound3d/Context.java +++ b/src/java/com/jogamp/openal/sound3d/Context.java @@ -34,6 +34,7 @@ package com.jogamp.openal.sound3d; +import com.jogamp.common.util.locks.Lock; import com.jogamp.common.util.locks.LockFactory; import com.jogamp.common.util.locks.RecursiveLock; import com.jogamp.openal.*; @@ -203,6 +204,9 @@ public final class Context { return lock.getHoldCount(); } + public boolean tryMakeCurrent(final boolean throwException, final long timeoutMS) throws RuntimeException { + return makeCurrentImpl(false /* throwTryLockException */, throwException, timeoutMS); + } /** * Makes the audio context current on the calling thread. * <p> @@ -217,40 +221,52 @@ public final class Context { * @see #release() */ public boolean makeCurrent(final boolean throwException) throws ALException { - lock.lock(); - - if( null == alCtx ) { - lock.unlock(); - if( throwException ) { - throw new ALException("Invalid "+this); - } - return false; - } + return makeCurrentImpl(true /* throwTryLockException */, throwException, Lock.TIMEOUT); + } + private boolean makeCurrentImpl(final boolean throwTryLockException, final boolean throwException, final long timeoutMS) throws RuntimeException { + try { + if( lock.tryLock(timeoutMS) ) { + if( null == alCtx ) { + lock.unlock(); + if( throwException ) { + throw new ALException("Invalid "+this); + } + return false; + } - // One context can only be current on one thread, - // and one thread can only have one context current! - final Context current = getCurrentContext(); - if (current != null) { - if (current == this) { // implicit recursive locking, lock.getHoldCount() > 1 - return true; + // One context can only be current on one thread, + // and one thread can only have one context current! + final Context current = getCurrentContext(); + if (current != null) { + if (current == this) { // implicit recursive locking, lock.getHoldCount() > 1 + return true; + } else { + lock.unlock(); + if( throwException ) { + throw new ALException("Current thread "+Thread.currentThread()+" holds another "+current+" while claiming this "+this); + } + return false; + } + } + final boolean r = makeCurrentImpl(); + if( r ) { + currentContext.set(this); + } else { + lock.unlock(); + if( throwException ) { + throw new ALException("Context make current failed "+this); + } + } + return r; } else { - lock.unlock(); - if( throwException ) { - throw new ALException("Current thread "+Thread.currentThread()+" holds another "+current+" while claiming this "+this); + if( throwTryLockException ) { + throw new RuntimeException("Waited "+timeoutMS+"ms for: "+lock.toString()+" - "+Thread.currentThread().getName()); } return false; } + } catch (final InterruptedException ie) { + throw new RuntimeException(ie); } - final boolean r = makeCurrentImpl(); - if( r ) { - currentContext.set(this); - } else { - lock.unlock(); - if( throwException ) { - throw new ALException("Context make current failed "+this); - } - } - return r; } private boolean makeCurrentImpl() { if( hasALC_thread_local_context ) { diff --git a/src/java/com/jogamp/openal/util/ALHelpers.java b/src/java/com/jogamp/openal/util/ALHelpers.java index 93dfa6e..fda3167 100644 --- a/src/java/com/jogamp/openal/util/ALHelpers.java +++ b/src/java/com/jogamp/openal/util/ALHelpers.java @@ -52,6 +52,9 @@ public class ALHelpers { public static final String ALC_EXT_thread_local_context = "ALC_EXT_thread_local_context"; + public static final String ALC_ENUMERATION_EXT = "ALC_ENUMERATION_EXT"; + public static final String ALC_ENUMERATE_ALL_EXT = "ALC_ENUMERATE_ALL_EXT"; + /** * Returns a compatible {@link AudioFormat} based on given OpenAL channel-layout, sample-type and format, * as well as the generic sample-rate and sample-size. diff --git a/src/java/jogamp/openal/ALCImpl.java b/src/java/jogamp/openal/ALCImpl.java index 99494ca..cdde31b 100644 --- a/src/java/jogamp/openal/ALCImpl.java +++ b/src/java/jogamp/openal/ALCImpl.java @@ -4,21 +4,39 @@ package jogamp.openal; import com.jogamp.common.nio.Buffers; +import com.jogamp.openal.ALCConstants; import com.jogamp.openal.ALException; import com.jogamp.openal.ALCdevice; +import com.jogamp.openal.util.ALHelpers; + import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.util.ArrayList; /** * ALC implementation. - * @author Michael Bien */ public class ALCImpl extends ALCAbstractImpl { + public boolean aclEnumerationExtIsPresent() { + return alcIsExtensionPresent(null, ALHelpers.ALC_ENUMERATION_EXT); + } + + public boolean aclEnumerateAllExtIsPresent() { + return alcIsExtensionPresent(null, ALHelpers.ALC_ENUMERATE_ALL_EXT); + } + + public boolean alcIsDoubleNullTerminatedString(final ALCdevice device, final int param) { + return ( null == device || 0 == device.getDirectBufferAddress() ) && + ( param == ALC_DEVICE_SPECIFIER || + param == ALC_CAPTURE_DEVICE_SPECIFIER || + param == ALC_ALL_DEVICES_SPECIFIER + ); + } + @Override public String alcGetString(final ALCdevice device, final int param) { - if (device == null && param == ALC_DEVICE_SPECIFIER) { - throw new ALException("Call alcGetDeviceSpecifiers to fetch all available device names"); + if (alcIsDoubleNullTerminatedString(device, param)) { + throw new ALException("Call alcGetString to get double null terminated string"); } final ByteBuffer buf = alcGetStringImpl(device, param); @@ -51,24 +69,26 @@ public class ALCImpl extends ALCAbstractImpl { } private native java.nio.ByteBuffer dispatch_alcGetStringImpl1(ByteBuffer deviceBuffer, int param, long addr); - /** - * Fetches the names of the available ALC device specifiers. - * Equivalent to the C call alcGetString(NULL, ALC_DEVICE_SPECIFIER). - */ + @Override public String[] alcGetDeviceSpecifiers() { - return getDoubleNullTerminatedString(ALC_DEVICE_SPECIFIER); + return alcGetStringAsDoubleNullTerminatedString(null, ALC_DEVICE_SPECIFIER); } - /** - * Fetches the names of the available ALC capture device specifiers. - * Equivalent to the C call alcGetString(NULL, ALC_CAPTURE_DEVICE_SPECIFIER). - */ + @Override public String[] alcGetCaptureDeviceSpecifiers() { - return getDoubleNullTerminatedString(ALC_CAPTURE_DEVICE_SPECIFIER); + return alcGetStringAsDoubleNullTerminatedString(null, ALC_CAPTURE_DEVICE_SPECIFIER); } - private String[] getDoubleNullTerminatedString(final int which) { - final ByteBuffer buf = alcGetStringImpl(null, which); + public String[] alcGetAllDeviceSpecifiers() { + return alcGetStringAsDoubleNullTerminatedString(null, ALC_ALL_DEVICES_SPECIFIER); + } + + public String[] alcGetStringAsDoubleNullTerminatedString(final ALCdevice device, final int param) { + if (!alcIsDoubleNullTerminatedString(device, param)) { + throw new ALException("Call alcGetString to get string"); + } + + final ByteBuffer buf = alcGetStringImpl(device, param); if (buf == null) { return null; } diff --git a/src/java/jogamp/openal/ALDynamicLibraryBundleInfo.java b/src/java/jogamp/openal/ALDynamicLibraryBundleInfo.java index e58e34c..1a2ed3f 100644 --- a/src/java/jogamp/openal/ALDynamicLibraryBundleInfo.java +++ b/src/java/jogamp/openal/ALDynamicLibraryBundleInfo.java @@ -44,6 +44,7 @@ public final class ALDynamicLibraryBundleInfo implements DynamicLibraryBundleInf private static final List<String> glueLibNames; static { SecurityUtil.doPrivileged(new PrivilegedAction<Object>() { + @Override public Object run() { Platform.initSingleton(); @@ -140,6 +141,8 @@ public final class ALDynamicLibraryBundleInfo implements DynamicLibraryBundleInf return libNamesList; } + @Override + public List<String> getSymbolForToolLibPath() { return Arrays.asList("alGetString"); } @Override public final List<String> getToolGetProcAddressFuncNameList() { diff --git a/src/native/almisc.c b/src/native/almisc.c index ca638d9..22689b6 100644 --- a/src/native/almisc.c +++ b/src/native/almisc.c @@ -1,16 +1,15 @@ - #include <jni.h> #include <stdlib.h> #include <assert.h> - #include "al.h" - #include "alc.h" - #ifndef _MSC_VER /* Non-Windows platforms */ +#include "al.h" +#include "alc.h" +#ifndef _MSC_VER /* Non-Windows platforms */ #define __cdecl /* Trim non-standard keyword */ - #endif - #include "efx.h" - #include <string.h> +#endif +#include "efx.h" +#include <string.h> extern int strlen_alc(ALCdevice *device, int param, const char* str); @@ -51,13 +50,13 @@ Java_jogamp_openal_ALCImpl_dispatch_1alcGetStringImpl1(JNIEnv *env, jobject _unu LPALCGETSTRING ptr_alcGetString; ALCdevice * _device_ptr = NULL; const ALCchar * _res; - if ( NULL != device ) { - _device_ptr = (ALCdevice *) (((char*) (*env)->GetDirectBufferAddress(env, device)) + 0); - } + if ( NULL != device ) { + _device_ptr = (ALCdevice *) (((char*) (*env)->GetDirectBufferAddress(env, device)) + 0); + } ptr_alcGetString = (LPALCGETSTRING) (intptr_t) procAddress; assert(ptr_alcGetString != NULL); _res = (* ptr_alcGetString) ((ALCdevice *) _device_ptr, (ALCenum) param); if (NULL == _res) return NULL; - return (*env)->NewDirectByteBuffer(env, _res, strlen_alc(_device_ptr, param, _res)); + return (*env)->NewDirectByteBuffer(env, (void*)_res, strlen_alc(_device_ptr, param, _res)); } diff --git a/src/test/com/jogamp/openal/test/junit/ALVersionTest.java b/src/test/com/jogamp/openal/test/junit/ALVersionTest.java index cb24e95..55535ed 100644 --- a/src/test/com/jogamp/openal/test/junit/ALVersionTest.java +++ b/src/test/com/jogamp/openal/test/junit/ALVersionTest.java @@ -31,10 +31,14 @@ import java.io.IOException; import org.junit.FixMethodOrder; import org.junit.Test; +import org.junit.After; import org.junit.Assert; import org.junit.runners.MethodSorters; import com.jogamp.common.util.VersionNumber; +import com.jogamp.openal.ALC; +import com.jogamp.openal.ALCcontext; +import com.jogamp.openal.ALCdevice; import com.jogamp.openal.ALFactory; import com.jogamp.openal.ALVersion; import com.jogamp.openal.JoalVersion; @@ -70,6 +74,46 @@ public class ALVersionTest extends UITestCase { System.err.println(jv.toString(ALFactory.getALC())); } + @Test + public void test03JoalVersionMustNoChangeContextAndDeviceUsed() { + final ALC alc = ALFactory.getALC(); + final ALCdevice intialDevice = alc.alcOpenDevice(null); + final ALCcontext initialContext = alc.alcCreateContext(intialDevice, null); + alc.alcMakeContextCurrent(initialContext); + final JoalVersion jv = JoalVersion.getInstance(); + System.err.println(jv.toString(alc)); + final ALCcontext currentContext = alc.alcGetCurrentContext(); + Assert.assertNotNull(currentContext); + Assert.assertEquals(initialContext.getDirectBufferAddress(), currentContext.getDirectBufferAddress()); + final ALCdevice currentDevice = alc.alcGetContextsDevice(currentContext); + Assert.assertNotNull(currentDevice); + Assert.assertEquals(intialDevice.getDirectBufferAddress(), currentDevice.getDirectBufferAddress()); + } + + @Test + public void test04JoalVersionMustNotSetAdditionalContext() { + final ALC alc = ALFactory.getALC(); + final JoalVersion jv = JoalVersion.getInstance(); + System.err.println(jv.toString(alc)); + final ALCcontext currentContext = alc.alcGetCurrentContext(); + Assert.assertNull(currentContext); + } + + @After + @Override + public void tearDown() { + super.tearDown(); + final ALC alc = ALFactory.getALC(); + final ALCcontext context = alc.alcGetCurrentContext(); + if(null != context) { + alc.alcDestroyContext(context); + final ALCdevice device = alc.alcGetContextsDevice(context); + if(null != device) { + alc.alcCloseDevice(device); + } + } + } + public static void main(final String args[]) throws IOException { org.junit.runner.JUnitCore.main(ALVersionTest.class.getName()); } diff --git a/src/test/com/jogamp/openal/test/manual/Synth01AL.java b/src/test/com/jogamp/openal/test/manual/Synth01AL.java index 64da9fa..7bd60c8 100644 --- a/src/test/com/jogamp/openal/test/manual/Synth01AL.java +++ b/src/test/com/jogamp/openal/test/manual/Synth01AL.java @@ -101,6 +101,15 @@ public class Synth01AL { } } } + System.out.println("Output all devices:"); + { + final String[] outDevices = alc.alcGetAllDeviceSpecifiers(); + if( null != outDevices ) { + for (final String name : outDevices) { + System.out.println(" "+name); + } + } + } alCheckError("setup", true); al.alGenBuffers(1, buffers, 0); |