diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/java/com/jogamp/openal/ALFactory.java | 11 | ||||
-rw-r--r-- | src/java/com/jogamp/openal/eax/EAXFactory.java | 23 | ||||
-rw-r--r-- | src/java/com/jogamp/openal/impl/Debug.java | 149 | ||||
-rw-r--r-- | src/test/com/jogamp/openal/test/manual/OpenALTest.java | 10 |
4 files changed, 180 insertions, 13 deletions
diff --git a/src/java/com/jogamp/openal/ALFactory.java b/src/java/com/jogamp/openal/ALFactory.java index 64da325..e7ec774 100644 --- a/src/java/com/jogamp/openal/ALFactory.java +++ b/src/java/com/jogamp/openal/ALFactory.java @@ -44,6 +44,8 @@ import com.jogamp.openal.impl.*; * @author Kenneth Russell */ public class ALFactory { + public static final boolean DEBUG = Debug.debug("Factory"); + private static boolean initialized = false; private static AL al; private static ALC alc; @@ -54,9 +56,12 @@ public class ALFactory { try { if (!initialized) { if(null == ALImpl.getALProcAddressTable()) { - throw new RuntimeException("AL not initialized (ProcAddressTable null)"); + throw new ALException("AL not initialized (ProcAddressTable null)"); } initialized = true; + if(DEBUG) { + System.err.println("AL initialized"); + } } } catch (UnsatisfiedLinkError e) { throw new ALException(e); @@ -72,7 +77,7 @@ public class ALFactory { public static AL getAL() throws ALException { initialize(); if (al == null) { - al = new ALImpl(); + al = new ALImpl(); } return al; } @@ -86,7 +91,7 @@ public class ALFactory { public static ALC getALC() throws ALException{ initialize(); if (alc == null) { - alc = new ALCImpl(); + alc = new ALCImpl(); } return alc; } diff --git a/src/java/com/jogamp/openal/eax/EAXFactory.java b/src/java/com/jogamp/openal/eax/EAXFactory.java index 0e305a5..01d336c 100644 --- a/src/java/com/jogamp/openal/eax/EAXFactory.java +++ b/src/java/com/jogamp/openal/eax/EAXFactory.java @@ -39,20 +39,33 @@ import com.jogamp.openal.ALFactory; * */ public final class EAXFactory { + public static final boolean DEBUG; static { //initializes JOAL ALFactory.getAL(); + DEBUG = ALFactory.DEBUG; } - private static EAX eax; + private static EAX eax = null; + private static boolean eaxTried = false; private static native void init(); - public static EAX getEAX() { - if (eax == null) { - init(); - eax = new EAX(EAX.SOURCE, EAX.LISTENER); + public static synchronized EAX getEAX() { + try { + if (!eaxTried) { + eaxTried = true; + init(); + eax = new EAX(EAX.SOURCE, EAX.LISTENER); + if(DEBUG) { + System.err.println("EAX initialized"); + } + } + } catch (UnsatisfiedLinkError e) { + if(DEBUG) { + e.printStackTrace(); + } } return eax; } diff --git a/src/java/com/jogamp/openal/impl/Debug.java b/src/java/com/jogamp/openal/impl/Debug.java new file mode 100644 index 0000000..be57b70 --- /dev/null +++ b/src/java/com/jogamp/openal/impl/Debug.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution 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. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed or intended for use + * in the design, construction, operation or maintenance of any nuclear + * facility. + * + * Sun gratefully acknowledges that this software was originally authored + * and developed by Kenneth Bradley Russell and Christopher John Kline. + */ + +package com.jogamp.openal.impl; + +import java.security.*; + +/** Helper routines for logging and debugging. */ + +public class Debug { + // Some common properties + private static boolean verbose; + private static boolean debugAll; + private static AccessControlContext localACC; + + static { + localACC=AccessController.getContext(); + verbose = isPropertyDefined("joal.verbose", true); + debugAll = isPropertyDefined("joal.debug", true); + } + + static int getIntProperty(final String property, final boolean jnlpAlias) { + return getIntProperty(property, jnlpAlias, localACC, 0); + } + + public static int getIntProperty(final String property, final boolean jnlpAlias, final AccessControlContext acc, int defaultValue) { + int i=defaultValue; + try { + String sv = Debug.getProperty(property, jnlpAlias, acc); + if(null!=sv) { + Integer iv = Integer.valueOf(sv); + i = iv.intValue(); + } + } catch (NumberFormatException nfe) {} + return i; + } + + public static long getLongProperty(final String property, final boolean jnlpAlias, final AccessControlContext acc, long defaultValue) { + long l=defaultValue; + try { + String sv = Debug.getProperty(property, jnlpAlias, acc); + if(null!=sv) { + Long lv = Long.valueOf(sv); + l = lv.longValue(); + } + } catch (NumberFormatException nfe) {} + return l; + } + + static boolean getBooleanProperty(final String property, final boolean jnlpAlias) { + return getBooleanProperty(property, jnlpAlias, localACC); + } + + public static boolean getBooleanProperty(final String property, final boolean jnlpAlias, final AccessControlContext acc) { + Boolean b = Boolean.valueOf(Debug.getProperty(property, jnlpAlias, acc)); + return b.booleanValue(); + } + + static boolean isPropertyDefined(final String property, final boolean jnlpAlias) { + return isPropertyDefined(property, jnlpAlias, localACC); + } + + public static boolean isPropertyDefined(final String property, final boolean jnlpAlias, final AccessControlContext acc) { + return (Debug.getProperty(property, jnlpAlias, acc) != null) ? true : false; + } + + static String getProperty(final String property, final boolean jnlpAlias) { + return getProperty(property, jnlpAlias, localACC); + } + + public static String getProperty(final String property, final boolean jnlpAlias, final AccessControlContext acc) { + String s=null; + if(null!=acc && acc.equals(localACC)) { + s = (String) AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + String val=null; + try { + val = System.getProperty(property); + } catch (Exception e) {} + if(null==val && jnlpAlias && !property.startsWith(jnlp_prefix)) { + try { + val = System.getProperty(jnlp_prefix + property); + } catch (Exception e) {} + } + return val; + } + }); + } else { + try { + s = System.getProperty(property); + } catch (Exception e) {} + if(null==s && jnlpAlias && !property.startsWith(jnlp_prefix)) { + try { + s = System.getProperty(jnlp_prefix + property); + } catch (Exception e) {} + } + } + return s; + } + public static final String jnlp_prefix = "jnlp." ; + + public static boolean verbose() { + return verbose; + } + + public static boolean debugAll() { + return debugAll; + } + + public static boolean debug(String subcomponent) { + return debugAll() || isPropertyDefined("joal.debug." + subcomponent, true); + } +} diff --git a/src/test/com/jogamp/openal/test/manual/OpenALTest.java b/src/test/com/jogamp/openal/test/manual/OpenALTest.java index abd335c..864a9fd 100644 --- a/src/test/com/jogamp/openal/test/manual/OpenALTest.java +++ b/src/test/com/jogamp/openal/test/manual/OpenALTest.java @@ -72,7 +72,8 @@ public class OpenALTest { boolean eaxPresent = al.alIsExtensionPresent("EAX2.0"); - System.out.println("EAX present:" + eaxPresent); + EAX eax = ( eaxPresent ) ? EAXFactory.getEAX() : null; + System.err.println("EAX present:" + eaxPresent + ", EAX retrieved: "+ (null != eax)); int[] buffers = new int[1]; al.alGenBuffers(1, buffers, 0); @@ -86,14 +87,13 @@ public class OpenALTest { int[] loopArray = new int[1]; al.alGetSourcei(sources[0], AL.AL_LOOPING, loopArray, 0); - System.out.println("Looping 1: " + (loopArray[0] == AL.AL_TRUE)); + System.err.println("Looping 1: " + (loopArray[0] == AL.AL_TRUE)); int[] loopBuffer = new int[1]; al.alGetSourcei(sources[0], AL.AL_LOOPING, loopBuffer, 0); - System.out.println("Looping 2: " + (loopBuffer[0] == AL.AL_TRUE)); + System.err.println("Looping 2: " + (loopBuffer[0] == AL.AL_TRUE)); - if (eaxPresent) { - EAX eax = EAXFactory.getEAX(); + if (eaxPresent && null!=eax) { IntBuffer env = Buffers.newDirectIntBuffer(1); env.put(EAX.EAX_ENVIRONMENT_BATHROOM); eax.setListenerProperty(EAX.DSPROPERTY_EAXLISTENER_ENVIRONMENT, env); |