diff --git a/build.xml b/build.xml index 332c3b26..9cba6428 100644 --- a/build.xml +++ b/build.xml @@ -420,6 +420,7 @@ + diff --git a/platform_build/win32_ms_cmdline/build-devil.bat b/platform_build/win32_ms_cmdline/build-devil.bat index 1be6ec6e..c9070170 100644 --- a/platform_build/win32_ms_cmdline/build-devil.bat +++ b/platform_build/win32_ms_cmdline/build-devil.bat @@ -6,7 +6,7 @@ if "%CHOME%" == "" goto errorchome if "%DEVILHOME%" == "" goto errordevilhome set COPTIONS=/I"%DEVILHOME%\include" /I"%PLTSDKHOME%\include" /I"%CHOME%\include" /I"%JAVA_HOME%\include" /I"%JAVA_HOME%\include\win32" /I"..\..\src\native\common" /Ox /Ob2 /Oi /Ot /Oy /FD /EHsc /MT /Gy /W0 /nologo /c /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LWJGL_EXPORTS" /D "_WINDLL" set LINKEROPTS=/link /LIBPATH:"%PLTSDKHOME%\Lib" /LIBPATH:"%CHOME%\Lib" /LIBPATH:"%DEVILHOME%\Lib" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /MACHINE:X86 /NOLOGO /DLL -set LIBS=user32.lib Gdi32.lib Advapi32.lib ILU.lib DevIL.lib +set LIBS=user32.lib Gdi32.lib Advapi32.lib DevIL.lib ILU.lib ILUT.lib for %%x in (..\..\src\native\common\devil\*.c) do cl %COPTIONS% %%x for %%x in (..\..\src\native\common\*common*.c) do cl %COPTIONS% %%x diff --git a/src/java/org/lwjgl/devil/ILUT.java b/src/java/org/lwjgl/devil/ILUT.java new file mode 100644 index 00000000..b6703271 --- /dev/null +++ b/src/java/org/lwjgl/devil/ILUT.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2002-2004 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.devil; + +import org.lwjgl.LWJGLException; + +/** + * $Id$ + * + * The DevIL ILUT API. + * + * @author captainjester + * @version $Revision$ + */ +public class ILUT { + /** Have we been created? */ + protected static boolean created; + + public static final int ILUT_VERSION_1_6_7 = 1; + public static final int ILUT_VERSION = 167; + + +// Attribute Bits + public static final int ILUT_OPENGL_BIT = 0x00000001; + public static final int ILUT_ALL_ATTRIB_BITS = 0x000FFFFF; + + +// Error Types + public static final int ILUT_INVALID_ENUM = 0x0501; + public static final int ILUT_OUT_OF_MEMORY = 0x0502; + public static final int ILUT_INVALID_VALUE = 0x0505; + public static final int ILUT_ILLEGAL_OPERATION = 0x0506; + public static final int ILUT_INVALID_PARAM = 0x0509; + public static final int ILUT_COULD_NOT_OPEN_FILE = 0x050A; + public static final int ILUT_STACK_OVERFLOW = 0x050E; + public static final int ILUT_STACK_UNDERFLOW = 0x050F; + public static final int ILUT_BAD_DIMENSIONS = 0x0511; + public static final int ILUT_NOT_SUPPORTED = 0x0550; + + +// State Definitions + public static final int ILUT_PALETTE_MODE = 0x0600; + public static final int ILUT_OPENGL_CONV = 0x0610; + public static final int ILUT_MAXTEX_WIDTH = 0x0630; + public static final int ILUT_MAXTEX_HEIGHT = 0x0631; + public static final int ILUT_MAXTEX_DEPTH = 0x0632; + public static final int ILUT_GL_USE_S3TC = 0x0634; + public static final int ILUT_GL_GEN_S3TC = 0x0635; + +// This new state does automatic texture target detection +// if enabled. Currently, only cubemap detection is supported. +// if the current image is no cubemap, the 2d texture is chosen. + public static final int ILUT_GL_AUTODETECT_TEXTURE_TARGET = 0x0807; + +// The different rendering api's...more to be added later? + public static final int ILUT_OPENGL = 0; + + static { + System.loadLibrary("ILU"); + System.loadLibrary("lwjgl-devil"); + } + + /** + * @return true if DevIL has been created + */ + public static boolean isCreated() { + return created; + } + public static native void initNativeStubs() throws LWJGLException; + + public static native boolean ilutRenderer(int renderer); + +// ImageLib Utility Toolkit Functions + public static native boolean ilutDisable(int mode); + public static native boolean ilutEnable(int mode); + public static native boolean ilutGetBoolean(int mode); +// public static native void ilutGetBooleanv(int mode, ILboolean *Param); + public static native int ilutGetInteger(int mode); +// public static native void ilutGetIntegerv(int mode, ILint *Param); + public static native String ilutGetString(int stringName); + public static native void ilutInit(); + public static native boolean ilutIsDisabled(int mode); + public static native boolean ilutIsEnabled(int mode); + public static native void ilutPopAttrib(); + public static native void ilutPushAttrib(int bits); + public static native void ilutSetInteger(int Mode, int param); + +// ImageLib Utility Toolkit's OpenGL Functions + public static native int ilutGLBindTexImage(); + public static native int ilutGLBindMipmaps(); + public static native boolean ilutGLBuildMipmaps(); + public static native int ilutGLLoadImage(String fileName); + public static native boolean ilutGLScreen(); + public static native boolean ilutGLScreenie(); + public static native boolean ilutGLSaveImage(String fileName, int texID); + public static native boolean ilutGLSetTex(int texID); + public static native boolean ilutGLTexImage(int level); + + public static void create() throws LWJGLException { + if (!created) { + nCreate(); + ILUT.initNativeStubs(); + ILUT.ilutInit(); + ilutRenderer(ILUT_OPENGL); + created = true; + } + + } + + public static native void nCreate(); +} diff --git a/src/native/common/devil/extil.h b/src/native/common/devil/extil.h index 36a64ed3..a27b7001 100644 --- a/src/native/common/devil/extil.h +++ b/src/native/common/devil/extil.h @@ -4,10 +4,13 @@ #include #include #include +//#include #include #include +#include #include "org_lwjgl_devil_IL.h" #include "org_lwjgl_devil_ILU.h" +#include "org_lwjgl_devil_ILUT.h" #include "common_tools.h" diff --git a/src/native/common/devil/org_lwjgl_devil_ILU.c b/src/native/common/devil/org_lwjgl_devil_ILU.c index db3c3624..f4dafa28 100644 --- a/src/native/common/devil/org_lwjgl_devil_ILU.c +++ b/src/native/common/devil/org_lwjgl_devil_ILU.c @@ -183,9 +183,67 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_devil_ILU_iluGenImage(JNIEnv *env, jclass /* * Class: org_lwjgl_devil_ILU * Method: iluGetImageInfo - * Signature: ([Lorg/lwjgl/devil/ILinfo;)V + * Signature: (Lorg/lwjgl/devil/ILinfo;)V */ -JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_iluGetImageInfo(JNIEnv *env, jclass clazz, jobjectArray info) { +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_iluGetImageInfo(JNIEnv *env, jclass clazz, jobject info) { + jfieldID fieldId; + ILinfo *imageInfo; + + if(info == 0) { + throwException(env, "ILinfo object must not be null."); + } + + imageInfo = (ILinfo *)malloc(sizeof(ILinfo)); + iluGetImageInfo(imageInfo); + + clazz = (*env)->GetObjectClass(env, info); + + fieldId = (*env)->GetFieldID(env, clazz, "id", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->Id); + + fieldId = (*env)->GetFieldID(env, clazz, "width", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->Width); + + fieldId = (*env)->GetFieldID(env, clazz, "height", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->Height); + + fieldId = (*env)->GetFieldID(env, clazz, "depth", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->Depth); + + fieldId = (*env)->GetFieldID(env, clazz, "bpp", "B"); + (*env)->SetByteField(env, info, fieldId, (jbyte)imageInfo->Bpp); + + fieldId = (*env)->GetFieldID(env, clazz, "sizeOfData", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->SizeOfData); + + fieldId = (*env)->GetFieldID(env, clazz, "format", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->Format); + + fieldId = (*env)->GetFieldID(env, clazz, "type", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->Type); + + fieldId = (*env)->GetFieldID(env, clazz, "origin", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->Origin); + + fieldId = (*env)->GetFieldID(env, clazz, "palType", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->PalType); + + fieldId = (*env)->GetFieldID(env, clazz, "palSize", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->PalSize); + + fieldId = (*env)->GetFieldID(env, clazz, "cubeFlags", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->CubeFlags); + + fieldId = (*env)->GetFieldID(env, clazz, "numNext", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->NumNext); + + fieldId = (*env)->GetFieldID(env, clazz, "numMips", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->NumMips); + + fieldId = (*env)->GetFieldID(env, clazz, "numLayers", "I"); + (*env)->SetIntField(env, info, fieldId, (jint)imageInfo->NumLayers); + + free(imageInfo); } /* @@ -298,6 +356,43 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILU_iluPixelize(JNIEnv *env, jcl * Signature: ([Lorg/lwjgl/devil/ILpointf;I)V */ JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_iluRegionfv(JNIEnv *env, jclass clazz, jobjectArray points, jint n) { + jfieldID fieldId; + jmethodID methodId; + jobject element; + int i; + ILpointf *pointInfo; + + if(points == 0) { + throwException(env, "ILpointf array must not be null."); + } + + pointInfo = (ILpointf *)malloc(sizeof(ILpointf) * n); + iluGetImageInfo(pointInfo, n); + + clazz = (*env)->FindClass(env, "org/lwjgl/devil/ILpointf"); + methodId = (*env)->GetMethodID(env, clazz, "", "()V"); + + for(i=1;iNewObject(env, clazz, methodId); + + fieldId = (*env)->GetFieldID(env, clazz, "x", "F"); + (*env)->SetFloatField(env, element, fieldId, (jfloat)((pointInfo + i)->x)); + + fieldId = (*env)->GetFieldID(env, clazz, "y", "F"); + (*env)->SetFloatField(env, element, fieldId, (jfloat)((pointInfo + i)->y)); + printf("\nHere 3"); + printf("\n (pointInfo + i)->x) = %f", (pointInfo + i)->x); + printf("\n(*env)->GetFloatField(env, element, fieldId) = %f", (*env)->GetFloatField(env, element, fieldId)); + + printf("\npoints address=%p", points); + printf("\nelement address=%p", element); + printf("\ni = %d", i); + (*env)->SetObjectArrayElement(env, points, i, element); + printf("\nHere 4"); + } + printf("\nHere 5"); + + free(pointInfo); } /* @@ -395,7 +490,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILU_iluWave(JNIEnv *env, jclass */ JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_nCreate(JNIEnv *env, jclass clazz) { /*if (!extilu_Open(env)) { - throwException(env, "Failed to load DevIL library"); + throwException(env, "Failed to load ILU library"); return; }*/ } diff --git a/src/native/common/devil/org_lwjgl_devil_ILUT.c b/src/native/common/devil/org_lwjgl_devil_ILUT.c new file mode 100644 index 00000000..8a920aea --- /dev/null +++ b/src/native/common/devil/org_lwjgl_devil_ILUT.c @@ -0,0 +1,226 @@ +#include "extil.h" + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutRenderer + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutRenderer(JNIEnv *env, jclass clazz, jint renderer){ + return ilutRenderer((ILenum)renderer); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutDisable + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutDisable(JNIEnv *env, jclass clazz, jint mode){ + return ilutDisable((ILenum)mode); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutEnable + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutEnable(JNIEnv *env, jclass clazz, jint mode){ + return ilutEnable((ILenum)mode); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGetBoolean + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGetBoolean(JNIEnv *env, jclass clazz, jint mode){ + return ilutGetBoolean((ILenum)mode); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGetInteger + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_org_lwjgl_devil_ILUT_ilutGetInteger(JNIEnv *env, jclass clazz, jint mode){ + return ilutGetInteger((ILenum)mode); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGetString + * Signature: (I)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_lwjgl_devil_ILUT_ilutGetString(JNIEnv *env, jclass clazz, jint stringName){ + return NewStringNative(env, ilutGetString((ILenum)stringName)); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutInit + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_ilutInit(JNIEnv *env, jclass clazz){ + ilutInit(); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutIsDisabled + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutIsDisabled(JNIEnv *env, jclass clazz, jint mode){ + return ilutIsDisabled((ILenum)mode); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutIsEnabled + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutIsEnabled(JNIEnv *env, jclass clazz, jint mode){ + return ilutIsEnabled((ILenum)mode); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutPopAttrib + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_ilutPopAttrib(JNIEnv *env, jclass clazz){ + ilutPopAttrib(); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutPushAttrib + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_ilutPushAttrib(JNIEnv *env, jclass clazz, jint bits){ + ilutPushAttrib((ILuint)bits); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutSetInteger + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_ilutSetInteger(JNIEnv *env, jclass clazz, jint mode, jint param){ + ilutSetInteger((ILenum)mode, (ILint)param); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLBindTexImage + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_lwjgl_devil_ILUT_ilutGLBindTexImage(JNIEnv *env, jclass clazz){ + return ilutGLBindTexImage(); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLBindMipmaps + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_lwjgl_devil_ILUT_ilutGLBindMipmaps(JNIEnv *env, jclass clazz){ + return ilutGLBindMipmaps(); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLBuildMipmaps + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGLBuildMipmaps(JNIEnv *env, jclass clazz){ + return ilutGLBuildMipmaps(); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLLoadImage + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_lwjgl_devil_ILUT_ilutGLLoadImage(JNIEnv *env, jclass clazz, jstring fileName){ + char *strFileName = GetStringNativeChars(env, fileName); + jint result = ilutGLLoadImage((const ILstring)strFileName); + free(strFileName); + + return result; +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLScreen + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGLScreen(JNIEnv *env, jclass clazz){ + return ilutGLScreen(); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLScreenie + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGLScreenie(JNIEnv *env, jclass clazz){ + return ilutGLScreenie(); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLSaveImage + * Signature: (Ljava/lang/String;I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGLSaveImage(JNIEnv *env, jclass clazz, jstring fileName, jint texID){ + char *strFileName = GetStringNativeChars(env, fileName); + jboolean result = ilutGLSaveImage((const ILstring)strFileName, texID); + free(strFileName); + + return result; +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLSetTex + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGLSetTex(JNIEnv *env, jclass clazz, jint texID){ + return ilutGLSetTex(texID); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: ilutGLTexImage + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGLTexImage(JNIEnv *env, jclass clazz, jint level){ + return ilutGLTexImage(level); +} + +/* + * Class: org_lwjgl_devil_ILUT + * Method: nCreate + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_nCreate(JNIEnv *env, jclass clazz){ + /*if (!extilut_Open(env)) { + throwException(env, "Failed to load ILUT library"); + return; + }*/ +} + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Class: org_lwjgl_devil_ILUT + * Method: initNativeStubs + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_initNativeStubs(JNIEnv *env, jclass clazz){ +} + +#ifdef __cplusplus +} +#endif