diff --git a/src/java/org/lwjgl/openal/ALC.java b/src/java/org/lwjgl/openal/ALC.java index 10510651..1910b97b 100644 --- a/src/java/org/lwjgl/openal/ALC.java +++ b/src/java/org/lwjgl/openal/ALC.java @@ -164,10 +164,11 @@ public final class ALC { * @return String property from device */ public static String alcGetString(int pname) { - return nalcGetString(AL.device.device, pname); + String result = nalcGetString(AL.device.device, pname); + Util.checkALCError(); + return result; } - - native static String nalcGetString(long device, int pname); + private native static String nalcGetString(long device, int pname); /** * The application can query ALC for information using an integer query function. @@ -192,9 +193,9 @@ public final class ALC { public static void alcGetInteger(int pname, IntBuffer integerdata) { BufferChecks.checkDirect(integerdata); nalcGetIntegerv(AL.device.device, pname, integerdata.remaining(), integerdata, integerdata.position()); + Util.checkALCError(); } - - native static void nalcGetIntegerv(long device, int pname, int size, Buffer integerdata, int offset); + private native static void nalcGetIntegerv(long device, int pname, int size, Buffer integerdata, int offset); /** * The alcOpenDevice function allows the application (i.e. the client program) to @@ -236,7 +237,12 @@ public final class ALC { * @param attrList Buffer to read attributes from * @return New context, or null if creation failed */ - native static ALCcontext alcCreateContext(long device, IntBuffer attrList); + static ALCcontext alcCreateContext(long device, IntBuffer attrList) { + ALCcontext result = nalcCreateContext(device, attrList); + Util.checkALCError(); + return result; + } + private native static ALCcontext nalcCreateContext(long device, IntBuffer attrList); /** * To make a Context current with respect to AL Operation (state changes by issueing @@ -268,8 +274,7 @@ public final class ALC { public static void alcProcessContext() { nalcProcessContext(AL.context.context); } - - native static void nalcProcessContext(long context); + private native static void nalcProcessContext(long context); /** * The application can query for, and obtain an handle to, the current context for the @@ -299,10 +304,10 @@ public final class ALC { * * @param context address of context to suspend */ - public static void alcSuspendContext() { - nalcSuspendContext(AL.context.context); - } - native static void nalcSuspendContext(long context); + public static void alcSuspendContext() { + nalcSuspendContext(AL.context.context); + } + private native static void nalcSuspendContext(long context); /** * The correct way to destroy a context is to first release it using alcMakeCurrent and @@ -330,8 +335,7 @@ public final class ALC { public static int alcGetError() { return nalcGetError(AL.device.device); } - - native static int nalcGetError(long device); + private native static int nalcGetError(long device); /** * Verify that a given extension is available for the current context and the device it @@ -343,10 +347,11 @@ public final class ALC { * @return true if extension is available, false if not */ public static boolean alcIsExtensionPresent(String extName) { - return nalcIsExtensionPresent(AL.device.device, extName); + boolean result = nalcIsExtensionPresent(AL.device.device, extName); + Util.checkALCError(); + return result; } - - native static boolean nalcIsExtensionPresent(long device, String extName); + private native static boolean nalcIsExtensionPresent(long device, String extName); /** * Enumeration/token values are device independend, but tokens defined for @@ -359,8 +364,9 @@ public final class ALC { * @return value of enumeration */ public static int alcGetEnumValue(String enumName) { - return nalcGetEnumValue(AL.device.device, enumName); + int result = nalcGetEnumValue(AL.device.device, enumName); + Util.checkALCError(); + return result; } - - native static int nalcGetEnumValue(long device, String enumName); + private native static int nalcGetEnumValue(long device, String enumName); } diff --git a/src/java/org/lwjgl/openal/Util.java b/src/java/org/lwjgl/openal/Util.java index 2d71ebd9..bb94494c 100644 --- a/src/java/org/lwjgl/openal/Util.java +++ b/src/java/org/lwjgl/openal/Util.java @@ -47,6 +47,12 @@ public final class Util { private Util() { } + public static void checkALCError() { + int err = ALC.alcGetError(); + if (err != ALC.ALC_NO_ERROR) + throw new OpenALException(ALC.alcGetString(err)); + } + public static void checkALError() { int err = AL10.alGetError(); if (err != AL10.AL_NO_ERROR) diff --git a/src/native/common/checkALerror.h b/src/native/common/checkALerror.h deleted file mode 100644 index ad5f1e8d..00000000 --- a/src/native/common/checkALerror.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _CHECKALERROR_H_INCLUDED_ -#define _CHECKALERROR_H_INCLUDED_ - -#include -#include "extal.h" -#include "common_tools.h" - -/* only available if deviceaddress is specified in method */ -#define CHECK_ALC_ERROR \ - { \ - int err = alcGetError((ALCdevice*) deviceaddress); \ - if (err != AL_NO_ERROR) { \ - jclass cls = (*env)->FindClass(env, "org/lwjgl/openal/OpenALException"); \ - (*env)->ThrowNew(env, cls, (const char*) alcGetString((ALCdevice*) deviceaddress, err)); \ - (*env)->DeleteLocalRef(env, cls); \ - } \ - } - -#endif /* _CHECKALERROR_H_INCLUDED_ */ diff --git a/src/native/common/org_lwjgl_openal_AL.c b/src/native/common/org_lwjgl_openal_AL.c index e3454dfa..20099c60 100644 --- a/src/native/common/org_lwjgl_openal_AL.c +++ b/src/native/common/org_lwjgl_openal_AL.c @@ -33,7 +33,6 @@ #include "org_lwjgl_openal_AL.h" /* OpenAL includes */ -#include "checkALerror.h" #include "extal.h" JNIEXPORT void JNICALL Java_org_lwjgl_openal_AL_nCreate (JNIEnv *env, jclass clazz, jobjectArray oalPaths) { diff --git a/src/native/common/org_lwjgl_openal_AL10.c b/src/native/common/org_lwjgl_openal_AL10.c index 327b1d7d..2811776e 100644 --- a/src/native/common/org_lwjgl_openal_AL10.c +++ b/src/native/common/org_lwjgl_openal_AL10.c @@ -1,7 +1,6 @@ /* MACHINE GENERATED FILE, DO NOT EDIT */ #include -#include "checkALerror.h" #include "extal.h" typedef ALvoid (ALAPIENTRY *alDopplerVelocityPROC) (ALfloat value); diff --git a/src/native/common/org_lwjgl_openal_ALC.c b/src/native/common/org_lwjgl_openal_ALC.c index 215dc8eb..0f6b011e 100644 --- a/src/native/common/org_lwjgl_openal_ALC.c +++ b/src/native/common/org_lwjgl_openal_ALC.c @@ -40,7 +40,6 @@ */ /* OpenAL includes */ -#include "checkALerror.h" #include "extal.h" //alc @@ -82,7 +81,7 @@ static alcGetEnumValuePROC alcGetEnumValue; * ALubyte * alcGetString(ALCdevice *device, ALenum token); */ static jstring JNICALL Java_org_lwjgl_openal_ALC_nalcGetString (JNIEnv *env, jclass clazz, jlong deviceaddress, jint token) { - const char* alcString = (const char*) alcGetString((ALCdevice*) deviceaddress, (ALenum) token); + const char* alcString = (const char*) alcGetString((ALCdevice*)((intptr_t)deviceaddress), (ALenum) token); jstring string; if(alcString == NULL) { @@ -91,7 +90,6 @@ static jstring JNICALL Java_org_lwjgl_openal_ALC_nalcGetString (JNIEnv *env, jcl string = NewStringNative(env, alcString); - CHECK_ALC_ERROR return string; } @@ -102,12 +100,11 @@ static jstring JNICALL Java_org_lwjgl_openal_ALC_nalcGetString (JNIEnv *env, jcl * ALvoid alcGetIntegerv(ALCdevice *device, ALenum token, ALsizei size, ALint *dest); */ static void JNICALL Java_org_lwjgl_openal_ALC_nalcGetIntegerv (JNIEnv *env, jclass clazz, jlong deviceaddress, jint token, jint size, jobject dest, jint offset) { - ALint* address = NULL; - if (dest != NULL) { - address = offset + (ALint*) (*env)->GetDirectBufferAddress(env, dest); - } - alcGetIntegerv((ALCdevice*) deviceaddress, (ALenum) token, (ALsizei) size, address); - CHECK_ALC_ERROR + ALint* address = NULL; + if (dest != NULL) { + address = offset + (ALint*) (*env)->GetDirectBufferAddress(env, dest); + } + alcGetIntegerv((ALCdevice*)((intptr_t)deviceaddress), (ALenum) token, (ALsizei) size, address); } /** @@ -146,7 +143,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcOpenDevice (JNIEnv *env, jcl alcDevice_method = (*env)->GetMethodID(env, alcDevice_class, "", "(J)V"); /* create instance */ - alcDevice_object = (*env)->NewObject(env, alcDevice_class, alcDevice_method, (jlong) device); + alcDevice_object = (*env)->NewObject(env, alcDevice_class, alcDevice_method, (jlong)((intptr_t)device)); /* clean up */ if (tokenstring != NULL) @@ -162,7 +159,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcOpenDevice (JNIEnv *env, jcl * void alcCloseDevice( ALCdevice *dev ); */ static void JNICALL Java_org_lwjgl_openal_ALC_alcCloseDevice (JNIEnv *env, jclass clazz, jlong deviceaddress) { - alcCloseDevice((ALCdevice*) deviceaddress); + alcCloseDevice((ALCdevice*)((intptr_t)deviceaddress)); } /** @@ -171,7 +168,7 @@ static void JNICALL Java_org_lwjgl_openal_ALC_alcCloseDevice (JNIEnv *env, jclas * C Specification: * ALCcontext* alcCreateContext( ALCdevice *dev, ALint* attrlist ); */ -static jobject JNICALL Java_org_lwjgl_openal_ALC_alcCreateContext (JNIEnv *env, jclass clazz, jlong deviceaddress, jobject attrlist) { +static jobject JNICALL Java_org_lwjgl_openal_ALC_nalcCreateContext (JNIEnv *env, jclass clazz, jlong deviceaddress, jobject attrlist) { ALint* address = NULL; ALCcontext* context; /* get ready to create ALCcontext instance */ @@ -182,7 +179,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcCreateContext (JNIEnv *env, if (attrlist != NULL) { address = (ALint*) (*env)->GetDirectBufferAddress(env, attrlist); } - context = alcCreateContext((ALCdevice*) deviceaddress, address); + context = alcCreateContext((ALCdevice*)((intptr_t)deviceaddress), address); /* if error - get out */ if(context == NULL) { @@ -194,9 +191,8 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcCreateContext (JNIEnv *env, alcContext_method = (*env)->GetMethodID(env, alcContext_class, "", "(J)V"); /* create instance */ - alcContext_object = (*env)->NewObject(env, alcContext_class, alcContext_method, (jlong)context); + alcContext_object = (*env)->NewObject(env, alcContext_class, alcContext_method, (jlong)((intptr_t)context)); - CHECK_ALC_ERROR return alcContext_object; } @@ -207,7 +203,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcCreateContext (JNIEnv *env, * ALCboolean alcMakeContextCurrent(ALCcontext *context); */ static jint JNICALL Java_org_lwjgl_openal_ALC_alcMakeContextCurrent (JNIEnv *env, jclass clazz, jlong contextaddress) { - ALCcontext* context = (ALCcontext*) contextaddress; + ALCcontext* context = (ALCcontext*)((intptr_t)contextaddress); ALCenum result; if(context == NULL) { result = alcMakeContextCurrent(NULL); @@ -224,7 +220,7 @@ static jint JNICALL Java_org_lwjgl_openal_ALC_alcMakeContextCurrent (JNIEnv *env * void alcProcessContext(ALCcontext *context); */ static void JNICALL Java_org_lwjgl_openal_ALC_nalcProcessContext (JNIEnv *env, jclass clazz, jlong contextaddress) { - alcProcessContext((ALCcontext*) contextaddress); + alcProcessContext((ALCcontext*)((intptr_t)contextaddress)); } /** @@ -249,7 +245,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcGetCurrentContext (JNIEnv *e alcContext_method = (*env)->GetMethodID(env, alcContext_class, "", "(J)V"); /* create instance */ - alcContext_object = (*env)->NewObject(env, alcContext_class, alcContext_method, (jlong) context); + alcContext_object = (*env)->NewObject(env, alcContext_class, alcContext_method, (jlong)((intptr_t)context)); return alcContext_object; } @@ -261,8 +257,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcGetCurrentContext (JNIEnv *e * ALCdevice* alcGetContextsDevice(ALCcontext *context); */ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcGetContextsDevice (JNIEnv *env, jclass clazz, jlong contextaddress) { - - ALCdevice* device = alcGetContextsDevice((ALCcontext*) contextaddress); + ALCdevice* device = alcGetContextsDevice((ALCcontext*)((intptr_t)contextaddress)); /* get ready to create ALCdevice instance */ jobject alcDevice_object = NULL; jclass alcDevice_class = NULL; @@ -277,7 +272,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcGetContextsDevice (JNIEnv *e alcDevice_method = (*env)->GetMethodID(env, alcDevice_class, "", "(J)V"); /* create instance */ - alcDevice_object = (*env)->NewObject(env, alcDevice_class, alcDevice_method, (jlong) device); + alcDevice_object = (*env)->NewObject(env, alcDevice_class, alcDevice_method, (jlong)((intptr_t)device)); return alcDevice_object; } @@ -289,7 +284,7 @@ static jobject JNICALL Java_org_lwjgl_openal_ALC_alcGetContextsDevice (JNIEnv *e * void alcSuspendContext(ALCcontext *context); */ static void JNICALL Java_org_lwjgl_openal_ALC_nalcSuspendContext (JNIEnv *env, jclass clazz, jlong contextaddress) { - alcSuspendContext((ALCcontext*) contextaddress); + alcSuspendContext((ALCcontext*)((intptr_t)contextaddress)); } /** @@ -299,7 +294,7 @@ static void JNICALL Java_org_lwjgl_openal_ALC_nalcSuspendContext (JNIEnv *env, j * void alcDestroyContext(ALCcontext *context); */ static void JNICALL Java_org_lwjgl_openal_ALC_alcDestroyContext (JNIEnv *env, jclass clazz, jlong contextaddress) { - alcDestroyContext((ALCcontext*) contextaddress); + alcDestroyContext((ALCcontext*)((intptr_t)contextaddress)); } /** @@ -309,8 +304,7 @@ static void JNICALL Java_org_lwjgl_openal_ALC_alcDestroyContext (JNIEnv *env, jc * ALCenum alcGetError(ALCdevice *device); */ static jint JNICALL Java_org_lwjgl_openal_ALC_nalcGetError (JNIEnv *env, jclass clazz, jlong deviceaddress) { - jint result = alcGetError((ALCdevice*) deviceaddress); - CHECK_ALC_ERROR + jint result = alcGetError((ALCdevice*)((intptr_t)deviceaddress)); return result; } @@ -324,11 +318,10 @@ static jboolean JNICALL Java_org_lwjgl_openal_ALC_nalcIsExtensionPresent (JNIEnv /* get extension */ ALubyte* functionname = (ALubyte*) GetStringNativeChars(env, extName); - jboolean result = (jboolean) alcIsExtensionPresent((ALCdevice*) deviceaddress, functionname); + jboolean result = (jboolean) alcIsExtensionPresent((ALCdevice*)((intptr_t)deviceaddress), functionname); free(functionname); - CHECK_ALC_ERROR return result; } @@ -342,11 +335,10 @@ static jint JNICALL Java_org_lwjgl_openal_ALC_nalcGetEnumValue (JNIEnv *env, jcl /* get extension */ ALubyte* enumerationname = (ALubyte*) GetStringNativeChars(env, enumName); - jint result = (jint) alcGetEnumValue((ALCdevice*) deviceaddress, enumerationname); + jint result = (jint) alcGetEnumValue((ALCdevice*)((intptr_t)deviceaddress), enumerationname); free(enumerationname); - CHECK_ALC_ERROR return result; } @@ -364,7 +356,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_openal_ALC_initNativeStubs(JNIEnv *env, jc {"nalcGetIntegerv", "(JIILjava/nio/Buffer;I)V", (void*)&Java_org_lwjgl_openal_ALC_nalcGetIntegerv, "alcGetIntegerv", (void*)&alcGetIntegerv}, {"alcOpenDevice", "(Ljava/lang/String;)Lorg/lwjgl/openal/ALCdevice;", (void*)&Java_org_lwjgl_openal_ALC_alcOpenDevice, "alcOpenDevice", (void*)&alcOpenDevice}, {"alcCloseDevice", "(J)V", (void*)&Java_org_lwjgl_openal_ALC_alcCloseDevice, "alcCloseDevice", (void*)&alcCloseDevice}, - {"alcCreateContext", "(JLjava/nio/IntBuffer;)Lorg/lwjgl/openal/ALCcontext;", (void*)&Java_org_lwjgl_openal_ALC_alcCreateContext, "alcCreateContext", (void*)&alcCreateContext}, + {"nalcCreateContext", "(JLjava/nio/IntBuffer;)Lorg/lwjgl/openal/ALCcontext;", (void*)&Java_org_lwjgl_openal_ALC_nalcCreateContext, "alcCreateContext", (void*)&alcCreateContext}, {"alcMakeContextCurrent", "(J)I", (void*)&Java_org_lwjgl_openal_ALC_alcMakeContextCurrent, "alcMakeContextCurrent", (void*)&alcMakeContextCurrent}, {"nalcProcessContext", "(J)V", (void*)&Java_org_lwjgl_openal_ALC_nalcProcessContext, "alcProcessContext", (void*)&alcProcessContext}, {"alcGetCurrentContext", "()Lorg/lwjgl/openal/ALCcontext;", (void*)&Java_org_lwjgl_openal_ALC_alcGetCurrentContext, "alcGetCurrentContext", (void*)&alcGetCurrentContext},