Removed EAX
This commit is contained in:
parent
9cda0f74a8
commit
8220b2e04c
|
@ -400,10 +400,6 @@
|
|||
|
||||
<class name="org.lwjgl.openal.ALC" />
|
||||
<class name="org.lwjgl.openal.AL" />
|
||||
<class name="org.lwjgl.openal.eax.EAX" />
|
||||
<class name="org.lwjgl.openal.eax.EAX20" />
|
||||
<class name="org.lwjgl.openal.eax.EAXBufferProperties" />
|
||||
<class name="org.lwjgl.openal.eax.EAXListenerProperties" />
|
||||
|
||||
<class name="org.lwjgl.opengl.GLContext" />
|
||||
<class name="org.lwjgl.opengl.Pbuffer" />
|
||||
|
|
|
@ -28,7 +28,6 @@ To run some of the included tests:
|
|||
org.lwjgl.test.input.KeyboardTest
|
||||
|
||||
org.lwjgl.test.openal.ALCTest
|
||||
org.lwjgl.test.openal.EAXTest (Requires EAX compatible hardware)
|
||||
org.lwjgl.test.openal.OpenALCreationTest
|
||||
org.lwjgl.test.openal.MovingSoundTest
|
||||
org.lwjgl.test.openal.PlayTest
|
||||
|
@ -62,4 +61,4 @@ You may also run the Space invaders demo by executing:
|
|||
|
||||
Project Webpage: www.lwjgl.org
|
||||
Project Forum: forum.lwjgl.org
|
||||
Project CVS: cvs.lwjgl.org
|
||||
Project CVS: cvs.lwjgl.org
|
||||
|
|
|
@ -103,8 +103,7 @@ be obtained from direct ByteBuffers using the Sys.getDirectBufferAddress()
|
|||
method. There are a very few native methods that return pointers as ints as
|
||||
well. Be sure to read the caveat about using pointers in Java!</p>
|
||||
<p>3.3 Sounds</p>
|
||||
<p>Sound is based on the latest OpenAL1.0 specification, which comes with but
|
||||
one extension, EAX, for interesting environmental effects. The LWJGL binary
|
||||
<p>Sound is based on the latest OpenAL1.0 specification. The LWJGL binary
|
||||
distribution includes the OpenAL libraries.</p>
|
||||
<p>3.4 Input</p>
|
||||
<p>Input can be a complicated topic. A user can have all sorts of strange fancy
|
||||
|
|
|
@ -4,11 +4,10 @@ if "%JAVA_HOME%" == "" goto errorjavahome
|
|||
if "%PLTSDKHOME%" == "" goto errorpltsdkhome
|
||||
if "%CHOME%" == "" goto errorchome
|
||||
if "%ALHOME%" == "" goto erroralhome
|
||||
if "%EAXHOME%" == "" goto erroreaxhome
|
||||
if "%DXHOME%" == "" goto errordxhome
|
||||
set COPTIONS=/I"%DXHOME%\include" /I"%CHOME%\include" /I"%PLTSDKHOME%\include" /I"%JAVA_HOME%\include" /I"%JAVA_HOME%\include\win32" /I"%ALHOME%\include" /I"%EAXHOME%\include" /I"..\..\src\native\common" /Ox /Ob2 /Oi /Ot /Oy /FD /EHsc /MT /Gy /W2 /nologo /c /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LWJGL_EXPORTS" /D "_WINDLL"
|
||||
set LINKEROPTS=/link /LIBPATH:"%ALHOME%\libs" /LIBPATH:"%EAXHOME%\Libs" /LIBPATH:"%DXHOME%\Lib" /LIBPATH:"%PLTSDKHOME%\Lib" /LIBPATH:"%CHOME%\Lib" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /MACHINE:X86 /NOLOGO /DLL
|
||||
set LIBS=dinput.lib dxguid.lib eaxguid.lib OpenGL32.Lib Version.lib user32.lib Gdi32.lib Advapi32.lib
|
||||
set COPTIONS=/I"%DXHOME%\include" /I"%CHOME%\include" /I"%PLTSDKHOME%\include" /I"%JAVA_HOME%\include" /I"%JAVA_HOME%\include\win32" /I"%ALHOME%\include" /I"..\..\src\native\common" /Ox /Ob2 /Oi /Ot /Oy /FD /EHsc /MT /Gy /W2 /nologo /c /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LWJGL_EXPORTS" /D "_WINDLL"
|
||||
set LINKEROPTS=/link /LIBPATH:"%ALHOME%\libs" /LIBPATH:"%DXHOME%\Lib" /LIBPATH:"%PLTSDKHOME%\Lib" /LIBPATH:"%CHOME%\Lib" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /MACHINE:X86 /NOLOGO /DLL
|
||||
set LIBS=dinput.lib dxguid.lib OpenGL32.Lib Version.lib user32.lib Gdi32.lib Advapi32.lib
|
||||
|
||||
for %%x in (..\..\src\native\win32\*.c) do cl %COPTIONS% %%x
|
||||
for %%x in (..\..\src\native\common\*.c) do cl %COPTIONS% %%x
|
||||
|
@ -57,14 +56,6 @@ echo ALHOME not set.
|
|||
echo.
|
||||
goto error
|
||||
|
||||
:erroreaxhome
|
||||
echo -------------------------
|
||||
echo -- ** ERROR ** --
|
||||
echo -------------------------
|
||||
echo EAXHOME not set.
|
||||
echo.
|
||||
goto error
|
||||
|
||||
:errordxhome
|
||||
echo -------------------------
|
||||
echo -- ** ERROR ** --
|
||||
|
@ -79,10 +70,9 @@ echo JAVA_HOME The root directory where Java is installed
|
|||
echo PLTSDKHOME " " " " Platform SDK is installed
|
||||
echo CHOME " " " " Visual C++ toolkit is installed
|
||||
echo ALHOME " " " " OpenAl is installed
|
||||
echo EAXHOME " " " " EAX is installed
|
||||
echo DXHOME " " " " DirectX is installed
|
||||
echo -------------------------
|
||||
echo -- ** ERROR ** --
|
||||
echo -------------------------
|
||||
|
||||
:end
|
||||
:end
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
package org.lwjgl.openal.eax;
|
||||
|
||||
import org.lwjgl.Sys;
|
||||
import org.lwjgl.LWJGLException;
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This is the OpenAL EAX class. It extends the latest core.
|
||||
*
|
||||
* @author Brian Matzon <brian@matzon.dk>
|
||||
* @version $Revision$
|
||||
*/
|
||||
public class EAX {
|
||||
/** Has the EAX object been created? */
|
||||
protected static boolean created;
|
||||
|
||||
static {
|
||||
Sys.initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the EAX functions
|
||||
*
|
||||
* @throws LWJGLException if the EAX extensions couldn't be loaded
|
||||
*/
|
||||
public static void create() throws LWJGLException {
|
||||
if (created) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!nCreate()) {
|
||||
throw new LWJGLException("EAX instance could not be created.");
|
||||
}
|
||||
EAX20.init();
|
||||
created = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Native method to create EAX instance
|
||||
*
|
||||
* @return true if the EAX extensions could be found
|
||||
*/
|
||||
protected static native boolean nCreate();
|
||||
|
||||
/**
|
||||
* "Destroy" the EAX object
|
||||
*/
|
||||
public static void destroy() {
|
||||
if (!created) {
|
||||
return;
|
||||
}
|
||||
created = false;
|
||||
nDestroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Native method the destroy the EAX
|
||||
*/
|
||||
protected static native void nDestroy();
|
||||
|
||||
/**
|
||||
* @return true if EAX has been created
|
||||
*/
|
||||
public static boolean isCreated() {
|
||||
return created;
|
||||
}
|
||||
}
|
|
@ -1,161 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
package org.lwjgl.openal.eax;
|
||||
|
||||
import java.nio.Buffer;
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This is the OpenAL EAX class. It extends the latest core.
|
||||
*
|
||||
* @author Brian Matzon <brian@matzon.dk>
|
||||
* @version $Revision$
|
||||
*/
|
||||
public class EAX20 {
|
||||
|
||||
/** GUID for buffer */
|
||||
public static final int BUFFER_GUID = 1;
|
||||
|
||||
/** GUID for listener */
|
||||
public static final int LISTENER_GUID = 2;
|
||||
|
||||
public static final int EAX_ENVIRONMENT_GENERIC = 0;
|
||||
public static final int EAX_ENVIRONMENT_PADDEDCELL = 1;
|
||||
public static final int EAX_ENVIRONMENT_ROOM = 2;
|
||||
public static final int EAX_ENVIRONMENT_BATHROOM = 3;
|
||||
public static final int EAX_ENVIRONMENT_LIVINGROOM = 4;
|
||||
public static final int EAX_ENVIRONMENT_STONEROOM = 5;
|
||||
public static final int EAX_ENVIRONMENT_AUDITORIUM = 6;
|
||||
public static final int EAX_ENVIRONMENT_CONCERTHALL = 7;
|
||||
public static final int EAX_ENVIRONMENT_CAVE = 8;
|
||||
public static final int EAX_ENVIRONMENT_ARENA = 9;
|
||||
public static final int EAX_ENVIRONMENT_HANGAR = 10;
|
||||
public static final int EAX_ENVIRONMENT_CARPETEDHALLWAY = 11;
|
||||
public static final int EAX_ENVIRONMENT_HALLWAY = 12;
|
||||
public static final int EAX_ENVIRONMENT_STONECORRIDOR = 13;
|
||||
public static final int EAX_ENVIRONMENT_ALLEY = 14;
|
||||
public static final int EAX_ENVIRONMENT_FOREST = 15;
|
||||
public static final int EAX_ENVIRONMENT_CITY = 16;
|
||||
public static final int EAX_ENVIRONMENT_MOUNTAINS = 17;
|
||||
public static final int EAX_ENVIRONMENT_QUARRY = 18;
|
||||
public static final int EAX_ENVIRONMENT_PLAIN = 19;
|
||||
public static final int EAX_ENVIRONMENT_PARKINGLOT = 20;
|
||||
public static final int EAX_ENVIRONMENT_SEWERPIPE = 21;
|
||||
public static final int EAX_ENVIRONMENT_UNDERWATER = 22;
|
||||
public static final int EAX_ENVIRONMENT_DRUGGED = 23;
|
||||
public static final int EAX_ENVIRONMENT_DIZZY = 24;
|
||||
public static final int EAX_ENVIRONMENT_PSYCHOTIC = 25;
|
||||
public static final int EAX_ENVIRONMENT_COUNT = 26;
|
||||
|
||||
// Single window material preset
|
||||
public static final int EAX_MATERIAL_SINGLEWINDOW = -2800;
|
||||
public static final float EAX_MATERIAL_SINGLEWINDOWLF = 0.71f;
|
||||
public static final float EAX_MATERIAL_SINGLEWINDOWROOMRATIO = 0.43f;
|
||||
|
||||
// Double window material preset
|
||||
public static final int EAX_MATERIAL_DOUBLEWINDOW = -5000;
|
||||
public static final float EAX_MATERIAL_DOUBLEWINDOWHF = 0.40f;
|
||||
public static final float EAX_MATERIAL_DOUBLEWINDOWROOMRATIO = 0.24f;
|
||||
|
||||
// Thin door material preset
|
||||
public static final int EAX_MATERIAL_THINDOOR = -1800;
|
||||
public static final float EAX_MATERIAL_THINDOORLF = 0.66f;
|
||||
public static final float EAX_MATERIAL_THINDOORROOMRATIO = 0.66f;
|
||||
|
||||
// Thick door material preset
|
||||
public static final int EAX_MATERIAL_THICKDOOR = -4400;
|
||||
public static final float EAX_MATERIAL_THICKDOORLF = 0.64f;
|
||||
public static final float EAX_MATERIAL_THICKDOORROOMRTATION = 0.27f;
|
||||
|
||||
// Wood wall material preset
|
||||
public static final int EAX_MATERIAL_WOODWALL = -4000;
|
||||
public static final float EAX_MATERIAL_WOODWALLLF = 0.50f;
|
||||
public static final float EAX_MATERIAL_WOODWALLROOMRATIO = 0.30f;
|
||||
|
||||
// Brick wall material preset
|
||||
public static final int EAX_MATERIAL_BRICKWALL = -5000;
|
||||
public static final float EAX_MATERIAL_BRICKWALLLF = 0.60f;
|
||||
public static final float EAX_MATERIAL_BRICKWALLROOMRATIO = 0.24f;
|
||||
|
||||
// Stone wall material preset
|
||||
public static final int EAX_MATERIAL_STONEWALL = -6000;
|
||||
public static final float EAX_MATERIAL_STONEWALLLF = 0.68f;
|
||||
public static final float EAX_MATERIAL_STONEWALLROOMRATIO = 0.20f;
|
||||
|
||||
// Curtain material preset
|
||||
public static final int EAX_MATERIAL_CURTAIN = -1200;
|
||||
public static final float EAX_MATERIAL_CURTAINLF = 0.15f;
|
||||
public static final float EAX_MATERIAL_CURTAINROOMRATIO = 1.00f;
|
||||
|
||||
/**
|
||||
* Load extensions
|
||||
*/
|
||||
protected static void init() {
|
||||
determineAvailableExtensions();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines available EAX extensions
|
||||
*/
|
||||
protected static native void determineAvailableExtensions();
|
||||
|
||||
/**
|
||||
* Retrieves an EAX Value
|
||||
*
|
||||
* @param propertySetID adress to the property set GUID of the object being queried (a listener or a source)
|
||||
* @param property property being queried
|
||||
* @param source the source to be queried
|
||||
* @param data Buffer to write value to
|
||||
* @param size size of area being written to
|
||||
* @return OpenAL Error code
|
||||
*/
|
||||
public static int eaxGet(int propertySetID, int property, int source, Buffer data, int size) {
|
||||
return neaxGet(propertySetID, property, source, data, data.position(), size);
|
||||
}
|
||||
private static native int neaxGet(int propertySetID, int property, int source, Buffer data, int position, int size);
|
||||
|
||||
/**
|
||||
* Sets an EAX Value
|
||||
*
|
||||
* @param propertySetID adress to the property set GUID of the object being queried (a listener or a source)
|
||||
* @param property property being queried
|
||||
* @param source the source to be queried
|
||||
* @param data Buffer to write value to
|
||||
* @param size size of area being written to
|
||||
* @return OpenAL Error code
|
||||
*/
|
||||
public static int eaxSet(int propertySetID, int property, int source, Buffer data, int size) {
|
||||
return neaxSet(propertySetID, property, source, data, data.position(), size);
|
||||
}
|
||||
private static native int neaxSet(int propertySetID, int property, int source, Buffer data, int position, int size);
|
||||
}
|
|
@ -1,641 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
package org.lwjgl.openal.eax;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.lwjgl.Sys;
|
||||
import org.lwjgl.BufferUtils;
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This class encapsultaes the EAXBUFFERPROPERTIES struct. Since longs
|
||||
* are 64 bit in Java and "typically" 32 on other platforms, we cheat by reading an
|
||||
* int when reading a long field.
|
||||
*
|
||||
* @author Brian Matzon <brian@matzon.dk>
|
||||
* @version $Revision$
|
||||
*/
|
||||
public class EAXBufferProperties {
|
||||
|
||||
/** Whether auto commit has been anabled */
|
||||
private boolean autoCommit = true;
|
||||
|
||||
/** Current source being operated on */
|
||||
private int currentSource = -1;
|
||||
|
||||
/** ByteBuffer representing EAXBUFFERPROPERTIES */
|
||||
protected ByteBuffer eaxBufferProperties;
|
||||
|
||||
/** size needed by ByteBuffer to contain EAXBUFFERPROPERTIES */
|
||||
protected static int EAXBUFFERPROPERTIES_SIZE;
|
||||
|
||||
// EAX values and offsets
|
||||
// ========================================================
|
||||
|
||||
/** direct path level offset */
|
||||
protected static int direct_offset;
|
||||
|
||||
/** direct path level at high frequencies offset */
|
||||
protected static int directHF_offset;
|
||||
|
||||
/** room effect level offset */
|
||||
protected static int room_offset;
|
||||
|
||||
/** room effect level at high frequencies offset */
|
||||
protected static int roomHF_offset;
|
||||
|
||||
/** like DS3D flRolloffFactor but for room effect offset */
|
||||
protected static int roomRolloffFactor_offset;
|
||||
|
||||
/** main obstruction control (attenuation at high frequencies) offset */
|
||||
protected static int obstruction_offset;
|
||||
|
||||
/** obstruction low-frequency level re. main control offset */
|
||||
protected static int obstructionLFRatio_offset;
|
||||
|
||||
/** main occlusion control (attenuation at high frequencies) offset */
|
||||
protected static int occlusion_offset;
|
||||
|
||||
/** occlusion low-frequency level re. main control offset */
|
||||
protected static int occlusionLFRatio_offset;
|
||||
|
||||
/** occlusion room effect level re. main control offset */
|
||||
protected static int occlusionRoomRatio_offset;
|
||||
|
||||
/** outside sound cone level at high frequencies offset */
|
||||
protected static int outsideVolumeHF_offset;
|
||||
|
||||
/** multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF offset */
|
||||
protected static int airAbsorptionFactor_offset;
|
||||
|
||||
/** modifies the behavior of properties offset */
|
||||
protected static int flags_offset;
|
||||
|
||||
public static final int EAXBUFFER_NONE = 0;
|
||||
public static final int EAXBUFFER_ALLPARAMETERS = 1;
|
||||
public static final int EAXBUFFER_DIRECT = 2;
|
||||
public static final int EAXBUFFER_DIRECTHF = 3;
|
||||
public static final int EAXBUFFER_ROOM = 4;
|
||||
public static final int EAXBUFFER_ROOMHF = 5;
|
||||
public static final int EAXBUFFER_ROOMROLLOFFFACTOR = 6;
|
||||
public static final int EAXBUFFER_OBSTRUCTION = 7;
|
||||
public static final int EAXBUFFER_OBSTRUCTIONLFRATIO = 8;
|
||||
public static final int EAXBUFFER_OCCLUSION = 9;
|
||||
public static final int EAXBUFFER_OCCLUSIONLFRATIO = 10;
|
||||
public static final int EAXBUFFER_OCCLUSIONROOMRATIO = 11;
|
||||
public static final int EAXBUFFER_OUTSIDEVOLUMEHF = 12;
|
||||
public static final int EAXBUFFER_AIRABSORPTIONFACTOR = 13;
|
||||
public static final int EAXBUFFER_FLAGS = 14;
|
||||
|
||||
/** changes take effect immediately */
|
||||
public static final int EAXBUFFER_IMMEDIATE = 0x00000000;
|
||||
|
||||
/** changes take effect later */
|
||||
public static final int EAXBUFFER_DEFERRED = 0x80000000;
|
||||
public static final int EAXBUFFER_COMMITDEFERREDSETTINGS =
|
||||
(EAXBUFFER_NONE | EAXBUFFER_IMMEDIATE);
|
||||
|
||||
/** affects DSPROPERTY_EAXBUFFER_DIRECTHF */
|
||||
public static final int EAXBUFFER_FLAGS_DIRECTHFAUTO = 0x00000001;
|
||||
|
||||
/** affects DSPROPERTY_EAXBUFFER_ROOM */
|
||||
public static final int EAXBUFFER_FLAGS_ROOMAUTO = 0x00000002;
|
||||
|
||||
/** affects DSPROPERTY_EAXBUFFER_ROOMHF */
|
||||
public static final int EAXBUFFER_FLAGS_ROOMHFAUTO = 0x00000004;
|
||||
|
||||
/** reserved future use */
|
||||
public static final int EAXBUFFER_FLAGS_RESERVED = 0xFFFFFFF8;
|
||||
|
||||
// property ranges and defaults:
|
||||
|
||||
public static final int EAXBUFFER_MINDIRECT = -10000;
|
||||
public static final int EAXBUFFER_MAXDIRECT = 1000;
|
||||
public static final int EAXBUFFER_DEFAULTDIRECT = 0;
|
||||
|
||||
public static final int EAXBUFFER_MINDIRECTHF = -10000;
|
||||
public static final int EAXBUFFER_MAXDIRECTHF = 0;
|
||||
public static final int EAXBUFFER_DEFAULTDIRECTHF = 0;
|
||||
|
||||
public static final int EAXBUFFER_MINROOM = -10000;
|
||||
public static final int EAXBUFFER_MAXROOM = 1000;
|
||||
public static final int EAXBUFFER_DEFAULTROOM = 0;
|
||||
|
||||
public static final int EAXBUFFER_MINROOMHF = -10000;
|
||||
public static final int EAXBUFFER_MAXROOMHF = 0;
|
||||
public static final int EAXBUFFER_DEFAULTROOMHF = 0;
|
||||
|
||||
public static final float EAXBUFFER_MINROOMROLLOFFFACTOR = 0.0f;
|
||||
public static final float EAXBUFFER_MAXROOMROLLOFFFACTOR = 10.f;
|
||||
public static final float EAXBUFFER_DEFAULTROOMROLLOFFFACTOR = 0.0f;
|
||||
|
||||
public static final int EAXBUFFER_MINOBSTRUCTION = -10000;
|
||||
public static final int EAXBUFFER_MAXOBSTRUCTION = 0;
|
||||
public static final int EAXBUFFER_DEFAULTOBSTRUCTION = 0;
|
||||
|
||||
public static final float EAXBUFFER_MINOBSTRUCTIONLFRATIO = 0.0f;
|
||||
public static final float EAXBUFFER_MAXOBSTRUCTIONLFRATIO = 1.0f;
|
||||
public static final float EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO = 0.0f;
|
||||
|
||||
public static final int EAXBUFFER_MINOCCLUSION = -10000;
|
||||
public static final int EAXBUFFER_MAXOCCLUSION = 0;
|
||||
public static final int EAXBUFFER_DEFAULTOCCLUSION = 0;
|
||||
|
||||
public static final float EAXBUFFER_MINOCCLUSIONLFRATIO = 0.0f;
|
||||
public static final float EAXBUFFER_MAXOCCLUSIONLFRATIO = 1.0f;
|
||||
public static final float EAXBUFFER_DEFAULTOCCLUSIONLFRATIO = 0.25f;
|
||||
|
||||
public static final float EAXBUFFER_MINOCCLUSIONROOMRATIO = 0.0f;
|
||||
public static final float EAXBUFFER_MAXOCCLUSIONROOMRATIO = 10.0f;
|
||||
public static final float EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO = 0.5f;
|
||||
|
||||
public static final int EAXBUFFER_MINOUTSIDEVOLUMEHF = -10000;
|
||||
public static final int EAXBUFFER_MAXOUTSIDEVOLUMEHF = 0;
|
||||
public static final int EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF = 0;
|
||||
|
||||
public static final float EAXBUFFER_MINAIRABSORPTIONFACTOR = 0.0f;
|
||||
public static final float EAXBUFFER_MAXAIRABSORPTIONFACTOR = 10.0f;
|
||||
public static final float EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR = 1.0f;
|
||||
|
||||
public static final int EAXBUFFER_DEFAULTFLAGS =
|
||||
(EAXBUFFER_FLAGS_DIRECTHFAUTO
|
||||
| EAXBUFFER_FLAGS_ROOMAUTO
|
||||
| EAXBUFFER_FLAGS_ROOMHFAUTO);
|
||||
|
||||
// -------------------------------------------------------
|
||||
|
||||
static {
|
||||
Sys.initialize();
|
||||
EAXBUFFERPROPERTIES_SIZE = sizeOfEaxBufferProperties();
|
||||
assignOffsets();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new EAXBufferProperties object
|
||||
*/
|
||||
public EAXBufferProperties() {
|
||||
eaxBufferProperties = BufferUtils.createByteBuffer(EAXBUFFERPROPERTIES_SIZE);
|
||||
eaxBufferProperties.order(ByteOrder.nativeOrder());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current source on which to perform effects
|
||||
*
|
||||
* @param source Source on which to perform effects
|
||||
*/
|
||||
public void setCurrentSource(int source) {
|
||||
currentSource = source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the current source
|
||||
*
|
||||
* @return Source on which effects are being performed
|
||||
*/
|
||||
public int getCurrentSource() {
|
||||
return currentSource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads current EAX values from current source
|
||||
*/
|
||||
public void loadEAXValues() {
|
||||
EAX20.eaxGet(
|
||||
EAX20.BUFFER_GUID,
|
||||
EAXBUFFER_ALLPARAMETERS,
|
||||
currentSource,
|
||||
eaxBufferProperties,
|
||||
EAXBUFFERPROPERTIES_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets this buffer property to default values
|
||||
*/
|
||||
public void reset() {
|
||||
boolean commitValue = autoCommit;
|
||||
|
||||
// disable autocommit
|
||||
autoCommit = false;
|
||||
|
||||
// set values
|
||||
setDirect(EAXBUFFER_DEFAULTDIRECT);
|
||||
setDirectHF(EAXBUFFER_DEFAULTDIRECTHF);
|
||||
setRoom(EAXBUFFER_DEFAULTROOM);
|
||||
setRoomHF(EAXBUFFER_DEFAULTROOMHF);
|
||||
setRoomRolloffFactor(EAXBUFFER_DEFAULTROOMROLLOFFFACTOR);
|
||||
setObstruction(EAXBUFFER_DEFAULTOBSTRUCTION);
|
||||
setObstructionLFRatio(EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO);
|
||||
setOcclusion(EAXBUFFER_DEFAULTOCCLUSION);
|
||||
setOcclusionLFRatio(EAXBUFFER_DEFAULTOCCLUSIONLFRATIO);
|
||||
setOcclusionRoomRatio(EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO);
|
||||
setOutsideVolumeHF(EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF);
|
||||
setAirAbsorptionFactor(EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR);
|
||||
setFlags(EAXBUFFER_DEFAULTFLAGS);
|
||||
|
||||
// reset auto commit
|
||||
autoCommit = commitValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Commits any changes
|
||||
*/
|
||||
public void commit() {
|
||||
// call eaxSet with Buffer guid, setting all parameters
|
||||
EAX20.eaxSet(
|
||||
EAX20.BUFFER_GUID, EAXBUFFER_ALLPARAMETERS,
|
||||
currentSource, eaxBufferProperties, EAXBUFFERPROPERTIES_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether auto commit is enabled or not
|
||||
*
|
||||
* @return true if auto commit is inabled
|
||||
*/
|
||||
public boolean isAutoCommitEnabled() {
|
||||
return autoCommit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enabled or disables auto commit
|
||||
*
|
||||
* @param enabled True to enable, false to disable
|
||||
*/
|
||||
public void setAutoCommit(boolean enabled) {
|
||||
autoCommit = enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs auto commit, if enabled
|
||||
*/
|
||||
private final void autoCommit() {
|
||||
if(autoCommit) {
|
||||
commit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the size of the containing ByteBuffer
|
||||
*/
|
||||
public static int getSize() {
|
||||
return EAXBUFFERPROPERTIES_SIZE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a String representation of the EAXBufferProperties object
|
||||
*
|
||||
* @return String representation of the EAXBufferProperties object
|
||||
*/
|
||||
public String toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("EAXBufferProperties [");
|
||||
|
||||
sb.append("lDirect = ");
|
||||
sb.append(getDirect());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lDirectHF = ");
|
||||
sb.append(getDirectHF());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lRoom = ");
|
||||
sb.append(getRoom());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lRoomHF = ");
|
||||
sb.append(getRoomHF());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flRoomRolloffFactor = ");
|
||||
sb.append(getRoomRolloffFactor());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lObstruction = ");
|
||||
sb.append(getObstruction());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flObstructionLFRatio = ");
|
||||
sb.append(getObstructionLFRatio());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lOcclusion = ");
|
||||
sb.append(getOcclusion());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flOcclusionLFRatio = ");
|
||||
sb.append(getOcclusionLFRatio());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flOcclusionRoomRatio = ");
|
||||
sb.append(getOcclusionRoomRatio());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lOutsideVolumeHF = ");
|
||||
sb.append(getOutsideVolumeHF());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flAirAbsorptionFactor = ");
|
||||
sb.append(getAirAbsorptionFactor());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("dwFlags = ");
|
||||
sb.append(getFlags());
|
||||
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
// Getters and Setters of struct
|
||||
// ==========================================================================
|
||||
|
||||
/**
|
||||
* Retireves the direct path level
|
||||
*
|
||||
* @return direct path level
|
||||
*/
|
||||
public int getDirect() {
|
||||
return eaxBufferProperties.getInt(direct_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the direct path level
|
||||
*
|
||||
* @param direct direct path level to set to
|
||||
*/
|
||||
public void setDirect(int direct) {
|
||||
eaxBufferProperties.putInt(direct_offset, direct);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the direct path level at high frequencies
|
||||
*
|
||||
* @return direct path level at high frequencies
|
||||
*/
|
||||
public int getDirectHF() {
|
||||
return eaxBufferProperties.getInt(directHF_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the direct path level at high frequencies
|
||||
*
|
||||
* @param directHF direct path level at high frequencies to set to
|
||||
*/
|
||||
public void setDirectHF(int directHF) {
|
||||
eaxBufferProperties.putInt(directHF_offset, directHF);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the room effect level
|
||||
*
|
||||
* @return room effect level
|
||||
*/
|
||||
public int getRoom() {
|
||||
return eaxBufferProperties.getInt(room_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the room effect level
|
||||
*
|
||||
* @param room room effect level to set to
|
||||
*/
|
||||
public void setRoom(int room) {
|
||||
eaxBufferProperties.putInt(room_offset, room);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the room effect level at high frequencies
|
||||
*
|
||||
* @return room effect level at high frequencies
|
||||
*/
|
||||
public int getRoomHF() {
|
||||
return eaxBufferProperties.getInt(roomHF_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the room effect level at high frequencies
|
||||
*
|
||||
* @param roomHF room effect level at high frequencies to set to
|
||||
*/
|
||||
public void setRoomHF(int roomHF) {
|
||||
eaxBufferProperties.putInt(roomHF_offset, roomHF);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the DS3D flRolloffFactor for room effect
|
||||
*
|
||||
* @return DS3D flRolloffFactor for room effect
|
||||
*/
|
||||
public float getRoomRolloffFactor() {
|
||||
return eaxBufferProperties.getFloat(roomRolloffFactor_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the DS3D flRolloffFactor for room effect
|
||||
*
|
||||
* @param roomRolloffFactor DS3D flRolloffFactor for room effect to set to
|
||||
*/
|
||||
public void setRoomRolloffFactor(float roomRolloffFactor) {
|
||||
eaxBufferProperties.putFloat(roomRolloffFactor_offset, roomRolloffFactor);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the main obstruction control (attenuation at high frequencies)
|
||||
*
|
||||
* @return main obstruction control (attenuation at high frequencies)
|
||||
*/
|
||||
public int getObstruction() {
|
||||
return eaxBufferProperties.getInt(obstruction_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the main obstruction control (attenuation at high frequencies)
|
||||
*
|
||||
* @param obstruction main obstruction control (attenuation at high frequencies) to set to
|
||||
*/
|
||||
public void setObstruction(int obstruction) {
|
||||
eaxBufferProperties.putInt(obstruction_offset, obstruction);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the obstruction low-frequency level re. main control
|
||||
*
|
||||
* @return obstruction low-frequency level re. main control
|
||||
*/
|
||||
public float getObstructionLFRatio() {
|
||||
return eaxBufferProperties.getFloat(obstructionLFRatio_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the obstruction low-frequency level re. main control
|
||||
*
|
||||
* @param obstructionLFRatio obstruction low-frequency level re. main control to set to
|
||||
*/
|
||||
public void setObstructionLFRatio(float obstructionLFRatio) {
|
||||
eaxBufferProperties.putFloat(obstructionLFRatio_offset, obstructionLFRatio);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the main occlusion control (attenuation at high frequencies)
|
||||
*
|
||||
* @return main occlusion control (attenuation at high frequencies)
|
||||
*/
|
||||
public int getOcclusion() {
|
||||
return eaxBufferProperties.getInt(occlusion_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the main occlusion control (attenuation at high frequencies)
|
||||
*
|
||||
* @param occlusion main occlusion control (attenuation at high frequencies) to set to
|
||||
*/
|
||||
public void setOcclusion(int occlusion) {
|
||||
eaxBufferProperties.putInt(occlusion_offset, occlusion);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the occlusion low-frequency level re. main control
|
||||
*
|
||||
* @return occlusion low-frequency level re. main control
|
||||
*/
|
||||
public float getOcclusionLFRatio() {
|
||||
return eaxBufferProperties.getFloat(occlusionLFRatio_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the occlusion low-frequency level re. main control
|
||||
*
|
||||
* @param occlusionLFRatio occlusion low-frequency level re. main control to set to
|
||||
*/
|
||||
public void setOcclusionLFRatio(float occlusionLFRatio) {
|
||||
eaxBufferProperties.putFloat(occlusionLFRatio_offset, occlusionLFRatio);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the occlusion room effect level re. main control
|
||||
*
|
||||
* @return occlusion room effect level re. main control
|
||||
*/
|
||||
public float getOcclusionRoomRatio() {
|
||||
return eaxBufferProperties.getFloat(occlusionRoomRatio_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the OcclusionRoomRatio
|
||||
*
|
||||
* @param occlusionRoomRatio OcclusionRoomRatio to set to
|
||||
*/
|
||||
public void setOcclusionRoomRatio(float occlusionRoomRatio) {
|
||||
eaxBufferProperties.putFloat(occlusionRoomRatio_offset, occlusionRoomRatio);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the OutsideVolumeHF
|
||||
*
|
||||
* @return OutsideVolumeHF
|
||||
*/
|
||||
public int getOutsideVolumeHF() {
|
||||
return eaxBufferProperties.getInt(outsideVolumeHF_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the OutsideVolumeHF
|
||||
*
|
||||
* @param outsideVolumeHF OutsideVolumeHF to set to
|
||||
*/
|
||||
public void setOutsideVolumeHF(int outsideVolumeHF) {
|
||||
eaxBufferProperties.putInt(outsideVolumeHF_offset, outsideVolumeHF);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the multiplier for DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
|
||||
*
|
||||
* @return multiplier for DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
|
||||
*/
|
||||
public float getAirAbsorptionFactor() {
|
||||
return eaxBufferProperties.getFloat(airAbsorptionFactor_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the multiplier for DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
|
||||
*
|
||||
* @param airAbsorptionFactor multiplier for DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF to set to
|
||||
*/
|
||||
public void setAirAbsorptionFactor(float airAbsorptionFactor) {
|
||||
eaxBufferProperties.putFloat(airAbsorptionFactor_offset, airAbsorptionFactor);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the modifier for behavior of properties
|
||||
*
|
||||
* @return modifier for behavior of properties
|
||||
*/
|
||||
public int getFlags() {
|
||||
return eaxBufferProperties.getInt(flags_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the modifier for behavior of properties
|
||||
*
|
||||
* @param flags modifier for behavior of properties to set to
|
||||
*/
|
||||
public void setFlags(int flags) {
|
||||
eaxBufferProperties.putInt(flags_offset, flags);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Retrieves the size of the EAXBUFFERPROPERTIES
|
||||
*/
|
||||
protected static native int sizeOfEaxBufferProperties();
|
||||
|
||||
/**
|
||||
* Sets the offsets to the fields
|
||||
*/
|
||||
protected static native void assignOffsets();
|
||||
}
|
|
@ -1,691 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
package org.lwjgl.openal.eax;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.lwjgl.Sys;
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This class encapsultaes the EAXLISTENERPROPERTIES struct
|
||||
*
|
||||
* @author Brian Matzon <brian@matzon.dk>
|
||||
* @version $Revision$
|
||||
*/
|
||||
public class EAXListenerProperties {
|
||||
|
||||
/** Whether auto commit has been anabled */
|
||||
private boolean autoCommit = true;
|
||||
|
||||
/** ByteBuffer representing EAXLISTENERPROPERTIES */
|
||||
protected ByteBuffer eaxListenerProperties;
|
||||
|
||||
/** size needed by ByteBuffer to contain EAXLISTENERPROPERTIES */
|
||||
protected static int EAXLISTENERPROPERTIES_SIZE;
|
||||
|
||||
// EAX values and offsets
|
||||
// ========================================================
|
||||
|
||||
/** room effect level offset */
|
||||
protected static int room_offset;
|
||||
|
||||
/** room effect level at high frequencies offset */
|
||||
protected static int roomHF_offset;
|
||||
|
||||
/**like DS3D flRolloffFactor but for room effect offset */
|
||||
protected static int roomRolloffFactor_offset;
|
||||
|
||||
/** reverberation decay time at low frequencies offset */
|
||||
protected static int decayTime_offset;
|
||||
|
||||
/** high-frequency to low-frequency decay time ratio offset */
|
||||
protected static int decayHFRatio_offset;
|
||||
|
||||
/** early reflections level relative to room effect offset */
|
||||
protected static int reflections_offset;
|
||||
|
||||
/** initial reflection delay time offset */
|
||||
protected static int reflectionsDelay_offset;
|
||||
|
||||
/** late reverberation level relative to room effect offset */
|
||||
protected static int reverb_offset;
|
||||
|
||||
/** late reverberation delay time relative to initial reflection offset */
|
||||
protected static int reverbDelay_offset;
|
||||
|
||||
/** sets all listener properties offset */
|
||||
protected static int environment_offset;
|
||||
|
||||
/** environment size in meters offset */
|
||||
protected static int environmentSize_offset;
|
||||
|
||||
/** environment diffusion offset */
|
||||
protected static int environmentDiffusion_offset;
|
||||
|
||||
/** change in level per meter at 5 kHz offset */
|
||||
protected static int airAbsorptionHF_offset;
|
||||
|
||||
/** modifies the behavior of properties offset */
|
||||
protected static int flags_offset;
|
||||
|
||||
public static final int EAXLISTENER_NONE = 0;
|
||||
public static final int EAXLISTENER_ALLPARAMETERS = 1;
|
||||
public static final int EAXLISTENER_ROOM = 2;
|
||||
public static final int EAXLISTENER_ROOMHF = 3;
|
||||
public static final int EAXLISTENER_ROOMROLLOFFFACTOR = 4;
|
||||
public static final int EAXLISTENER_DECAYTIME = 5;
|
||||
public static final int EAXLISTENER_DECAYHFRATIO = 6;
|
||||
public static final int EAXLISTENER_REFLECTIONS = 7;
|
||||
public static final int EAXLISTENER_REFLECTIONSDELAY = 8;
|
||||
public static final int EAXLISTENER_REVERB = 9;
|
||||
public static final int EAXLISTENER_REVERBDELAY = 10;
|
||||
public static final int EAXLISTENER_ENVIRONMENT = 11;
|
||||
public static final int EAXLISTENER_ENVIRONMENTSIZE = 12;
|
||||
public static final int EAXLISTENER_ENVIRONMENTDIFFUSION = 13;
|
||||
public static final int EAXLISTENER_AIRABSORPTIONHF = 14;
|
||||
public static final int EAXLISTENER_FLAGS = 15;
|
||||
|
||||
/** changes take effect immediately */
|
||||
public static final int EAXLISTENER_IMMEDIATE = 0x00000000;
|
||||
|
||||
/** changes take effect later */
|
||||
public static final int EAXLISTENER_DEFERRED = 0x80000000;
|
||||
|
||||
public static final int EAXLISTENER_COMMITDEFERREDSETTINGS =
|
||||
(EAXLISTENER_NONE | EAXLISTENER_IMMEDIATE);
|
||||
|
||||
/** reverberation decay time */
|
||||
public static final int EAXLISTENERFLAGS_DECAYTIMESCALE = 0x00000001;
|
||||
|
||||
/** reflection level */
|
||||
public static final int EAXLISTENERFLAGS_REFLECTIONSSCALE = 0x00000002;
|
||||
|
||||
/** initial reflection delay time */
|
||||
public static final int EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE = 0x00000004;
|
||||
|
||||
/** reflections level */
|
||||
public static final int EAXLISTENERFLAGS_REVERBSCALE = 0x00000008;
|
||||
|
||||
/** late reverberation delay time */
|
||||
public static final int EAXLISTENERFLAGS_REVERBDELAYSCALE = 0x00000010;
|
||||
|
||||
/** This flag limits high-frequency decay time according to air absorption. */
|
||||
public static final int EAXLISTENERFLAGS_DECAYHFLIMIT = 0x00000020;
|
||||
|
||||
/** reserved future use */
|
||||
public static final int EAXLISTENERFLAGS_RESERVED = 0xFFFFFFC0;
|
||||
|
||||
// property ranges and defaults:
|
||||
public static final int EAXLISTENER_MINROOM = -10000;
|
||||
public static final int EAXLISTENER_MAXROOM = 0;
|
||||
public static final int EAXLISTENER_DEFAULTROOM = -1000;
|
||||
|
||||
public static final int EAXLISTENER_MINROOMHF = -10000;
|
||||
public static final int EAXLISTENER_MAXROOMHF = 0;
|
||||
public static final int EAXLISTENER_DEFAULTROOMHF = -100;
|
||||
|
||||
public static final float EAXLISTENER_MINROOMROLLOFFFACTOR = 0.0f;
|
||||
public static final float EAXLISTENER_MAXROOMROLLOFFFACTOR = 10.0f;
|
||||
public static final float EAXLISTENER_DEFAULTROOMROLLOFFFACTOR = 0.0f;
|
||||
|
||||
public static final float EAXLISTENER_MINDECAYTIME = 0.1f;
|
||||
public static final float EAXLISTENER_MAXDECAYTIME = 20.0f;
|
||||
public static final float EAXLISTENER_DEFAULTDECAYTIME = 1.49f;
|
||||
|
||||
public static final float EAXLISTENER_MINDECAYHFRATIO = 0.1f;
|
||||
public static final float EAXLISTENER_MAXDECAYHFRATIO = 2.0f;
|
||||
public static final float EAXLISTENER_DEFAULTDECAYHFRATIO = 0.83f;
|
||||
|
||||
public static final int EAXLISTENER_MINREFLECTIONS = -10000;
|
||||
public static final int EAXLISTENER_MAXREFLECTIONS = 1000;
|
||||
public static final int EAXLISTENER_DEFAULTREFLECTIONS = -2602;
|
||||
|
||||
public static final float EAXLISTENER_MINREFLECTIONSDELAY = 0.0f;
|
||||
public static final float EAXLISTENER_MAXREFLECTIONSDELAY = 0.3f;
|
||||
public static final float EAXLISTENER_DEFAULTREFLECTIONSDELAY = 0.007f;
|
||||
|
||||
public static final int EAXLISTENER_MINREVERB = -10000;
|
||||
public static final int EAXLISTENER_MAXREVERB = 2000;
|
||||
public static final int EAXLISTENER_DEFAULTREVERB = 200;
|
||||
|
||||
public static final float EAXLISTENER_MINREVERBDELAY = 0.0f;
|
||||
public static final float EAXLISTENER_MAXREVERBDELAY = 0.1f;
|
||||
public static final float EAXLISTENER_DEFAULTREVERBDELAY = 0.011f;
|
||||
|
||||
public static final int EAXLISTENER_MINENVIRONMENT = 0;
|
||||
public static final int EAXLISTENER_MAXENVIRONMENT =
|
||||
(EAX20.EAX_ENVIRONMENT_COUNT - 1);
|
||||
public static final int EAXLISTENER_DEFAULTENVIRONMENT =
|
||||
EAX20.EAX_ENVIRONMENT_GENERIC;
|
||||
|
||||
public static final float EAXLISTENER_MINENVIRONMENTSIZE = 1.0f;
|
||||
public static final float EAXLISTENER_MAXENVIRONMENTSIZE = 100.0f;
|
||||
public static final float EAXLISTENER_DEFAULTENVIRONMENTSIZE = 7.5f;
|
||||
|
||||
public static final float EAXLISTENER_MINENVIRONMENTDIFFUSION = 0.0f;
|
||||
public static final float EAXLISTENER_MAXENVIRONMENTDIFFUSION = 1.0f;
|
||||
public static final float EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION = 1.0f;
|
||||
|
||||
public static final float EAXLISTENER_MINAIRABSORPTIONHF = -100.0f;
|
||||
public static final float EAXLISTENER_MAXAIRABSORPTIONHF = 0.0f;
|
||||
public static final float EAXLISTENER_DEFAULTAIRABSORPTIONHF = -5.0f;
|
||||
|
||||
public static final int EAXLISTENER_DEFAULTFLAGS =
|
||||
(EAXLISTENERFLAGS_DECAYTIMESCALE
|
||||
| EAXLISTENERFLAGS_REFLECTIONSSCALE
|
||||
| EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE
|
||||
| EAXLISTENERFLAGS_REVERBSCALE
|
||||
| EAXLISTENERFLAGS_REVERBDELAYSCALE
|
||||
| EAXLISTENERFLAGS_DECAYHFLIMIT);
|
||||
|
||||
// -------------------------------------------------------
|
||||
|
||||
static {
|
||||
Sys.initialize();
|
||||
EAXLISTENERPROPERTIES_SIZE = sizeOfEaxListenerProperties();
|
||||
assignOffsets();
|
||||
}
|
||||
|
||||
public EAXListenerProperties() {
|
||||
eaxListenerProperties =
|
||||
ByteBuffer.allocateDirect(EAXLISTENERPROPERTIES_SIZE);
|
||||
eaxListenerProperties.order(ByteOrder.nativeOrder());
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads current EAX values
|
||||
*/
|
||||
public void loadEAXValues() {
|
||||
EAX20.eaxGet(
|
||||
EAX20.LISTENER_GUID,
|
||||
EAXLISTENER_ALLPARAMETERS,
|
||||
0,
|
||||
eaxListenerProperties,
|
||||
EAXLISTENERPROPERTIES_SIZE );
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets this buffer property to default values
|
||||
*/
|
||||
public void reset() {
|
||||
boolean commitValue = autoCommit;
|
||||
|
||||
// disable autocommit
|
||||
autoCommit = false;
|
||||
|
||||
// set values
|
||||
setRoom(EAXLISTENER_DEFAULTROOM);
|
||||
setRoomHF(EAXLISTENER_DEFAULTROOMHF);
|
||||
setRoomRolloffFactor(EAXLISTENER_DEFAULTROOMROLLOFFFACTOR);
|
||||
setDecayTime(EAXLISTENER_DEFAULTDECAYTIME);
|
||||
setDecayTimeHFRatio(EAXLISTENER_DEFAULTDECAYHFRATIO);
|
||||
setReflections(EAXLISTENER_DEFAULTREFLECTIONS);
|
||||
setReflectionsDelay(EAXLISTENER_DEFAULTREFLECTIONSDELAY);
|
||||
setReverb(EAXLISTENER_DEFAULTREVERB);
|
||||
setReverbDelay(EAXLISTENER_DEFAULTREVERBDELAY);
|
||||
setEnvironment(EAXLISTENER_DEFAULTENVIRONMENT);
|
||||
setEnvironmentSize(EAXLISTENER_DEFAULTENVIRONMENTSIZE);
|
||||
setEnvironmentDiffusion(EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION);
|
||||
setAirAbsorptionFactor(EAXLISTENER_DEFAULTAIRABSORPTIONHF);
|
||||
setFlags(EAXLISTENER_DEFAULTFLAGS);
|
||||
|
||||
// reset auto commit
|
||||
autoCommit = commitValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Commits any changes
|
||||
*/
|
||||
public void commit() {
|
||||
// call eaxSet with Listener guid, setting all parameters
|
||||
EAX20.eaxSet(
|
||||
EAX20.LISTENER_GUID, EAXLISTENER_ALLPARAMETERS | EAXLISTENER_IMMEDIATE,
|
||||
0, eaxListenerProperties, EAXLISTENERPROPERTIES_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether auto commit is enabled or not
|
||||
*
|
||||
* @return true if auto commit is inabled
|
||||
*/
|
||||
public boolean isAutoCommitEnabled() {
|
||||
return autoCommit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enabled or disables auto commit
|
||||
*
|
||||
* @param enabled True to enable, false to disable
|
||||
*/
|
||||
public void setAutoCommit(boolean enabled) {
|
||||
autoCommit = enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs auto commit, if enabled
|
||||
*/
|
||||
private final void autoCommit() {
|
||||
if(autoCommit) {
|
||||
commit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the size of the containing ByteBuffer
|
||||
*/
|
||||
public int getSize() {
|
||||
return EAXLISTENERPROPERTIES_SIZE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a String representation of the EAXBufferProperties object
|
||||
*
|
||||
* @return String representation of the EAXBufferProperties object
|
||||
*/
|
||||
public String toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("EAXListenerProperties [");
|
||||
|
||||
sb.append("lRoom = ");
|
||||
sb.append(getRoom());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lRoomHF = ");
|
||||
sb.append(getRoomHF());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flRoomRolloffFactor = ");
|
||||
sb.append(getRoomRolloffFactor());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flDecayTime = ");
|
||||
sb.append(getDecayTime());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flDecayHFRatio = ");
|
||||
sb.append(getDecayTimeHFRatio());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lReflections = ");
|
||||
sb.append(getReflections());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flReflectionsDelay = ");
|
||||
sb.append(getReflectionsDelay());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("lReverb = ");
|
||||
sb.append(getReverb());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flReverbDelay = ");
|
||||
sb.append(getReverbDelay());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("dwEnvironment = ");
|
||||
sb.append(getEnvironment());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flEnvironmentSize = ");
|
||||
sb.append(getEnvironmentSize());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flEnvironmentDiffusion = ");
|
||||
sb.append(getEnvironmentDiffusion());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("flAirAbsorptionHF = ");
|
||||
sb.append(getAirAbsorptionHF());
|
||||
sb.append(", ");
|
||||
|
||||
sb.append("dwFlags = ");
|
||||
sb.append(getFlags());
|
||||
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
// Getters and Setters of struct
|
||||
// ==========================================================================
|
||||
|
||||
/**
|
||||
* Retireves the room effect level
|
||||
*
|
||||
* @return room effect level
|
||||
*/
|
||||
public int getRoom() {
|
||||
return eaxListenerProperties.getInt(room_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the room effect level
|
||||
*
|
||||
* @param room room effect level to set to
|
||||
*/
|
||||
public void setRoom(int room) {
|
||||
eaxListenerProperties.putInt(room_offset, room);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the room effect level at high frequencies
|
||||
*
|
||||
* @return room effect level at high frequencies
|
||||
*/
|
||||
public int getRoomHF() {
|
||||
return eaxListenerProperties.getInt(roomHF_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the room effect level at high frequencies
|
||||
*
|
||||
* @param roomHF room effect level at high frequencies to set to
|
||||
*/
|
||||
public void setRoomHF(int roomHF) {
|
||||
eaxListenerProperties.putInt(roomHF_offset, roomHF);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the DS3D flRolloffFactor for room effect
|
||||
*
|
||||
* @return DS3D flRolloffFactor for room effect
|
||||
*/
|
||||
public float getRoomRolloffFactor() {
|
||||
return eaxListenerProperties.getFloat(roomRolloffFactor_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the DS3D flRolloffFactor for room effect
|
||||
*
|
||||
* @param roomRolloffFactor DS3D flRolloffFactor for room effect to set to
|
||||
*/
|
||||
public void setRoomRolloffFactor(float roomRolloffFactor) {
|
||||
eaxListenerProperties.putFloat(roomRolloffFactor_offset, roomRolloffFactor);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the reverberation decay time at low frequencies
|
||||
*
|
||||
* @return reverberation decay time at low frequencies
|
||||
*/
|
||||
public float getDecayTime() {
|
||||
return eaxListenerProperties.getFloat(decayTime_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the reverberation decay time at low frequencies
|
||||
*
|
||||
* @param decayTime reverberation decay time at low frequencies to set to
|
||||
*/
|
||||
public void setDecayTime(float decayTime) {
|
||||
eaxListenerProperties.putFloat(decayTime_offset, decayTime);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the high-frequency to low-frequency decay time ratio
|
||||
*
|
||||
* @return high-frequency to low-frequency decay time ratio
|
||||
*/
|
||||
public float getDecayTimeHFRatio() {
|
||||
return eaxListenerProperties.getFloat(decayHFRatio_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the high-frequency to low-frequency decay time ratio
|
||||
*
|
||||
* @param decayTimeHFRatio high-frequency to low-frequency decay time ratio to set to
|
||||
*/
|
||||
public void setDecayTimeHFRatio(float decayTimeHFRatio) {
|
||||
eaxListenerProperties.putFloat(decayHFRatio_offset, decayTimeHFRatio);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the early reflections level relative to room effect
|
||||
*
|
||||
* @return early reflections level relative to room effect
|
||||
*/
|
||||
public int getReflections() {
|
||||
return eaxListenerProperties.getInt(reflections_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the early reflections level relative to room effect
|
||||
*
|
||||
* @param reflections early reflections level relative to room effect to set to
|
||||
*/
|
||||
public void setReflections(int reflections) {
|
||||
eaxListenerProperties.putInt(reflections_offset, reflections);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the initial reflection delay time
|
||||
*
|
||||
* @return initial reflection delay time
|
||||
*/
|
||||
public float getReflectionsDelay() {
|
||||
return eaxListenerProperties.getFloat(reflectionsDelay_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the initial reflection delay time
|
||||
*
|
||||
* @param reflectionsDelay initial reflection delay time to set to
|
||||
*/
|
||||
public void setReflectionsDelay(float reflectionsDelay) {
|
||||
eaxListenerProperties.putFloat(reflectionsDelay_offset, reflectionsDelay);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the late reverberation level relative to room effect
|
||||
*
|
||||
* @return late reverberation level relative to room effect
|
||||
*/
|
||||
public int getReverb() {
|
||||
return eaxListenerProperties.getInt(reverb_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the late reverberation level relative to room effect
|
||||
*
|
||||
* @param reverb late reverberation level relative to room effect to set to
|
||||
*/
|
||||
public void setReverb(int reverb) {
|
||||
eaxListenerProperties.putInt(reverb_offset, reverb);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the late reverberation delay time relative to initial reflection
|
||||
*
|
||||
* @return late reverberation delay time relative to initial reflection
|
||||
*/
|
||||
public float getReverbDelay() {
|
||||
return eaxListenerProperties.getFloat(reverbDelay_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the late reverberation delay time relative to initial reflection
|
||||
*
|
||||
* @param reverbDelay late reverberation delay time relative to initial reflection
|
||||
*/
|
||||
public void setReverbDelay(float reverbDelay) {
|
||||
eaxListenerProperties.putFloat(reverbDelay_offset, reverbDelay);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the listener properties
|
||||
*
|
||||
* @return listener properties
|
||||
*/
|
||||
public int getEnvironment() {
|
||||
return eaxListenerProperties.getInt(environment_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the listener properties
|
||||
*
|
||||
* @param environment listener properties to set to
|
||||
*/
|
||||
public void setEnvironment(int environment) {
|
||||
eaxListenerProperties.putInt(environment_offset, environment);
|
||||
|
||||
// we need to handle environment differently than all other
|
||||
// values on auto commit, since it cannot be single handely set
|
||||
// using ALLPARAMETERS
|
||||
//
|
||||
// To set the environment specifically we need to pass
|
||||
// only the environment value and its size. Also pass the
|
||||
// EAXLISTENER_ENVIRONMENT value (and since we're committing IMMEDIATE too)
|
||||
if (autoCommit) {
|
||||
EAX20.eaxSet(
|
||||
EAX20.LISTENER_GUID, EAXLISTENER_ENVIRONMENT | EAXLISTENER_IMMEDIATE,
|
||||
0, eaxListenerProperties.position(environment_offset), 4);
|
||||
|
||||
// rewind buffer
|
||||
eaxListenerProperties.rewind();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the environment size in meters
|
||||
*
|
||||
* @return environment size in meters
|
||||
*/
|
||||
public float getEnvironmentSize() {
|
||||
return eaxListenerProperties.getFloat(environmentSize_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the environment size in meters
|
||||
*
|
||||
* @param environmentSize environment size in meters to set to
|
||||
*/
|
||||
public void setEnvironmentSize(float environmentSize) {
|
||||
eaxListenerProperties.putFloat(environmentSize_offset, environmentSize);
|
||||
|
||||
// we need to handle environment size differently than all other
|
||||
// values on auto commit, since it cannot be single handely set
|
||||
// using ALLPARAMETERS
|
||||
//
|
||||
// To set the environment size specifically we need to pass
|
||||
// only the environment size value and its size. Also pass the
|
||||
// EAXLISTENER_ENVIRONMENTSIZE value (and since we're committing IMMEDIATE too)
|
||||
if (autoCommit) {
|
||||
EAX20.eaxSet(
|
||||
EAX20.LISTENER_GUID, EAXLISTENER_ENVIRONMENTSIZE | EAXLISTENER_IMMEDIATE,
|
||||
0, eaxListenerProperties.position(environmentSize_offset), 4);
|
||||
|
||||
// rewind buffer
|
||||
eaxListenerProperties.rewind();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the environment diffusion
|
||||
*
|
||||
* @return environment diffusion
|
||||
*/
|
||||
public float getEnvironmentDiffusion() {
|
||||
return eaxListenerProperties.getFloat(environmentDiffusion_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the environment diffusion
|
||||
*
|
||||
* @param environmentDiffusion environment diffusion to set to
|
||||
*/
|
||||
public void setEnvironmentDiffusion(float environmentDiffusion) {
|
||||
eaxListenerProperties.putFloat(environmentDiffusion_offset, environmentDiffusion);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the change in level per meter at 5 kHz
|
||||
*
|
||||
* @return change in level per meter at 5 kHz
|
||||
*/
|
||||
public float getAirAbsorptionHF() {
|
||||
return eaxListenerProperties.getFloat(airAbsorptionHF_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the change in level per meter at 5 kHz
|
||||
*
|
||||
* @param airAbsorptionHF change in level per meter at 5 kHz to set to
|
||||
*/
|
||||
public void setAirAbsorptionFactor(float airAbsorptionHF) {
|
||||
eaxListenerProperties.putFloat(airAbsorptionHF_offset, airAbsorptionHF);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retireves the modifier for behavior of properties
|
||||
*
|
||||
* @return modifier for behavior of properties
|
||||
*/
|
||||
public int getFlags() {
|
||||
return eaxListenerProperties.getInt(flags_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the modifier for behavior of properties
|
||||
*
|
||||
* @param flags modifier for behavior of properties to set to
|
||||
*/
|
||||
public void setFlags(int flags) {
|
||||
eaxListenerProperties.putInt(flags_offset, flags);
|
||||
autoCommit();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Retrieves the size of the EAXLISTENERPROPERTIES
|
||||
*/
|
||||
protected static native int sizeOfEaxListenerProperties();
|
||||
|
||||
/**
|
||||
* Sets the offsets to the fields
|
||||
*/
|
||||
protected static native void assignOffsets();
|
||||
}
|
|
@ -1,290 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
package org.lwjgl.test.openal;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.IntBuffer;
|
||||
|
||||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.Sys;
|
||||
import org.lwjgl.openal.AL;
|
||||
import org.lwjgl.openal.AL10;
|
||||
import org.lwjgl.openal.eax.EAX;
|
||||
import org.lwjgl.openal.eax.EAX20;
|
||||
import org.lwjgl.openal.eax.EAXBufferProperties;
|
||||
import org.lwjgl.openal.eax.EAXListenerProperties;
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This test initializes EAX and tries to get and set some EAX values
|
||||
*
|
||||
* @author Brian Matzon <brian@matzon.dk>
|
||||
* @version $Revision$
|
||||
*/
|
||||
public class EAXTest extends BasicTest {
|
||||
|
||||
/** OpenAL buffers */
|
||||
private IntBuffer soundBuffers = BufferUtils.createIntBuffer(1);
|
||||
|
||||
/** OpenAL sources */
|
||||
private IntBuffer soundSources = BufferUtils.createIntBuffer(1);
|
||||
|
||||
/** Listener EAX property object */
|
||||
private EAXListenerProperties listenerProperties;
|
||||
|
||||
/** Buffer EAX property object */
|
||||
private EAXBufferProperties bufferProperties;
|
||||
|
||||
/**
|
||||
* Creates an instance of EAXTest
|
||||
*/
|
||||
public EAXTest() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the actual test, using supplied arguments
|
||||
*/
|
||||
protected void execute(String[] args) {
|
||||
|
||||
if(!AL.isCreated()) {
|
||||
System.out.println("Unable to continue with EAXTest, since OpenAL could not be initialized.");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.print("Testing EAX support...");
|
||||
EAX.create();
|
||||
System.out.println("supported!");
|
||||
} catch (Exception e) {
|
||||
System.out.println("not supported!");
|
||||
}
|
||||
|
||||
// continue with test if EAX is supported
|
||||
if (EAX.isCreated() && AL.isCreated() && initialize()) {
|
||||
runTest();
|
||||
|
||||
// kill sources and buffers
|
||||
AL10.alSourceStop(soundSources.get(0));
|
||||
AL10.alDeleteSources(soundSources);
|
||||
AL10.alDeleteBuffers(soundBuffers);
|
||||
|
||||
EAX.destroy();
|
||||
}
|
||||
|
||||
//shutdown
|
||||
alExit();
|
||||
}
|
||||
|
||||
private boolean initialize() {
|
||||
// creating buffers
|
||||
Sys.log("Creating buffers");
|
||||
AL10.alGenBuffers(soundBuffers);
|
||||
soundBuffers.rewind();
|
||||
|
||||
// creating sources
|
||||
Sys.log("Creating sources");
|
||||
AL10.alGenSources(soundSources);
|
||||
soundSources.rewind();
|
||||
|
||||
// load sound files (left, center, right).wav
|
||||
Sys.log("Loading Footsteps.wav");
|
||||
WaveData footsteps = WaveData.create("Footsteps.wav");
|
||||
AL10.alBufferData(soundBuffers.get(0), footsteps.format, footsteps.data, footsteps.samplerate);
|
||||
AL10.alSourcef(soundSources.get(0), AL10.AL_PITCH, 1.0f);
|
||||
AL10.alSourcef(soundSources.get(0), AL10.AL_GAIN, 1.0f);
|
||||
AL10.alSourcei(soundSources.get(0), AL10.AL_BUFFER, soundBuffers.get(0));
|
||||
AL10.alSourcei(soundSources.get(0), AL10.AL_LOOPING, AL10.AL_TRUE);
|
||||
|
||||
// create eax property objects
|
||||
listenerProperties = new EAXListenerProperties();
|
||||
bufferProperties = new EAXBufferProperties();
|
||||
|
||||
// set buffer to work on source 0
|
||||
bufferProperties.setCurrentSource(soundSources.get(0));
|
||||
|
||||
return AL10.alGetError() == AL10.AL_NO_ERROR;
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the actual EAXTest
|
||||
*/
|
||||
private void runTest() {
|
||||
boolean running = true;
|
||||
char key;
|
||||
|
||||
assert AL10.alIsBuffer(soundBuffers.get(0)) : "Failed to validate buffer";
|
||||
|
||||
// handle menu
|
||||
do {
|
||||
printMenu();
|
||||
key = readInput();
|
||||
|
||||
switch (key) {
|
||||
// play sound
|
||||
case '1' : {
|
||||
AL10.alSourcePlay(soundSources.get(0));
|
||||
break;
|
||||
}
|
||||
|
||||
// stop sound
|
||||
case '2' : {
|
||||
AL10.alSourceStop(soundSources.get(0));
|
||||
break;
|
||||
}
|
||||
|
||||
// add reverb
|
||||
case '3' : {
|
||||
listenerProperties.setEnvironment(EAX20.EAX_ENVIRONMENT_HANGAR);
|
||||
break;
|
||||
}
|
||||
|
||||
// remove reverb
|
||||
case '4' : {
|
||||
listenerProperties.setEnvironment(EAX20.EAX_ENVIRONMENT_GENERIC);
|
||||
break;
|
||||
}
|
||||
|
||||
// add occlusion
|
||||
case '5' : {
|
||||
bufferProperties.setOcclusion(bufferProperties.getOcclusion()-5000);
|
||||
break;
|
||||
}
|
||||
|
||||
// remove occlusion
|
||||
case '6' : {
|
||||
bufferProperties.setOcclusion(bufferProperties.getOcclusion()+5000);
|
||||
break;
|
||||
}
|
||||
|
||||
// add obstruction
|
||||
case '7' : {
|
||||
bufferProperties.setObstruction(bufferProperties.getObstruction()-5000);
|
||||
break;
|
||||
}
|
||||
|
||||
// remove obstruction
|
||||
case '8' : {
|
||||
bufferProperties.setObstruction(bufferProperties.getObstruction()+5000);
|
||||
break;
|
||||
}
|
||||
|
||||
// commit eax values
|
||||
case 'c' : {
|
||||
bufferProperties.commit();
|
||||
listenerProperties.commit();
|
||||
break;
|
||||
}
|
||||
|
||||
// toggle autocommit
|
||||
case 't' : {
|
||||
bufferProperties.setAutoCommit(!bufferProperties.isAutoCommitEnabled());
|
||||
listenerProperties.setAutoCommit(!listenerProperties.isAutoCommitEnabled());
|
||||
System.out.println("\n[Buffer] Auto Commit is now: " + bufferProperties.isAutoCommitEnabled());
|
||||
System.out.println("\n[Listen] Auto Commit is now: " + listenerProperties.isAutoCommitEnabled());
|
||||
break;
|
||||
}
|
||||
|
||||
// show current eax values
|
||||
case 's' : {
|
||||
System.out.println(bufferProperties);
|
||||
System.out.println(listenerProperties);
|
||||
break;
|
||||
}
|
||||
|
||||
// load current eax values
|
||||
case 'l' : {
|
||||
bufferProperties.loadEAXValues();
|
||||
listenerProperties.loadEAXValues();
|
||||
break;
|
||||
}
|
||||
|
||||
// reset to default values
|
||||
case 'r' : {
|
||||
bufferProperties.reset();
|
||||
listenerProperties.reset();
|
||||
break;
|
||||
}
|
||||
|
||||
// quit demo
|
||||
case 'q' : {
|
||||
running = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (running);
|
||||
}
|
||||
|
||||
private void printMenu() {
|
||||
System.out.println("");
|
||||
System.out.println("EAXTest menu, please select an option from the following list:");
|
||||
System.out.println("1: Play looping sound");
|
||||
System.out.println("2: Stop looping sound");
|
||||
System.out.println("3: Add reverberation effect");
|
||||
System.out.println("4: Remove reverberation effect");
|
||||
System.out.println("5: Add occlusion effect");
|
||||
System.out.println("6: Remove occlusion effect");
|
||||
System.out.println("7: Add obstruction effect");
|
||||
System.out.println("8: Remove obstruction effect");
|
||||
|
||||
System.out.println("C: Commit current eax values");
|
||||
System.out.println("L: Load current values");
|
||||
System.out.println("T: Toggle autocomit");
|
||||
System.out.println("R: Reset to inital values");
|
||||
System.out.println("S: Show current values");
|
||||
|
||||
System.out.println("Q: Quit demo");
|
||||
System.out.print("Input: ");
|
||||
}
|
||||
|
||||
private char readInput() {
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
||||
try {
|
||||
return br.readLine().toLowerCase().charAt(0);
|
||||
} catch (IOException ioe) {
|
||||
return 'q';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* main entry point
|
||||
*
|
||||
* @param args String array containing arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
EAXTest eaxTest = new EAXTest();
|
||||
eaxTest.execute(args);
|
||||
}
|
||||
}
|
|
@ -36,9 +36,6 @@ import java.nio.IntBuffer;
|
|||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.openal.AL10;
|
||||
import org.lwjgl.openal.eax.EAX;
|
||||
import org.lwjgl.openal.eax.EAX20;
|
||||
import org.lwjgl.openal.eax.EAXListenerProperties;
|
||||
import org.lwjgl.opengl.Display;
|
||||
import org.lwjgl.util.vector.Vector3f;
|
||||
|
||||
|
@ -82,8 +79,6 @@ public class MovingSoundTest extends BasicTest {
|
|||
int lastError;
|
||||
Vector3f sourcePosition = new Vector3f();
|
||||
Vector3f listenerPosition = new Vector3f();
|
||||
boolean eaxApplied = false;
|
||||
EAXListenerProperties eaxListenerProp = null;
|
||||
|
||||
//initialize keyboard
|
||||
try {
|
||||
|
@ -147,16 +142,7 @@ public class MovingSoundTest extends BasicTest {
|
|||
exit(lastError);
|
||||
}
|
||||
|
||||
//setup EAX if possible
|
||||
if (AL10.alIsExtensionPresent("EAX")) {
|
||||
try {
|
||||
EAX.create();
|
||||
eaxListenerProp = new EAXListenerProperties();
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Move source with arrow keys\nMove listener with right shift and arrowkeys\nEnable EAX effect by pressing e (if available)\nExit with ESC");
|
||||
System.out.println("Move source with arrow keys\nMove listener with right shift and arrowkeys\nExit with ESC");
|
||||
|
||||
while(!Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
|
||||
Display.update();
|
||||
|
@ -185,15 +171,6 @@ public class MovingSoundTest extends BasicTest {
|
|||
}
|
||||
}
|
||||
|
||||
if(Keyboard.isKeyDown(Keyboard.KEY_E)) {
|
||||
if(eaxApplied) {
|
||||
eaxListenerProp.setEnvironment(EAX20.EAX_ENVIRONMENT_GENERIC);
|
||||
} else {
|
||||
eaxListenerProp.setEnvironment(EAX20.EAX_ENVIRONMENT_HANGAR);
|
||||
}
|
||||
eaxApplied = !eaxApplied;
|
||||
}
|
||||
|
||||
if(Display.isCloseRequested()) {
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -49,9 +49,6 @@
|
|||
* @version $Revision$
|
||||
*/
|
||||
#ifdef _WIN32
|
||||
EAXSet eaxSet; // EAXSet function, ret$
|
||||
EAXGet eaxGet; // EAXGet function, ret$
|
||||
|
||||
/* Handle to OpenAL Library */
|
||||
HMODULE handleOAL;
|
||||
#endif
|
||||
|
|
|
@ -96,14 +96,6 @@ extern "C" {
|
|||
void InitializeOpenAL(JNIEnv *env, jobjectArray oalPaths);
|
||||
void DeInitializeOpenAL();
|
||||
|
||||
#ifdef _WIN32
|
||||
typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
|
||||
typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
|
||||
|
||||
extern EAXSet eaxSet;
|
||||
extern EAXGet eaxGet;
|
||||
#endif
|
||||
|
||||
typedef ALvoid (ALAPIENTRY *alEnablePROC)( ALenum capability );
|
||||
typedef ALboolean (ALAPIENTRY *alIsExtensionPresentPROC)( ALubyte* fname );
|
||||
typedef ALvoid* (ALAPIENTRY *alGetProcAddressPROC)( ALubyte* fname );
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
|
||||
#include "org_lwjgl_openal_eax_EAX.h"
|
||||
#include "common_tools.h"
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_openal_eax_EAX
|
||||
* Method: nCreate
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_openal_eax_EAX_nCreate (JNIEnv *env, jclass clazz) {
|
||||
#ifdef _WIN32
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_openal_eax_EAX
|
||||
* Method: nDestroy
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_openal_eax_EAX_nDestroy (JNIEnv *env, jclass clazz) {
|
||||
}
|
|
@ -1,134 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* This is the actual JNI implementation of the OpenAL EAX library.
|
||||
*
|
||||
* @author Brian Matzon <brian@matzon.dk>
|
||||
* @version $Revision$
|
||||
*/
|
||||
#include "org_lwjgl_openal_eax_EAX20.h"
|
||||
|
||||
/* OpenAL includes */
|
||||
#include "checkALerror.h"
|
||||
#include "common_tools.h"
|
||||
#include "extal.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
// EAX 2.0 GUIDs
|
||||
static const GUID DSPROPSETID_EAX20_ListenerProperties
|
||||
= { 0x306a6a8, 0xb224, 0x11d2, { 0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22 } };
|
||||
|
||||
static const GUID DSPROPSETID_EAX20_BufferProperties
|
||||
= { 0x306a6a7, 0xb224, 0x11d2, {0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22 } };
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Determines available EAX extensions
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_openal_eax_EAX20_determineAvailableExtensions (JNIEnv *env, jclass clazz) {
|
||||
#ifdef _WIN32
|
||||
bool EAXSupported = false;
|
||||
|
||||
//check that we have a current context
|
||||
if(alcGetCurrentContext() == NULL) {
|
||||
throwOpenALException(env, "Unable to determine EAX Extensions: No current context");
|
||||
}
|
||||
|
||||
//check for extension, and assign if available
|
||||
if(alIsExtensionPresent((ALubyte*) "EAX") == AL_TRUE) {
|
||||
eaxSet = (EAXSet)alGetProcAddress((ALubyte*) "EAXSet");
|
||||
eaxGet = (EAXGet)alGetProcAddress((ALubyte*) "EAXGet");
|
||||
EAXSupported = (eaxSet != NULL && eaxGet != NULL);
|
||||
}
|
||||
|
||||
//throw exception if no EAX support
|
||||
if(EAXSupported != true) {
|
||||
throwOpenALException(env, "Unable to determine EAX Extensions");
|
||||
}
|
||||
#else
|
||||
throwOpenALException(env, "EAX extensions not supported");
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* This function retrieves an EAX value.
|
||||
*
|
||||
* C Specification:
|
||||
* ALenum EAXGet(const struct _GUID *propertySetID,ALuint property,ALuint source,ALvoid
|
||||
* *value,ALuint size);
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_lwjgl_openal_eax_EAX20_neaxGet (JNIEnv *env, jclass clazz, jint propertySetID, jint property, jint source, jobject value, jint offset, jint size) {
|
||||
#ifdef _WIN32
|
||||
jint result = 0;
|
||||
|
||||
// determine buffer or listener
|
||||
if (propertySetID == org_lwjgl_openal_eax_EAX20_BUFFER_GUID) {
|
||||
result = (jint) eaxGet(&DSPROPSETID_EAX20_BufferProperties, (ALuint) property, (ALuint) source, (ALvoid*) (offset + (const char*)(*env)->GetDirectBufferAddress(env, value)), (ALuint) size);
|
||||
} else if (propertySetID == org_lwjgl_openal_eax_EAX20_LISTENER_GUID) {
|
||||
result = (jint) eaxGet(&DSPROPSETID_EAX20_ListenerProperties, (ALuint) property, (ALuint) source, (ALvoid*) (offset + (const char*)(*env)->GetDirectBufferAddress(env, value)), (ALuint) size);
|
||||
}
|
||||
CHECK_AL_ERROR
|
||||
return result;
|
||||
#else
|
||||
throwOpenALException(env, "EAX extensions not supported");
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* This function sets an EAX value.
|
||||
*
|
||||
* C Specification:
|
||||
* ALenum EAXSet(const struct _GUID *propertySetID,ALuint property,ALuint source,ALvoid
|
||||
* *value,ALuint size);
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_lwjgl_openal_eax_EAX20_neaxSet (JNIEnv *env, jclass clazz, jint propertySetID, jint property, jint source, jobject value, jint offset, jint size) {
|
||||
#ifdef _WIN32
|
||||
jint result = 0;
|
||||
|
||||
// determine buffer or listener
|
||||
if (propertySetID == org_lwjgl_openal_eax_EAX20_BUFFER_GUID) {
|
||||
result = (jint) eaxSet(&DSPROPSETID_EAX20_BufferProperties, (ALuint) (property), source, (ALvoid*) (offset + (const char*)(*env)->GetDirectBufferAddress(env, value)), (ALuint) size);
|
||||
} else if (propertySetID == org_lwjgl_openal_eax_EAX20_LISTENER_GUID) {
|
||||
result = (jint) eaxSet(&DSPROPSETID_EAX20_ListenerProperties, (ALuint) (property), source, (ALvoid*) (offset + (const char*)(*env)->GetDirectBufferAddress(env, value)), (ALuint) size);
|
||||
}
|
||||
CHECK_AL_ERROR
|
||||
return result;
|
||||
#else
|
||||
throwOpenALException(env, "EAX extensions not supported");
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
|
@ -1,117 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
|
||||
#include "org_lwjgl_openal_eax_EAXBufferProperties.h"
|
||||
#include <stddef.h>
|
||||
#ifdef _WIN32
|
||||
#include <eax.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_openal_eax_EAXBufferProperties
|
||||
* Method: sizeOfEaxBufferProperties
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_lwjgl_openal_eax_EAXBufferProperties_sizeOfEaxBufferProperties(JNIEnv *env, jclass clazz) {
|
||||
#ifdef _WIN32
|
||||
return sizeof(EAXBUFFERPROPERTIES);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_openal_eax_EAXBufferProperties
|
||||
* Method: assignOffsets
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_openal_eax_EAXBufferProperties_assignOffsets(JNIEnv *env, jclass clazz) {
|
||||
#ifdef _WIN32
|
||||
jclass listener_class;
|
||||
jfieldID field;
|
||||
|
||||
//get class/fields
|
||||
listener_class = (*env)->FindClass(env, "org/lwjgl/openal/eax/EAXBufferProperties");
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "direct_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, lDirect));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "directHF_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, lDirectHF));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "room_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, lRoom));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "roomHF_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, lRoomHF));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "roomRolloffFactor_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, flRoomRolloffFactor));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "obstruction_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, lObstruction));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "obstructionLFRatio_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, flObstructionLFRatio));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "occlusion_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, lOcclusion));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "occlusionLFRatio_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, flOcclusionLFRatio));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "occlusionRoomRatio_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, flOcclusionRoomRatio));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "outsideVolumeHF_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, lOutsideVolumeHF));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "airAbsorptionFactor_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, flAirAbsorptionFactor));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "flags_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXBUFFERPROPERTIES, dwFlags));
|
||||
#endif
|
||||
}
|
|
@ -1,122 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2004 LWJGL Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * 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.
|
||||
*
|
||||
* * Neither the name of 'LWJGL' nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT OWNER 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.
|
||||
*/
|
||||
|
||||
#include "org_lwjgl_openal_eax_EAXListenerProperties.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <eax.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_openal_eax_EAXListenerProperties
|
||||
* Method: sizeOfEaxListenerProperties
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_lwjgl_openal_eax_EAXListenerProperties_sizeOfEaxListenerProperties(JNIEnv *env, jclass clazz) {
|
||||
#ifdef _WIN32
|
||||
return sizeof(EAXLISTENERPROPERTIES);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_openal_eax_EAXListenerProperties
|
||||
* Method: assignOffsets
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_openal_eax_EAXListenerProperties_assignOffsets (JNIEnv *env, jclass clazz) {
|
||||
#ifdef _WIN32
|
||||
jclass listener_class;
|
||||
jfieldID field;
|
||||
|
||||
//get class/fields
|
||||
listener_class = (*env)->FindClass(env, "org/lwjgl/openal/eax/EAXListenerProperties");
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "room_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, lRoom));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "roomHF_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, lRoomHF));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "roomRolloffFactor_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flRoomRolloffFactor));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "decayTime_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flDecayTime));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "decayHFRatio_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flDecayHFRatio));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "reflections_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, lReflections));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "reflectionsDelay_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flReflectionsDelay));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "reverb_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, lReverb));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "reverbDelay_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flReverbDelay));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "environment_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, dwEnvironment));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "environmentSize_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flEnvironmentSize));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "environmentDiffusion_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flEnvironmentDiffusion));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "airAbsorptionHF_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, flAirAbsorptionHF));
|
||||
|
||||
//set environmentDiffusion_offset
|
||||
field = (*env)->GetStaticFieldID(env, listener_class, "flags_offset", "I");
|
||||
(*env)->SetStaticIntField(env, listener_class, field, offsetof(EAXLISTENERPROPERTIES, dwFlags));
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue