From: Carsten W. <ca...@us...> - 2004-12-21 00:42:43
|
Update of /cvsroot/jake2/jake2/src/jake2/sound/lwjgl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10813/src/jake2/sound/lwjgl Modified Files: LWJGLSoundImpl.java Log Message: EAX bugfix Index: LWJGLSoundImpl.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/sound/lwjgl/LWJGLSoundImpl.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** LWJGLSoundImpl.java 16 Dec 2004 20:33:08 -0000 1.2 --- LWJGLSoundImpl.java 21 Dec 2004 00:42:31 -0000 1.3 *************** *** 24,27 **** --- 24,28 ---- import org.lwjgl.LWJGLException; import org.lwjgl.openal.*; + import org.lwjgl.openal.eax.*; import org.lwjgl.openal.eax.EAX20; import org.lwjgl.openal.eax.EAXListenerProperties; *************** *** 131,136 **** if (AL10.alIsExtensionPresent("EAX2.0")) { ! Com.Printf("... using EAX2.0\n"); ! hasEAX=true; } else --- 132,143 ---- if (AL10.alIsExtensionPresent("EAX2.0")) { ! try { ! EAX.create(); ! Com.Printf("... using EAX2.0\n"); ! hasEAX=true; ! } catch (LWJGLException e) { ! Com.Printf("... can't create EAX2.0\n"); ! hasEAX=false; ! } } else *************** *** 144,147 **** --- 151,158 ---- void exitOpenAL() { + // Release the EAX context. + if (hasEAX){ + EAX.destroy(); + } // Release the context and the device. AL.destroy(); *************** *** 326,339 **** private FloatBuffer listenerOrientationBuffer=FloatBuffer.wrap(listenerOrientation); - private IntBuffer eaxEnv = Lib.newIntBuffer(1); - private int currentEnv = -1; - private boolean changeEnv = true; - - // TODO workaround for JOAL-bug - // should be EAX.LISTENER - private final static int EAX_LISTENER = 0; - // should be EAX.SOURCE - private final static int EAX_SOURCE = 1; - /* (non-Javadoc) * @see jake2.sound.SoundImpl#Update(float[], float[], float[], float[]) --- 337,340 ---- *************** *** 347,370 **** AL10.nalListenerfv(AL10.AL_ORIENTATION, listenerOrientationBuffer,0); ! if (hasEAX) ! { ! // workaround for environment initialisation ! if (currentEnv == -1) ! { ! eaxEnv.put(0, EAX20.EAX_ENVIRONMENT_UNDERWATER); ! EAX20.eaxSet(EAX_LISTENER, EAXListenerProperties.EAXLISTENER_ENVIRONMENT | EAXListenerProperties.EAXLISTENER_DEFERRED, 0, eaxEnv, 4); ! changeEnv = true; ! } ! if ((GameBase.gi.pointcontents.pointcontents(origin)& Defines.MASK_WATER)!= 0) { ! changeEnv = currentEnv != EAX20.EAX_ENVIRONMENT_UNDERWATER; ! currentEnv = EAX20.EAX_ENVIRONMENT_UNDERWATER; } else { ! changeEnv = currentEnv != EAX20.EAX_ENVIRONMENT_GENERIC; ! currentEnv = EAX20.EAX_ENVIRONMENT_GENERIC; ! } ! if (changeEnv) { ! eaxEnv.put(0, currentEnv); ! EAX20.eaxSet(EAX_LISTENER, EAXListenerProperties.EAXLISTENER_ENVIRONMENT | EAXListenerProperties.EAXLISTENER_DEFERRED, 0, eaxEnv, 4); } } --- 348,356 ---- AL10.nalListenerfv(AL10.AL_ORIENTATION, listenerOrientationBuffer,0); ! if (hasEAX){ if ((GameBase.gi.pointcontents.pointcontents(origin)& Defines.MASK_WATER)!= 0) { ! changeEnvironment(EAX20.EAX_ENVIRONMENT_UNDERWATER); } else { ! changeEnvironment(EAX20.EAX_ENVIRONMENT_GENERIC); } } *************** *** 374,377 **** --- 360,373 ---- } + private IntBuffer eaxEnv = Lib.newIntBuffer(1); + private int currentEnv = EAX20.EAX_ENVIRONMENT_UNDERWATER; + + private void changeEnvironment(int env) { + if (env == currentEnv) return; + currentEnv = env; + eaxEnv.put(0, currentEnv); + EAX20.eaxSet(EAX20.LISTENER_GUID, EAXListenerProperties.EAXLISTENER_ENVIRONMENT | EAXListenerProperties.EAXLISTENER_DEFERRED, 0, eaxEnv, 4); + } + Map looptable = new Hashtable(MAX_CHANNELS); |