aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xmake/scripts/tests-win.bat3
-rwxr-xr-x[-rw-r--r--]make/scripts/tests.sh11
-rw-r--r--src/java/com/jogamp/openal/ALVersion.java152
-rw-r--r--src/java/com/jogamp/openal/JoalVersion.java79
-rw-r--r--src/test/com/jogamp/openal/test/junit/ALVersionTest.java76
-rw-r--r--src/test/com/jogamp/openal/test/manual/OpenALTest.java9
6 files changed, 309 insertions, 21 deletions
diff --git a/make/scripts/tests-win.bat b/make/scripts/tests-win.bat
index 7984f39..7e702f1 100755
--- a/make/scripts/tests-win.bat
+++ b/make/scripts/tests-win.bat
@@ -1,6 +1,7 @@
REM scripts\java-win.bat com.jogamp.openal.JoalVersion %*
-scripts\java-win.bat com.jogamp.openal.test.manual.OpenALTest %*
+REM scripts\java-win.bat com.jogamp.openal.test.manual.OpenALTest %*
REM scripts\java-win.bat com.jogamp.openal.test.manual.Sound3DTest %*
+scripts\java-win.bat com.jogamp.openal.test.junit.ALVersionTest %*
REM scripts\java-win.bat com.jogamp.openal.test.junit.ALutWAVLoaderTest %*
REM scripts\java-win.bat com.jogamp.openal.test.junit.ALExtLoopbackDeviceSOFTTest %*
diff --git a/make/scripts/tests.sh b/make/scripts/tests.sh
index efad1ef..47c08cd 100644..100755
--- a/make/scripts/tests.sh
+++ b/make/scripts/tests.sh
@@ -1,17 +1,15 @@
function print_usage() {
- echo "Usage: $0 java-exe java-xargs joal-build-dir"
+ echo "Usage: $0 java-exe joal-build-dir"
echo "e.g.: bash scripts/tests.sh `which java` -d64 ../build-x86_64"
}
-if [ -z "$1" -o -z "$2" -o -z "$3" ] ; then
+if [ -z "$1" -o -z "$2" ] ; then
print_usage
exit 0
fi
javaexe="$1"
shift
-javaxargs=$1
-shift
bdir=$1
shift
bdir_base=`basename $bdir`
@@ -88,8 +86,9 @@ function testnormal() {
}
-#testnotmal com.jogamp.openal.JoalVersion $*
-testnormal com.jogamp.openal.test.manual.OpenALTest $*
+#testnormal com.jogamp.openal.JoalVersion $*
+#testnormal com.jogamp.openal.test.manual.OpenALTest $*
#testnormal com.jogamp.openal.test.manual.Sound3DTest $*
+testnormal com.jogamp.openal.test.junit.ALVersionTest $*
#testnormal com.jogamp.openal.test.junit.ALutWAVLoaderTest $*
#testnormal com.jogamp.openal.test.junit.ALExtLoopbackDeviceSOFTTest $*
diff --git a/src/java/com/jogamp/openal/ALVersion.java b/src/java/com/jogamp/openal/ALVersion.java
new file mode 100644
index 0000000..b0eaf2e
--- /dev/null
+++ b/src/java/com/jogamp/openal/ALVersion.java
@@ -0,0 +1,152 @@
+/**
+ * Copyright 2023 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+package com.jogamp.openal;
+
+import com.jogamp.common.os.Platform;
+import com.jogamp.common.util.VersionNumber;
+import com.jogamp.common.util.VersionNumberString;
+
+public class ALVersion {
+ private final String vendor;
+ private final String renderer;
+ private final VersionNumberString version;
+ private final VersionNumberString vendorVersion;
+
+ /**
+ * Returns the optional vendor version at the end of the
+ * <code>AL_VERSION</code> string if exists, otherwise the {@link VersionNumberString#zeroVersion zero version} instance.
+ * <pre>
+ * 1.1.0 (1.1 ALSOFT 1.23.1)
+ * </pre>
+ */
+ private static final VersionNumberString getVendorVersion(final VersionNumberString version) {
+ // Skip the 1st AL version
+ String str = version.getVersionString().substring(version.endOfStringMatch()).trim();
+ while ( str.length() > 0 ) {
+ final VersionNumberString vv = new VersionNumberString(str, VersionNumber.getDefaultVersionNumberPattern());
+ final int eosm = vv.endOfStringMatch();
+ if( 0 < eosm ) {
+ if( vv.hasMajor() && vv.hasMinor() ) { // Requires at least a defined major and minor version component!
+ return vv;
+ }
+ str = str.substring( eosm ).trim();
+ } else {
+ break; // no match
+ }
+ }
+ return VersionNumberString.zeroVersion;
+ }
+
+ /**
+ * ALVersion Ctor
+ * <p>
+ * The given {@link AL} is being used and assumed having a current {@link ALCcontext},
+ * w/o any resources being allocated.
+ * </p>
+ * @param al {@link AL} instance with a current {@link ALCcontext}.
+ */
+ public ALVersion(final AL al) {
+ vendor = al.alGetString(ALConstants.AL_VENDOR);
+ renderer = al.alGetString(ALConstants.AL_RENDERER);
+ version = new VersionNumberString(al.alGetString(ALConstants.AL_VERSION));
+ vendorVersion = getVendorVersion(version);
+ }
+
+ /**
+ * ALVersion Ctor
+ * <p>
+ * The given {@link ALC} is being used and {@Link ALCdevice} and {@link ALCcontext} are allocated,
+ * made current and finally being released.
+ * </p>
+ * @param alc static {@link ALC} instance
+ */
+ public ALVersion(final ALC alc) {
+ final ALCdevice device = alc.alcOpenDevice(null);
+ final ALCcontext context = alc.alcCreateContext(device, null);
+ alc.alcMakeContextCurrent(context);
+ final AL al = ALFactory.getAL(); // valid after makeContextCurrent(..)
+ vendor = al.alGetString(ALConstants.AL_VENDOR);
+ renderer = al.alGetString(ALConstants.AL_RENDERER);
+ version = new VersionNumberString(al.alGetString(ALConstants.AL_VERSION));
+ vendorVersion = getVendorVersion(version);
+ alc.alcMakeContextCurrent(null);
+ alc.alcDestroyContext(context);
+ alc.alcCloseDevice(device);
+ }
+
+ /**
+ * Return the AL context implementation vendor.
+ */
+ public String getVendor() { return vendor; }
+
+ /**
+ * Return the AL context implementation renderer.
+ */
+ public String getRenderer() { return renderer; }
+
+ /**
+ * Return the AL context implementation version.
+ */
+ public VersionNumberString getVersion() { return version; }
+
+ /**
+ * Returns the optional vendor version at the end of the
+ * <code>AL_VERSION</code> string if exists, otherwise the {@link VersionNumberString#zeroVersion zero version} instance.
+ * <pre>
+ * 1.1.0 (1.1 ALSOFT 1.23.1)
+ * </pre>
+ */
+ public VersionNumberString getVendorVersion() { return vendorVersion; }
+
+ @Override
+ public String toString() {
+ return toString(false, null).toString();
+ }
+
+ public StringBuilder toString(final boolean withNewline, StringBuilder sb) {
+ if( null == sb ) {
+ sb = new StringBuilder();
+ }
+ if( withNewline ) {
+ sb.append("AL_VENDOR ").append(getVendor());
+ sb.append(Platform.getNewline());
+ sb.append("AL_RENDERER ").append(getRenderer());
+ sb.append(Platform.getNewline());
+ sb.append("AL_VERSION ").append(getVersion());
+ sb.append(Platform.getNewline());
+ sb.append("AL_VENDOR_VERS ").append(getVendorVersion());
+ sb.append(Platform.getNewline());
+ } else {
+ sb.append("vendor ").append(getVendor());
+ sb.append(", renderer ").append(getRenderer());
+ sb.append(", version ").append(getVersion());
+ sb.append(", vendorVersion ").append(getVendorVersion());
+ }
+ return sb;
+ }
+}
diff --git a/src/java/com/jogamp/openal/JoalVersion.java b/src/java/com/jogamp/openal/JoalVersion.java
index 0d756cc..2892082 100644
--- a/src/java/com/jogamp/openal/JoalVersion.java
+++ b/src/java/com/jogamp/openal/JoalVersion.java
@@ -1,5 +1,5 @@
/**
- * Copyright 2013 JogAmp Community. All rights reserved.
+ * Copyright 2013-2023 JogAmp Community. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
@@ -56,24 +56,79 @@ public class JoalVersion extends JogampVersion {
return jogampCommonVersionInfo;
}
- public StringBuilder toString(StringBuilder sb) {
+ public StringBuilder getBriefOSALBuildInfo(StringBuilder sb) {
+ if(null==sb) {
+ sb = new StringBuilder();
+ }
+ sb.append("OS: ").append(Platform.getOSName()).append(", version ").append(Platform.getOSVersion()).append(", arch ").append(Platform.getArchName());
+ sb.append(Platform.getNewline());
+ sb.append("JOAL GIT sha1 ").append(getImplementationCommit());
+ sb.append(Platform.getNewline());
+ return sb;
+ }
+
+ /**
+ * Return {@link JogampVersion} package information and AL informal strings.
+ * <p>
+ * The given {@link ALC} is being used and {@Link ALCdevice} and {@link ALCcontext} are allocated,
+ * made current and finally being released.
+ * </p>
+ * @param alc static {@link ALC} instance
+ * @param sb optional StringBuffer to be reused
+ */
+ public StringBuilder toString(final ALC alc, StringBuilder sb) {
sb = super.toString(sb).append(Platform.getNewline());
- // getGLInfo(gl, sb);
+ getALStrings(alc, sb);
return sb;
}
- public String toString() {
- return toString(null).toString();
+ /**
+ * Return {@link JogampVersion} package information and AL informal strings.
+ * <p>
+ * The given {@link ALC} is being used and {@Link ALCdevice} and {@link ALCcontext} are allocated,
+ * made current and finally being released.
+ * </p>
+ * @param alc static {@link ALC} instance
+ */
+ public String toString(final ALC alc) {
+ return toString(alc, null).toString();
}
- public StringBuilder getBriefOSALBuildInfo(StringBuilder sb) {
- if(null==sb) {
+ /**
+ * Return AL informal strings.
+ * <p>
+ * The given {@link ALC} is being used and {@Link ALCdevice} and {@link ALCcontext} are allocated,
+ * made current and finally being released.
+ * </p>
+ * @param alc static {@link ALC} instance
+ */
+ public StringBuilder getALStrings(final ALC alc, StringBuilder sb) {
+ if( null == sb ) {
sb = new StringBuilder();
}
- sb.append("OS: ").append(Platform.getOSName()).append(", version ").append(Platform.getOSVersion()).append(", arch ").append(Platform.getArchName());
- sb.append(Platform.getNewline());
- sb.append("JOAL GIT sha1 ").append(getImplementationCommit());
+ final ALCdevice device = alc.alcOpenDevice(null);
+ final ALCcontext context = alc.alcCreateContext(device, null);
+ alc.alcMakeContextCurrent(context);
+ 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 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));
+ sb.append(Platform.getNewline());
+ }
+ alc.alcMakeContextCurrent(null);
+ alc.alcDestroyContext(context);
+ alc.alcCloseDevice(device);
return sb;
}
@@ -81,7 +136,9 @@ public class JoalVersion extends JogampVersion {
System.err.println(VersionUtil.getPlatformInfo());
System.err.println(GlueGenVersion.getInstance());
// System.err.println(NativeWindowVersion.getInstance());
- System.err.println(JoalVersion.getInstance());
+ // System.err.println(JoalVersion.getInstance());
+ System.err.println(JoalVersion.getInstance().toString(ALFactory.getALC()));
+
}
}
diff --git a/src/test/com/jogamp/openal/test/junit/ALVersionTest.java b/src/test/com/jogamp/openal/test/junit/ALVersionTest.java
new file mode 100644
index 0000000..cb24e95
--- /dev/null
+++ b/src/test/com/jogamp/openal/test/junit/ALVersionTest.java
@@ -0,0 +1,76 @@
+/**
+ * Copyright 2013-2023 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+package com.jogamp.openal.test.junit;
+
+import java.io.IOException;
+
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.Assert;
+import org.junit.runners.MethodSorters;
+
+import com.jogamp.common.util.VersionNumber;
+import com.jogamp.openal.ALFactory;
+import com.jogamp.openal.ALVersion;
+import com.jogamp.openal.JoalVersion;
+import com.jogamp.openal.test.util.UITestCase;
+
+/**
+ * Testing the OpenAL version,
+ * comparing against expected OpenAL-Soft version >= 1.1.0 and vendor-version >= 1.23.0,
+ * as well as the OpenAL-Soft vendor and renderer strings.
+ */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class ALVersionTest extends UITestCase {
+ static private final String OpenALVendor = "OpenAL Community";
+ static private final String OpenALRenderer = "OpenAL Soft";
+ static private final VersionNumber ALVersion11 = new VersionNumber(1, 1, 0);
+ static private final VersionNumber OpenALVersion1230 = new VersionNumber(1, 23, 0);
+
+ @Test
+ public void test01ALVersion() {
+ final ALVersion alv = new ALVersion(ALFactory.getALC());
+ final int versionComp = alv.getVersion().compareTo(ALVersion11);
+ final int vendorVersionComp = alv.getVendorVersion().compareTo(OpenALVersion1230);
+ System.out.println("ALVersion: "+alv.toString()+", version >= 1.1: "+versionComp+", vendorVersion >= 1.23.0: "+vendorVersionComp);
+ Assert.assertEquals(OpenALVendor, alv.getVendor());
+ Assert.assertEquals(OpenALRenderer, alv.getRenderer());
+ Assert.assertTrue( versionComp >= 0 );
+ Assert.assertTrue( vendorVersionComp >= 0 );
+ }
+
+ @Test
+ public void test02JoalVersion() {
+ final JoalVersion jv = JoalVersion.getInstance();
+ System.err.println(jv.toString(ALFactory.getALC()));
+ }
+
+ 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/OpenALTest.java b/src/test/com/jogamp/openal/test/manual/OpenALTest.java
index 1981326..cf86fe5 100644
--- a/src/test/com/jogamp/openal/test/manual/OpenALTest.java
+++ b/src/test/com/jogamp/openal/test/manual/OpenALTest.java
@@ -44,6 +44,7 @@ import com.jogamp.openal.ALCcontext;
import com.jogamp.openal.ALCdevice;
import com.jogamp.openal.ALConstants;
import com.jogamp.openal.ALFactory;
+import com.jogamp.openal.ALVersion;
import com.jogamp.openal.UnsupportedAudioFileException;
import com.jogamp.openal.eax.EAX;
import com.jogamp.openal.eax.EAXConstants;
@@ -73,8 +74,9 @@ public class OpenALTest {
device = alc.alcOpenDevice(null);
context = alc.alcCreateContext(device, null);
alc.alcMakeContextCurrent(context);
- al = ALFactory.getAL();
- System.out.println("output devices:");
+ al = ALFactory.getAL(); // valid after makeContextCurrent(..)
+ System.out.println("ALVersion: "+new ALVersion(al).toString());
+ System.out.println("Output devices:");
{
final String[] outDevices = alc.alcGetDeviceSpecifiers();
if( null != outDevices ) {
@@ -83,7 +85,7 @@ public class OpenALTest {
}
}
}
- System.out.println("capture devices:");
+ System.out.println("Capture devices:");
{
final String[] inDevices = alc.alcGetCaptureDeviceSpecifiers();
if( null != inDevices ) {
@@ -164,6 +166,7 @@ public class OpenALTest {
sources = null;
}
if( null != context ) {
+ alc.alcMakeContextCurrent(null);
alc.alcDestroyContext(context);
context = null;
}