You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(134) |
Sep
(52) |
Oct
(13) |
Nov
(342) |
Dec
(163) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(44) |
Feb
(62) |
Mar
(158) |
Apr
(38) |
May
(70) |
Jun
(58) |
Jul
(104) |
Aug
(207) |
Sep
(83) |
Oct
(122) |
Nov
(23) |
Dec
(49) |
2004 |
Jan
(119) |
Feb
(132) |
Mar
(192) |
Apr
(140) |
May
(77) |
Jun
(74) |
Jul
(201) |
Aug
(63) |
Sep
(102) |
Oct
(70) |
Nov
(173) |
Dec
(78) |
2005 |
Jan
(174) |
Feb
(197) |
Mar
(105) |
Apr
(59) |
May
(77) |
Jun
(43) |
Jul
(21) |
Aug
(18) |
Sep
(47) |
Oct
(37) |
Nov
(74) |
Dec
(50) |
2006 |
Jan
(44) |
Feb
(19) |
Mar
(32) |
Apr
(24) |
May
(31) |
Jun
(55) |
Jul
(138) |
Aug
(28) |
Sep
(12) |
Oct
(41) |
Nov
(58) |
Dec
(24) |
2007 |
Jan
(28) |
Feb
(14) |
Mar
(10) |
Apr
(68) |
May
(30) |
Jun
(26) |
Jul
(18) |
Aug
(63) |
Sep
(19) |
Oct
(29) |
Nov
(20) |
Dec
(10) |
2008 |
Jan
(38) |
Feb
(7) |
Mar
(37) |
Apr
(120) |
May
(41) |
Jun
(36) |
Jul
(39) |
Aug
(24) |
Sep
(28) |
Oct
(30) |
Nov
(36) |
Dec
(75) |
2009 |
Jan
(46) |
Feb
(22) |
Mar
(50) |
Apr
(70) |
May
(134) |
Jun
(105) |
Jul
(75) |
Aug
(34) |
Sep
(38) |
Oct
(34) |
Nov
(19) |
Dec
(20) |
2010 |
Jan
(11) |
Feb
(20) |
Mar
(65) |
Apr
(83) |
May
(104) |
Jun
(73) |
Jul
(78) |
Aug
(57) |
Sep
(43) |
Oct
(35) |
Nov
(9) |
Dec
(4) |
2011 |
Jan
(21) |
Feb
(11) |
Mar
(18) |
Apr
(10) |
May
(18) |
Jun
(15) |
Jul
(48) |
Aug
(25) |
Sep
(17) |
Oct
(45) |
Nov
(15) |
Dec
(12) |
2012 |
Jan
(21) |
Feb
(9) |
Mar
(12) |
Apr
(9) |
May
(9) |
Jun
(5) |
Jul
(1) |
Aug
(10) |
Sep
(12) |
Oct
(1) |
Nov
(28) |
Dec
(5) |
2013 |
Jan
(4) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2015 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
2016 |
Jan
(2) |
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(1) |
Aug
(2) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ma...@us...> - 2010-05-24 22:35:05
|
Revision: 3349 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3349&view=rev Author: matzon Date: 2010-05-24 22:34:59 +0000 (Mon, 24 May 2010) Log Message: ----------- expose isEfxSupported Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java Modified: trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java 2010-05-24 21:54:37 UTC (rev 3348) +++ trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java 2010-05-24 22:34:59 UTC (rev 3349) @@ -58,14 +58,11 @@ * @return True if ALC_EXT_EFX is supported, false if not. * @throws OpenALException If OpenAL has not been created yet. */ - private static boolean isEfxSupported() { + public static boolean isEfxSupported() { if (!AL.isCreated()) { throw new OpenALException("OpenAL has not been created."); } - if (ALC10.alcIsExtensionPresent(AL.getDevice(), EFX10.ALC_EXT_EFX_NAME)) { - return true; - } - return false; + return ALC10.alcIsExtensionPresent(AL.getDevice(), EFX10.ALC_EXT_EFX_NAME); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-05-24 21:54:43
|
Revision: 3348 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3348&view=rev Author: matzon Date: 2010-05-24 21:54:37 +0000 (Mon, 24 May 2010) Log Message: ----------- proper resetNativeStubs for other oal-related classes, probably a NOP atm Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/openal/AL.java Modified: trunk/LWJGL/src/java/org/lwjgl/openal/AL.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/openal/AL.java 2010-05-24 21:50:26 UTC (rev 3347) +++ trunk/LWJGL/src/java/org/lwjgl/openal/AL.java 2010-05-24 21:54:37 UTC (rev 3348) @@ -217,8 +217,10 @@ device = null; } resetNativeStubs(AL10.class); + resetNativeStubs(AL11.class); resetNativeStubs(ALC10.class); resetNativeStubs(ALC11.class); + resetNativeStubs(EFX10.class); if (created) nDestroy(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-05-24 21:50:35
|
Revision: 3347 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3347&view=rev Author: matzon Date: 2010-05-24 21:50:26 +0000 (Mon, 24 May 2010) Log Message: ----------- EFX patch by Ciardhubh Modified Paths: -------------- trunk/LWJGL/doc/CREDITS trunk/LWJGL/src/java/org/lwjgl/openal/AL.java trunk/LWJGL/src/java/org/lwjgl/util/generator/FieldsGenerator.java Added Paths: ----------- trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java trunk/LWJGL/src/java/org/lwjgl/test/openal/EFX10Test.java trunk/LWJGL/src/templates/org/lwjgl/openal/EFX10.java Modified: trunk/LWJGL/doc/CREDITS =================================================================== --- trunk/LWJGL/doc/CREDITS 2010-05-24 21:32:23 UTC (rev 3346) +++ trunk/LWJGL/doc/CREDITS 2010-05-24 21:50:26 UTC (rev 3347) @@ -15,6 +15,7 @@ - kappaOne - Simon Felix - Ryan McNally + - Ciardhubh <ciardhubh[at]ciardhubh.de> additional credits goes to: - Joseph I. Valenzuela [OpenAL stuff] Modified: trunk/LWJGL/src/java/org/lwjgl/openal/AL.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/openal/AL.java 2010-05-24 21:32:23 UTC (rev 3346) +++ trunk/LWJGL/src/java/org/lwjgl/openal/AL.java 2010-05-24 21:50:26 UTC (rev 3347) @@ -160,8 +160,9 @@ if(openDevice) { device = ALC10.alcOpenDevice(deviceArguments); - if (device == null) + if (device == null) { throw new LWJGLException("Could not open ALC device"); + } if (contextFrequency == -1) { context = ALC10.alcCreateContext(device, null); @@ -177,7 +178,18 @@ throw e; } - ALC11.initialize(); + ALC11.initialize(); + + // Load EFX10 native stubs if ALC_EXT_EFX is supported. + // Is there any situation where the current device supports ALC_EXT_EFX and one + // later created by the user does not? + // Do we have to call resetNativeStubs(EFX10.class); somewhere? Not done for AL11 + // either. + // This can either be here or in ALC11, since ALC_EXT_EFX indirectly requires AL 1.1 + // for functions like alSource3i. + if (ALC10.alcIsExtensionPresent(device, EFX10.ALC_EXT_EFX_NAME)){ + EFX10.initNativeStubs(); + } } /** Added: trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/openal/EFXUtil.java 2010-05-24 21:50:26 UTC (rev 3347) @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2002-2010 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; + +/** + * Utility class for the OpenAL extension ALC_EXT_EFX. Provides functions to check for the extension + * and support of various effects and filters. + * <p> + * Currently supports ALC_EXT_EFX version 1.0 effects and filters. + * + * @author Ciardhubh <ciardhubh[at]ciardhubh.de> + * @version $Revision$ + * $Id$ + */ +public final class EFXUtil { + + /** Constant for testSupportGeneric to check an effect. */ + private static final int EFFECT = 1111; + /** Constant for testSupportGeneric to check a filter. */ + private static final int FILTER = 2222; + + /** Utility class, hidden contructor. */ + private EFXUtil() { + } + + /** + * Checks if OpenAL implementation is loaded and supports ALC_EXT_EFX. + * + * @return True if ALC_EXT_EFX is supported, false if not. + * @throws OpenALException If OpenAL has not been created yet. + */ + private static boolean isEfxSupported() { + if (!AL.isCreated()) { + throw new OpenALException("OpenAL has not been created."); + } + if (ALC10.alcIsExtensionPresent(AL.getDevice(), EFX10.ALC_EXT_EFX_NAME)) { + return true; + } + return false; + } + + /** + * Tests OpenAL to see whether the given effect type is supported. This is done by creating an + * effect of the given type. If creation succeeds the effect is supported. + * + * @param effectType Type of effect whose support is to be tested, e.g. AL_EFFECT_REVERB. + * @return True if it is supported, false if not. + * @throws OpenALException If the request fails due to an AL_OUT_OF_MEMORY error or OpenAL has + * not been created yet. + * @throws IllegalArgumentException effectType is not a valid effect type. + */ + public static boolean isEffectSupported(final int effectType) { + // Make sure type is a real effect. + switch (effectType) { + case EFX10.AL_EFFECT_NULL: + case EFX10.AL_EFFECT_EAXREVERB: + case EFX10.AL_EFFECT_REVERB: + case EFX10.AL_EFFECT_CHORUS: + case EFX10.AL_EFFECT_DISTORTION: + case EFX10.AL_EFFECT_ECHO: + case EFX10.AL_EFFECT_FLANGER: + case EFX10.AL_EFFECT_FREQUENCY_SHIFTER: + case EFX10.AL_EFFECT_VOCAL_MORPHER: + case EFX10.AL_EFFECT_PITCH_SHIFTER: + case EFX10.AL_EFFECT_RING_MODULATOR: + case EFX10.AL_EFFECT_AUTOWAH: + case EFX10.AL_EFFECT_COMPRESSOR: + case EFX10.AL_EFFECT_EQUALIZER: + break; + default: + throw new IllegalArgumentException("Unknown or invalid effect type: " + effectType); + } + + return testSupportGeneric(EFFECT, effectType); + } + + /** + * Tests OpenAL to see whether the given filter type is supported. This is done by creating a + * filter of the given type. If creation succeeds the filter is supported. + * + * @param filterType Type of filter whose support is to be tested, e.g. AL_FILTER_LOWPASS. + * @return True if it is supported, false if not. + * @throws OpenALException If the request fails due to an AL_OUT_OF_MEMORY error or OpenAL has + * not been created yet. + * @throws IllegalArgumentException filterType is not a valid filter type. + */ + public static boolean isFilterSupported(final int filterType) { + // Make sure type is a real filter. + switch (filterType) { + case EFX10.AL_FILTER_NULL: + case EFX10.AL_FILTER_LOWPASS: + case EFX10.AL_FILTER_HIGHPASS: + case EFX10.AL_FILTER_BANDPASS: + break; + default: + throw new IllegalArgumentException("Unknown or invalid filter type: " + filterType); + } + + return testSupportGeneric(FILTER, filterType); + } + + /** + * Generic test function to see if an EFX object supports a given kind of type. Works for + * effects and filters. + * + * @param objectType Type of object to test. Must be either EFXUtil.EFFECT or EFXUtil.FILTER. + * @param typeValue OpenAL type the object should be tested for support, e.g. AL_FILTER_LOWPASS + * or AL_EFFECT_REVERB. + * @return True if object supports typeValue, false else. + */ + private static boolean testSupportGeneric(final int objectType, final int typeValue) { + // Check for supported objectType. + switch (objectType) { + case EFFECT: + case FILTER: + break; + default: + throw new IllegalArgumentException("Invalid objectType: " + objectType); + } + + boolean supported = false; + if (isEfxSupported()) { + + // Try to create object in order to check AL's response. + AL10.alGetError(); + int genError; + int testObject = 0; + try { + switch (objectType) { // Create object based on type + case EFFECT: + testObject = EFX10.alGenEffects(); + break; + case FILTER: + testObject = EFX10.alGenFilters(); + break; + default: + throw new IllegalArgumentException("Invalid objectType: " + objectType); + } + genError = AL10.alGetError(); + } catch (final OpenALException debugBuildException) { + // Hack because OpenALException hides the original error code (short of parsing the + // error message String which would break if it gets changed). + if (debugBuildException.getMessage().contains("AL_OUT_OF_MEMORY")) { + genError = AL10.AL_OUT_OF_MEMORY; + } else { + genError = AL10.AL_INVALID_OPERATION; + } + } + + if (genError == AL10.AL_NO_ERROR) { + // Successfully created, now try to set type. + AL10.alGetError(); + int setError; + try { + switch (objectType) { // Set based on object type + case EFFECT: + EFX10.alEffecti(testObject, EFX10.AL_EFFECT_TYPE, typeValue); + break; + case FILTER: + EFX10.alFilteri(testObject, EFX10.AL_FILTER_TYPE, typeValue); + break; + default: + throw new IllegalArgumentException("Invalid objectType: " + objectType); + } + setError = AL10.alGetError(); + } catch (final OpenALException debugBuildException) { + // Hack because OpenALException hides the original error code (short of parsing + // the error message String which would break when it gets changed). + setError = AL10.AL_INVALID_VALUE; + } + + if (setError == AL10.AL_NO_ERROR) { + supported = true; + } + + // Cleanup + try { + switch (objectType) { // Set based on object type + case EFFECT: + EFX10.alDeleteEffects(testObject); + break; + case FILTER: + EFX10.alDeleteFilters(testObject); + break; + default: + throw new IllegalArgumentException("Invalid objectType: " + objectType); + } + } catch (final OpenALException debugBuildException) { + // Don't care about cleanup errors. + } + + } else if (genError == AL10.AL_OUT_OF_MEMORY) { + throw new OpenALException(genError); + } + } + + return supported; + } +} Added: trunk/LWJGL/src/java/org/lwjgl/test/openal/EFX10Test.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/openal/EFX10Test.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/test/openal/EFX10Test.java 2010-05-24 21:50:26 UTC (rev 3347) @@ -0,0 +1,464 @@ +/* + * Copyright (c) 2002-2010 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.nio.IntBuffer; + +import org.lwjgl.BufferUtils; +import org.lwjgl.openal.AL; +import org.lwjgl.openal.AL10; +import org.lwjgl.openal.AL11; +import org.lwjgl.openal.ALC10; +import org.lwjgl.openal.ALCcontext; +import org.lwjgl.openal.ALCdevice; +import org.lwjgl.openal.EFX10; +import org.lwjgl.openal.EFXUtil; +import org.lwjgl.util.WaveData; + +/** + * Class with a few examples testing and demonstrating the use of the OpenAL extension ALC_EXT_EFX. + * <p> + * This class is not compatible with the LWJGL debug build (lwjgl-debug.jar), as the debug build + * throws exceptions instead of alGetError checks. The redundant exception handling code was not + * added in order to keep these examples simple. + * + * @author Ciardhubh <ciardhubh[at]ciardhubh.de> + * @version $Revision$ + * $Id$ + */ +public final class EFX10Test { + + public static void main(final String[] args) throws Exception { + silentTests(); + playbackTest(); + efxUtilTest(); + } + + /** + * Loads OpenAL and makes sure ALC_EXT_EFX is supported. + */ + private static void setupEfx() throws Exception { + // Load and create OpenAL + if (!AL.isCreated()) { + AL.create(); + } + // Query for Effect Extension + if (!ALC10.alcIsExtensionPresent(AL.getDevice(), EFX10.ALC_EXT_EFX_NAME)) { + throw new Exception("No ALC_EXT_EFX supported by driver."); + } + System.out.println("ALC_EXT_EFX found."); + } + + /** + * Runs a series of API calls similar to the tutorials in the Effects Extension Guide of the + * OpenAL SDK. Nothing is played in this method. + */ + private static void silentTests() throws Exception { + setupEfx(); + + final ALCdevice device = AL.getDevice(); + + // Create context (only necessary if LWJGL context isn't sufficient, done as example) + final IntBuffer contextAttribList = BufferUtils.createIntBuffer(8); + contextAttribList.put(ALC10.ALC_FREQUENCY); + contextAttribList.put(44100); + contextAttribList.put(ALC10.ALC_REFRESH); + contextAttribList.put(60); + contextAttribList.put(ALC10.ALC_SYNC); + contextAttribList.put(ALC10.ALC_FALSE); + contextAttribList.rewind(); + // ALC_MAX_AUXILIARY_SENDS won't go above compile-time max. Set to compile-time max if + // greater. + contextAttribList.put(EFX10.ALC_MAX_AUXILIARY_SENDS); + contextAttribList.put(2); + final ALCcontext newContext = ALC10.alcCreateContext(device, contextAttribList); + if (newContext == null) { + throw new Exception("Failed to create context."); + } + final int contextCurResult = ALC10.alcMakeContextCurrent(newContext); + if (contextCurResult == ALC10.ALC_FALSE) { + throw new Exception("Failed to make context current."); + } + + // Query EFX ALC values + System.out.println("AL_VERSION: " + AL10.alGetString(AL10.AL_VERSION)); + final IntBuffer buff = BufferUtils.createIntBuffer(1); + ALC10.alcGetInteger(device, EFX10.ALC_EFX_MAJOR_VERSION, buff); + System.out.println("ALC_EFX_MAJOR_VERSION: " + buff.get(0)); + ALC10.alcGetInteger(device, EFX10.ALC_EFX_MINOR_VERSION, buff); + System.out.println("ALC_EFX_MINOR_VERSION: " + buff.get(0)); + ALC10.alcGetInteger(device, EFX10.ALC_MAX_AUXILIARY_SENDS, buff); + final int maxAuxSends = buff.get(0); + System.out.println("ALC_MAX_AUXILIARY_SENDS: " + maxAuxSends); + + + // Try to create 4 Auxiliary Effect Slots + int numAuxSlots = 0; + final int[] auxEffectSlots = new int[4]; // try more to test + AL10.alGetError(); + for (numAuxSlots = 0; numAuxSlots < 4; numAuxSlots++) { + auxEffectSlots[numAuxSlots] = EFX10.alGenAuxiliaryEffectSlots(); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + break; + } + } + System.out.println("Created " + numAuxSlots + " aux effect slots."); + + // Try to create 2 Effects + int numEffects = 0; + final int[] effects = new int[2]; + for (numEffects = 0; numEffects < 2; numEffects++) { + effects[numEffects] = EFX10.alGenEffects(); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + break; + } + } + System.out.println("Created " + numEffects + " effects."); + + // Set first Effect Type to Reverb and change Decay Time + AL10.alGetError(); + if (EFX10.alIsEffect(effects[0])) { + EFX10.alEffecti(effects[0], EFX10.AL_EFFECT_TYPE, EFX10.AL_EFFECT_REVERB); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + System.out.println("Reverb effect not supported."); + } else { + EFX10.alEffectf(effects[0], EFX10.AL_REVERB_DECAY_TIME, 5.0f); + System.out.println("Reverb effect created."); + } + } else { + throw new Exception("First effect not a valid effect."); + } + + // Set second Effect Type to Flanger and change Phase + AL10.alGetError(); + if (EFX10.alIsEffect(effects[1])) { + EFX10.alEffecti(effects[1], EFX10.AL_EFFECT_TYPE, EFX10.AL_EFFECT_FLANGER); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + System.out.println("Flanger effect not support."); + } else { + EFX10.alEffecti(effects[1], EFX10.AL_FLANGER_PHASE, 180); + System.out.println("Flanger effect created."); + } + } else { + throw new Exception("Second effect not a valid effect."); + } + + // Try to create a Filter + AL10.alGetError(); + final int filter = EFX10.alGenFilters(); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + throw new Exception("Failed to create filter."); + } + System.out.println("Generated a filter."); + if (EFX10.alIsFilter(filter)) { + // Set Filter type to Low-Pass and set parameters + EFX10.alFilteri(filter, EFX10.AL_FILTER_TYPE, EFX10.AL_FILTER_LOWPASS); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + System.out.println("Low pass filter not supported."); + } else { + EFX10.alFilterf(filter, EFX10.AL_LOWPASS_GAIN, 0.5f); + EFX10.alFilterf(filter, EFX10.AL_LOWPASS_GAINHF, 0.5f); + System.out.println("Low pass filter created."); + } + } + + // Attach Effect to Auxiliary Effect Slot + AL10.alGetError(); + EFX10.alAuxiliaryEffectSloti(auxEffectSlots[0], EFX10.AL_EFFECTSLOT_EFFECT, effects[0]); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + throw new Exception("Failed to attach effect to aux effect slot."); + } + System.out.println("Successfully loaded effect into effect slot."); + + // Configure Source Auxiliary Effect Slot Sends + final int source = AL10.alGenSources(); + // Set Source Send 0 to feed auxEffectSlots[0] without filtering + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, auxEffectSlots[0], 0, + EFX10.AL_FILTER_NULL); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + throw new Exception("Failed to configure Source Send 0"); + } + System.out.println("Linked aux effect slot to soutce slot 0"); + // Set Source Send 1 to feed uiEffectSlot[1] with filter filter + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, auxEffectSlots[1], 1, filter); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + // e.g. if only 1 send per source is available + throw new Exception("Failed to configure Source Send 1"); + } + System.out.println("Linked aux effect slot to soutce slot 1"); + // Disable Send 0 + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, EFX10.AL_EFFECTSLOT_NULL, 0, + EFX10.AL_FILTER_NULL); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + throw new Exception("Failed to disable Source Send 0"); + } + System.out.println("Disabled source send 0"); + // Disable Send 1 + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, EFX10.AL_EFFECTSLOT_NULL, 1, + EFX10.AL_FILTER_NULL); + if (AL10.alGetError() != AL10.AL_NO_ERROR) { + throw new Exception("Failed to disable Source Send 1"); + } + System.out.println("Disabled source send 1"); + + + // Filter 'source', a generated Source + AL10.alSourcei(source, EFX10.AL_DIRECT_FILTER, filter); + if (AL10.alGetError() == AL10.AL_NO_ERROR) { + { + System.out.println("Successfully applied a direct path filter"); + // Remove filter from 'source' + AL10.alSourcei(source, EFX10.AL_DIRECT_FILTER, EFX10.AL_FILTER_NULL); + if (AL10.alGetError() == AL10.AL_NO_ERROR) { + System.out.println("Successfully removed direct filter"); + } + } + // Filter the Source send 0 from 'source' to Auxiliary Effect Slot auxEffectSlot[0] + // using Filter uiFilter[0] + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, auxEffectSlots[0], 0, filter); + if (AL10.alGetError() == AL10.AL_NO_ERROR) { + { + System.out.println("Successfully applied aux send filter"); + // Remove Filter from Source Auxiliary Send + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, auxEffectSlots[0], 0, + EFX10.AL_FILTER_NULL); + if (AL10.alGetError() == AL10.AL_NO_ERROR) { + System.out.println("Successfully removed filter"); + } + } + } + } + + // Set Source Cone Outer Gain HF value + AL10.alSourcef(source, EFX10.AL_CONE_OUTER_GAINHF, 0.5f); + if (AL10.alGetError() == AL10.AL_NO_ERROR) { + System.out.println("Successfully set cone outside gain filter"); + } + + // Set distance units to be in feet + AL10.alListenerf(EFX10.AL_METERS_PER_UNIT, 0.3f); + if (AL10.alGetError() == AL10.AL_NO_ERROR) { + System.out.println("Successfully set distance units"); + } + + // Cleanup + final IntBuffer auxEffectSlotsBuf = (IntBuffer) BufferUtils.createIntBuffer( + auxEffectSlots.length).put(auxEffectSlots).rewind(); + EFX10.alDeleteAuxiliaryEffectSlots(auxEffectSlotsBuf); + final IntBuffer effectsBuf = (IntBuffer) BufferUtils.createIntBuffer( + effects.length).put(effects).rewind(); + EFX10.alDeleteEffects(effectsBuf); + EFX10.alDeleteFilters(filter); + AL.destroy(); + } + + /** + * Plays a sound with various effects applied to it. + */ + private static void playbackTest() throws Exception { + setupEfx(); + + // Create a source and buffer audio data + final int source = AL10.alGenSources(); + final int buffer = AL10.alGenBuffers(); + WaveData waveFile = WaveData.create(WaveData.class.getClassLoader().getResourceAsStream("Footsteps.wav")); + if (waveFile == null) { + System.out.println("Failed to load Footsteps.wav! Skipping playback test."); + AL.destroy(); + return; + } + AL10.alBufferData(buffer, waveFile.format, waveFile.data, waveFile.samplerate); + waveFile.dispose(); + AL10.alSourcei(source, AL10.AL_BUFFER, buffer); + AL10.alSourcei(source, AL10.AL_LOOPING, AL10.AL_TRUE); + + System.out.println("Playing sound unaffected by EFX ..."); + AL10.alSourcePlay(source); + Thread.sleep(7500); + + // Add reverb effect + final int effectSlot = EFX10.alGenAuxiliaryEffectSlots(); + final int reverbEffect = EFX10.alGenEffects(); + EFX10.alEffecti(reverbEffect, EFX10.AL_EFFECT_TYPE, EFX10.AL_EFFECT_REVERB); + EFX10.alEffectf(reverbEffect, EFX10.AL_REVERB_DECAY_TIME, 5.0f); + EFX10.alAuxiliaryEffectSloti(effectSlot, EFX10.AL_EFFECTSLOT_EFFECT, reverbEffect); + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, effectSlot, 0, + EFX10.AL_FILTER_NULL); + + System.out.println("Playing sound with reverb ..."); + AL10.alSourcePlay(source); + Thread.sleep(7500); + + // Add low-pass filter directly to source + final int filter = EFX10.alGenFilters(); + EFX10.alFilteri(filter, EFX10.AL_FILTER_TYPE, EFX10.AL_FILTER_LOWPASS); + EFX10.alFilterf(filter, EFX10.AL_LOWPASS_GAIN, 0.5f); + EFX10.alFilterf(filter, EFX10.AL_LOWPASS_GAINHF, 0.5f); + AL10.alSourcei(source, EFX10.AL_DIRECT_FILTER, filter); + + System.out.println("Playing sound with reverb and direct low pass filter ..."); + AL10.alSourcePlay(source); + Thread.sleep(7500); + AL10.alSourcei(source, EFX10.AL_DIRECT_FILTER, EFX10.AL_FILTER_NULL); + + // Add low-pass filter to source send + //AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, effectSlot, 0, filter); + // + //System.out.println("Playing sound with reverb and aux send low pass filter ..."); + //AL10.alSourcePlay(source); + //Thread.sleep(7500); + + // Cleanup + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, EFX10.AL_EFFECTSLOT_NULL, 0, + EFX10.AL_FILTER_NULL); + EFX10.alAuxiliaryEffectSloti(effectSlot, EFX10.AL_EFFECTSLOT_EFFECT, EFX10.AL_EFFECT_NULL); + EFX10.alDeleteEffects(reverbEffect); + EFX10.alDeleteFilters(filter); + + // Echo effect + final int echoEffect = EFX10.alGenEffects(); + EFX10.alEffecti(echoEffect, EFX10.AL_EFFECT_TYPE, EFX10.AL_EFFECT_ECHO); + //EFX10.alEffectf(echoEffect, EFX10.AL_ECHO_DELAY, 5.0f); + EFX10.alAuxiliaryEffectSloti(effectSlot, EFX10.AL_EFFECTSLOT_EFFECT, echoEffect); + AL11.alSource3i(source, EFX10.AL_AUXILIARY_SEND_FILTER, effectSlot, 0, + EFX10.AL_FILTER_NULL); + + System.out.println("Playing sound with echo effect ..."); + AL10.alSourcePlay(source); + Thread.sleep(7500); + + AL.destroy(); + } + + /** + * Checks OpenAL for every EFX 1.0 effect and filter and prints the result to the console. + */ + private static void efxUtilTest() throws Exception { + setupEfx(); + + System.out.println(); + System.out.println("Checking supported effects ..."); + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_NULL)) { + System.out.println("AL_EFFECT_NULL is supported."); + } else { + System.out.println("AL_EFFECT_NULL is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_EAXREVERB)) { + System.out.println("AL_EFFECT_EAXREVERB is supported."); + } else { + System.out.println("AL_EFFECT_EAXREVERB is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_REVERB)) { + System.out.println("AL_EFFECT_REVERB is supported."); + } else { + System.out.println("AL_EFFECT_REVERB is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_CHORUS)) { + System.out.println("AL_EFFECT_CHORUS is supported."); + } else { + System.out.println("AL_EFFECT_CHORUS is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_DISTORTION)) { + System.out.println("AL_EFFECT_DISTORTION is supported."); + } else { + System.out.println("AL_EFFECT_DISTORTION is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_ECHO)) { + System.out.println("AL_EFFECT_ECHO is supported."); + } else { + System.out.println("AL_EFFECT_ECHO is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_FLANGER)) { + System.out.println("AL_EFFECT_FLANGER is supported."); + } else { + System.out.println("AL_EFFECT_FLANGER is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_FREQUENCY_SHIFTER)) { + System.out.println("AL_EFFECT_FREQUENCY_SHIFTER is supported."); + } else { + System.out.println("AL_EFFECT_FREQUENCY_SHIFTER is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_VOCAL_MORPHER)) { + System.out.println("AL_EFFECT_VOCAL_MORPHER is supported."); + } else { + System.out.println("AL_EFFECT_VOCAL_MORPHER is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_PITCH_SHIFTER)) { + System.out.println("AL_EFFECT_PITCH_SHIFTER is supported."); + } else { + System.out.println("AL_EFFECT_PITCH_SHIFTER is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_RING_MODULATOR)) { + System.out.println("AL_EFFECT_RING_MODULATOR is supported."); + } else { + System.out.println("AL_EFFECT_RING_MODULATOR is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_AUTOWAH)) { + System.out.println("AL_EFFECT_AUTOWAH is supported."); + } else { + System.out.println("AL_EFFECT_AUTOWAH is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_COMPRESSOR)) { + System.out.println("AL_EFFECT_COMPRESSOR is supported."); + } else { + System.out.println("AL_EFFECT_COMPRESSOR is NOT supported."); + } + if (EFXUtil.isEffectSupported(EFX10.AL_EFFECT_EQUALIZER)) { + System.out.println("AL_EFFECT_EQUALIZER is supported."); + } else { + System.out.println("AL_EFFECT_EQUALIZER is NOT supported."); + } + + System.out.println(); + System.out.println("Checking supported filters ..."); + if (EFXUtil.isFilterSupported(EFX10.AL_FILTER_NULL)) { + System.out.println("AL_FILTER_NULL is supported."); + } else { + System.out.println("AL_FILTER_NULL is NOT supported."); + } + if (EFXUtil.isFilterSupported(EFX10.AL_FILTER_LOWPASS)) { + System.out.println("AL_FILTER_LOWPASS is supported."); + } else { + System.out.println("AL_FILTER_LOWPASS is NOT supported."); + } + if (EFXUtil.isFilterSupported(EFX10.AL_FILTER_HIGHPASS)) { + System.out.println("AL_FILTER_HIGHPASS is supported."); + } else { + System.out.println("AL_FILTER_HIGHPASS is NOT supported."); + } + if (EFXUtil.isFilterSupported(EFX10.AL_FILTER_BANDPASS)) { + System.out.println("AL_FILTER_BANDPASS is supported."); + } else { + System.out.println("AL_FILTER_BANDPASS is NOT supported."); + } + } +} Modified: trunk/LWJGL/src/java/org/lwjgl/util/generator/FieldsGenerator.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/generator/FieldsGenerator.java 2010-05-24 21:32:23 UTC (rev 3346) +++ trunk/LWJGL/src/java/org/lwjgl/util/generator/FieldsGenerator.java 2010-05-24 21:50:26 UTC (rev 3347) @@ -40,34 +40,57 @@ public class FieldsGenerator { private static void validateField(FieldDeclaration field) { - Collection<Modifier> modifiers = field.getModifiers(); - if (modifiers.size() != 3 || !modifiers.contains(Modifier.PUBLIC) || !modifiers.contains(Modifier.STATIC) || - !modifiers.contains(Modifier.FINAL)) - throw new RuntimeException("Field " + field.getSimpleName() + " is not declared public static final"); - TypeMirror field_type = field.getType(); - if (!(field_type instanceof PrimitiveType)) - throw new RuntimeException("Field " + field.getSimpleName() + " is not a primitive type"); - PrimitiveType field_type_prim = (PrimitiveType)field_type; - if (field_type_prim.getKind() != PrimitiveType.Kind.INT && field_type_prim.getKind() != PrimitiveType.Kind.LONG) - throw new RuntimeException("Field " + field.getSimpleName() + " is not of type 'int' or 'long'"); - Object field_value = field.getConstantValue(); - if (field_value == null) - throw new RuntimeException("Field " + field.getSimpleName() + " has no initial value"); + // Check if field is "public static final" + Collection<Modifier> modifiers = field.getModifiers(); + if (modifiers.size() != 3 + || !modifiers.contains(Modifier.PUBLIC) + || !modifiers.contains(Modifier.STATIC) + || !modifiers.contains(Modifier.FINAL)) { + throw new RuntimeException("Field " + field.getSimpleName() + " is not declared public static final"); + } + + // Check suported types (int, long, float, String) + TypeMirror field_type = field.getType(); + if (field_type instanceof PrimitiveType) { + PrimitiveType field_type_prim = (PrimitiveType) field_type; + PrimitiveType.Kind field_kind = field_type_prim.getKind(); + if (field_kind != PrimitiveType.Kind.INT + && field_kind != PrimitiveType.Kind.LONG + && field_kind != PrimitiveType.Kind.FLOAT) { + throw new RuntimeException("Field " + field.getSimpleName() + " is not of type 'int', 'long' or 'float'"); + } + } else if (field_type.toString().equals("java.lang.String")) { + } else { + throw new RuntimeException("Field " + field.getSimpleName() + " is not a primitive type or String"); + } + + Object field_value = field.getConstantValue(); + if (field_value == null) { + throw new RuntimeException("Field " + field.getSimpleName() + " has no initial value"); + } } private static void generateField(PrintWriter writer, FieldDeclaration field) { - validateField(field); + validateField(field); - Object value = field.getConstantValue(); - String field_value_string; - if ( value.getClass().equals(Integer.class) ) - field_value_string = Integer.toHexString((Integer)field.getConstantValue()); - else - field_value_string = Long.toHexString((Long)field.getConstantValue()) + 'l'; + Object value = field.getConstantValue(); + String field_value_string; + Class field_value_class = value.getClass(); + if (field_value_class.equals(Integer.class)) { + field_value_string = "0x" + Integer.toHexString((Integer) field.getConstantValue()); + } else if (field_value_class.equals(Long.class)) { + field_value_string = "0x" + Long.toHexString((Long) field.getConstantValue()) + 'l'; + } else if (field_value_class.equals(Float.class)) { + field_value_string = field.getConstantValue() + "f"; + } else if (field_value_class.equals(String.class)) { + field_value_string = "\"" + field.getConstantValue() + "\""; + } else { + throw new RuntimeException("Field is of unexpected type. This means there is a bug in validateField()."); + } - Utils.printDocComment(writer, field); - // Print field declaration - writer.println("\tpublic static final " + field.getType().toString() + " " + field.getSimpleName() + " = 0x" + field_value_string + ";"); + Utils.printDocComment(writer, field); + // Print field declaration + writer.println("\tpublic static final " + field.getType().toString() + " " + field.getSimpleName() + " = " + field_value_string + ";"); } public static void generateFields(PrintWriter writer, Collection<FieldDeclaration> fields) { Added: trunk/LWJGL/src/templates/org/lwjgl/openal/EFX10.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/openal/EFX10.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/openal/EFX10.java 2010-05-24 21:50:26 UTC (rev 3347) @@ -0,0 +1,738 @@ +/* + * Copyright (c) 2002-2010 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; + +import java.nio.FloatBuffer; +import java.nio.IntBuffer; + +import org.lwjgl.util.generator.ALenum; +import org.lwjgl.util.generator.ALsizei; +import org.lwjgl.util.generator.ALuint; +import org.lwjgl.util.generator.ALvoid; +import org.lwjgl.util.generator.Alternate; +import org.lwjgl.util.generator.AutoSize; +import org.lwjgl.util.generator.Check; +import org.lwjgl.util.generator.Const; +import org.lwjgl.util.generator.Constant; +import org.lwjgl.util.generator.Indirect; +import org.lwjgl.util.generator.OutParameter; +import org.lwjgl.util.generator.Result; +import org.lwjgl.util.generator.StripPostfix; + +/** + * Implementation of the OpenAL extension ALC_EXT_EFX (version 1.0). Contains necessary fields, + * methods and a range of supplementary fields containing minimum, maximum and default values of + * the former fields. + * <p> + * On top of regular functions defined in the ALC_EXT_EFX, there are also several convenience + * functions. Namely alGen... and alDelete... which do not take a Java buffer parameter and + * automatically create or delete a single object, without the overhead of using a buffer. + * <p> + * For comments and specification of functions and fields, refer to the "Effects Extension Guide" + * which is part of the OpenAL SDK and can be downloaded from: + * http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx + * + * @author Ciardhubh <ciardhubh[at]ciardhubh.de> + * @version $Revision$ + * $Id$ + */ +public interface EFX10 { + + // ALC properties + String ALC_EXT_EFX_NAME = "ALC_EXT_EFX"; + int ALC_EFX_MAJOR_VERSION = 0x20001; + int ALC_EFX_MINOR_VERSION = 0x20002; + int ALC_MAX_AUXILIARY_SENDS = 0x20003; + + // Listener properties + int AL_METERS_PER_UNIT = 0x20004; + + // Source properties + int AL_DIRECT_FILTER = 0x20005; + int AL_AUXILIARY_SEND_FILTER = 0x20006; + int AL_AIR_ABSORPTION_FACTOR = 0x20007; + int AL_ROOM_ROLLOFF_FACTOR = 0x20008; + int AL_CONE_OUTER_GAINHF = 0x20009; + int AL_DIRECT_FILTER_GAINHF_AUTO = 0x2000A; + int AL_AUXILIARY_SEND_FILTER_GAIN_AUTO = 0x2000B; + int AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO = 0x2000C; + + // Auxiliary effect slot properties + int AL_EFFECTSLOT_EFFECT = 0x0001; + int AL_EFFECTSLOT_GAIN = 0x0002; + int AL_EFFECTSLOT_AUXILIARY_SEND_AUTO = 0x0003; + // NULL auxiliary slot ID to disable a source send + int AL_EFFECTSLOT_NULL = 0x0000; + + // Effect parameters + // Reverb + int AL_REVERB_DENSITY = 0x0001; + int AL_REVERB_DIFFUSION = 0x0002; + int AL_REVERB_GAIN = 0x0003; + int AL_REVERB_GAINHF = 0x0004; + int AL_REVERB_DECAY_TIME = 0x0005; + int AL_REVERB_DECAY_HFRATIO = 0x0006; + int AL_REVERB_REFLECTIONS_GAIN = 0x0007; + int AL_REVERB_REFLECTIONS_DELAY = 0x0008; + int AL_REVERB_LATE_REVERB_GAIN = 0x0009; + int AL_REVERB_LATE_REVERB_DELAY = 0x000A; + int AL_REVERB_AIR_ABSORPTION_GAINHF = 0x000B; + int AL_REVERB_ROOM_ROLLOFF_FACTOR = 0x000C; + int AL_REVERB_DECAY_HFLIMIT = 0x000D; + // EAX Reverb + int AL_EAXREVERB_DENSITY = 0x0001; + int AL_EAXREVERB_DIFFUSION = 0x0002; + int AL_EAXREVERB_GAIN = 0x0003; + int AL_EAXREVERB_GAINHF = 0x0004; + int AL_EAXREVERB_GAINLF = 0x0005; + int AL_EAXREVERB_DECAY_TIME = 0x0006; + int AL_EAXREVERB_DECAY_HFRATIO = 0x0007; + int AL_EAXREVERB_DECAY_LFRATIO = 0x0008; + int AL_EAXREVERB_REFLECTIONS_GAIN = 0x0009; + int AL_EAXREVERB_REFLECTIONS_DELAY = 0x000A; + int AL_EAXREVERB_REFLECTIONS_PAN = 0x000B; + int AL_EAXREVERB_LATE_REVERB_GAIN = 0x000C; + int AL_EAXREVERB_LATE_REVERB_DELAY = 0x000D; + int AL_EAXREVERB_LATE_REVERB_PAN = 0x000E; + int AL_EAXREVERB_ECHO_TIME = 0x000F; + int AL_EAXREVERB_ECHO_DEPTH = 0x0010; + int AL_EAXREVERB_MODULATION_TIME = 0x0011; + int AL_EAXREVERB_MODULATION_DEPTH = 0x0012; + int AL_EAXREVERB_AIR_ABSORPTION_GAINHF = 0x0013; + int AL_EAXREVERB_HFREFERENCE = 0x0014; + int AL_EAXREVERB_LFREFERENCE = 0x0015; + int AL_EAXREVERB_ROOM_ROLLOFF_FACTOR = 0x0016; + int AL_EAXREVERB_DECAY_HFLIMIT = 0x0017; + // Chorus + int AL_CHORUS_WAVEFORM = 0x0001; + int AL_CHORUS_PHASE = 0x0002; + int AL_CHORUS_RATE = 0x0003; + int AL_CHORUS_DEPTH = 0x0004; + int AL_CHORUS_FEEDBACK = 0x0005; + int AL_CHORUS_DELAY = 0x0006; + // Distortion + int AL_DISTORTION_EDGE = 0x0001; + int AL_DISTORTION_GAIN = 0x0002; + int AL_DISTORTION_LOWPASS_CUTOFF = 0x0003; + int AL_DISTORTION_EQCENTER = 0x0004; + int AL_DISTORTION_EQBANDWIDTH = 0x0005; + // Echo + int AL_ECHO_DELAY = 0x0001; + int AL_ECHO_LRDELAY = 0x0002; + int AL_ECHO_DAMPING = 0x0003; + int AL_ECHO_FEEDBACK = 0x0004; + int AL_ECHO_SPREAD = 0x0005; + // Flanger + int AL_FLANGER_WAVEFORM = 0x0001; + int AL_FLANGER_PHASE = 0x0002; + int AL_FLANGER_RATE = 0x0003; + int AL_FLANGER_DEPTH = 0x0004; + int AL_FLANGER_FEEDBACK = 0x0005; + int AL_FLANGER_DELAY = 0x0006; + // Frequency shifter + int AL_FREQUENCY_SHIFTER_FREQUENCY = 0x0001; + int AL_FREQUENCY_SHIFTER_LEFT_DIRECTION = 0x0002; + int AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION = 0x0003; + // Vocal morpher + int AL_VOCAL_MORPHER_PHONEMEA = 0x0001; + int AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING = 0x0002; + int AL_VOCAL_MORPHER_PHONEMEB = 0x0003; + int AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING = 0x0004; + int AL_VOCAL_MORPHER_WAVEFORM = 0x0005; + int AL_VOCAL_MORPHER_RATE = 0x0006; + // Pitch shifter + int AL_PITCH_SHIFTER_COARSE_TUNE = 0x0001; + int AL_PITCH_SHIFTER_FINE_TUNE = 0x0002; + // Ring modulator + int AL_RING_MODULATOR_FREQUENCY = 0x0001; + int AL_RING_MODULATOR_HIGHPASS_CUTOFF = 0x0002; + int AL_RING_MODULATOR_WAVEFORM = 0x0003; + // Autowah + int AL_AUTOWAH_ATTACK_TIME = 0x0001; + int AL_AUTOWAH_RELEASE_TIME = 0x0002; + int AL_AUTOWAH_RESONANCE = 0x0003; + int AL_AUTOWAH_PEAK_GAIN = 0x0004; + // Compressor + int AL_COMPRESSOR_ONOFF = 0x0001; + // Equalizer + int AL_EQUALIZER_LOW_GAIN = 0x0001; + int AL_EQUALIZER_LOW_CUTOFF = 0x0002; + int AL_EQUALIZER_MID1_GAIN = 0x0003; + int AL_EQUALIZER_MID1_CENTER = 0x0004; + int AL_EQUALIZER_MID1_WIDTH = 0x0005; + int AL_EQUALIZER_MID2_GAIN = 0x0006; + int AL_EQUALIZER_MID2_CENTER = 0x0007; + int AL_EQUALIZER_MID2_WIDTH = 0x0008; + int AL_EQUALIZER_HIGH_GAIN = 0x0009; + int AL_EQUALIZER_HIGH_CUTOFF = 0x000A; + // Effect type + int AL_EFFECT_FIRST_PARAMETER = 0x0000; + int AL_EFFECT_LAST_PARAMETER = 0x8000; + int AL_EFFECT_TYPE = 0x8001; + // Effect types, used with AL_EFFECT_TYPE + int AL_EFFECT_NULL = 0x0000; + int AL_EFFECT_REVERB = 0x0001; + int AL_EFFECT_CHORUS = 0x0002; + int AL_EFFECT_DISTORTION = 0x0003; + int AL_EFFECT_ECHO = 0x0004; + int AL_EFFECT_FLANGER = 0x0005; + int AL_EFFECT_FREQUENCY_SHIFTER = 0x0006; + int AL_EFFECT_VOCAL_MORPHER = 0x0007; + int AL_EFFECT_PITCH_SHIFTER = 0x0008; + int AL_EFFECT_RING_MODULATOR = 0x0009; + int AL_EFFECT_AUTOWAH = 0x000A; + int AL_EFFECT_COMPRESSOR = 0x000B; + int AL_EFFECT_EQUALIZER = 0x000C; + int AL_EFFECT_EAXREVERB = 0x8000; + + // Filter properties + // Lowpass + int AL_LOWPASS_GAIN = 0x0001; + int AL_LOWPASS_GAINHF = 0x0002; + // Highpass + int AL_HIGHPASS_GAIN = 0x0001; + int AL_HIGHPASS_GAINLF = 0x0002; + // Bandpass + int AL_BANDPASS_GAIN = 0x0001; + int AL_BANDPASS_GAINLF = 0x0002; + int AL_BANDPASS_GAINHF = 0x0003; + // Filter type + int AL_FILTER_FIRST_PARAMETER = 0x0000; + int AL_FILTER_LAST_PARAMETER = 0x8000; + int AL_FILTER_TYPE = 0x8001; + // Filter types, used with the AL_FILTER_TYPE property + int AL_FILTER_NULL = 0x0000; + int AL_FILTER_LOWPASS = 0x0001; + int AL_FILTER_HIGHPASS = 0x0002; + int AL_FILTER_BANDPASS = 0x0003; + + // Auxiliary effect slot object functions + @ALvoid + void alGenAuxiliaryEffectSlots(@AutoSize("auxiliaryeffectslots") @ALsizei int n, @OutParameter @ALuint IntBuffer auxiliaryeffectslots); + + @Alternate(value = "alGenAuxiliaryEffectSlots", nativeAlt = true) + @ALvoid + void alGenAuxiliaryEffectSlots2(@Constant("1") @ALsizei int n, @Result @ALuint int auxiliaryeffectslot); + + @ALvoid + void alDeleteAuxiliaryEffectSlots(@AutoSize("auxiliaryeffectslots") @ALsizei int n, @OutParameter @ALuint IntBuffer auxiliaryeffectslots); + + @Alternate(value = "alDeleteAuxiliaryEffectSlots", nativeAlt = true) + @ALvoid + void alDeleteAuxiliaryEffectSlots2(@Constant("1") @ALsizei int n, @Indirect @ALuint int auxiliaryeffectslot); + + boolean alIsAuxiliaryEffectSlot(@ALuint int auxiliaryeffectslot); + + @ALvoid + void alAuxiliaryEffectSloti(@ALuint int auxiliaryeffectslot, @ALenum int param, int value); + + @StripPostfix("values") + @ALvoid + void alAuxiliaryEffectSlotiv(@ALuint int auxiliaryeffectslot, @ALenum int param, @Check("1") @Const IntBuffer values); + + @ALvoid + void alAuxiliaryEffectSlotf(@ALuint int auxiliaryeffectslot, @ALenum int param, float value); + + @StripPostfix("values") + @ALvoid + void alAuxiliaryEffectSlotfv(@ALuint int auxiliaryeffectslot, @ALenum int param, @Check("1") @Const FloatBuffer values); + + @ALvoid + void alGetAuxiliaryEffectSloti(@ALuint int auxiliaryeffectslot, @ALenum int param, @Result int value); + + @StripPostfix("intdata") + @ALvoid + void alGetAuxiliaryEffectSlotiv(@ALuint int auxiliaryeffectslot, @ALenum int param, @OutParameter @Check("1") IntBuffer intdata); + + @ALvoid + void alGetAuxiliaryEffectSlotf(@ALuint int auxiliaryeffectslot, @ALenum int param, @Result float value); + + @StripPostfix("floatdata") + @ALvoid + void alGetAuxiliaryEffectSlotfv(@ALuint int auxiliaryeffectslot, @ALenum int param, @OutParameter @Check("1") FloatBuffer floatdata); + + // Effect object functions + @ALvoid + void alGenEffects(@AutoSize("effects") @ALsizei int n, @OutParameter @ALuint IntBuffer effects); + + @Alternate(value = "alGenEffects", nativeAlt = true) + @ALvoid + void alGenEffects2(@Constant("1") @ALsizei int n, @Result @ALuint int effect); + + @ALvoid + void alDeleteEffects(@AutoSize("effects") @ALsizei int n, @OutParameter @ALuint IntBuffer effects); + + @Alternate(value = "alDeleteEffects", nativeAlt = true) + @ALvoid + void alDeleteEffects2(@Constant("1") @ALsizei int n, @Indirect @ALuint int effect); + + boolean alIsEffect(@ALuint int effect); + + @ALvoid + void alEffecti(@ALuint int effect, @ALenum int param, int value); + + @StripPostfix("values") + @ALvoid + void alEffectiv(@ALuint int effect, @ALenum int param, @Check("1") @Const IntBuffer values); + + @ALvoid + void alEffectf(@ALuint int effect, @ALenum int param, float value); + + @StripPostfix("values") + @ALvoid + void alEffectfv(@ALuint int effect, @ALenum int param, @Check("1") @Const FloatBuffer values); + + @ALvoid + void alGetEffecti(@ALuint int effect, @ALenum int param, @Result int value); + + @StripPostfix("intdata") + @ALvoid + void alGetEffectiv(@ALuint int effect, @ALenum int param, @OutParameter @Check("1") IntBuffer intdata); + + @ALvoid + void alGetEffectf(@ALuint int effect, @ALenum int param, @Result float value); + + @StripPostfix("floatdata") + @ALvoid + void alGetEffectfv(@ALuint int effect, @ALenum int param, @OutParameter @Check("1") FloatBuffer floatdata); + + // Filter object functions + @ALvoid + void alGenFilters(@AutoSize("filters") @ALsizei int n, @OutParameter @ALuint IntBuffer filters); + + @Alternate(value = "alGenFilters", nativeAlt = true) + @ALvoid + void alGenFilters2(@Constant("1") @ALsizei int n, @Result @ALuint int filter); + + @ALvoid + void alDeleteFilters(@AutoSize("filters") @ALsizei int n, @OutParameter @ALuint IntBuffer filters); + + @Alternate(value = "alDeleteFilters", nativeAlt = true) + @ALvoid + void alDeleteFilters2(@Constant("1") @ALsizei int n, @Indirect @ALuint int filter); + + boolean alIsFilter(@ALuint int filter); + + @ALvoid + void alFilteri(@ALuint int filter, @ALenum int param, int value); + + @StripPostfix("values") + @ALvoid + void alFilteriv(@ALuint int filter, @ALenum int param, @Check("1") @Const IntBuffer values); + + @ALvoid + void alFilterf(@ALuint int filter, @ALenum int param, float value); + + @StripPostfix("values") + @ALvoid + void alFilterfv(@ALuint int filter, @ALenum int param, @Check("1") @Const FloatBuffer values); + + @ALvoid + void alGetFilteri(@ALuint int filter, @ALenum int param, @Result int value); + + @StripPostfix("intdata") + @ALvoid + void alGetFilteriv(@ALuint int filter, @ALenum int param, @OutParameter @Check("1") IntBuffer intdata); + + @ALvoid + void alGetFilterf(@ALuint int filter, @ALenum int param, @Result float value); + + @StripPostfix("floatdata") + @ALvoid + void alGetFilterfv(@ALuint int filter, @ALenum int param, @OutParameter @Check("1") FloatBuffer floatdata); + + // Source property value ranges and defaults + float AL_MIN_AIR_ABSORPTION_FACTOR = 0.0f; + float AL_MAX_AIR_ABSORPTION_FACTOR = 10.0f; + float AL_DEFAULT_AIR_ABSORPTION_FACTOR = 0.0f; + float AL_MIN_ROOM_ROLLOFF_FACTOR = 0.0f; + float AL_MAX_ROOM_ROLLOFF_FACTOR = 10.0f; + float AL_DEFAULT_ROOM_ROLLOFF_FACTOR = 0.0f; + float AL_MIN_CONE_OUTER_GAINHF = 0.0f; + float AL_MAX_CONE_OUTER_GAINHF = 1.0f; + float AL_DEFAULT_CONE_OUTER_GAINHF = 1.0f; + int AL_MIN_DIRECT_FILTER_GAINHF_AUTO = AL10.AL_FALSE; + int AL_MAX_DIRECT_FILTER_GAINHF_AUTO = AL10.AL_TRUE; + int AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO = AL10.AL_TRUE; + int AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO = AL10.AL_FALSE; + int AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO = AL10.AL_TRUE; + int AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO = AL10.AL_TRUE; + int AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO = AL10.AL_FALSE; + int AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO = AL10.AL_TRUE; + int AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO = AL10.AL_TRUE; + + // Listener property value ranges and defaults + float AL_MIN_METERS_PER_UNIT = Float.MIN_VALUE; + float AL_MAX_METERS_PER_UNIT = Float.MAX_VALUE; + float AL_DEFAULT_METERS_PER_UNIT = 1.0f; + + // Effect parameter ranges and defaults + // Reverb + float AL_REVERB_MIN_DENSITY = 0.0f; + float AL_REVERB_MAX_DENSITY = 1.0f; + float AL_REVERB_DEFAULT_DENSITY = 1.0f; + float AL_REVERB_MIN_DIFFUSION = 0.0f; + float AL_REVERB_MAX_DIFFUSION = 1.0f; + float AL_REVERB_DEFAULT_DIFFUSION = 1.0f; + float AL_REVERB_MIN_GAIN = 0.0f; + float AL_REVERB_MAX_GAIN = 1.0f; + float AL_REVERB_DEFAULT_GAIN = 0.32f; + float AL_REVERB_MIN_GAINHF = 0.0f; + float AL_REVERB_MAX_GAINHF = 1.0f; + float AL_REVERB_DEFAULT_GAINHF = 0.89f; + float AL_REVERB_MIN_DECAY_TIME = 0.1f; + float AL_REVERB_MAX_DECAY_TIME = 20.0f; + float AL_REVERB_DEFAULT_DECAY_TIME = 1.49f; + float AL_REVERB_MIN_DECAY_HFRATIO = 0.1f; + float AL_REVERB_MAX_DECAY_HFRATIO = 2.0f; + float AL_REVERB_DEFAULT_DECAY_HFRATIO = 0.83f; + float AL_REVERB_MIN_REFLECTIONS_GAIN = 0.0f; + float AL_REVERB_MAX_REFLECTIONS_GAIN = 3.16f; + float AL_REVERB_DEFAULT_REFLECTIONS_GAIN = 0.05f; + float AL_REVERB_MIN_REFLECTIONS_DELAY = 0.0f; + float AL_REVERB_MAX_REFLECTIONS_DELAY = 0.3f; + float AL_REVERB_DEFAULT_REFLECTIONS_DELAY = 0.007f; + float AL_REVERB_MIN_LATE_REVERB_GAIN = 0.0f; + float AL_REVERB_MAX_LATE_REVERB_GAIN = 10.0f; + float AL_REVERB_DEFAULT_LATE_REVERB_GAIN = 1.26f; + float AL_REVERB_MIN_LATE_REVERB_DELAY = 0.0f; + float AL_REVERB_MAX_LATE_REVERB_DELAY = 0.1f; + float AL_REVERB_DEFAULT_LATE_REVERB_DELAY = 0.011f; + float AL_REVERB_MIN_AIR_ABSORPTION_GAINHF = 0.892f; + float AL_REVERB_MAX_AIR_ABSORPTION_GAINHF = 1.0f; + float AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF = 0.994f; + float AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR = 0.0f; + float AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR = 10.0f; + float AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR = 0.0f; + int AL_REVERB_MIN_DECAY_HFLIMIT = AL10.AL_FALSE; + int AL_REVERB_MAX_DECAY_HFLIMIT = AL10.AL_TRUE; + int AL_REVERB_DEFAULT_DECAY_HFLIMIT = AL10.AL_TRUE; + // EAX reverb + float AL_EAXREVERB_MIN_DENSITY = 0.0f; + float AL_EAXREVERB_MAX_DENSITY = 1.0f; + float AL_EAXREVERB_DEFAULT_DENSITY = 1.0f; + float AL_EAXREVERB_MIN_DIFFUSION = 0.0f; + float AL_EAXREVERB_MAX_DIFFUSION = 1.0f; + float AL_EAXREVERB_DEFAULT_DIFFUSION = 1.0f; + float AL_EAXREVERB_MIN_GAIN = 0.0f; + float AL_EAXREVERB_MAX_GAIN = 1.0f; + float AL_EAXREVERB_DEFAULT_GAIN = 0.32f; + float AL_EAXREVERB_MIN_GAINHF = 0.0f; + float AL_EAXREVERB_MAX_GAINHF = 1.0f; + float AL_EAXREVERB_DEFAULT_GAINHF = 0.89f; + float AL_EAXREVERB_MIN_GAINLF = 0.0f; + float AL_EAXREVERB_MAX_GAINLF = 1.0f; + float AL_EAXREVERB_DEFAULT_GAINLF = 1.0f; + float AL_EAXREVERB_MIN_DECAY_TIME = 0.1f; + float AL_EAXREVERB_MAX_DECAY_TIME = 20.0f; + float AL_EAXREVERB_DEFAULT_DECAY_TIME = 1.49f; + float AL_EAXREVERB_MIN_DECAY_HFRATIO = 0.1f; + float AL_EAXREVERB_MAX_DECAY_HFRATIO = 2.0f; + float AL_EAXREVERB_DEFAULT_DECAY_HFRATIO = 0.83f; + float AL_EAXREVERB_MIN_DECAY_LFRATIO = 0.1f; + float AL_EAXREVERB_MAX_DECAY_LFRATIO = 2.0f; + float AL_EAXREVERB_DEFAULT_DECAY_LFRATIO = 1.0f; + float AL_EAXREVERB_MIN_REFLECTIONS_GAIN = 0.0f; + float AL_EAXREVERB_MAX_REFLECTIONS_GAIN = 3.16f; + float AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN = 0.05f; + float AL_EAXREVERB_MIN_REFLECTIONS_DELAY = 0.0f; + float AL_EAXREVERB_MAX_REFLECTIONS_DELAY = 0.3f; + float AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY = 0.007f; + float AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ = 0.0f; + float AL_EAXREVERB_MIN_LATE_REVERB_GAIN = 0.0f; + float AL_EAXREVERB_MAX_LATE_REVERB_GAIN = 10.0f; + float AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN = 1.26f; + float AL_EAXREVERB_MIN_LATE_REVERB_DELAY = 0.0f; + float AL_EAXREVERB_MAX_LATE_REVERB_DELAY = 0.1f; + float AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY = 0.011f; + float AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ = 0.0f; + float AL_EAXREVERB_MIN_ECHO_TIME = 0.075f; + float AL_EAXREVERB_MAX_ECHO_TIME = 0.25f; + float AL_EAXREVERB_DEFAULT_ECHO_TIME = 0.25f; + float AL_EAXREVERB_MIN_ECHO_DEPTH = 0.0f; + float AL_EAXREVERB_MAX_ECHO_DEPTH = 1.0f; + float AL_EAXREVERB_DEFAULT_ECHO_DEPTH = 0.0f; + float AL_EAXREVERB_MIN_MODULATION_TIME = 0.04f; + float AL_EAXREVERB_MAX_MODULATION_TIME = 4.0f; + float AL_EAXREVERB_DEFAULT_MODULATION_TIME = 0.25f; + float AL_EAXREVERB_MIN_MODULATION_DEPTH = 0.0f; + float AL_EAXREVERB_MAX_MODULATION_DEPTH = 1.0f; + float AL_EAXREVERB_DEFAULT_MODULATION_DEPTH = 0.0f; + float AL_EAXREVERB_MIN_AIR_ABSORPTION_GAINHF = 0.892f; + float AL_EAXREVERB_MAX_AIR_ABSORPTION_GAINHF = 1.0f; + float AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF = 0.994f; + float AL_EAXREVERB_MIN_HFREFERENCE = 1000.0f; + float AL_EAXREVERB_MAX_HFREFERENCE = 20000.0f; + float AL_EAXREVERB_DEFAULT_HFREFERENCE = 5000.0f; + float AL_EAXREVERB_MIN_LFREFERENCE = 20.0f; + float AL_EAXREVERB_MAX_LFREFERENCE = 1000.0f; + float AL_EAXREVERB_DEFAULT_LFREFERENCE = 250.0f; + float AL_EAXREVERB_MIN_ROOM_ROLLOFF_FACTOR = 0.0f; + float AL_EAXREVERB_MAX_ROOM_ROLLOFF_FACTOR = 10.0f; + float AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR = 0.0f; + int AL_EAXREVERB_MIN_DECAY_HFLIMIT = AL10.AL_FALSE; + int AL_EAXREVERB_MAX_DECAY_HFLIMIT = AL10.AL_TRUE; + int AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT = AL10.AL_TRUE; + // Chorus + int AL_CHORUS_WAVEFORM_SINUSOID = 0; + int AL_CHORUS_WAVEFORM_TRIANGLE = 1; + int AL_CHORUS_MIN_WAVEFORM = 0; + int AL_CHORUS_MAX_WAVEFORM = 1; + int AL_CHORUS_DEFAULT_WAVEFORM = 1; + int AL_CHORUS_MIN_PHASE = -180; + int AL_CHORUS_MAX_PHASE = 180; + int AL_CHORUS_DEFAULT_PHASE = 90; + float AL_CHORUS_MIN_RATE = 0.0f; + float AL_CHORUS_MAX_RATE = 10.0f; + float AL_CHORUS_DEFAULT_RATE = 1... [truncated message content] |
From: <ma...@us...> - 2010-05-24 21:32:30
|
Revision: 3346 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3346&view=rev Author: matzon Date: 2010-05-24 21:32:23 +0000 (Mon, 24 May 2010) Log Message: ----------- Upgrading to latest OpenAL-Soft (1.12+) Modified Paths: -------------- trunk/LWJGL/libs/linux/libopenal.so trunk/LWJGL/libs/linux/libopenal64.so trunk/LWJGL/libs/solaris/libopenal.so trunk/LWJGL/libs/windows/OpenAL32.dll trunk/LWJGL/libs/windows/OpenAL64.dll Added Paths: ----------- trunk/LWJGL/libs/solaris/libopenal64.so Modified: trunk/LWJGL/libs/linux/libopenal.so =================================================================== (Binary files differ) Modified: trunk/LWJGL/libs/linux/libopenal64.so =================================================================== (Binary files differ) Modified: trunk/LWJGL/libs/solaris/libopenal.so =================================================================== (Binary files differ) Added: trunk/LWJGL/libs/solaris/libopenal64.so =================================================================== (Binary files differ) Property changes on: trunk/LWJGL/libs/solaris/libopenal64.so ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/LWJGL/libs/windows/OpenAL32.dll =================================================================== (Binary files differ) Modified: trunk/LWJGL/libs/windows/OpenAL64.dll =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-05-24 21:09:26
|
Revision: 3345 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3345&view=rev Author: matzon Date: 2010-05-24 21:09:19 +0000 (Mon, 24 May 2010) Log Message: ----------- misc uncommitted jnlp stuff... Modified Paths: -------------- trunk/LWJGL/platform_build/build-webstart.xml Modified: trunk/LWJGL/platform_build/build-webstart.xml =================================================================== --- trunk/LWJGL/platform_build/build-webstart.xml 2010-05-22 16:53:49 UTC (rev 3344) +++ trunk/LWJGL/platform_build/build-webstart.xml 2010-05-24 21:09:19 UTC (rev 3345) @@ -7,7 +7,7 @@ </antcall> </target> - <target name="webstart_demo-release" depends="jars"> + <target name="webstart_demo-release"> <input message="Please type the password for the keystore" addproperty="sign.pwd"/> <antcall target="-webstart_demo"> @@ -25,6 +25,8 @@ <!-- unzip common files --> <unzip src="${lwjgl.dist}/lwjgl-${lwjgl.version}.zip" dest="${lwjgl.temp}/jnlp/temp" overwrite="true"/> + <copy file="${lwjgl.lib}/lwjgl_test.jar" tofile="${lwjgl.temp}/jnlp/temp/lwjgl-${lwjgl.version}/lwjgl_test.jar"/> + <copy file="${lwjgl.lib}/lwjgl_util.jar" tofile="${lwjgl.temp}/jnlp/temp/lwjgl-${lwjgl.version}/lwjgl_util.jar"/> <!-- move files to unified structure --> <move todir="${lwjgl.temp}/jnlp/temp"> @@ -36,16 +38,55 @@ <!-- move relevant files to root --> <move todir="${lwjgl.temp}/jnlp/" flatten="true"> <fileset dir="${lwjgl.temp}/jnlp/temp"> - <include name="**/**.jar"/> + <include name="**/jinput.jar"/> + <include name="**/lwjgl*.jar"/> </fileset> </move> + <!-- update Trusted-Library --> + <jar destfile="${lwjgl.temp}/jnlp/jinput.jar" update="true"> + <manifest> + <attribute name="Sealed" value="true"/> + <attribute name="Trusted-Library" value="true"/> + </manifest> + </jar> + + <jar destfile="${lwjgl.temp}/jnlp/lwjgl_util.jar" update="true"> + <manifest> + <attribute name="Sealed" value="true"/> + <attribute name="Trusted-Library" value="true"/> + </manifest> + </jar> + <!-- create native jars --> - <jar destfile="${lwjgl.temp}/jnlp/native_windows.jar" basedir="${lwjgl.temp}/jnlp/temp/native/windows"/> - <jar destfile="${lwjgl.temp}/jnlp/native_linux.jar" basedir="${lwjgl.temp}/jnlp/temp/native/linux"/> - <jar destfile="${lwjgl.temp}/jnlp/native_macosx.jar" basedir="${lwjgl.temp}/jnlp/temp/native/macosx"/> - <jar destfile="${lwjgl.temp}/jnlp/native_solaris.jar" basedir="${lwjgl.temp}/jnlp/temp/native/solaris"/> + <jar destfile="${lwjgl.temp}/jnlp/native_windows.jar" basedir="${lwjgl.temp}/jnlp/temp/native/windows"> + <manifest> + <attribute name="Sealed" value="true"/> + <attribute name="Trusted-Library" value="true"/> + </manifest> + </jar> + <jar destfile="${lwjgl.temp}/jnlp/native_linux.jar" basedir="${lwjgl.temp}/jnlp/temp/native/linux"> + <manifest> + <attribute name="Sealed" value="true"/> + <attribute name="Trusted-Library" value="true"/> + </manifest> + </jar> + + <jar destfile="${lwjgl.temp}/jnlp/native_macosx.jar" basedir="${lwjgl.temp}/jnlp/temp/native/macosx"> + <manifest> + <attribute name="Sealed" value="true"/> + <attribute name="Trusted-Library" value="true"/> + </manifest> + </jar> + + <jar destfile="${lwjgl.temp}/jnlp/native_solaris.jar" basedir="${lwjgl.temp}/jnlp/temp/native/solaris"> + <manifest> + <attribute name="Sealed" value="true"/> + <attribute name="Trusted-Library" value="true"/> + </manifest> + </jar> + <!-- create media jar --> <jar destfile="${lwjgl.temp}/jnlp/media.jar" basedir="${lwjgl.res}"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2010-05-22 16:53:55
|
Revision: 3344 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3344&view=rev Author: spasi Date: 2010-05-22 16:53:49 +0000 (Sat, 22 May 2010) Log Message: ----------- Updated ContextAttribs to not default to the core profile for 3.2+ versions. Updated VersionTest (version 20 of ARB_create_context). Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/ContextAttribs.java trunk/LWJGL/src/java/org/lwjgl/test/opengl/VBOIndexTest.java trunk/LWJGL/src/java/org/lwjgl/test/opengl/VersionTest.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/ContextAttribs.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/ContextAttribs.java 2010-05-21 22:55:11 UTC (rev 3343) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/ContextAttribs.java 2010-05-22 16:53:49 UTC (rev 3344) @@ -37,16 +37,16 @@ import java.nio.IntBuffer; /** - * This class represents the context attributes passed to CreateContextAttribs of the XGL_create_context extension. + * This class represents the context attributes passed to CreateContextAttribs of the ARB_create_context and + * ARB_create_context_profile extensions. * These attributes can be used to indicate at context creation which OpenGL interface will be used. This includes the * OpenGL version, the layer plane on which rendering takes place and also optional debug and forward combatibility modes. - * (read the XGL_create_context spec for details) + * (read the ARB_create_context spec for details) * <p/> * Use of this class is optional. If an OpenGL context is created without passing an instance of this class - * (or XGL_create_context is not supported), the old context creation code will be used. Use of ContextAttribs is required - * to create an OpenGL 3.0 or newer context. Support for debug and forward compatible mobes is not guaranteed by the OpenGL - * implementation. Developers may encounter debug contexts being the same as non-debug contexts or forward compatible - * contexts having support for deprecated functionality. + * (or ARB_create_context is not supported), the old context creation code will be used. Support for debug and forward + * compatible mobes is not guaranteed by the OpenGL implementation. Developers may encounter debug contexts being the same + * as non-debug contexts or forward compatible contexts having support for deprecated functionality. * <p/> * If the forwardCompatible * attribute is used, LWJGL will not load the deprecated functionality (as defined in the OpenGL 3.0 specification). This @@ -72,10 +72,10 @@ } public ContextAttribs(final int majorVersion, final int minorVersion) { - if ( majorVersion < 0 || - 3 < majorVersion || + if ( majorVersion < 0 || 4 < majorVersion || minorVersion < 0 || - (majorVersion == 3 && 2 < minorVersion) || + (majorVersion == 4 && 0 < minorVersion) || + (majorVersion == 3 && 3 < minorVersion) || (majorVersion == 2 && 1 < minorVersion) || (majorVersion == 1 && 5 < minorVersion) ) throw new IllegalArgumentException("Invalid OpenGL version specified: " + majorVersion + '.' + minorVersion); @@ -88,7 +88,7 @@ this.debug = false; this.forwardCompatible = false; - this.profileCore = 3 < majorVersion || (majorVersion == 3 && 2 <= minorVersion) ? true : false; + this.profileCore = false; this.profileCompatibility = false; } Modified: trunk/LWJGL/src/java/org/lwjgl/test/opengl/VBOIndexTest.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opengl/VBOIndexTest.java 2010-05-21 22:55:11 UTC (rev 3343) +++ trunk/LWJGL/src/java/org/lwjgl/test/opengl/VBOIndexTest.java 2010-05-22 16:53:49 UTC (rev 3344) @@ -179,6 +179,7 @@ mapped_indices_buffer); if ( new_mapped_buffer != mapped_indices_buffer ) mapped_indices_int_buffer = new_mapped_buffer.order(ByteOrder.nativeOrder()).asIntBuffer(); + mapped_indices_buffer = new_mapped_buffer; mapped_float_buffer.rewind(); vertices.rewind(); Modified: trunk/LWJGL/src/java/org/lwjgl/test/opengl/VersionTest.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opengl/VersionTest.java 2010-05-21 22:55:11 UTC (rev 3343) +++ trunk/LWJGL/src/java/org/lwjgl/test/opengl/VersionTest.java 2010-05-22 16:53:49 UTC (rev 3344) @@ -29,13 +29,6 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * Created by LWJGL. - * User: spasi - * Date: 2009-04-04 - * Time: 21:20:24 pm - */ - package org.lwjgl.test.opengl; import org.lwjgl.LWJGLException; @@ -44,6 +37,11 @@ import java.util.StringTokenizer; import java.util.regex.Pattern; +/** + * Tests the ARB_create_context extension through the use of the ContextAttribs class. + * + * @author Spasi + */ public final class VersionTest { private VersionTest() { @@ -110,46 +108,105 @@ System.out.println("\n---------\n"); + System.out.println("Requested " + ca); + final String version = GL11.glGetString(GL11.GL_VERSION); - System.out.print("GL Version requested: " + majorInput + '.' + minorInput); - if ( ca.isProfileCore() ) - System.out.print(" - Core Profile"); - else if ( ca.isProfileCompatibility() ) - System.out.print(" - Compatibility Profile"); - System.out.println("\nGL Version returned : " + version); + boolean deprecated = false; + try { + GL11.glVertex3f(0.0f, 0.0f, 0.0f); + deprecated = true; + } catch (Throwable t) {} final StringTokenizer version_tokenizer = new StringTokenizer(version, ". "); int majorVersion = Integer.parseInt(version_tokenizer.nextToken()); int minorVersion = Integer.parseInt(version_tokenizer.nextToken()); - if ( majorVersion != majorInput || minorVersion != minorInput ) { - if ( majorInput == 1 && minorInput == 0 ) - System.out.println("\tThe maximum supported version has been returned. The driver is well-behaved. :)"); - else if ( majorInput < 3 && majorVersion < 3 ) - System.out.println("\tThe maximum supported version pre-3.0 has been returned. The driver is well-behaved. :)"); - else - System.out.println("\tThe requested version was not returned. The driver is buggy! :("); - } else - System.out.println("\tThe requested version was returned. :)"); + final boolean compatibilityProfile; + final boolean coreProfile; - if ( ca.isProfileCompatibility() && !GLContext.getCapabilities().GL_ARB_compatibility ) - System.out.println("\tThe driver does not support the Compatibility Profile."); + if ( 3 < majorVersion || (majorVersion == 3 && 2 <= minorVersion) ) { + final int profileMask = GL11.glGetInteger(GL32.GL_CONTEXT_PROFILE_MASK); - System.out.println("\n---------\n"); + compatibilityProfile = (profileMask & GL32.GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) != 0; + coreProfile = (profileMask & GL32.GL_CONTEXT_CORE_PROFILE_BIT) != 0; + } else { + compatibilityProfile = false; + coreProfile = false; + } - System.out.println("Debug mode: " + ca.isDebug()); - System.out.println("Forward compatible mode: " + ca.isForwardCompatible()); - System.out.println("ARB_compatibility: " + GLContext.getCapabilities().GL_ARB_compatibility); - try { - GL11.glVertex3f(0.0f, 0.0f, 0.0f); - System.out.println("Deprecated functionality present: " + true); - } catch (Throwable t) { - System.out.println("Deprecated functionality present: " + false); - if ( GLContext.getCapabilities().GL_ARB_compatibility ) { - System.out.println("\tARB_compatibility is present, but LWJGL has enabled pseudo-forward compatible mode."); - } + System.out.println("\nGL_VERSION returned : " + version); + System.out.println("\tCore profile: " + coreProfile); + System.out.println("\tCompatibility profile: " + compatibilityProfile); + System.out.println("ARB_compatibility present: " + GLContext.getCapabilities().GL_ARB_compatibility); + System.out.println("Deprecated functionality present: " + deprecated); + if ( !deprecated && GLContext.getCapabilities().GL_ARB_compatibility ) + System.out.println("\tARB_compatibility is present, but LWJGL has enabled pseudo-forward compatible mode."); + + System.out.println("\n---------"); + + boolean success = false; + boolean check; + if ( majorInput < 3 || minorInput == 0 ) { + System.out.println("\nA version less than or equal to 3.0 is requested, the context\n" + + "returned may implement any of the following versions:"); + + System.out.println("\n1) Any version no less than that requested and no greater than 3.0."); + check = (majorInput < majorVersion || (majorInput == majorVersion && minorInput <= minorVersion)) // Satisfies requested version + && (majorVersion < 3 || (majorVersion == 3 && minorVersion == 0)); // 3.0 or earlier + System.out.println("\t" + check); + success |= check; + + System.out.println("\n2) Version 3.1, if the GL_ARB_compatibility extension is also implemented."); + check = majorVersion == 3 && minorVersion == 1 && GLContext.getCapabilities().GL_ARB_compatibility; + System.out.println("\t" + check); + success |= check; + + System.out.println("\n3) The compatibility profile of version 3.2 or greater."); + check = compatibilityProfile; // No need to check version, profiles are only available with 3.2+. + System.out.println("\t" + check); + success |= check; + + System.out.println("\nTEST " + (success ? "SUCCEEDED" : "FAILED")); + if ( !success && ca.isForwardCompatible() ) + System.out.println("\t(probably because the forward compatible flag was set)"); + } else if ( majorInput == 3 && minorInput == 1 ) { + System.out.println("\nVersion 3.1 is requested, the context returned may implement\n" + + "any of the following versions:"); + + System.out.println("\n1) Version 3.1. The GL_ARB_compatibility extension may or may not\n" + + "be implemented, as determined by the implementation."); + check = majorVersion == 3 && minorVersion == 1; + System.out.println("\t" + check); + success |= check; + + System.out.println("\n2) The core profile of version 3.2 or greater."); + check = coreProfile; // No need to check version, profiles are only available with 3.2+. + System.out.println("\t" + check); + success |= check; + + System.out.println("\nTEST " + (success ? "SUCCEEDED" : "FAILED")); + } else { + System.out.println("\nVersion 3.2 or greater is requested, the context returned may\n" + + "implement any of the following versions:"); + + System.out.println("\n1) The requested profile of the requested version."); + check = majorInput == majorVersion && minorInput == minorVersion + && (!ca.isProfileCompatibility() || compatibilityProfile) + && (!ca.isProfileCore() || coreProfile); + System.out.println("\t" + check); + success |= check; + + System.out.println("\n2) The requested profile of any later version, so long as no\n" + + "features have been removed from that later version and profile."); + check = majorInput < majorVersion || (majorInput == majorVersion && minorInput < minorVersion) + && (!ca.isProfileCompatibility() || compatibilityProfile) + && (!ca.isProfileCore() || coreProfile); + System.out.println("\t" + check); + success |= check; + + System.out.println("\nTEST " + (success ? "SUCCEEDED" : "FAILED")); } } @@ -174,12 +231,14 @@ private static void argsError(final String msg) { System.out.println("\nInvalid arguments error: " + msg); - System.out.println("\nUsage: VersionTest <majorVersion> <minorVersion> {<layer>, 'debug', 'fc'}:\n"); + System.out.println("\nUsage: VersionTest <majorVersion> <minorVersion> {'core'|'compatibility', <layer>, 'debug', 'fc'}:\n"); System.out.println("majorVersion\t- Major OpenGL version."); System.out.println("majorVersion\t- Minor OpenGL version."); + System.out.println("core\t- Sets the Core Profile bit (optional, requires 3.2+)."); + System.out.println("compatibility\t- Sets the Compatibility Profile bit (optional, requires 3.2+)."); System.out.println("layer\t- Layer plane (optional)."); System.out.println("debug\t- Enables debug mode (optional)."); - System.out.println("fc\t- Enables forward compatibility mode (optional)."); + System.out.println("fc\t- Enables forward compatibility mode (optional, requires 3.0+)."); cleanup(); System.exit(-1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2010-05-21 22:55:17
|
Revision: 3343 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3343&view=rev Author: kappa1 Date: 2010-05-21 22:55:11 +0000 (Fri, 21 May 2010) Log Message: ----------- small cleanup. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java Modified: trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java 2010-05-21 22:26:23 UTC (rev 3342) +++ trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java 2010-05-21 22:55:11 UTC (rev 3343) @@ -339,7 +339,6 @@ if (lwjglApplet != null) { lwjglApplet.stop(); } - super.stop(); } /* @@ -352,8 +351,6 @@ progressbar = null; logo = null; - - super.destroy(); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2010-05-21 22:26:30
|
Revision: 3342 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3342&view=rev Author: kappa1 Date: 2010-05-21 22:26:23 +0000 (Fri, 21 May 2010) Log Message: ----------- XRandr add missing casts Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-05-21 22:12:57 UTC (rev 3341) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-05-21 22:26:23 UTC (rev 3342) @@ -97,7 +97,7 @@ screens.put( name, possibles.toArray( new Screen[ possibles.size() ] ) ); - current = ( Screen[] ) currentList.toArray( new Screen[ currentList.size() ] ); + current = (Screen[]) currentList.toArray(new Screen[currentList.size()]); } catch( Throwable e ) { @@ -116,7 +116,7 @@ { populate(); - return current.clone(); + return (Screen[]) current.clone(); } /** @@ -203,7 +203,7 @@ { populate(); // clone the array to prevent held copies being altered - return ( ( Screen[] ) screens.get( name ) ).clone(); + return (Screen[]) ((Screen[]) screens.get(name)).clone(); } private static final Pattern SCREEN_PATTERN1 = @@ -303,7 +303,7 @@ argList.add( xPos + "x" + yPos ); } - @Override + //@Override public String toString() { return name + " " + width + "x" + height + " @ " + xPos + "x" + yPos; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2010-05-21 22:13:06
|
Revision: 3341 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3341&view=rev Author: kappa1 Date: 2010-05-21 22:12:57 +0000 (Fri, 21 May 2010) Log Message: ----------- Further XRandR fixes, it now catches throwable in populate(), if there are any problems in parsing the xrandr output we revert to LWJGL's regular behaviour. All output now goes to LWJGLUtil.log() instead of the out.println and err.println. Credit to Ryanm for patch. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-05-20 18:11:47 UTC (rev 3340) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-05-21 22:12:57 UTC (rev 3341) @@ -1,33 +1,28 @@ /* - * Copyright (c) 2002-2010 LWJGL Project - * All rights reserved. - * + * Copyright (c) 2002-2010 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, + * 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. + * 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.opengl; @@ -42,60 +37,74 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.lwjgl.LWJGLUtil; + /** * Utility for working with the xrandr commmand-line utility. Assumes * xrandr v1.2 or higher. * * @author ryanm */ -public class XRandR { +public class XRandR +{ + private static Screen[] current; - private static Screen[] current; + private static Map /* <String, Screen[]> */screens; - private static Map /* <String, Screen[]> */screens; - - private static void populate() { - if (screens == null) { + private static void populate() + { + if( screens == null ) + { screens = new HashMap/* <String, Screen[]> */(); // ProcessBuilder pb = new ProcessBuilder( "xrandr", "-q" ); // pb.redirectErrorStream(); - try { + try + { // Process p= pb.start(); - Process p = Runtime.getRuntime().exec(new String[] { "xrandr", "-q"}); + Process p = Runtime.getRuntime().exec( new String[] { "xrandr", "-q" } ); List/* <Screen> */currentList = new ArrayList/* <Screen> */(); List/* <Screen> */possibles = new ArrayList/* <Screen> */(); String name = null; - BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); + BufferedReader br = new BufferedReader( new InputStreamReader( p.getInputStream() ) ); String line; - while ((line = br.readLine()) != null) { + while( ( line = br.readLine() ) != null ) + { line = line.trim(); - String[] sa = line.split("\\s+"); + String[] sa = line.split( "\\s+" ); - if (sa[1].equals("connected")) { + if( sa[ 1 ].equals( "connected" ) ) + { // found a new screen block - if (name != null) { - screens.put(name, possibles.toArray(new Screen[possibles.size()])); + if( name != null ) + { + screens.put( name, possibles.toArray( new Screen[ possibles.size() ] ) ); possibles.clear(); } - name = sa[0]; + name = sa[ 0 ]; // record the current config - parseScreen(currentList, name, sa[2]); - } else if (Pattern.matches("\\d*x\\d*", sa[0])) { + parseScreen( currentList, name, sa[ 2 ] ); + } + else if( Pattern.matches( "\\d*x\\d*", sa[ 0 ] ) ) + { // found a new mode line - parseScreen(possibles, name, sa[0]); + parseScreen( possibles, name, sa[ 0 ] ); } } - screens.put(name, possibles.toArray(new Screen[possibles.size()])); + screens.put( name, possibles.toArray( new Screen[ possibles.size() ] ) ); - current = (Screen[]) currentList.toArray(new Screen[currentList.size()]); - } catch (IOException e) { - e.printStackTrace(); + current = ( Screen[] ) currentList.toArray( new Screen[ currentList.size() ] ); } + catch( Throwable e ) + { + LWJGLUtil.log( "Exception in XRandR.populate(): " + e.getMessage() ); + screens.clear(); + current = new Screen[ 0 ]; + } } } @@ -103,71 +112,86 @@ * @return The current screen configuration, or an empty array if * xrandr is not supported */ - public static Screen[] getConfiguration() { + public static Screen[] getConfiguration() + { populate(); - return (Screen[]) current.clone(); + return current.clone(); } /** * @param screens * The desired screen set, may not be <code>null</code> + * @throws IllegalArgumentException + * if no screens are specified */ - public static void setConfiguration(Screen[]/* ... */screens) { - if (screens.length == 0) { - throw new IllegalArgumentException("Must specify at least one screen"); + public static void setConfiguration( Screen[]/* ... */screens ) + { + if( screens.length == 0 ) + { + throw new IllegalArgumentException( "Must specify at least one screen" ); } List/* <String> */cmd = new ArrayList/* <String> */(); - cmd.add("xrandr"); + cmd.add( "xrandr" ); // switch off those in the current set not in the new set - for (int i = 0; i < current.length; i++) { + for( int i = 0; i < current.length; i++ ) + { boolean found = false; - for (int j = 0; j < screens.length; j++) { - if (screens[j].name.equals(current[i].name)) { + for( int j = 0; j < screens.length; j++ ) + { + if( screens[ j ].name.equals( current[ i ].name ) ) + { found = true; break; } } - if (!found) { - cmd.add("--output"); - cmd.add(current[i].name); - cmd.add("--off"); + if( !found ) + { + cmd.add( "--output" ); + cmd.add( current[ i ].name ); + cmd.add( "--off" ); } } // set up new set - for (int i = 0; i < screens.length; i++) { - screens[i].getArgs(cmd); + for( int i = 0; i < screens.length; i++ ) + { + screens[ i ].getArgs( cmd ); } - try { + try + { // ProcessBuilder pb = new ProcessBuilder( cmd ); // pb.redirectErrorStream(); // Process p = pb.start(); - Process p = Runtime.getRuntime().exec((String[]) cmd.toArray(new String[cmd.size()])); + Process p = + Runtime.getRuntime().exec( ( String[] ) cmd.toArray( new String[ cmd.size() ] ) ); // no output is expected, but check anyway - BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); + BufferedReader br = new BufferedReader( new InputStreamReader( p.getInputStream() ) ); String line; - while ((line = br.readLine()) != null) { - System.out.println(line); + while( ( line = br.readLine() ) != null ) + { + LWJGLUtil.log( "Unexpected output from xrandr process: " + line ); } current = screens; - } catch (IOException e) { - e.printStackTrace(); } - + catch( IOException e ) + { + LWJGLUtil.log( "XRandR exception in setConfiguration(): " + e.getMessage() ); + } } /** * @return the name of connected screens, or an empty array if * xrandr is not supported */ - public static String[] getScreenNames() { + public static String[] getScreenNames() + { populate(); - return (String[]) screens.keySet().toArray(new String[screens.size()]); + return ( String[] ) screens.keySet().toArray( new String[ screens.size() ] ); } /** @@ -175,82 +199,93 @@ * @return the possible resolutions of the named screen, or * <code>null</code> if there is no such screen */ - public static Screen[] getResolutions(String name) { + public static Screen[] getResolutions( String name ) + { populate(); // clone the array to prevent held copies being altered - return (Screen[]) ((Screen[]) screens.get(name)).clone(); + return ( ( Screen[] ) screens.get( name ) ).clone(); } - - private static final Pattern SCREEN_PATTERN1 = Pattern.compile("^(\\d+)x(\\d+)\\+(\\d+)\\+(\\d+)$"); - private static final Pattern SCREEN_PATTERN2 = Pattern.compile("^(\\d+)x(\\d+)$"); - /** - * Parses a screen configuration and adds it to the list if it's valid. - * - * @param list - * the list to add the Screen to if it's valid - * @param name - * the name of this screen + private static final Pattern SCREEN_PATTERN1 = + Pattern.compile( "^(\\d+)x(\\d+)\\+(\\d+)\\+(\\d+)$" ); + + private static final Pattern SCREEN_PATTERN2 = Pattern.compile( "^(\\d+)x(\\d+)$" ); + + /** + * Parses a screen configuration and adds it to the list if it's + * valid. + * + * @param list + * the list to add the Screen to if it's valid + * @param name + * the name of this screen * @param conf * config string, format either widthxheight or * widthxheight+xPos+yPos - */ - private static void parseScreen(List /* <Screen> */ list, String name, String what) { - Matcher m = SCREEN_PATTERN1.matcher(what); - if(!m.matches()) { - m = SCREEN_PATTERN2.matcher(what); - if(!m.matches()) { - System.out.println("Did not match: " + what); - return; - } - } - int width = Integer.parseInt(m.group(1)); - int height = Integer.parseInt(m.group(2)); - int xpos, ypos; - if(m.groupCount() > 3) { - xpos = Integer.parseInt(m.group(3)); - ypos = Integer.parseInt(m.group(4)); - } else { - xpos = 0; - ypos = 0; - } - list.add(new Screen(name, width, height, xpos, ypos)); - } - + */ + private static void parseScreen( List /* <Screen> */list, String name, String what ) + { + Matcher m = SCREEN_PATTERN1.matcher( what ); + if( !m.matches() ) + { + m = SCREEN_PATTERN2.matcher( what ); + if( !m.matches() ) + { + System.out.println( "Did not match: " + what ); + return; + } + } + int width = Integer.parseInt( m.group( 1 ) ); + int height = Integer.parseInt( m.group( 2 ) ); + int xpos, ypos; + if( m.groupCount() > 3 ) + { + xpos = Integer.parseInt( m.group( 3 ) ); + ypos = Integer.parseInt( m.group( 4 ) ); + } + else + { + xpos = 0; + ypos = 0; + } + list.add( new Screen( name, width, height, xpos, ypos ) ); + } + /** * Encapsulates the configuration of a monitor. Resolution is * fixed, position is mutable * * @author ryanm */ - public static class Screen implements Cloneable { - + public static class Screen implements Cloneable + { /** * Name for this output */ - public final String name; + public final String name; /** * Width in pixels */ - public final int width; + public final int width; /** * Height in pixels */ - public final int height; + public final int height; /** * Position on the x-axis, in pixels */ - public int xPos = 0; + public int xPos = 0; /** * Position on the y-axis, in pixels */ - public int yPos = 0; + public int yPos = 0; - private Screen(String name, int width, int height, int xPos, int yPos) { + private Screen( String name, int width, int height, int xPos, int yPos ) + { this.name = name; this.width = width; this.height = height; @@ -258,17 +293,19 @@ this.yPos = yPos; } - private void getArgs(List/* <String> */argList) { - argList.add("--output"); - argList.add(name); - argList.add("--mode"); - argList.add(width + "x" + height); - argList.add("--pos"); - argList.add(xPos + "x" + yPos); + private void getArgs( List/* <String> */argList ) + { + argList.add( "--output" ); + argList.add( name ); + argList.add( "--mode" ); + argList.add( width + "x" + height ); + argList.add( "--pos" ); + argList.add( xPos + "x" + yPos ); } - // @Override - public String toString() { + @Override + public String toString() + { return name + " " + width + "x" + height + " @ " + xPos + "x" + yPos; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2010-05-20 18:11:54
|
Revision: 3340 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3340&view=rev Author: kappa1 Date: 2010-05-20 18:11:47 +0000 (Thu, 20 May 2010) Log Message: ----------- XrandR fix for parsing some screen sizes, credit to MatthiasM for providing patch. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-05-07 17:03:36 UTC (rev 3339) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-05-20 18:11:47 UTC (rev 3340) @@ -39,6 +39,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; import java.util.regex.Pattern; /** @@ -82,10 +83,10 @@ name = sa[0]; // record the current config - currentList.add(new Screen(name, sa[2])); + parseScreen(currentList, name, sa[2]); } else if (Pattern.matches("\\d*x\\d*", sa[0])) { // found a new mode line - possibles.add(new Screen(name, sa[0])); + parseScreen(possibles, name, sa[0]); } } @@ -179,7 +180,43 @@ // clone the array to prevent held copies being altered return (Screen[]) ((Screen[]) screens.get(name)).clone(); } + + private static final Pattern SCREEN_PATTERN1 = Pattern.compile("^(\\d+)x(\\d+)\\+(\\d+)\\+(\\d+)$"); + private static final Pattern SCREEN_PATTERN2 = Pattern.compile("^(\\d+)x(\\d+)$"); + /** + * Parses a screen configuration and adds it to the list if it's valid. + * + * @param list + * the list to add the Screen to if it's valid + * @param name + * the name of this screen + * @param conf + * config string, format either widthxheight or + * widthxheight+xPos+yPos + */ + private static void parseScreen(List /* <Screen> */ list, String name, String what) { + Matcher m = SCREEN_PATTERN1.matcher(what); + if(!m.matches()) { + m = SCREEN_PATTERN2.matcher(what); + if(!m.matches()) { + System.out.println("Did not match: " + what); + return; + } + } + int width = Integer.parseInt(m.group(1)); + int height = Integer.parseInt(m.group(2)); + int xpos, ypos; + if(m.groupCount() > 3) { + xpos = Integer.parseInt(m.group(3)); + ypos = Integer.parseInt(m.group(4)); + } else { + xpos = 0; + ypos = 0; + } + list.add(new Screen(name, width, height, xpos, ypos)); + } + /** * Encapsulates the configuration of a monitor. Resolution is * fixed, position is mutable @@ -213,24 +250,12 @@ */ public int yPos = 0; - /** - * @param name - * name of the screen - * @param conf - * config string, format either widthxheight or - * widthxheight+xPos+yPos - */ - private Screen(String name, String conf) { + private Screen(String name, int width, int height, int xPos, int yPos) { this.name = name; - - String[] sa = conf.split("\\D"); - width = Integer.parseInt(sa[0]); - height = Integer.parseInt(sa[1]); - - if (sa.length > 2) { - xPos = Integer.parseInt(sa[2]); - yPos = Integer.parseInt(sa[3]); - } + this.width = width; + this.height = height; + this.xPos = xPos; + this.yPos = yPos; } private void getArgs(List/* <String> */argList) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2010-05-07 17:03:44
|
Revision: 3339 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3339&view=rev Author: spasi Date: 2010-05-07 17:03:36 +0000 (Fri, 07 May 2010) Log Message: ----------- Fix for OpenAL debug builds. Added alternate methods for NV_fence. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/util/generator/Utils.java trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_fence.java Modified: trunk/LWJGL/src/java/org/lwjgl/util/generator/Utils.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/generator/Utils.java 2010-05-01 09:19:00 UTC (rev 3338) +++ trunk/LWJGL/src/java/org/lwjgl/util/generator/Utils.java 2010-05-07 17:03:36 UTC (rev 3339) @@ -166,7 +166,9 @@ return null; } + // DISABLED: We always generate indirect methods. (affects OpenAL only at the time of this change) public static boolean isMethodIndirect(boolean generate_error_checks, boolean context_specific, MethodDeclaration method) { + /* for (ParameterDeclaration param : method.getParameters()) { if (isAddressableType(param.getType()) || getParameterAutoAnnotation(param) != null || param.getAnnotation(Constant.class) != null) @@ -176,6 +178,8 @@ method.getAnnotation(CachedResult.class) != null || (generate_error_checks && method.getAnnotation(NoErrorCheck.class) == null) || context_specific; + */ + return true; } public static String getNativeQualifiedName(String qualified_name) { Modified: trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_fence.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_fence.java 2010-05-01 09:19:00 UTC (rev 3338) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_fence.java 2010-05-07 17:03:36 UTC (rev 3339) @@ -42,8 +42,15 @@ void glGenFencesNV(@AutoSize("piFences") @GLsizei int n, @OutParameter @GLuint IntBuffer piFences); + @Alternate("glGenFencesNV") + @GLreturn("piFences") + void glGenFencesNV2(@Constant("1") @GLsizei int n, @OutParameter @GLuint IntBuffer piFences); + void glDeleteFencesNV(@AutoSize("piFences") @GLsizei int n, @Const @GLuint IntBuffer piFences); + @Alternate("glDeleteFencesNV") + void glDeleteFencesNV(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtils.getBufferInt().put(0, fence), 0", keepParam = true) int fence); + void glSetFenceNV(@GLuint int fence, @GLenum int condition); boolean glTestFenceNV(@GLuint int fence); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2010-05-01 09:19:07
|
Revision: 3338 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3338&view=rev Author: spasi Date: 2010-05-01 09:19:00 +0000 (Sat, 01 May 2010) Log Message: ----------- Fixed PolygonStipple check. Modified Paths: -------------- trunk/LWJGL/src/templates/org/lwjgl/opengl/GL11.java Modified: trunk/LWJGL/src/templates/org/lwjgl/opengl/GL11.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/GL11.java 2010-04-29 17:37:18 UTC (rev 3337) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/GL11.java 2010-05-01 09:19:00 UTC (rev 3338) @@ -1147,7 +1147,7 @@ String glGetString(int name); @DeprecatedGL - void glGetPolygonStipple(@OutParameter @BufferObject(BufferKind.PackPBO) @Check("1024") @GLubyte ByteBuffer mask); + void glGetPolygonStipple(@OutParameter @BufferObject(BufferKind.PackPBO) @Check("128") @GLubyte ByteBuffer mask); @DeprecatedGL boolean glIsList(@GLuint int list); @@ -1252,7 +1252,7 @@ void glMatrixMode(@GLenum int mode); @DeprecatedGL - void glPolygonStipple(@BufferObject(BufferKind.UnpackPBO) @Check("1024") @Const @GLubyte ByteBuffer mask); + void glPolygonStipple(@BufferObject(BufferKind.UnpackPBO) @Check("128") @Const @GLubyte ByteBuffer mask); void glPolygonOffset(float factor, float units); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-04-29 17:37:26
|
Revision: 3337 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3337&view=rev Author: matzon Date: 2010-04-29 17:37:18 +0000 (Thu, 29 Apr 2010) Log Message: ----------- yes, we really should... Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java Modified: trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java 2010-04-26 21:52:59 UTC (rev 3336) +++ trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java 2010-04-29 17:37:18 UTC (rev 3337) @@ -467,7 +467,7 @@ } /** - * @return Current events delta x. Only valid when the mouse is grabbed. + * @return Current events delta x. */ public static int getEventDX() { synchronized (OpenGLPackageAccess.global_lock) { @@ -476,7 +476,7 @@ } /** - * @return Current events delta y. Only valid when the mouse is grabbed. + * @return Current events delta y. */ public static int getEventDY() { synchronized (OpenGLPackageAccess.global_lock) { @@ -485,7 +485,7 @@ } /** - * @return Current events absolute x. Only valid when the mouse is not grabbed. + * @return Current events absolute x. */ public static int getEventX() { synchronized (OpenGLPackageAccess.global_lock) { @@ -494,7 +494,7 @@ } /** - * @return Current events absolute y. Only valid when the mouse is not grabbed. + * @return Current events absolute y. */ public static int getEventY() { synchronized (OpenGLPackageAccess.global_lock) { @@ -550,7 +550,7 @@ } /** - * @return Movement on the x axis since last time getDX() was called. Only valid when the mouse is grabbed. + * @return Movement on the x axis since last time getDX() was called. */ public static int getDX() { synchronized (OpenGLPackageAccess.global_lock) { @@ -561,7 +561,7 @@ } /** - * @return Movement on the y axis since last time getDY() was called. Only valid when the mouse is grabbed. + * @return Movement on the y axis since last time getDY() was called. */ public static int getDY() { synchronized (OpenGLPackageAccess.global_lock) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-04-26 21:53:06
|
Revision: 3336 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3336&view=rev Author: matzon Date: 2010-04-26 21:52:59 +0000 (Mon, 26 Apr 2010) Log Message: ----------- use context classloader, since u19+u20 broke the old impl Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/util/WaveData.java Modified: trunk/LWJGL/src/java/org/lwjgl/util/WaveData.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/WaveData.java 2010-04-22 23:49:46 UTC (rev 3335) +++ trunk/LWJGL/src/java/org/lwjgl/util/WaveData.java 2010-04-26 21:52:59 UTC (rev 3336) @@ -108,7 +108,7 @@ * @return WaveData containing data, or null if a failure occured */ public static WaveData create(String path) { - return create(WaveData.class.getClassLoader().getResource(path)); + return create(Thread.currentThread().getContextClassLoader().getResource(path)); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2010-04-22 23:49:52
|
Revision: 3335 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3335&view=rev Author: spasi Date: 2010-04-22 23:49:46 +0000 (Thu, 22 Apr 2010) Log Message: ----------- Added org.lwjgl.util.NoChecks Modified Paths: -------------- trunk/LWJGL/doc/lwjgl_hidden_switches.text Modified: trunk/LWJGL/doc/lwjgl_hidden_switches.text =================================================================== --- trunk/LWJGL/doc/lwjgl_hidden_switches.text 2010-04-22 23:21:48 UTC (rev 3334) +++ trunk/LWJGL/doc/lwjgl_hidden_switches.text 2010-04-22 23:49:46 UTC (rev 3335) @@ -12,6 +12,9 @@ org.lwjgl.util.Debug Whether to output debug info +org.lwjgl.util.NoChecks +Whether to disable runtime function/buffer checks and state tracking. + org.lwjgl.opengl.Display.allowSoftwareOpenGL Whether to allow creation of a software only opengl context This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2010-04-22 23:21:55
|
Revision: 3334 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3334&view=rev Author: spasi Date: 2010-04-22 23:21:48 +0000 (Thu, 22 Apr 2010) Log Message: ----------- Fixed ByteOrder of @Return ByteBuffers. Cleaned up Drawable interface and introduced a reusable base implementation. Added support for disabling runtime function checks, buffer checks and state tracking. Activated with -Dorg.lwjgl.util.NoChecks=true Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/BufferChecks.java trunk/LWJGL/src/java/org/lwjgl/LWJGLUtil.java trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java trunk/LWJGL/src/java/org/lwjgl/opengl/BaseReferences.java trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java trunk/LWJGL/src/java/org/lwjgl/opengl/GLChecks.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java trunk/LWJGL/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java trunk/LWJGL/src/java/org/lwjgl/util/generator/GeneratorVisitor.java trunk/LWJGL/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java trunk/LWJGL/src/templates/org/lwjgl/opengl/ATI_vertex_array_object.java Added Paths: ----------- trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractDrawable.java trunk/LWJGL/src/java/org/lwjgl/opengl/DrawableLWJGL.java Modified: trunk/LWJGL/src/java/org/lwjgl/BufferChecks.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/BufferChecks.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/BufferChecks.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -60,7 +60,7 @@ * Helper methods to ensure a function pointer is not-null (0) */ public static void checkFunctionAddress(long pointer) { - if (pointer == 0) { + if (LWJGLUtil.CHECKS && pointer == 0) { throw new IllegalStateException("Function is not supported"); } } @@ -69,20 +69,22 @@ * Helper methods to ensure a ByteBuffer is null-terminated */ public static void checkNullTerminated(ByteBuffer buf) { - if (buf.get(buf.limit() - 1) != 0) { + if ( LWJGLUtil.CHECKS && buf.get(buf.limit() - 1) != 0) { throw new IllegalArgumentException("Missing null termination"); } } public static void checkNullTerminated(ByteBuffer buf, int count) { - int nullFound = 0; - for ( int i = buf.position(); i < buf.limit(); i++ ) { - if ( buf.get(i) == 0 ) - nullFound++; + if ( LWJGLUtil.CHECKS ) { + int nullFound = 0; + for ( int i = buf.position(); i < buf.limit(); i++ ) { + if ( buf.get(i) == 0 ) + nullFound++; + } + + if ( nullFound < count ) + throw new IllegalArgumentException("Missing null termination"); } - - if ( nullFound < count ) - throw new IllegalArgumentException("Missing null termination"); } /** Helper methods to ensure an IntBuffer is null-terminated */ @@ -93,7 +95,7 @@ } public static void checkNotNull(Object o) { - if (o == null) + if ( LWJGLUtil.CHECKS && o == null) throw new IllegalArgumentException("Null argument"); } @@ -101,37 +103,37 @@ * Helper methods to ensure a buffer is direct (and, implicitly, non-null). */ public static void checkDirect(ByteBuffer buf) { - if (!buf.isDirect()) { + if ( LWJGLUtil.CHECKS && !buf.isDirect()) { throw new IllegalArgumentException("ByteBuffer is not direct"); } } public static void checkDirect(ShortBuffer buf) { - if (!buf.isDirect()) { + if ( LWJGLUtil.CHECKS && !buf.isDirect()) { throw new IllegalArgumentException("ShortBuffer is not direct"); } } public static void checkDirect(IntBuffer buf) { - if (!buf.isDirect()) { + if ( LWJGLUtil.CHECKS && !buf.isDirect()) { throw new IllegalArgumentException("IntBuffer is not direct"); } } public static void checkDirect(LongBuffer buf) { - if (!buf.isDirect()) { + if ( LWJGLUtil.CHECKS && !buf.isDirect()) { throw new IllegalArgumentException("LongBuffer is not direct"); } } public static void checkDirect(FloatBuffer buf) { - if (!buf.isDirect()) { + if ( LWJGLUtil.CHECKS && !buf.isDirect()) { throw new IllegalArgumentException("FloatBuffer is not direct"); } } public static void checkDirect(DoubleBuffer buf) { - if (!buf.isDirect()) { + if ( LWJGLUtil.CHECKS && !buf.isDirect()) { throw new IllegalArgumentException("DoubleBuffer is not direct"); } } @@ -154,38 +156,50 @@ * @throws IllegalArgumentException */ public static void checkBufferSize(Buffer buf, int size) { - if (buf.remaining() < size) { + if ( LWJGLUtil.CHECKS && buf.remaining() < size) { throwBufferSizeException(buf, size); } } public static void checkBuffer(ByteBuffer buf, int size) { - checkBufferSize(buf, size); - checkDirect(buf); + if ( LWJGLUtil.CHECKS ) { + checkBufferSize(buf, size); + checkDirect(buf); + } } public static void checkBuffer(ShortBuffer buf, int size) { - checkBufferSize(buf, size); - checkDirect(buf); + if ( LWJGLUtil.CHECKS ) { + checkBufferSize(buf, size); + checkDirect(buf); + } } public static void checkBuffer(IntBuffer buf, int size) { - checkBufferSize(buf, size); - checkDirect(buf); + if ( LWJGLUtil.CHECKS ) { + checkBufferSize(buf, size); + checkDirect(buf); + } } public static void checkBuffer(LongBuffer buf, int size) { - checkBufferSize(buf, size); - checkDirect(buf); + if ( LWJGLUtil.CHECKS ) { + checkBufferSize(buf, size); + checkDirect(buf); + } } public static void checkBuffer(FloatBuffer buf, int size) { - checkBufferSize(buf, size); - checkDirect(buf); + if ( LWJGLUtil.CHECKS ) { + checkBufferSize(buf, size); + checkDirect(buf); + } } public static void checkBuffer(DoubleBuffer buf, int size) { - checkBufferSize(buf, size); - checkDirect(buf); + if ( LWJGLUtil.CHECKS ) { + checkBufferSize(buf, size); + checkDirect(buf); + } } } Modified: trunk/LWJGL/src/java/org/lwjgl/LWJGLUtil.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/LWJGLUtil.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/LWJGLUtil.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -266,7 +266,9 @@ /** Debug flag. */ public static final boolean DEBUG = getPrivilegedBoolean("org.lwjgl.util.Debug"); - + + public static final boolean CHECKS = !getPrivilegedBoolean("org.lwjgl.util.NoChecks"); + static { LWJGLIcon16x16.flip(); LWJGLIcon32x32.flip(); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -50,7 +50,7 @@ * $Id$ * @version $Revision$ */ -public class AWTGLCanvas extends Canvas implements Drawable, ComponentListener, HierarchyListener { +public class AWTGLCanvas extends Canvas implements DrawableLWJGL, ComponentListener, HierarchyListener { private static final long serialVersionUID = 1L; @@ -109,13 +109,12 @@ return context; } + /** This method should only be called internally. */ public Context createSharedContext() throws LWJGLException { - synchronized ( GlobalLock.lock ) { - synchronized ( SYNC_LOCK ) { - if ( context == null ) throw new IllegalStateException("Canvas not yet displayable"); + synchronized ( SYNC_LOCK ) { + if ( context == null ) throw new IllegalStateException("Canvas not yet displayable"); - return new Context(peer_info, context.getContextAttribs(), context); - } + return new Context(peer_info, context.getContextAttribs(), context); } } @@ -213,12 +212,11 @@ } } - public void releaseContext() throws LWJGLException { + public boolean isCurrent() throws LWJGLException { synchronized ( SYNC_LOCK ) { - if ( context == null ) - throw new IllegalStateException("Canvas not yet displayable"); - if ( context.isCurrent() ) - Context.releaseCurrentContext(); + if ( context == null ) throw new IllegalStateException("Canvas not yet displayable"); + + return context.isCurrent(); } } @@ -234,6 +232,15 @@ } } + public void releaseContext() throws LWJGLException { + synchronized ( SYNC_LOCK ) { + if ( context == null ) + throw new IllegalStateException("Canvas not yet displayable"); + if ( context.isCurrent() ) + Context.releaseCurrentContext(); + } + } + /** Destroy the OpenGL context. This happens when the component becomes undisplayable */ public final void destroy() { synchronized ( SYNC_LOCK ) { @@ -279,7 +286,7 @@ peer_info.lockAndGetHandle(); try { if ( context == null ) { - this.context = new Context(peer_info, attribs, drawable != null ? drawable.getContext() : null); + this.context = new Context(peer_info, attribs, drawable != null ? ((DrawableLWJGL)drawable).getContext() : null); first_run = true; } Added: trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractDrawable.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractDrawable.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractDrawable.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -0,0 +1,82 @@ +package org.lwjgl.opengl; + +import org.lwjgl.LWJGLException; +import org.lwjgl.LWJGLUtil; + +/** + * @author Spasi + * @since 22 \xC1\xF0\xF1 2010 + */ +abstract class AbstractDrawable implements DrawableLWJGL { + + /** Handle to the native GL rendering context */ + protected PeerInfo peer_info; + + /** The OpenGL Context. */ + protected Context context; + + protected AbstractDrawable() { + } + + public Context getContext() { + synchronized ( GlobalLock.lock ) { + return context; + } + } + + public Context createSharedContext() throws LWJGLException { + synchronized ( GlobalLock.lock ) { + checkDestroyed(); + return new Context(peer_info, context.getContextAttribs(), context); + } + } + + public boolean isCurrent() throws LWJGLException { + synchronized ( GlobalLock.lock ) { + checkDestroyed(); + return context.isCurrent(); + } + } + + public void makeCurrent() throws LWJGLException { + synchronized ( GlobalLock.lock ) { + checkDestroyed(); + context.makeCurrent(); + } + } + + public void releaseContext() throws LWJGLException { + synchronized ( GlobalLock.lock ) { + checkDestroyed(); + if ( context.isCurrent() ) + Context.releaseCurrentContext(); + } + } + + public void destroy() { + synchronized ( GlobalLock.lock ) { + if ( context == null ) + return; + + try { + releaseContext(); + + context.forceDestroy(); + context = null; + + if ( peer_info != null ) { + peer_info.destroy(); + peer_info = null; + } + } catch (LWJGLException e) { + LWJGLUtil.log("Exception occurred while destroying Drawable: " + e); + } + } + } + + protected final void checkDestroyed() { + if ( context == null ) + throw new IllegalStateException("The Drawable has no context available."); + } + +} \ No newline at end of file Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/BaseReferences.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/BaseReferences.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/BaseReferences.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -32,7 +32,6 @@ package org.lwjgl.opengl; import java.nio.Buffer; -import java.nio.IntBuffer; import java.util.Arrays; class BaseReferences { @@ -49,24 +48,19 @@ int indirectBuffer; BaseReferences(ContextCapabilities caps) { - IntBuffer temp = caps.scratch_int_buffer; - int max_vertex_attribs; - if (caps.OpenGL20 || caps.GL_ARB_vertex_shader) { - GL11.glGetInteger(ARBVertexShader.GL_MAX_VERTEX_ATTRIBS_ARB, temp); - max_vertex_attribs = temp.get(0); - } else + if (caps.OpenGL20 || caps.GL_ARB_vertex_shader) + max_vertex_attribs = GL11.glGetInteger(ARBVertexShader.GL_MAX_VERTEX_ATTRIBS_ARB); + else max_vertex_attribs = 0; glVertexAttribPointer_buffer = new Buffer[max_vertex_attribs]; int max_texture_units; - if (caps.OpenGL20) { - GL11.glGetInteger(GL20.GL_MAX_TEXTURE_IMAGE_UNITS, temp); - max_texture_units = temp.get(0); - } else if (caps.OpenGL13 || caps.GL_ARB_multitexture) { - GL11.glGetInteger(GL13.GL_MAX_TEXTURE_UNITS, temp); - max_texture_units = temp.get(0); - } else + if (caps.OpenGL20) + max_texture_units = GL11.glGetInteger(GL20.GL_MAX_TEXTURE_IMAGE_UNITS); + else if (caps.OpenGL13 || caps.GL_ARB_multitexture) + max_texture_units = GL11.glGetInteger(GL13.GL_MAX_TEXTURE_UNITS); + else max_texture_units = 1; glTexCoordPointer_buffer = new Buffer[max_texture_units]; } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -106,14 +106,10 @@ /** Swap interval */ private static int swap_interval; - /** A unique context object, so we can track different contexts between creates() and destroys() */ - private static PeerInfo peer_info; - private static Context context; - /** The Drawable instance that tracks the current Display context */ - private final static Drawable drawable; + private static final AbstractDrawable drawable; - private static boolean window_created = false; + private static boolean window_created; private static boolean parent_resized; @@ -137,32 +133,21 @@ } catch (LWJGLException e) { throw new RuntimeException(e); } - drawable = new Drawable() { - public Context getContext() { + drawable = new AbstractDrawable() { + public void destroy() { synchronized ( GlobalLock.lock ) { - return isCreated() ? context : null; - } - } + if ( !isCreated() ) + return; - public Context createSharedContext() throws LWJGLException { - synchronized ( GlobalLock.lock ) { - if ( !isCreated() ) throw new IllegalStateException("Display must be created."); - - return new Context(peer_info, context.getContextAttribs(), context); + releaseDrawable(); + super.destroy(); + destroyWindow(); + x = y = -1; + cached_icons = null; + reset(); + removeShutdownHook(); } } - - public void makeCurrent() throws LWJGLException { - Display.makeCurrent(); - } - - public void releaseContext() throws LWJGLException { - Display.releaseContext(); - } - - public void destroy() { - Display.destroy(); - } }; } @@ -258,24 +243,23 @@ * @throws LWJGLException if the display mode could not be set */ public static void setDisplayMode(DisplayMode mode) throws LWJGLException { - synchronized (GlobalLock.lock) { - if (mode == null) + synchronized ( GlobalLock.lock ) { + if ( mode == null ) throw new NullPointerException("mode must be non-null"); boolean was_fullscreen = isFullscreen(); current_mode = mode; - if (isCreated()) { + if ( isCreated() ) { destroyWindow(); // If mode is not fullscreen capable, make sure we are in windowed mode try { - if (was_fullscreen && !isFullscreen()) + if ( was_fullscreen && !isFullscreen() ) display_impl.resetDisplayMode(); - else if (isFullscreen()) + else if ( isFullscreen() ) switchDisplayMode(); createWindow(); makeCurrentAndSetSwapInterval(); } catch (LWJGLException e) { - destroyContext(); - destroyPeerInfo(); + drawable.destroy(); display_impl.resetDisplayMode(); throw e; } @@ -288,9 +272,9 @@ } private static int getWindowX() { - if (!isFullscreen() && parent == null) { + if ( !isFullscreen() && parent == null ) { // if no display location set, center window - if (x == -1) { + if ( x == -1 ) { return Math.max(0, (initial_mode.getWidth() - current_mode.getWidth()) / 2); } else { return x; @@ -301,7 +285,7 @@ } private static int getWindowY() { - if (!isFullscreen() && parent == null) { + if ( !isFullscreen() && parent == null ) { // if no display location set, center window if ( y == -1 ) { return Math.max(0, (initial_mode.getHeight() - current_mode.getHeight()) / 2); @@ -344,6 +328,7 @@ private static void releaseDrawable() { try { + Context context = drawable.context; if ( context != null && context.isCurrent() ) { Context.releaseCurrentContext(); context.releaseDrawable(); @@ -483,13 +468,13 @@ */ public static void setParent(Canvas parent) throws LWJGLException { synchronized ( GlobalLock.lock ) { - if (Display.parent != parent) { + if ( Display.parent != parent ) { Display.parent = parent; if ( !isCreated() ) return; destroyWindow(); try { - if (isFullscreen()) { + if ( isFullscreen() ) { switchDisplayMode(); } else { display_impl.resetDisplayMode(); @@ -497,8 +482,7 @@ createWindow(); makeCurrentAndSetSwapInterval(); } catch (LWJGLException e) { - destroyContext(); - destroyPeerInfo(); + drawable.destroy(); display_impl.resetDisplayMode(); throw e; } @@ -539,18 +523,18 @@ private static void setDisplayModeAndFullscreenInternal(boolean fullscreen, DisplayMode mode) throws LWJGLException { synchronized ( GlobalLock.lock ) { - if (mode == null) + if ( mode == null ) throw new NullPointerException("mode must be non-null"); DisplayMode old_mode = current_mode; current_mode = mode; boolean was_fullscreen = isFullscreen(); Display.fullscreen = fullscreen; - if (was_fullscreen != isFullscreen() || !mode.equals(old_mode)) { - if (!isCreated()) + if ( was_fullscreen != isFullscreen() || !mode.equals(old_mode) ) { + if ( !isCreated() ) return; destroyWindow(); try { - if (isFullscreen()) { + if ( isFullscreen() ) { switchDisplayMode(); } else { display_impl.resetDisplayMode(); @@ -558,8 +542,7 @@ createWindow(); makeCurrentAndSetSwapInterval(); } catch (LWJGLException e) { - destroyContext(); - destroyPeerInfo(); + drawable.destroy(); display_impl.resetDisplayMode(); throw e; } @@ -569,7 +552,7 @@ /** @return whether the Display is in fullscreen mode */ public static boolean isFullscreen() { - synchronized (GlobalLock.lock) { + synchronized ( GlobalLock.lock ) { return fullscreen && current_mode.isFullscreenCapable(); } } @@ -671,7 +654,6 @@ * Update the window. If the window is visible clears * the dirty flag and calls swapBuffers() and finally * polls the input devices. - * */ public static void update() { update(true); @@ -730,25 +712,21 @@ * @throws LWJGLException If the context could not be released */ public static void releaseContext() throws LWJGLException { - synchronized ( GlobalLock.lock ) { - if ( !isCreated() ) - throw new IllegalStateException("Display is not created"); - if ( context.isCurrent() ) - Context.releaseCurrentContext(); - } + drawable.releaseContext(); } + /** Returns true if the Display's context is current in the current thread. */ + public static boolean isCurrent() throws LWJGLException { + return drawable.isCurrent(); + } + /** * Make the Display the current rendering context for GL calls. * * @throws LWJGLException If the context could not be made current */ public static void makeCurrent() throws LWJGLException { - synchronized ( GlobalLock.lock ) { - if ( !isCreated() ) - throw new IllegalStateException("Display is not created"); - context.makeCurrent(); - } + drawable.makeCurrent(); } private static void removeShutdownHook() { @@ -868,19 +846,19 @@ throw new NullPointerException("pixel_format cannot be null"); removeShutdownHook(); registerShutdownHook(); - if (isFullscreen()) + if ( isFullscreen() ) switchDisplayMode(); try { - peer_info = display_impl.createPeerInfo(pixel_format); + drawable.peer_info = display_impl.createPeerInfo(pixel_format); try { createWindow(); try { - context = new Context(peer_info, attribs, shared_drawable != null ? shared_drawable.getContext() : null); + drawable.context = new Context(drawable.peer_info, attribs, shared_drawable != null ? ((AbstractDrawable)shared_drawable).getContext() : null); try { makeCurrentAndSetSwapInterval(); initContext(); } catch (LWJGLException e) { - destroyContext(); + drawable.destroy(); throw e; } } catch (LWJGLException e) { @@ -888,7 +866,7 @@ throw e; } } catch (LWJGLException e) { - destroyPeerInfo(); + drawable.destroy(); throw e; } } catch (LWJGLException e) { @@ -899,13 +877,13 @@ } /** - * Set the initial color of the Display. This method is called before the Display is created and will set the - * background color to the one specified in this method. - * - * @param red - color value between 0 - 1 - * @param green - color value between 0 - 1 - * @param blue - color value between 0 - 1 - */ + * Set the initial color of the Display. This method is called before the Display is created and will set the + * background color to the one specified in this method. + * + * @param red - color value between 0 - 1 + * @param green - color value between 0 - 1 + * @param blue - color value between 0 - 1 + */ public static void setInitialBackground(float red, float green, float blue) { r = red; g = green; @@ -977,41 +955,14 @@ * regardless of whether the Display was the current rendering context. */ public static void destroy() { - synchronized ( GlobalLock.lock ) { - if ( !isCreated() ) { - return; - } - - releaseDrawable(); - destroyContext(); - destroyWindow(); - destroyPeerInfo(); - x = y = -1; - cached_icons = null; - reset(); - removeShutdownHook(); - } + drawable.destroy(); } - private static void destroyPeerInfo() { - peer_info.destroy(); - peer_info = null; - } - - private static void destroyContext() { - try { - context.forceDestroy(); - } catch (LWJGLException e) { - throw new RuntimeException(e); - } finally { - context = null; - } - } - /* * Reset display mode if fullscreen. This method is also called from the shutdown hook added * in the static constructor */ + private static void reset() { display_impl.resetDisplayMode(); current_mode = initial_mode; @@ -1070,7 +1021,7 @@ y = new_y; // offset if already created - if (isCreated() && !isFullscreen()) { + if ( isCreated() && !isFullscreen() ) { reshape(); } } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -42,21 +42,10 @@ public interface Drawable { - /** - * [INTERNAL USE ONLY] Returns the Drawable's Context. - * - * @return the Drawable's Context - */ - Context getContext(); + /** Returns true if the Drawable's context is current in the current thread. */ + boolean isCurrent() throws LWJGLException; /** - * [INTERNAL USE ONLY] Creates a new Context that is shared with the Drawable's Context. - * - * @return a Context shared with the Drawable's Context. - */ - Context createSharedContext() throws LWJGLException; - - /** * Makes the Drawable's context current in the current thread. * * @throws LWJGLException @@ -70,9 +59,7 @@ */ void releaseContext() throws LWJGLException; - /** - * Destroys the Drawable. - */ + /** Destroys the Drawable. */ void destroy(); } Added: trunk/LWJGL/src/java/org/lwjgl/opengl/DrawableLWJGL.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/DrawableLWJGL.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/DrawableLWJGL.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -0,0 +1,25 @@ +package org.lwjgl.opengl; + +import org.lwjgl.LWJGLException; + +/** + * @author Spasi + * @since 23 \xC1\xF0\xF1 2010 + */ +interface DrawableLWJGL extends Drawable { + + /** + * [INTERNAL USE ONLY] Returns the Drawable's Context. + * + * @return the Drawable's Context + */ + Context getContext(); + + /** + * [INTERNAL USE ONLY] Creates a new Context that is shared with the Drawable's Context. + * + * @return a Context shared with the Drawable's Context. + */ + Context createSharedContext() throws LWJGLException; + +} \ No newline at end of file Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/GLChecks.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/GLChecks.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/GLChecks.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -35,6 +35,7 @@ import java.nio.IntBuffer; import org.lwjgl.BufferUtils; +import org.lwjgl.LWJGLUtil; /** * A class to check buffer boundaries in GL methods. Many GL @@ -60,93 +61,78 @@ } static int getBufferObjectSize(ContextCapabilities caps, int buffer_enum) { - IntBuffer scratch_buffer = caps.scratch_int_buffer; - GL15.glGetBufferParameter(buffer_enum, GL15.GL_BUFFER_SIZE, scratch_buffer); - return scratch_buffer.get(0); + return GL15.glGetBufferParameter(buffer_enum, GL15.GL_BUFFER_SIZE); } static int getBufferObjectSizeARB(ContextCapabilities caps, int buffer_enum) { - IntBuffer scratch_buffer = caps.scratch_int_buffer; - ARBBufferObject.glGetBufferParameterARB(buffer_enum, ARBBufferObject.GL_BUFFER_SIZE_ARB, scratch_buffer); - return scratch_buffer.get(0); + return ARBBufferObject.glGetBufferParameterARB(buffer_enum, ARBBufferObject.GL_BUFFER_SIZE_ARB); } static int getBufferObjectSizeATI(ContextCapabilities caps, int buffer) { - IntBuffer scratch_buffer = caps.scratch_int_buffer; - ATIVertexArrayObject.glGetObjectBufferATI(buffer, ATIVertexArrayObject.GL_OBJECT_BUFFER_SIZE_ATI, scratch_buffer); - return scratch_buffer.get(0); + return ATIVertexArrayObject.glGetObjectBufferATI(buffer, ATIVertexArrayObject.GL_OBJECT_BUFFER_SIZE_ATI); } static int getNamedBufferObjectSize(ContextCapabilities caps, int buffer) { - IntBuffer scratch_buffer = caps.scratch_int_buffer; - EXTDirectStateAccess.glGetNamedBufferParameterEXT(buffer, GL15.GL_BUFFER_SIZE, scratch_buffer); - return scratch_buffer.get(0); + return EXTDirectStateAccess.glGetNamedBufferParameterEXT(buffer, GL15.GL_BUFFER_SIZE); } - private static boolean checkBufferObject(ContextCapabilities caps, int buffer_enum, boolean state) { - IntBuffer scratch_buffer = caps.scratch_int_buffer; - GL11.glGetInteger(buffer_enum, scratch_buffer); - boolean is_enabled = scratch_buffer.get(0) != 0; - return state == is_enabled; - } - /** Helper method to ensure that array buffer objects are disabled. If they are enabled, we'll throw an OpenGLException */ static void ensureArrayVBOdisabled(ContextCapabilities caps) { - if(StateTracker.getReferencesStack(caps).getReferences().arrayBuffer != 0) + if( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().arrayBuffer != 0 ) throw new OpenGLException("Cannot use Buffers when Array Buffer Object is enabled"); } /** Helper method to ensure that array buffer objects are enabled. If they are disabled, we'll throw an OpenGLException */ static void ensureArrayVBOenabled(ContextCapabilities caps) { - if(StateTracker.getReferencesStack(caps).getReferences().arrayBuffer == 0) + if( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().arrayBuffer == 0 ) throw new OpenGLException("Cannot use offsets when Array Buffer Object is disabled"); } /** Helper method to ensure that element array buffer objects are disabled. If they are enabled, we'll throw an OpenGLException */ static void ensureElementVBOdisabled(ContextCapabilities caps) { - if(StateTracker.getReferencesStack(caps).getReferences().elementArrayBuffer != 0) + if( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().elementArrayBuffer != 0 ) throw new OpenGLException("Cannot use Buffers when Element Array Buffer Object is enabled"); } /** Helper method to ensure that element array buffer objects are enabled. If they are disabled, we'll throw an OpenGLException */ static void ensureElementVBOenabled(ContextCapabilities caps) { - if(StateTracker.getReferencesStack(caps).getReferences().elementArrayBuffer == 0) + if( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().elementArrayBuffer == 0 ) throw new OpenGLException("Cannot use offsets when Element Array Buffer Object is disabled"); } /** Helper method to ensure that array buffer objects are disabled. If they are enabled, we'll throw an OpenGLException */ static void ensureIndirectBOdisabled(ContextCapabilities caps) { - if ( StateTracker.getReferencesStack(caps).getReferences().indirectBuffer != 0 ) + if ( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().indirectBuffer != 0 ) throw new OpenGLException("Cannot use Buffers when Draw Indirect Object is enabled"); } /** Helper method to ensure that array buffer objects are enabled. If they are disabled, we'll throw an OpenGLException */ static void ensureIndirectBOenabled(ContextCapabilities caps) { - if ( StateTracker.getReferencesStack(caps).getReferences().indirectBuffer == 0 ) + if ( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().indirectBuffer == 0 ) throw new OpenGLException("Cannot use offsets when Draw Indirect Object is disabled"); } /** Helper method to ensure that pixel pack buffer objects are disabled. If they are enabled, we'll throw an OpenGLException */ static void ensurePackPBOdisabled(ContextCapabilities caps) { - if ( StateTracker.getReferencesStack(caps).getReferences().pixelPackBuffer != 0 ) + if ( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().pixelPackBuffer != 0 ) throw new OpenGLException("Cannot use Buffers when Pixel Pack Buffer Object is enabled"); } /** Helper method to ensure that pixel pack buffer objects are enabled. If they are disabled, we'll throw an OpenGLException */ static void ensurePackPBOenabled(ContextCapabilities caps) { - if ( StateTracker.getReferencesStack(caps).getReferences().pixelPackBuffer == 0 ) + if ( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().pixelPackBuffer == 0 ) throw new OpenGLException("Cannot use offsets when Pixel Pack Buffer Object is disabled"); } /** Helper method to ensure that pixel unpack buffer objects are disabled. If they are enabled, we'll throw an OpenGLException */ static void ensureUnpackPBOdisabled(ContextCapabilities caps) { - if ( StateTracker.getReferencesStack(caps).getReferences().pixelUnpackBuffer != 0 ) + if ( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().pixelUnpackBuffer != 0 ) throw new OpenGLException("Cannot use Buffers when Pixel Unpack Buffer Object is enabled"); } /** Helper method to ensure that pixel unpack buffer objects are enabled. If they are disabled, we'll throw an OpenGLException */ static void ensureUnpackPBOenabled(ContextCapabilities caps) { - if ( StateTracker.getReferencesStack(caps).getReferences().pixelUnpackBuffer == 0 ) + if ( LWJGLUtil.CHECKS && StateTracker.getReferencesStack(caps).getReferences().pixelUnpackBuffer == 0 ) throw new OpenGLException("Cannot use offsets when Pixel Unpack Buffer Object is disabled"); } @@ -162,19 +148,19 @@ * @return the size, in elements, of the image */ static int calculateImageStorage(Buffer buffer, int format, int type, int width, int height, int depth) { - return calculateImageStorage(format, type, width, height, depth) >> BufferUtils.getElementSizeExponent(buffer); + return LWJGLUtil.CHECKS ? calculateImageStorage(format, type, width, height, depth) >> BufferUtils.getElementSizeExponent(buffer) : 0; } static int calculateTexImage1DStorage(Buffer buffer, int format, int type, int width) { - return calculateTexImage1DStorage(format, type, width) >> BufferUtils.getElementSizeExponent(buffer); + return LWJGLUtil.CHECKS ? calculateTexImage1DStorage(format, type, width) >> BufferUtils.getElementSizeExponent(buffer) : 0; } static int calculateTexImage2DStorage(Buffer buffer, int format, int type, int width, int height) { - return calculateTexImage2DStorage(format, type, width, height) >> BufferUtils.getElementSizeExponent(buffer); + return LWJGLUtil.CHECKS ? calculateTexImage2DStorage(format, type, width, height) >> BufferUtils.getElementSizeExponent(buffer) : 0; } static int calculateTexImage3DStorage(Buffer buffer, int format, int type, int width, int height, int depth) { - return calculateTexImage3DStorage(format, type, width, height, depth) >> BufferUtils.getElementSizeExponent(buffer); + return LWJGLUtil.CHECKS ? calculateTexImage3DStorage(format, type, width, height, depth) >> BufferUtils.getElementSizeExponent(buffer) : 0; } /** Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -78,7 +78,7 @@ AccessController.doPrivileged(new PrivilegedExceptionAction() { public Object run() throws Exception { Application.getApplication().addApplicationListener(new ApplicationAdapter() { - public final void handleQuit(ApplicationEvent event) { + public void handleQuit(ApplicationEvent event) { doHandleQuit(); } }); @@ -271,15 +271,16 @@ * * - elias */ + AbstractDrawable drawable = (AbstractDrawable)Display.getDrawable(); if (Display.isFullscreen() && (frame != null && frame.getCanvas().syncCanvasPainted() || should_update)) { try { - MacOSXContextImplementation.resetView(Display.getDrawable().getContext().getPeerInfo(), Display.getDrawable().getContext()); + MacOSXContextImplementation.resetView(drawable.peer_info, drawable.context); } catch (LWJGLException e) { LWJGLUtil.log("Failed to reset context: " + e); } } if (should_update) { - Display.getDrawable().getContext().update(); + drawable.context.update(); /* This is necessary to make sure the context won't "forget" about the view size */ GL11.glGetInteger(GL11.GL_VIEWPORT, current_viewport); GL11.glViewport(current_viewport.get(0), current_viewport.get(1), current_viewport.get(2), current_viewport.get(3)); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -35,7 +35,6 @@ import org.lwjgl.BufferUtils; import org.lwjgl.LWJGLException; -import org.lwjgl.LWJGLUtil; import org.lwjgl.Sys; /** @@ -49,7 +48,7 @@ * @version $Revision$ * $Id$ */ -public final class Pbuffer implements Drawable { +public final class Pbuffer extends AbstractDrawable { /** * Indicates that Pbuffers can be created. */ @@ -136,11 +135,6 @@ public static final int DEPTH_BUFFER = RenderTexture.WGL_DEPTH_COMPONENT_NV; /** - * Handle to the native GL rendering context - */ - private final PeerInfo peer_info; - - /** * Width */ private final int width; @@ -150,10 +144,6 @@ */ private final int height; - private final Context context; - - private boolean destroyed; - static { Sys.initialize(); } @@ -227,14 +217,11 @@ this.width = width; this.height = height; this.peer_info = createPbuffer(width, height, pixel_format, renderTexture); - Context shared_context = null; - if (shared_drawable != null) { - shared_context = shared_drawable.getContext(); - } else { - Drawable display_drawable = Display.getDrawable(); - if (display_drawable != null) - shared_context = display_drawable.getContext(); - } + Context shared_context; + if (shared_drawable != null) + shared_context = ((DrawableLWJGL)shared_drawable).getContext(); + else + shared_context = ((DrawableLWJGL)Display.getDrawable()).getContext(); // May be null this.context = new Context(peer_info, attribs, shared_context); } @@ -251,21 +238,6 @@ renderTexture.pBufferAttribs); } - public Context getContext() { - return context; - } - - public Context createSharedContext() throws LWJGLException { - synchronized ( GlobalLock.lock ) { - return new Context(peer_info, context.getContextAttribs(), context); - } - } - - private void checkDestroyed() { - if (destroyed) - throw new IllegalStateException("Pbuffer is destroyed"); - } - /** * Method to test for validity of the buffer. If this function returns true, the buffer contents is lost. The buffer can still * be used, but the results are undefined. The application is expected to release the buffer if needed, destroy it and recreate @@ -279,21 +251,6 @@ } /** - * Method to make the Pbuffer context current. All subsequent OpenGL calls will go to this buffer. - * @throws LWJGLException if the context could not be made current - */ - public synchronized void makeCurrent() throws LWJGLException { - checkDestroyed(); - context.makeCurrent(); - } - - public void releaseContext() throws LWJGLException { - checkDestroyed(); - if ( context.isCurrent() ) - Context.releaseCurrentContext(); - } - - /** * Gets the Pbuffer capabilities. * * @return a bitmask of Pbuffer capabilities. @@ -302,22 +259,6 @@ return Display.getImplementation().getPbufferCapabilities(); } - /** - * Destroys the Pbuffer. After this call, there will be no valid GL rendering context - regardless of whether this Pbuffer was - * the current rendering context or not. - */ - public synchronized void destroy() { - if (destroyed) - return; - try { - context.forceDestroy(); - peer_info.destroy(); - destroyed = true; - } catch (LWJGLException e) { - LWJGLUtil.log("Exception occurred while destroying pbuffer: " + e); - } - } - // ----------------------------------------------------------------------------------------- // ------------------------------- Render-to-Texture Methods ------------------------------- // ----------------------------------------------------------------------------------------- Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -32,7 +32,6 @@ package org.lwjgl.opengl; import org.lwjgl.LWJGLException; -import org.lwjgl.LWJGLUtil; /** * @author Spasi @@ -46,51 +45,14 @@ * * @author Spasi */ -public final class SharedDrawable implements Drawable { +public final class SharedDrawable extends AbstractDrawable { - private Context context; - - private boolean destroyed; - public SharedDrawable(final Drawable drawable) throws LWJGLException { - this.context = drawable.createSharedContext(); + this.context = ((DrawableLWJGL)drawable).createSharedContext(); } - public Context getContext() { - return context; - } - public Context createSharedContext() { throw new UnsupportedOperationException(); } - public void makeCurrent() throws LWJGLException { - checkDestroyed(); - context.makeCurrent(); - - } - - public void releaseContext() throws LWJGLException { - checkDestroyed(); - if ( context.isCurrent() ) - Context.releaseCurrentContext(); - } - - public void destroy() { - if ( destroyed ) - return; - - try { - context.forceDestroy(); - destroyed = true; - } catch (LWJGLException e) { - LWJGLUtil.log("Exception occurred while destroying SharedDrawable: " + e); - } - } - - private void checkDestroyed() { - if ( destroyed ) - throw new IllegalStateException("SharedDrawable is destroyed"); - } - } \ No newline at end of file Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -437,8 +437,9 @@ * is maximized helps some gfx cards recover from fullscreen */ try { - if (Display.getDrawable().getContext() != null && Display.getDrawable().getContext().isCurrent()) - Display.getDrawable().getContext().makeCurrent(); + Context context = ((DrawableLWJGL)Display.getDrawable()).getContext(); + if (context != null && context.isCurrent()) + context.makeCurrent(); } catch (LWJGLException e) { LWJGLUtil.log("Exception occurred while trying to make context current: " + e); } @@ -973,4 +974,4 @@ return "Rect: top = " + top + " bottom = " + bottom + " left = " + left + " right = " + right; } } -} +} \ No newline at end of file Modified: trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -78,8 +78,6 @@ System.out.println("** Sleeping, no texture created yet **"); - long start = System.currentTimeMillis(); - try { Thread.sleep(2000); } catch (InterruptedException e) { Modified: trunk/LWJGL/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -63,7 +63,6 @@ writer.println("public class " + Utils.CONTEXT_CAPS_CLASS_NAME + " {"); writer.println("\tstatic final boolean DEBUG = " + Boolean.toString(generate_error_checks) + ";"); writer.println("\tfinal StateTracker tracker = new StateTracker();"); - writer.println("\tfinal IntBuffer scratch_int_buffer = BufferUtils.createIntBuffer(16);"); writer.println(); if ( !context_specific ) { writer.println("\tprivate static boolean " + STUBS_LOADED_NAME + " = false;"); Modified: trunk/LWJGL/src/java/org/lwjgl/util/generator/GeneratorVisitor.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/generator/GeneratorVisitor.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/util/generator/GeneratorVisitor.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -180,10 +180,7 @@ java_writer.println(); java_writer.println("package " + d.getPackage().getQualifiedName() + ";"); java_writer.println(); - java_writer.println("import org.lwjgl.LWJGLException;"); - java_writer.println("import org.lwjgl.BufferChecks;"); - // DISABLED: indirect buffer support - //java_writer.println("import org.lwjgl.NondirectBufferWrapper;"); + java_writer.println("import org.lwjgl.*;"); java_writer.println("import java.nio.*;"); java_writer.println(); Utils.printDocComment(java_writer, d); Modified: trunk/LWJGL/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -261,9 +261,12 @@ // DISABLED: indirect buffer support //printNondirectParameterCopies(writer, method, mode); if (has_result) { - if ( method.getAnnotation(GLreturn.class) == null ) - writer.println("\t\treturn " + Utils.RESULT_VAR_NAME + ";"); - else + if ( method.getAnnotation(GLreturn.class) == null ) { + if ( ByteBuffer.class.equals(Utils.getJavaType(result_type)) ) + writer.println("\t\treturn " + Utils.RESULT_VAR_NAME + ".order(ByteOrder.nativeOrder());"); // safeNewBuffer returns a direct ByteBuffer with BIG_ENDIAN order. + else + writer.println("\t\treturn " + Utils.RESULT_VAR_NAME + ";"); + } else Utils.printGLReturnPost(writer, method, method.getAnnotation(GLreturn.class)); } writer.println("\t}"); @@ -490,7 +493,7 @@ cachedReference != null && (mode != Mode.BUFFEROBJECT || param.getAnnotation(BufferObject.class) == null) && param.getAnnotation(Result.class) == null) { - writer.print("\t\t" + Utils.CHECKS_CLASS_NAME + ".getReferences(caps)."); + writer.print("\t\tif ( LWJGLUtil.CHECKS ) " + Utils.CHECKS_CLASS_NAME + ".getReferences(caps)."); if(cachedReference.name().length() > 0) { writer.print(cachedReference.name()); } else { Modified: trunk/LWJGL/src/templates/org/lwjgl/opengl/ATI_vertex_array_object.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/ATI_vertex_array_object.java 2010-04-22 18:32:46 UTC (rev 3333) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/ATI_vertex_array_object.java 2010-04-22 23:21:48 UTC (rev 3334) @@ -71,6 +71,11 @@ @StripPostfix("params") void glGetObjectBufferivATI(@GLuint int buffer, @GLenum int pname, @OutParameter @Check IntBuffer params); + @Alternate("glGetObjectBufferivATI") + @GLreturn("params") + @StripPostfix("params") + void glGetObjectBufferivATI2(@GLuint int buffer, @GLenum int pname, @OutParameter IntBuffer params); + void glFreeObjectBufferATI(@GLuint int buffer); void glArrayObjectATI(@GLenum int array, int size, @GLenum int type, @GLsizei int stride, @GLuint int buffer, @GLuint int offset); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2010-04-22 18:32:53
|
Revision: 3333 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3333&view=rev Author: kappa1 Date: 2010-04-22 18:32:46 +0000 (Thu, 22 Apr 2010) Log Message: ----------- Remove extra permissions from XRandR and just allow minimal permissions needed by the LinuxDisplay. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2010-04-20 18:21:05 UTC (rev 3332) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2010-04-22 18:32:46 UTC (rev 3333) @@ -48,6 +48,9 @@ import org.lwjgl.LWJGLUtil; import org.lwjgl.opengl.XRandR.Screen; +import java.security.AccessController; +import java.security.PrivilegedAction; + final class LinuxDisplay implements DisplayImplementation { /* X11 constants */ public final static int CurrentTime = 0; @@ -524,7 +527,12 @@ try { if( current_displaymode_extension == XRANDR && savedXrandrConfig.length > 0 ) { - XRandR.setConfiguration( savedXrandrConfig ); + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + XRandR.setConfiguration( savedXrandrConfig ); + return null; + } + }); } else { @@ -615,7 +623,11 @@ throw new LWJGLException("No modes available"); switch (current_displaymode_extension) { case XRANDR: - savedXrandrConfig = XRandR.getConfiguration(); + savedXrandrConfig = (Screen[])AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return XRandR.getConfiguration(); + } + }); saved_mode = getCurrentXRandrMode(); break; case XF86VIDMODE: @@ -890,7 +902,12 @@ try { if( current_displaymode_extension == XRANDR && savedXrandrConfig.length > 0 ) { - XRandR.setConfiguration( savedXrandrConfig ); + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + XRandR.setConfiguration( savedXrandrConfig ); + return null; + } + }); } else { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-04-20 18:21:05 UTC (rev 3332) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-04-22 18:32:46 UTC (rev 3333) @@ -40,8 +40,6 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; -import java.security.AccessController; -import java.security.PrivilegedAction; /** * Utility for working with the xrandr commmand-line utility. Assumes @@ -105,12 +103,7 @@ * xrandr is not supported */ public static Screen[] getConfiguration() { - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - populate(); - return null; - } - }); + populate(); return (Screen[]) current.clone(); } @@ -119,20 +112,11 @@ * @param screens * The desired screen set, may not be <code>null</code> */ - public static void setConfiguration(final Screen[]/* ... */screens) { + public static void setConfiguration(Screen[]/* ... */screens) { if (screens.length == 0) { throw new IllegalArgumentException("Must specify at least one screen"); } - - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - setScreen(screens); - return null; - } - }); - } - - private static void setScreen(Screen[] screens) { + List/* <String> */cmd = new ArrayList/* <String> */(); cmd.add("xrandr"); @@ -173,6 +157,7 @@ } catch (IOException e) { e.printStackTrace(); } + } /** @@ -180,13 +165,7 @@ * xrandr is not supported */ public static String[] getScreenNames() { - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - populate(); - return null; - } - }); - + populate(); return (String[]) screens.keySet().toArray(new String[screens.size()]); } @@ -196,13 +175,7 @@ * <code>null</code> if there is no such screen */ public static Screen[] getResolutions(String name) { - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - populate(); - return null; - } - }); - + populate(); // clone the array to prevent held copies being altered return (Screen[]) ((Screen[]) screens.get(name)).clone(); } @@ -274,4 +247,4 @@ return name + " " + width + "x" + height + " @ " + xPos + "x" + yPos; } } -} +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2010-04-20 18:21:12
|
Revision: 3332 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3332&view=rev Author: spasi Date: 2010-04-20 18:21:05 +0000 (Tue, 20 Apr 2010) Log Message: ----------- Added support for a new Drawable type (SharedDrawable) that shares its context with another Drawable. Added new methods to the Drawable interface (makeCurrent, releaseContext, destroy). Added a background thread texture loading test (using either Pbuffer or SharedDrawable). Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java trunk/LWJGL/src/java/org/lwjgl/opengl/Context.java trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java trunk/LWJGL/src/java/org/lwjgl/test/opengl/awt/DemoBox.java Added Paths: ----------- trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/ trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoadTest.java trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java 2010-04-16 19:06:53 UTC (rev 3331) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -109,6 +109,16 @@ return context; } + public Context createSharedContext() throws LWJGLException { + synchronized ( GlobalLock.lock ) { + synchronized ( SYNC_LOCK ) { + if ( context == null ) throw new IllegalStateException("Canvas not yet displayable"); + + return new Context(peer_info, context.getContextAttribs(), context); + } + } + } + /** Constructor using the default PixelFormat. */ public AWTGLCanvas() throws LWJGLException { this(new PixelFormat()); @@ -175,7 +185,7 @@ */ public void removeNotify() { synchronized ( SYNC_LOCK ) { - destroyContext(); + destroy(); super.removeNotify(); } } @@ -225,7 +235,7 @@ } /** Destroy the OpenGL context. This happens when the component becomes undisplayable */ - private void destroyContext() { + public final void destroy() { synchronized ( SYNC_LOCK ) { try { if ( context != null ) { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Context.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Context.java 2010-04-16 19:06:53 UTC (rev 3331) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Context.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -61,7 +61,7 @@ private final ByteBuffer handle; private final PeerInfo peer_info; - private final IntBuffer attribList; + private final ContextAttribs contextAttribs; private final boolean forwardCompatible; /** Whether the context has been destroyed */ @@ -94,6 +94,10 @@ return peer_info; } + ContextAttribs getContextAttribs() { + return contextAttribs; + } + static Context getCurrentContext() { return (Context)current_context_local.get(); } @@ -109,6 +113,9 @@ GLContext.loadOpenGLLibrary(); try { this.peer_info = peer_info; + this.contextAttribs = attribs; + + IntBuffer attribList; if ( attribs != null ) { attribList = attribs.getAttribList(); forwardCompatible = attribs.isForwardCompatible(); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java 2010-04-16 19:06:53 UTC (rev 3331) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Display.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -143,6 +143,26 @@ return isCreated() ? context : null; } } + + public Context createSharedContext() throws LWJGLException { + synchronized ( GlobalLock.lock ) { + if ( !isCreated() ) throw new IllegalStateException("Display must be created."); + + return new Context(peer_info, context.getContextAttribs(), context); + } + } + + public void makeCurrent() throws LWJGLException { + Display.makeCurrent(); + } + + public void releaseContext() throws LWJGLException { + Display.releaseContext(); + } + + public void destroy() { + Display.destroy(); + } }; } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java 2010-04-16 19:06:53 UTC (rev 3331) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Drawable.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -31,6 +31,8 @@ */ package org.lwjgl.opengl; +import org.lwjgl.LWJGLException; + /** * The Drawable interface describes an OpenGL drawable with an associated * Context. @@ -39,5 +41,38 @@ */ public interface Drawable { + + /** + * [INTERNAL USE ONLY] Returns the Drawable's Context. + * + * @return the Drawable's Context + */ Context getContext(); + + /** + * [INTERNAL USE ONLY] Creates a new Context that is shared with the Drawable's Context. + * + * @return a Context shared with the Drawable's Context. + */ + Context createSharedContext() throws LWJGLException; + + /** + * Makes the Drawable's context current in the current thread. + * + * @throws LWJGLException + */ + void makeCurrent() throws LWJGLException; + + /** + * If the Drawable's context is current in the current thread, no context will be current after a call to this method. + * + * @throws LWJGLException + */ + void releaseContext() throws LWJGLException; + + /** + * Destroys the Drawable. + */ + void destroy(); + } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java 2010-04-16 19:06:53 UTC (rev 3331) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Pbuffer.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -255,6 +255,12 @@ return context; } + public Context createSharedContext() throws LWJGLException { + synchronized ( GlobalLock.lock ) { + return new Context(peer_info, context.getContextAttribs(), context); + } + } + private void checkDestroyed() { if (destroyed) throw new IllegalStateException("Pbuffer is destroyed"); @@ -281,6 +287,12 @@ context.makeCurrent(); } + public void releaseContext() throws LWJGLException { + checkDestroyed(); + if ( context.isCurrent() ) + Context.releaseCurrentContext(); + } + /** * Gets the Pbuffer capabilities. * Added: trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/SharedDrawable.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +import org.lwjgl.LWJGLException; +import org.lwjgl.LWJGLUtil; + +/** + * @author Spasi + * @since 20 \xC1\xF0\xF1 2010 + */ + +/** + * A Drawable implementation that shares its context with another Drawable. This is useful + * for background loading of resources. See org.lwjgl.test.opengl.multithread.BackgroundLoad + * for an example. + * + * @author Spasi + */ +public final class SharedDrawable implements Drawable { + + private Context context; + + private boolean destroyed; + + public SharedDrawable(final Drawable drawable) throws LWJGLException { + this.context = drawable.createSharedContext(); + } + + public Context getContext() { + return context; + } + + public Context createSharedContext() { + throw new UnsupportedOperationException(); + } + + public void makeCurrent() throws LWJGLException { + checkDestroyed(); + context.makeCurrent(); + + } + + public void releaseContext() throws LWJGLException { + checkDestroyed(); + if ( context.isCurrent() ) + Context.releaseCurrentContext(); + } + + public void destroy() { + if ( destroyed ) + return; + + try { + context.forceDestroy(); + destroyed = true; + } catch (LWJGLException e) { + LWJGLUtil.log("Exception occurred while destroying SharedDrawable: " + e); + } + } + + private void checkDestroyed() { + if ( destroyed ) + throw new IllegalStateException("SharedDrawable is destroyed"); + } + +} \ No newline at end of file Modified: trunk/LWJGL/src/java/org/lwjgl/test/opengl/awt/DemoBox.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opengl/awt/DemoBox.java 2010-04-16 19:06:53 UTC (rev 3331) +++ trunk/LWJGL/src/java/org/lwjgl/test/opengl/awt/DemoBox.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -150,7 +150,7 @@ addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { - demoCanvas.destroy(); + demoCanvas.destroyCanvas(); dispose(); System.exit(0); } @@ -269,7 +269,7 @@ } } - public void destroy() { + public void destroyCanvas() { setActiveDemo(null); renderThread = null; } Added: trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoadTest.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoadTest.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoadTest.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2002-2008 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.opengl.multithread; + +import org.lwjgl.BufferUtils; +import org.lwjgl.LWJGLException; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.*; +import org.lwjgl.util.glu.GLU; +import org.lwjgl.util.glu.Sphere; + +import java.nio.FloatBuffer; + +/** + * A test of loading textures in a background thread. This can be achieved in 2 ways: + * <br> + * a) A dummy Pbuffer is created and its context shares the rendering context.<br> + * b) A SharedDrawable is used.<br> + * <br> + * When the test starts, there's no texture created and rendering is done with texturing disabled. + * 2 seconds later a "dummy" texture is created in the background thread and texturing is enabled. This dummy texture + * can by anything the developer wants to have as a placeholder while textures are being loaded. + * Finally, 5 seconds later the "true" texture is loaded and displayed. This texture will change every 5 seconds after + * that, until the test is terminated (ESC key). + * + * @author Spasi + */ +public final class BackgroundLoadTest { + + private static boolean run = true; + + private static BackgroundLoader backgroundLoader; + + private static Sphere sphere; + + private BackgroundLoadTest() { + } + + public static void main(String[] args) { + initialize(args); + + Util.checkGLError(); + + try { + backgroundLoader.start(); + } catch (LWJGLException e) { + kill("Failed to start background thread.", e); + } + + Util.checkGLError(); + + while ( run ) { + if ( !Display.isVisible() ) + Thread.yield(); + else { + handleIO(); + + GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); + + renderObject(); + + Util.checkGLError(); + + // Restore camera position. + GL11.glPopMatrix(); + GL11.glPushMatrix(); + } + + Display.update(); + + if ( Display.isCloseRequested() ) + break; + } + + cleanup(); + System.exit(0); + } + + private static void initialize(String[] args) { + if ( args.length != 1 ) + argsError(); + + DisplayMode displayMode = null; + + try { + DisplayMode[] modes = Display.getAvailableDisplayModes(); + + displayMode = chooseMode(modes, 1024, 768); + if ( displayMode == null ) + displayMode = chooseMode(modes, 800, 600); + if ( displayMode == null ) + displayMode = chooseMode(modes, 640, 480); + if ( displayMode == null ) + kill("Failed to set an appropriate display mode."); + + System.out.println("Setting display mode to: " + displayMode); + Display.setDisplayMode(displayMode); + Display.setTitle("Background Loading Test"); + Display.create(new PixelFormat(8, 24, 0)); + } catch (LWJGLException e) { + kill(e.getMessage()); + } + + GL11.glViewport(0, 0, displayMode.getWidth(), displayMode.getHeight()); + + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GLU.gluPerspective(45, displayMode.getWidth() / (float)displayMode.getHeight(), 1.0f, 10.0f); + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + + // Setup camera position. + GL11.glTranslatef(0.0f, 0.0f, -4.0f); + GL11.glRotatef(90.0f, 1.0f, 0.0f, 0.0f); + GL11.glPushMatrix(); + + GL11.glClearDepth(1.0f); + GL11.glDepthFunc(GL11.GL_LEQUAL); + + GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST); + + GL11.glFrontFace(GL11.GL_CCW); + GL11.glPolygonMode(GL11.GL_FRONT, GL11.GL_FILL); + + GL11.glCullFace(GL11.GL_BACK); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glAlphaFunc(GL11.GL_GREATER, 0.0f); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_BLEND); + + GL11.glShadeModel(GL11.GL_SMOOTH); + + final FloatBuffer vectorBuffer = BufferUtils.createFloatBuffer(4); + + vectorBuffer.clear(); + vectorBuffer.put(0, 1.0f).put(1, 1.0f).put(2, 1.0f).put(3, 1.0f); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, vectorBuffer); + + vectorBuffer.put(0, 1.0f).put(1, 1.0f).put(2, 1.0f).put(3, 1.0f); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_AMBIENT, vectorBuffer); + + vectorBuffer.put(0, 1.0f).put(1, 1.0f).put(2, 0.5f).put(3, 1.0f); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_SPECULAR, vectorBuffer); + + vectorBuffer.put(0, -1.0f / 3.0f).put(1, 1.0f / 3.0f).put(2, 1.0f / 3.0f).put(3, 0.0f); // Infinite + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, vectorBuffer); + + vectorBuffer.put(0, 0.2f).put(1, 0.2f).put(2, 0.2f).put(3, 1.0f); + GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, vectorBuffer); + + GL11.glEnable(GL11.GL_LIGHT0); + GL11.glEnable(GL11.GL_LIGHTING); + + sphere = new Sphere(); + + if ( "PB".equalsIgnoreCase(args[0]) ) { + backgroundLoader = new BackgroundLoader() { + Drawable getDrawable() throws LWJGLException { + return new Pbuffer(2, 2, new PixelFormat(8, 24, 0), Display.getDrawable()); + } + }; + } else if ( "SD".equalsIgnoreCase(args[0]) ) { + backgroundLoader = new BackgroundLoader() { + Drawable getDrawable() throws LWJGLException { + return new SharedDrawable(Display.getDrawable()); + } + }; + } else { + argsError(); + } + } + + private static void handleIO() { + if ( Keyboard.getNumKeyboardEvents() != 0 ) { + while ( Keyboard.next() ) { + if ( Keyboard.getEventKeyState() ) + continue; + + switch ( Keyboard.getEventKey() ) { + case Keyboard.KEY_ESCAPE: + run = false; + break; + } + } + } + + while ( Mouse.next() ) ; + } + + static void renderObject() { + GL11.glColor3f(1.0f, 1.0f, 1.0f); + + int texID = backgroundLoader.getTexID(); + if ( texID == 0 ) { + sphere.setTextureFlag(false); + GL11.glDisable(GL11.GL_TEXTURE_2D); + } else { + sphere.setTextureFlag(true); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID); + } + + sphere.draw(1.0f, 32, 32); + + if ( texID != 0 ) { // Unbind so we can update from the background thread. + GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); + GL11.glDisable(GL11.GL_TEXTURE_2D); + } + } + + private static DisplayMode chooseMode(DisplayMode[] modes, int width, int height) { + DisplayMode bestMode = null; + + for ( int i = 0; i < modes.length; i++ ) { + DisplayMode mode = modes[i]; + if ( mode.getWidth() == width && mode.getHeight() == height && mode.getFrequency() <= 85 ) { + if ( bestMode == null || (mode.getBitsPerPixel() >= bestMode.getBitsPerPixel() && mode.getFrequency() > bestMode.getFrequency()) ) + bestMode = mode; + } + } + + return bestMode; + } + + private static void cleanup() { + backgroundLoader.cleanup(); + + Thread.yield(); // Let background thread finish. + + if ( Display.isCreated() ) + Display.destroy(); + } + + private static void argsError() { + System.out.println("\nInvalid program arguments."); + System.out.println("\nUsage: BackgroundLoadTest <testType>, where <testType> argument can be one of the following:\n"); + System.out.println("PB\t- Use a Pbuffer context for the background thread."); + System.out.println("SD\t- Use a SharedDrawable context for the background thread."); + + cleanup(); + System.exit(-1); + } + + static void kill(String reason) { + System.out.println("The BackgroundLoadTest program was terminated because an error occured.\n"); + System.out.println("Reason: " + (reason == null ? "Unknown" : reason)); + + cleanup(); + System.exit(-1); + } + + static void kill(String reason, Throwable t) { + System.out.println("The BackgroundLoadTest program was terminated because an exception occured.\n"); + System.out.println("Reason: " + (reason == null ? "Unknown" : reason)); + + System.out.println("Exception message: " + t.getMessage()); + + cleanup(); + System.exit(-1); + } + +} \ No newline at end of file Added: trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/test/opengl/multithread/BackgroundLoader.java 2010-04-20 18:21:05 UTC (rev 3332) @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2002-2008 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. + */ +/* + * Created by LWJGL. + * User: spasi + * Date: 2004-03-30 + * Time: 8:41:42 pm + */ +package org.lwjgl.test.opengl.multithread; + +import org.lwjgl.BufferUtils; +import org.lwjgl.LWJGLException; +import org.lwjgl.opengl.Drawable; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.Color; +import org.lwjgl.util.ReadableColor; + +import java.nio.ByteBuffer; + +abstract class BackgroundLoader { + + private static final int WIDTH = 32; + private static final int HEIGHT = 32; + + private static final Object lock = new Object(); + + private Drawable drawable; + + private boolean running; + + private ByteBuffer texture; + private int texID; + + protected BackgroundLoader() { + running = true; + texture = BufferUtils.createByteBuffer(WIDTH * HEIGHT * 3); + } + + abstract Drawable getDrawable() throws LWJGLException; + + void cleanup() { + running = false; + } + + void start() throws LWJGLException { + new Thread(new Runnable() { + public void run() { + System.out.println("-- Background Thread started --"); + + System.out.println("** Sleeping, no texture created yet **"); + + long start = System.currentTimeMillis(); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + try { + drawable = getDrawable(); + drawable.makeCurrent(); + } catch (LWJGLException e) { + throw new RuntimeException(e); + } + + System.out.println("** Drawable created **"); + + synchronized ( lock ) { + // Create a "dummy" texture while we wait for texture IO + createCheckerTexture(Color.RED, Color.WHITE, 2); + + texID = GL11.glGenTextures(); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, WIDTH, HEIGHT, 0, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, texture); + + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); + } + + System.out.println("** Dummy texture created **"); + + long lastTextureCreated = System.currentTimeMillis(); // Delay first texture creation + int count = 0; + while ( running ) { + long time = System.currentTimeMillis(); + if ( time - lastTextureCreated < 5000 ) { // Update the texture every 5 seconds + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + continue; + } + + // Create the "true" texture + if ( count % 2 == 0 ) + createGradientTexture(Color.RED, Color.BLUE); + else + createGradientTexture(Color.GREEN, Color.YELLOW); + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, WIDTH, HEIGHT, 0, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, texture); + + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); + + System.out.println("** Created new gradient texture **"); + + lastTextureCreated = System.currentTimeMillis(); + count++; + } + + drawable.destroy(); + + System.out.println("-- Background Thread finished --"); + } + }).start(); + } + + int getTexID() { + synchronized ( lock ) { + return texID; + } + } + + private void createCheckerTexture(final ReadableColor a, final ReadableColor b, final int size) { + int i = 0; + for ( int y = 0; y < HEIGHT; y++ ) { + for ( int x = 0; x < WIDTH; x++ ) { + ReadableColor c = (x / size) % 2 == 0 ? ((y / size) % 2 == 0 ? a : b) : ((y / size) % 2 == 0 ? b : a); + texture.put(i + 0, c.getRedByte()); + texture.put(i + 1, c.getGreenByte()); + texture.put(i + 2, c.getBlueByte()); + i += 3; + } + } + } + + private void createGradientTexture(final ReadableColor a, final ReadableColor b) { + float l = 0.0f; + int i = 0; + for ( int y = 0; y < HEIGHT; y++ ) { + for ( int x = 0; x < WIDTH; x++ ) { + texture.put(i + 0, lerp(a.getRed(), b.getRed(), l)); + texture.put(i + 1, lerp(a.getGreen(), b.getGreen(), l)); + texture.put(i + 2, lerp(a.getBlue(), b.getBlue(), l)); + i += 3; + } + l += (1.0f / (HEIGHT - 1)); + } + } + + private static byte lerp(final int a, final int b, final float l) { + return (byte)Math.round(((1.0f - l) * a + l * b)); + } + +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2010-04-16 19:06:59
|
Revision: 3331 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3331&view=rev Author: kappa1 Date: 2010-04-16 19:06:53 +0000 (Fri, 16 Apr 2010) Log Message: ----------- minor tweak to XRandR class to add AccessControllers to remaining methods that need it. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-04-15 20:38:39 UTC (rev 3330) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-04-16 19:06:53 UTC (rev 3331) @@ -119,11 +119,20 @@ * @param screens * The desired screen set, may not be <code>null</code> */ - public static void setConfiguration(Screen[]/* ... */screens) { + public static void setConfiguration(final Screen[]/* ... */screens) { if (screens.length == 0) { throw new IllegalArgumentException("Must specify at least one screen"); } - + + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + setScreen(screens); + return null; + } + }); + } + + private static void setScreen(Screen[] screens) { List/* <String> */cmd = new ArrayList/* <String> */(); cmd.add("xrandr"); @@ -164,7 +173,6 @@ } catch (IOException e) { e.printStackTrace(); } - } /** @@ -172,7 +180,13 @@ * xrandr is not supported */ public static String[] getScreenNames() { - populate(); + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + populate(); + return null; + } + }); + return (String[]) screens.keySet().toArray(new String[screens.size()]); } @@ -182,7 +196,13 @@ * <code>null</code> if there is no such screen */ public static Screen[] getResolutions(String name) { - populate(); + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + populate(); + return null; + } + }); + // clone the array to prevent held copies being altered return (Screen[]) ((Screen[]) screens.get(name)).clone(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-04-15 20:38:46
|
Revision: 3330 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3330&view=rev Author: matzon Date: 2010-04-15 20:38:39 +0000 (Thu, 15 Apr 2010) Log Message: ----------- fixed tag name Added Paths: ----------- tags/lwjgl2.4.2/ Removed Paths: ------------- tags/lwjgl.2.4.2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-04-15 20:18:50
|
Revision: 3329 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3329&view=rev Author: matzon Date: 2010-04-15 20:18:43 +0000 (Thu, 15 Apr 2010) Log Message: ----------- tagging 2.4.2 Added Paths: ----------- tags/lwjgl.2.4.2/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-04-15 18:04:00
|
Revision: 3328 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3328&view=rev Author: matzon Date: 2010-04-15 18:03:54 +0000 (Thu, 15 Apr 2010) Log Message: ----------- 2.4.2 release Modified Paths: -------------- trunk/LWJGL/platform_build/build-definitions.xml trunk/LWJGL/src/java/org/lwjgl/Sys.java Modified: trunk/LWJGL/platform_build/build-definitions.xml =================================================================== --- trunk/LWJGL/platform_build/build-definitions.xml 2010-04-14 22:34:43 UTC (rev 3327) +++ trunk/LWJGL/platform_build/build-definitions.xml 2010-04-15 18:03:54 UTC (rev 3328) @@ -12,7 +12,7 @@ <property name="lwjgl.docs" location="doc" /> <property name="lwjgl.temp" location="temp" /> <property name="lwjgl.res" location="res" /> - <property name="lwjgl.version" value="2.4.1" /> + <property name="lwjgl.version" value="2.4.2" /> <property name="opengl-template-pattern" value="org/lwjgl/opengl/GL*.java,org/lwjgl/opengl/ARB*.java,org/lwjgl/opengl/AMD*.java,org/lwjgl/opengl/APPLE*.java,org/lwjgl/opengl/ATI*.java,org/lwjgl/opengl/EXT*.java,org/lwjgl/opengl/NV*.java,org/lwjgl/opengl/NVX*.java,org/lwjgl/opengl/HP*.java,org/lwjgl/opengl/IBM*.java,org/lwjgl/opengl/SUN*.java,org/lwjgl/opengl/SGIS*.java,org/lwjgl/opengl/GREMEDY*.java"/> <!-- ================================================================== --> Modified: trunk/LWJGL/src/java/org/lwjgl/Sys.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/Sys.java 2010-04-14 22:34:43 UTC (rev 3327) +++ trunk/LWJGL/src/java/org/lwjgl/Sys.java 2010-04-15 18:03:54 UTC (rev 3328) @@ -54,7 +54,7 @@ private static final String JNI_LIBRARY_NAME = "lwjgl"; /** Current version of library */ - private static final String VERSION = "2.4.1"; + private static final String VERSION = "2.4.2"; /** The implementation instance to delegate platform specific behavior to */ private final static SysImplementation implementation; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ka...@us...> - 2010-04-14 22:34:49
|
Revision: 3327 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3327&view=rev Author: kappa1 Date: 2010-04-14 22:34:43 +0000 (Wed, 14 Apr 2010) Log Message: ----------- fix: When using unsigned jars with signed lwjgl jars it fails when creating a Display on linux with an AccessController error. This is due to the new XRandR class missing a AccessController.doPriviledged method when it requires out of sandbox access. (LWJGL Applet Distribution is borken on linux without this fix) Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-04-14 20:48:01 UTC (rev 3326) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/XRandR.java 2010-04-14 22:34:43 UTC (rev 3327) @@ -40,6 +40,8 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; +import java.security.AccessController; +import java.security.PrivilegedAction; /** * Utility for working with the xrandr commmand-line utility. Assumes @@ -103,7 +105,12 @@ * xrandr is not supported */ public static Screen[] getConfiguration() { - populate(); + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + populate(); + return null; + } + }); return (Screen[]) current.clone(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2010-04-14 20:48:09
|
Revision: 3326 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3326&view=rev Author: matzon Date: 2010-04-14 20:48:01 +0000 (Wed, 14 Apr 2010) Log Message: ----------- tagging 2.4.1 Added Paths: ----------- tags/lwjgl2.4.1/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sp...@us...> - 2010-04-14 14:58:25
|
Revision: 3325 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3325&view=rev Author: spasi Date: 2010-04-14 14:58:18 +0000 (Wed, 14 Apr 2010) Log Message: ----------- New extensions: AMD_conservative_depth, EXT_shader_image_load_store, EXT_vertex_attrib_64bit, NV_gpu_program5, NV_gpu_shader5, NV_shader_buffer_store, NV_tessellation_program5, NV_vertex_attrib_integer_64bit Modified Paths: -------------- trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_program.java trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_gpu_shader4.java trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_load.java Added Paths: ----------- trunk/LWJGL/src/templates/org/lwjgl/opengl/AMD_conservative_depth.java trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_shader_image_load_store.java trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_vertex_attrib_64bit.java trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_program5.java trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_shader5.java trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_store.java trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_tessellation_program5.java trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_vertex_attrib_integer_64bit.java Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/AMD_conservative_depth.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/AMD_conservative_depth.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/AMD_conservative_depth.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +public interface AMD_conservative_depth { +} \ No newline at end of file Modified: trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_program.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_program.java 2010-04-13 20:28:04 UTC (rev 3324) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_program.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -137,13 +137,13 @@ void glDisableVertexAttribArrayARB(@GLuint int index); @StripPostfix("params") - void glGetVertexAttribfvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check FloatBuffer params); + void glGetVertexAttribfvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") FloatBuffer params); @StripPostfix("params") - void glGetVertexAttribdvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check DoubleBuffer params); + void glGetVertexAttribdvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") DoubleBuffer params); @StripPostfix("params") - void glGetVertexAttribivARB(@GLuint int index, @GLenum int pname, @OutParameter @Check IntBuffer params); + void glGetVertexAttribivARB(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") IntBuffer params); @StripPostfix("result") void glGetVertexAttribPointervARB(@GLuint int index, @GLenum int pname, @Result @GLvoid ByteBuffer result); Modified: trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java 2010-04-13 20:28:04 UTC (rev 3324) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -195,13 +195,13 @@ int glGetAttribLocationARB(@GLhandleARB int programObj, @NullTerminated CharSequence name); @StripPostfix("params") - void glGetVertexAttribfvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check FloatBuffer params); + void glGetVertexAttribfvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") FloatBuffer params); @StripPostfix("params") - void glGetVertexAttribdvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check DoubleBuffer params); + void glGetVertexAttribdvARB(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") DoubleBuffer params); @StripPostfix("params") - void glGetVertexAttribivARB(@GLuint int index, @GLenum int pname, @OutParameter @Check IntBuffer params); + void glGetVertexAttribivARB(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") IntBuffer params); @StripPostfix("result") void glGetVertexAttribPointervARB(@GLuint int index, @GLenum int pname, @Result @GLvoid ByteBuffer result); Modified: trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_gpu_shader4.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_gpu_shader4.java 2010-04-13 20:28:04 UTC (rev 3324) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_gpu_shader4.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -168,7 +168,7 @@ @GLuint Buffer buffer); @StripPostfix("params") - void glGetVertexAttribIivEXT(@GLuint int index, @GLenum int pname, @OutParameter @Check("4")IntBuffer params); + void glGetVertexAttribIivEXT(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") IntBuffer params); @StripPostfix("params") void glGetVertexAttribIuivEXT(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") @GLuint IntBuffer params); Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_shader_image_load_store.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_shader_image_load_store.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_shader_image_load_store.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +import org.lwjgl.util.generator.GLbitfield; +import org.lwjgl.util.generator.GLenum; +import org.lwjgl.util.generator.GLuint; + +public interface EXT_shader_image_load_store { + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, + * GetFloatv, and GetDoublev: + */ + int GL_MAX_IMAGE_UNITS_EXT = 0x8F38; + int GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT = 0x8F39; + int GL_MAX_IMAGE_SAMPLES_EXT = 0x906D; + + /** Accepted by the <target> parameter of GetIntegeri_v and GetBooleani_v: */ + int GL_IMAGE_BINDING_NAME_EXT = 0x8F3A; + int GL_IMAGE_BINDING_LEVEL_EXT = 0x8F3B; + int GL_IMAGE_BINDING_LAYERED_EXT = 0x8F3C; + int GL_IMAGE_BINDING_LAYER_EXT = 0x8F3D; + int GL_IMAGE_BINDING_ACCESS_EXT = 0x8F3E; + int GL_IMAGE_BINDING_FORMAT_EXT = 0x906E; + + /** Accepted by the <barriers> parameter of MemoryBarrierEXT: */ + int GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT = 0x00000001; + int GL_ELEMENT_ARRAY_BARRIER_BIT_EXT = 0x00000002; + int GL_UNIFORM_BARRIER_BIT_EXT = 0x00000004; + int GL_TEXTURE_FETCH_BARRIER_BIT_EXT = 0x00000008; + int GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT = 0x00000020; + int GL_COMMAND_BARRIER_BIT_EXT = 0x00000040; + int GL_PIXEL_BUFFER_BARRIER_BIT_EXT = 0x00000080; + int GL_TEXTURE_UPDATE_BARRIER_BIT_EXT = 0x00000100; + int GL_BUFFER_UPDATE_BARRIER_BIT_EXT = 0x00000200; + int GL_FRAMEBUFFER_BARRIER_BIT_EXT = 0x00000400; + int GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT = 0x00000800; + int GL_ATOMIC_COUNTER_BARRIER_BIT_EXT = 0x00001000; + int GL_ALL_BARRIER_BITS_EXT = 0xFFFFFFFF; + + /** Returned by the <type> parameter of GetActiveUniform: */ + int GL_IMAGE_1D_EXT = 0x904C; + int GL_IMAGE_2D_EXT = 0x904D; + int GL_IMAGE_3D_EXT = 0x904E; + int GL_IMAGE_2D_RECT_EXT = 0x904F; + int GL_IMAGE_CUBE_EXT = 0x9050; + int GL_IMAGE_BUFFER_EXT = 0x9051; + int GL_IMAGE_1D_ARRAY_EXT = 0x9052; + int GL_IMAGE_2D_ARRAY_EXT = 0x9053; + int GL_IMAGE_CUBE_MAP_ARRAY_EXT = 0x9054; + int GL_IMAGE_2D_MULTISAMPLE_EXT = 0x9055; + int GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x9056; + int GL_INT_IMAGE_1D_EXT = 0x9057; + int GL_INT_IMAGE_2D_EXT = 0x9058; + int GL_INT_IMAGE_3D_EXT = 0x9059; + int GL_INT_IMAGE_2D_RECT_EXT = 0x905A; + int GL_INT_IMAGE_CUBE_EXT = 0x905B; + int GL_INT_IMAGE_BUFFER_EXT = 0x905C; + int GL_INT_IMAGE_1D_ARRAY_EXT = 0x905D; + int GL_INT_IMAGE_2D_ARRAY_EXT = 0x905E; + int GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 0x905F; + int GL_INT_IMAGE_2D_MULTISAMPLE_EXT = 0x9060; + int GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x9061; + int GL_UNSIGNED_INT_IMAGE_1D_EXT = 0x9062; + int GL_UNSIGNED_INT_IMAGE_2D_EXT = 0x9063; + int GL_UNSIGNED_INT_IMAGE_3D_EXT = 0x9064; + int GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT = 0x9065; + int GL_UNSIGNED_INT_IMAGE_CUBE_EXT = 0x9066; + int GL_UNSIGNED_INT_IMAGE_BUFFER_EXT = 0x9067; + int GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT = 0x9068; + int GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT = 0x9069; + int GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 0x906A; + int GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT = 0x906B; + int GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x906C; + + void glBindImageTextureEXT(@GLuint int index, @GLuint int texture, int level, boolean layered, int layer, @GLenum int access, int format); + + void glMemoryBarrierEXT(@GLbitfield int barriers); + +} \ No newline at end of file Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_vertex_attrib_64bit.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_vertex_attrib_64bit.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/EXT_vertex_attrib_64bit.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.Buffer; +import java.nio.DoubleBuffer; + +@Dependent +public interface EXT_vertex_attrib_64bit { + + /** Returned in the <type> parameter of GetActiveAttrib: */ + int GL_DOUBLE_VEC2_EXT = 0x8FFC; + int GL_DOUBLE_VEC3_EXT = 0x8FFD; + int GL_DOUBLE_VEC4_EXT = 0x8FFE; + int GL_DOUBLE_MAT2_EXT = 0x8F46; + int GL_DOUBLE_MAT3_EXT = 0x8F47; + int GL_DOUBLE_MAT4_EXT = 0x8F48; + int GL_DOUBLE_MAT2x3_EXT = 0x8F49; + int GL_DOUBLE_MAT2x4_EXT = 0x8F4A; + int GL_DOUBLE_MAT3x2_EXT = 0x8F4B; + int GL_DOUBLE_MAT3x4_EXT = 0x8F4C; + int GL_DOUBLE_MAT4x2_EXT = 0x8F4D; + int GL_DOUBLE_MAT4x3_EXT = 0x8F4E; + + void glVertexAttribL1dEXT(@GLuint int index, double x); + + void glVertexAttribL2dEXT(@GLuint int index, double x, double y); + + void glVertexAttribL3dEXT(@GLuint int index, double x, double y, double z); + + void glVertexAttribL4dEXT(@GLuint int index, double x, double y, double z, double w); + + @StripPostfix("v") + void glVertexAttribL1dvEXT(@GLuint int index, @Const @Check("1") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL2dvEXT(@GLuint int index, @Const @Check("2") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL3dvEXT(@GLuint int index, @Const @Check("3") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL4dvEXT(@GLuint int index, @Const @Check("4") DoubleBuffer v); + + void glVertexAttribLPointerEXT(@GLuint int index, int size, @Constant("GL11.GL_DOUBLE") @GLenum int type, @GLsizei int stride, + @CachedReference(index = "index", name = "glVertexAttribPointer_buffer") + @BufferObject(BufferKind.ArrayVBO) + @Check @Const @GLdouble Buffer pointer); + + @StripPostfix("params") + void glGetVertexAttribLdvEXT(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") DoubleBuffer params); + + @Dependent("EXT_direct_state_access") + void glVertexArrayVertexAttribLOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLuint int index, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); + +} \ No newline at end of file Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_program5.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_program5.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_program5.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +public interface NV_gpu_program5 { + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, + * GetFloatv, and GetDoublev: + */ + int GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV = 0x8E5A; + int GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV = 0x8E5B; + int GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV = 0x8E5C; + int GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV = 0x8E5D; + +} \ No newline at end of file Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_shader5.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_shader5.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_gpu_shader5.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.LongBuffer; + +@Dependent +public interface NV_gpu_shader5 { + + /** + * Returned by the <type> parameter of GetActiveAttrib, GetActiveUniform, and + * GetTransformFeedbackVarying: + */ + int GL_INT64_NV = 0x140E; + int GL_UNSIGNED_INT64_NV = 0x140F; + + int GL_INT8_NV = 0x8FE0; + int GL_INT8_VEC2_NV = 0x8FE1; + int GL_INT8_VEC3_NV = 0x8FE2; + int GL_INT8_VEC4_NV = 0x8FE3; + int GL_INT16_NV = 0x8FE4; + int GL_INT16_VEC2_NV = 0x8FE5; + int GL_INT16_VEC3_NV = 0x8FE6; + int GL_INT16_VEC4_NV = 0x8FE7; + int GL_INT64_VEC2_NV = 0x8FE9; + int GL_INT64_VEC3_NV = 0x8FEA; + int GL_INT64_VEC4_NV = 0x8FEB; + int GL_UNSIGNED_INT8_NV = 0x8FEC; + int GL_UNSIGNED_INT8_VEC2_NV = 0x8FED; + int GL_UNSIGNED_INT8_VEC3_NV = 0x8FEE; + int GL_UNSIGNED_INT8_VEC4_NV = 0x8FEF; + int GL_UNSIGNED_INT16_NV = 0x8FF0; + int GL_UNSIGNED_INT16_VEC2_NV = 0x8FF1; + int GL_UNSIGNED_INT16_VEC3_NV = 0x8FF2; + int GL_UNSIGNED_INT16_VEC4_NV = 0x8FF3; + int GL_UNSIGNED_INT64_VEC2_NV = 0x8FF5; + int GL_UNSIGNED_INT64_VEC3_NV = 0x8FF6; + int GL_UNSIGNED_INT64_VEC4_NV = 0x8FF7; + int GL_FLOAT16_NV = 0x8FF8; + int GL_FLOAT16_VEC2_NV = 0x8FF9; + int GL_FLOAT16_VEC3_NV = 0x8FFA; + int GL_FLOAT16_VEC4_NV = 0x8FFB; + + /** Accepted by the <primitiveMode> parameter of BeginTransformFeedback: */ + int GL_PATCHES = ARB_tessellation_shader.GL_PATCHES; + + void glUniform1i64NV(int location, @GLint64EXT long x); + + void glUniform2i64NV(int location, @GLint64EXT long x, @GLint64EXT long y); + + void glUniform3i64NV(int location, @GLint64EXT long x, @GLint64EXT long y, @GLint64EXT long z); + + void glUniform4i64NV(int location, @GLint64EXT long x, @GLint64EXT long y, @GLint64EXT long z, @GLint64EXT long w); + + @StripPostfix("value") + void glUniform1i64vNV(int location, @GLsizei int count, @Const @GLint64EXT @Check("1") LongBuffer value); + + @StripPostfix("value") + void glUniform2i64vNV(int location, @GLsizei int count, @Const @GLint64EXT @Check("2") LongBuffer value); + + @StripPostfix("value") + void glUniform3i64vNV(int location, @GLsizei int count, @Const @GLint64EXT @Check("3") LongBuffer value); + + @StripPostfix("value") + void glUniform4i64vNV(int location, @GLsizei int count, @Const @GLint64EXT @Check("4") LongBuffer value); + + void glUniform1ui64NV(int location, @GLuint64EXT long x); + + void glUniform2ui64NV(int location, @GLuint64EXT long x, @GLuint64EXT long y); + + void glUniform3ui64NV(int location, @GLuint64EXT long x, @GLuint64EXT long y, @GLuint64EXT long z); + + void glUniform4ui64NV(int location, @GLuint64EXT long x, @GLuint64EXT long y, @GLuint64EXT long z, @GLuint64EXT long w); + + @StripPostfix("value") + void glUniform1ui64vNV(int location, @GLsizei int count, @Const @GLuint64EXT @Check("1") LongBuffer value); + + @StripPostfix("value") + void glUniform2ui64vNV(int location, @GLsizei int count, @Const @GLuint64EXT @Check("2") LongBuffer value); + + @StripPostfix("value") + void glUniform3ui64vNV(int location, @GLsizei int count, @Const @GLuint64EXT @Check("3") LongBuffer value); + + @StripPostfix("value") + void glUniform4ui64vNV(int location, @GLsizei int count, @Const @GLuint64EXT @Check("4") LongBuffer value); + + @StripPostfix("params") + void glGetUniformi64vNV(@GLuint int program, int location, @GLint64EXT @Check LongBuffer params); + + @StripPostfix("params") + void glGetUniformui64vNV(@GLuint int program, int location, @GLuint64EXT @Check LongBuffer params); + + // ------------- + + @Dependent("EXT_direct_state_access") + void glProgramUniform1i64NV(@GLuint int program, int location, @GLint64EXT long x); + + @Dependent("EXT_direct_state_access") + void glProgramUniform2i64NV(@GLuint int program, int location, @GLint64EXT long x, @GLint64EXT long y); + + @Dependent("EXT_direct_state_access") + void glProgramUniform3i64NV(@GLuint int program, int location, @GLint64EXT long x, @GLint64EXT long y, @GLint64EXT long z); + + @Dependent("EXT_direct_state_access") + void glProgramUniform4i64NV(@GLuint int program, int location, @GLint64EXT long x, @GLint64EXT long y, @GLint64EXT long z, @GLint64EXT long w); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform1i64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLint64EXT @Check("1") LongBuffer value); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform2i64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLint64EXT @Check("2") LongBuffer value); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform3i64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLint64EXT @Check("3") LongBuffer value); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform4i64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLint64EXT @Check("4") LongBuffer value); + + @Dependent("EXT_direct_state_access") + void glProgramUniform1ui64NV(@GLuint int program, int location, @GLuint64EXT long x); + + @Dependent("EXT_direct_state_access") + void glProgramUniform2ui64NV(@GLuint int program, int location, @GLuint64EXT long x, @GLuint64EXT long y); + + @Dependent("EXT_direct_state_access") + void glProgramUniform3ui64NV(@GLuint int program, int location, @GLuint64EXT long x, @GLuint64EXT long y, @GLuint64EXT long z); + + @Dependent("EXT_direct_state_access") + void glProgramUniform4ui64NV(@GLuint int program, int location, @GLuint64EXT long x, @GLuint64EXT long y, @GLuint64EXT long z, @GLuint64EXT long w); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform1ui64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLuint64EXT @Check("1") LongBuffer value); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform2ui64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLuint64EXT @Check("2") LongBuffer value); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform3ui64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLuint64EXT @Check("3") LongBuffer value); + + @Dependent("EXT_direct_state_access") + @StripPostfix("value") + void glProgramUniform4ui64vNV(@GLuint int program, int location, @GLsizei int count, @Const @GLuint64EXT @Check("4") LongBuffer value); + +} \ No newline at end of file Modified: trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_load.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_load.java 2010-04-13 20:28:04 UTC (rev 3324) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_load.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -55,10 +55,10 @@ boolean glIsBufferResidentNV(@GLenum int target); - // TODO: These two are currently missing from the latest NV drivers, check again sometime. - //void glNamedMakeBufferResidentNV(@GLuint int buffer, @GLenum int access); - //void glNamedMakeBufferNonResidentNV(@GLuint int buffer); + void glMakeNamedBufferResidentNV(@GLuint int buffer, @GLenum int access); + void glMakeNamedBufferNonResidentNV(@GLuint int buffer); + boolean glIsNamedBufferResidentNV(@GLuint int buffer); @StripPostfix("params") @@ -88,7 +88,7 @@ void glUniformui64NV(int location, @GLuint64EXT long value); @StripPostfix("value") - void glUniformui64vNV(int location, @AutoSize("value") @GLsizei int count, @GLuint64EXT LongBuffer value); + void glUniformui64vNV(int location, @AutoSize("value") @GLsizei int count, @Const @GLuint64EXT LongBuffer value); @StripPostfix("params") void glGetUniformui64vNV(@GLuint int program, int location, @OutParameter @Check("1") @GLuint64EXT LongBuffer params); @@ -96,6 +96,6 @@ void glProgramUniformui64NV(@GLuint int program, int location, @GLuint64EXT long value); @StripPostfix("value") - void glProgramUniformui64vNV(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @GLuint64EXT LongBuffer value); + void glProgramUniformui64vNV(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const @GLuint64EXT LongBuffer value); } \ No newline at end of file Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_store.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_store.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_shader_buffer_store.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +public interface NV_shader_buffer_store { + + /** Accepted by the <barriers> parameter of MemoryBarrierNV: */ + int GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV = 0x00000010; + + /** Accepted by the <access> parameter of MakeBufferResidentNV: */ + int GL_READ_WRITE = GL15.GL_READ_WRITE; + int GL_WRITE_ONLY = GL15.GL_WRITE_ONLY; + +} \ No newline at end of file Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_tessellation_program5.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_tessellation_program5.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_tessellation_program5.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +public interface NV_tessellation_program5 { + + /** + * Accepted by the <cap> parameter of Disable, Enable, and IsEnabled, + * by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, + * and GetDoublev, and by the <target> parameter of ProgramStringARB, + * BindProgramARB, ProgramEnvParameter4[df][v]ARB, + * ProgramLocalParameter4[df][v]ARB, GetProgramEnvParameter[df]vARB, + * GetProgramLocalParameter[df]vARB, GetProgramivARB and + * GetProgramStringARB: + */ + int GL_TESS_CONTROL_PROGRAM_NV = 0x891E; + int GL_TESS_EVALUATION_PROGRAM_NV = 0x891F; + + /** + * Accepted by the <target> parameter of ProgramBufferParametersfvNV, + * ProgramBufferParametersIivNV, and ProgramBufferParametersIuivNV, + * BindBufferRangeNV, BindBufferOffsetNV, BindBufferBaseNV, and BindBuffer + * and the <value> parameter of GetIntegerIndexedvEXT: + */ + int GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV = 0x8C74; + int GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV = 0x8C75; + + /** Accepted by the <pname> parameter of GetProgramivARB: */ + int GL_MAX_PROGRAM_PATCH_ATTRIBS_NV = 0x86D8; + +} \ No newline at end of file Added: trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_vertex_attrib_integer_64bit.java =================================================================== --- trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_vertex_attrib_integer_64bit.java (rev 0) +++ trunk/LWJGL/src/templates/org/lwjgl/opengl/NV_vertex_attrib_integer_64bit.java 2010-04-14 14:58:18 UTC (rev 3325) @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2002-2008 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.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.LongBuffer; + +@Dependent +public interface NV_vertex_attrib_integer_64bit { + + /** + * Accepted by the <type> parameter of VertexAttribLPointerEXT, + * VertexArrayVertexAttribLOffsetEXT, and VertexAttribLFormatNV: + */ + int GL_INT64_NV = 0x140E; + int GL_UNSIGNED_INT64_NV = 0x140F; + + void glVertexAttribL1i64NV(@GLuint int index, @GLint64EXT long x); + + void glVertexAttribL2i64NV(@GLuint int index, @GLint64EXT long x, @GLint64EXT long y); + + void glVertexAttribL3i64NV(@GLuint int index, @GLint64EXT long x, @GLint64EXT long y, @GLint64EXT long z); + + void glVertexAttribL4i64NV(@GLuint int index, @GLint64EXT long x, @GLint64EXT long y, @GLint64EXT long z, @GLint64EXT long w); + + @StripPostfix("v") + void glVertexAttribL1i64vNV(@GLuint int index, @Const @GLint64EXT @Check("1") LongBuffer v); + + @StripPostfix("v") + void glVertexAttribL2i64vNV(@GLuint int index, @Const @GLint64EXT @Check("2") LongBuffer v); + + @StripPostfix("v") + void glVertexAttribL3i64vNV(@GLuint int index, @Const @GLint64EXT @Check("3") LongBuffer v); + + @StripPostfix("v") + void glVertexAttribL4i64vNV(@GLuint int index, @Const @GLint64EXT @Check("4") LongBuffer v); + + void glVertexAttribL1ui64NV(@GLuint int index, @GLuint64EXT long x); + + void glVertexAttribL2ui64NV(@GLuint int index, @GLuint64EXT long x, @GLuint64EXT long y); + + void glVertexAttribL3ui64NV(@GLuint int index, @GLuint64EXT long x, @GLuint64EXT long y, @GLuint64EXT long z); + + void glVertexAttribL4ui64NV(@GLuint int index, @GLuint64EXT long x, @GLuint64EXT long y, @GLuint64EXT long z, @GLuint64EXT long w); + + @StripPostfix("v") + void glVertexAttribL1ui64vNV(@GLuint int index, @Const @GLuint64EXT @Check("1") LongBuffer v); + + @StripPostfix("v") + void glVertexAttribL2ui64vNV(@GLuint int index, @Const @GLuint64EXT @Check("2") LongBuffer v); + + @StripPostfix("v") + void glVertexAttribL3ui64vNV(@GLuint int index, @Const @GLuint64EXT @Check("3") LongBuffer v); + + @StripPostfix("v") + void glVertexAttribL4ui64vNV(@GLuint int index, @Const @GLuint64EXT @Check("4") LongBuffer v); + + @StripPostfix("params") + void glGetVertexAttribLi64vNV(@GLuint int index, @GLenum int pname, @OutParameter @GLint64EXT @Check("4") LongBuffer params); + + @StripPostfix("params") + void glGetVertexAttribLui64vNV(@GLuint int index, @GLenum int pname, @OutParameter @GLuint64EXT @Check("4") LongBuffer params); + + @Dependent("NV_vertex_buffer_unified_memory") + void glVertexAttribLFormatNV(@GLuint int index, int size, @GLenum int type, @GLsizei int stride); + +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |