diff --git a/src/java/org/lwjgl/devil/IL.java b/src/java/org/lwjgl/devil/IL.java index 471768fc..a109a998 100644 --- a/src/java/org/lwjgl/devil/IL.java +++ b/src/java/org/lwjgl/devil/IL.java @@ -32,14 +32,22 @@ package org.lwjgl.devil; import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Method; import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; import org.lwjgl.BufferChecks; import org.lwjgl.LWJGLException; +import org.lwjgl.Sys; + /** * $Id$ * @@ -49,535 +57,650 @@ import org.lwjgl.LWJGLException; * @version $Revision$ */ public class IL { - private static final int BUFFER_LENGTH = 1000; - /** Have we been created? */ - protected static boolean created; - - public static final int IL_FALSE = 0; - public static final int IL_TRUE = 1; - - // Matches OpenGL's right now. - public static final int IL_COLOUR_INDEX = 0x1900; - public static final int IL_COLOR_INDEX = 0x1900; - public static final int IL_RGB = 0x1907; - public static final int IL_RGBA = 0x1908; - public static final int IL_BGR = 0x80E0; - public static final int IL_BGRA = 0x80E1; - public static final int IL_LUMINANCE = 0x1909; - - public static final int IL_BYTE = 0x1400; -// public static final int IL_UNSIGNED_BYTE = 0x1401; - public static final int IL_SHORT = 0x1402; -// public static final int IL_UNSIGNED_SHORT = 0x1403; - public static final int IL_INT = 0x1404; -// public static final int IL_UNSIGNED_INT = 0x1405; - public static final int IL_FLOAT = 0x1406; - public static final int IL_DOUBLE = 0x140A; - - public static final int IL_VENDOR = 0x1F00; - - // IL-specific public const's - public static final int IL_VERSION_1_6_0 = 1; - public static final int IL_VERSION = 160; - public static final int IL_LOAD_EXT = 0x1F01; - public static final int IL_SAVE_EXT = 0x1F02; - - // Attribute Bits - public static final int IL_ORIGIN_BIT = 0x1; - public static final int IL_FILE_BIT = 0x2; - public static final int IL_PAL_BIT = 0x4; - public static final int IL_FORMAT_BIT = 0x8; - public static final int IL_TYPE_BIT = 0x10; - public static final int IL_COMPRESS_BIT = 0x20; - public static final int IL_LOADFAIL_BIT = 0x40; - public static final int IL_FORMAT_SPECIFIC_BIT = 0x80; - public static final int IL_ALL_ATTRIB_BITS = 0xFFFFF; - - // Palette types - public static final int IL_PAL_NONE = 0x400; - public static final int IL_PAL_RGB24 = 0x401; - public static final int IL_PAL_RGB32 = 0x402; - public static final int IL_PAL_RGBA32 = 0x403; - public static final int IL_PAL_BGR24 = 0x404; - public static final int IL_PAL_BGR32 = 0x405; - public static final int IL_PAL_BGRA32 = 0x406; - - // Image types - public static final int IL_TYPE_UNKNOWN = 0x0; - public static final int IL_BMP = 0x420; - public static final int IL_CUT = 0x421; - public static final int IL_DOOM = 0x422; - public static final int IL_DOOM_FLAT = 0x423; - public static final int IL_ICO = 0x424; - public static final int IL_JPG = 0x425; - public static final int IL_LBM = 0x426; - public static final int IL_PCD = 0x427; - public static final int IL_PCX = 0x428; - public static final int IL_PIC = 0x429; - public static final int IL_PNG = 0x42A; - public static final int IL_PNM = 0x42B; - public static final int IL_SGI = 0x42C; - public static final int IL_TGA = 0x42D; - public static final int IL_TIF = 0x42E; - public static final int IL_CHEAD = 0x42F; - public static final int IL_RAW = 0x430; - public static final int IL_MDL = 0x431; - public static final int IL_WAL = 0x432; - public static final int IL_OIL = 0x433; - public static final int IL_LIF = 0x434; - public static final int IL_MNG = 0x435; - public static final int IL_JNG = 0x435; - public static final int IL_GIF = 0x436; - public static final int IL_DDS = 0x437; - public static final int IL_DCX = 0x438; - public static final int IL_PSD = 0x439; - public static final int IL_EXIF = 0x43A; - public static final int IL_PSP = 0x43B; - public static final int IL_PIX = 0x43C; - public static final int IL_PXR = 0x43D; - public static final int IL_XPM = 0x43E; - - public static final int IL_JASC_PAL = 0x475; - - // Error Types - public static final int IL_NO_ERROR = 0x0; - public static final int IL_INVALID_ENUM = 0x501; - public static final int IL_OUT_OF_MEMORY = 0x502; - public static final int IL_FORMAT_NOT_SUPPORTED = 0x503; - public static final int IL_INTERNAL_ERROR = 0x504; - public static final int IL_INVALID_VALUE = 0x505; - public static final int IL_ILLEGAL_OPERATION = 0x506; - public static final int IL_ILLEGAL_FILE_VALUE = 0x507; - public static final int IL_INVALID_FILE_HEADER = 0x508; - public static final int IL_INVALID_PARAM = 0x509; - public static final int IL_COULD_NOT_OPEN_FILE = 0x50A; - public static final int IL_INVALID_EXTENSION = 0x50B; - public static final int IL_FILE_ALREADY_EXISTS = 0x50C; - public static final int IL_OUT_FORMAT_SAME = 0x50D; - public static final int IL_STACK_OVERFLOW = 0x50E; - public static final int IL_STACK_UNDERFLOW = 0x50F; - public static final int IL_INVALID_CONVERSION = 0x510; - public static final int IL_BAD_DIMENSIONS = 0x511; - public static final int IL_FILE_READ_ERROR = 0x512; - - public static final int IL_LIB_GIF_ERROR = 0x5E1; - public static final int IL_LIB_JPEG_ERROR = 0x5E2; - public static final int IL_LIB_PNG_ERROR = 0x5E3; - public static final int IL_LIB_TIFF_ERROR = 0x5E4; - public static final int IL_LIB_MNG_ERROR = 0x5E5; - public static final int IL_UNKNOWN_ERROR = 0x5FF; - - // Origin Definitions - public static final int IL_ORIGIN_SET = 0x600; - public static final int IL_ORIGIN_LOWER_LEFT = 0x601; - public static final int IL_ORIGIN_UPPER_LEFT = 0x602; - public static final int IL_ORIGIN_MODE = 0x603; - - // Format and Type Mode Definitions - public static final int IL_FORMAT_SET = 0x610; - public static final int IL_FORMAT_MODE = 0x611; - public static final int IL_TYPE_SET = 0x612; - public static final int IL_TYPE_MODE = 0x613; - - // File definitions - public static final int IL_FILE_OVERWRITE = 0x620; - public static final int IL_FILE_MODE = 0x621; - - // Palette definitions - public static final int IL_CONV_PAL = 0x630; - - // Load fail definitions - public static final int IL_DEFAULT_ON_FAIL = 0x632; - - // Key colour definitions - public static final int IL_USE_KEY_COLOUR = 0x635; - public static final int IL_USE_KEY_COLOR = 0x635; - - // Interlace definitions - public static final int IL_SAVE_INTERLACED = 0x639; - public static final int IL_INTERLACE_MODE = 0x63A; - - // Quantization definitions - public static final int IL_QUANTIZATION_MODE = 0x640; - public static final int IL_WU_QUANT = 0x641; - public static final int IL_NEU_QUANT = 0x642; - public static final int IL_NEU_QUANT_SAMPLE = 0x643; - - // Hints - public static final int IL_FASTEST = 0x660; - public static final int IL_LESS_MEM = 0x661; - public static final int IL_DONT_CARE = 0x662; - public static final int IL_MEM_SPEED_HINT = 0x665; - public static final int IL_USE_COMPRESSION = 0x666; - public static final int IL_NO_COMPRESSION = 0x667; - public static final int IL_COMPRESSION_HINT = 0x668; - - // Subimage types - public static final int IL_SUB_NEXT = 0x680; - public static final int IL_SUB_MIPMAP = 0x681; - public static final int IL_SUB_LAYER = 0x682; - - // Compression definitions (mostly for .oil) - public static final int IL_COMPRESS_MODE = 0x700; - public static final int IL_COMPRESS_NONE = 0x701; - public static final int IL_COMPRESS_RLE = 0x702; - public static final int IL_COMPRESS_LZO = 0x703; - public static final int IL_COMPRESS_ZLIB = 0x704; - - // File format-specific values - public static final int IL_TGA_CREATE_STAMP = 0x710; - public static final int IL_JPG_QUALITY = 0x711; - public static final int IL_PNG_INTERLACE = 0x712; - public static final int IL_TGA_RLE = 0x713; - public static final int IL_BMP_RLE = 0x714; - public static final int IL_SGI_RLE = 0x715; - public static final int IL_TGA_ID_STRING = 0x717; - public static final int IL_TGA_AUTHNAME_STRING = 0x718; - public static final int IL_TGA_AUTHCOMMENT_STRING = 0x719; - public static final int IL_PNG_AUTHNAME_STRING = 0x71A; - public static final int IL_PNG_TITLE_STRING = 0x71B; - public static final int IL_PNG_DESCRIPTION_STRING = 0x71C; - public static final int IL_TIF_DESCRIPTION_STRING = 0x71D; - public static final int IL_TIF_HOSTCOMPUTER_STRING = 0x71E; - public static final int IL_TIF_DOCUMENTNAME_STRING = 0x71F; - public static final int IL_TIF_AUTHNAME_STRING = 0x720; - public static final int IL_JPG_SAVE_FORMAT = 0x721; - public static final int IL_CHEAD_HEADER_STRING = 0x722; - public static final int IL_PCD_PICNUM = 0x723; - - // DXTC definitions - public static final int IL_DXTC_FORMAT = 0x705; - public static final int IL_DXT1 = 0x706; - public static final int IL_DXT2 = 0x707; - public static final int IL_DXT3 = 0x708; - public static final int IL_DXT4 = 0x709; - public static final int IL_DXT5 = 0x70A; - public static final int IL_DXT_NO_COMP = 0x70B; - public static final int IL_KEEP_DXTC_DATA = 0x70C; - public static final int IL_DXTC_DATA_FORMAT = 0x70D; - - // Cube map definitions - public static final int IL_CUBEMAP_POSITIVEX = 0x400; - public static final int IL_CUBEMAP_NEGATIVEX = 0x800; - public static final int IL_CUBEMAP_POSITIVEY = 0x1000; - public static final int IL_CUBEMAP_NEGATIVEY = 0x2000; - public static final int IL_CUBEMAP_POSITIVEZ = 0x4000; - public static final int IL_CUBEMAP_NEGATIVEZ = 0x8000; - - // Values - public static final int IL_VERSION_NUM = 0xDE2; - public static final int IL_IMAGE_WIDTH = 0xDE4; - public static final int IL_IMAGE_HEIGHT = 0xDE5; - public static final int IL_IMAGE_DEPTH = 0xDE6; - public static final int IL_IMAGE_SIZE_OF_DATA = 0xDE7; - public static final int IL_IMAGE_BPP = 0xDE8; - public static final int IL_IMAGE_BYTES_PER_PIXEL = 0xDE8; - public static final int IL_IMAGE_BITS_PER_PIXEL = 0xDE9; - public static final int IL_IMAGE_FORMAT = 0xDEA; - public static final int IL_IMAGE_TYPE = 0xDEB; - public static final int IL_PALETTE_TYPE = 0xDEC; - public static final int IL_PALETTE_SIZE = 0xDED; - public static final int IL_PALETTE_BPP = 0xDEE; - public static final int IL_PALETTE_NUM_COLS = 0xDEF; - public static final int IL_PALETTE_BASE_TYPE = 0xDF0; - public static final int IL_NUM_IMAGES = 0xDF1; - public static final int IL_NUM_MIPMAPS = 0xDF2; - public static final int IL_NUM_LAYERS = 0xDF3; - public static final int IL_ACTIVE_IMAGE = 0xDF4; - public static final int IL_ACTIVE_MIPMAP = 0xDF5; - public static final int IL_ACTIVE_LAYER = 0xDF6; - public static final int IL_CUR_IMAGE = 0xDF7; - public static final int IL_IMAGE_DURATION = 0xDF8; - public static final int IL_IMAGE_PLANESIZE = 0xDF9; - public static final int IL_IMAGE_BPC = 0xDFA; - public static final int IL_IMAGE_OFFX = 0xDFB; - public static final int IL_IMAGE_OFFY = 0xDFC; - public static final int IL_IMAGE_CUBEFLAGS = 0xDFD; - - public static final int IL_SEEK_SET = 0; - public static final int IL_SEEK_CUR = 1; - public static final int IL_SEEK_END = 2; - public static final int IL_EOF = -1; - - static { - //System.loadLibrary("DevIL"); - 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 ilActiveImage(int Number); - public static native boolean ilActiveLayer(int Number); - public static native boolean ilActiveMipmap(int Number); - public static native boolean ilApplyPal(String FileName); - public static native boolean ilApplyProfile(String InProfile, String OutProfile); - public static native void ilBindImage(int image); - public static native boolean ilBlit(int Source, int DestX, int DestY, int DestZ, int SrcX, int SrcY, int SrcZ, int Width, int Height, int Depth); - public static native void ilClearColour(float Red, float Green, float Blue, float Alpha); - public static native boolean ilClearImage(); - public static native int ilCloneCurImage(); - public static native boolean ilCompressFunc(int Mode); - public static native boolean ilConvertImage(int DestFormat, int DestType); - public static native boolean ilConvertPal(int DestFormat); - public static native boolean ilCopyImage(int Src); - public static int ilCopyPixels(int XOff, int YOff, int ZOff, int Width, int Height, int Depth, int Format, int Type, ByteBuffer Data) { - BufferChecks.checkDirect(Data); - return nilCopyPixels(XOff, YOff, ZOff, Width, Height, Depth, Format, Type, Data, Data.position()); - } - public static native int nilCopyPixels(int XOff, int YOff, int ZOff, int Width, int Height, int Depth, int Format, int Type, ByteBuffer Data, int data_offset); - public static native int ilCreateSubImage(int Type, int Num); - public static native boolean ilDefaultImage(); - public static void ilDeleteImages(int num, IntBuffer images) { - BufferChecks.checkDirect(images); - nilDeleteImages(num, images, images.position()); - } - public static native void nilDeleteImages(int num, IntBuffer images, int images_offset); - public static native boolean ilDisable(int Mode); - public static native boolean ilEnable(int Mode); - public static native boolean ilFormatFunc(int Mode); - public static void ilGenImages(int num, IntBuffer images) { - BufferChecks.checkDirect(images); - nilGenImages(num, images, images.position()); - } - public static native void nilGenImages(int num, IntBuffer images, int images_offset); - public static native ByteBuffer ilGetAlpha(int Type);//ILubyte* - public static native void ilModAlpha( int AlphaValue ); - public static native void ilSetAlpha( int AlphaValue ); - public static native boolean ilGetBoolean(int Mode); -// public static native void ilGetBooleanv(int Mode, boolean *Param); - public static native ByteBuffer ilGetData(); -// public static native int ilGetDXTCData(ILvoid *Buffer, int BufferSize, int DXTCFormat); - public static native int ilGetError(); - public static native int ilGetInteger(int mode); -// public static native void ilGetIntegerv(int Mode, int *Param); - public static native int ilGetLumpPos(); - public static native ByteBuffer ilGetPalette();//ILubyte* - public static native String ilGetString(int StringName);//String - public static native void ilHint(int Target, int Mode); - public static native void ilInit(); - public static native boolean ilIsDisabled(int Mode); - public static native boolean ilIsEnabled(int Mode); - public static native boolean ilIsImage(int Image); - public static native boolean ilIsValid(int Type, String FileName); - //ilIsValidF() uses a Windows file handle so will not be implemented -// public static native boolean ilIsValidF(int Type, ILHANDLE File); - public static boolean ilIsValidL(int Type, ByteBuffer Lump, int Size) { - BufferChecks.checkDirect(Lump); - return nilIsValidL(Type, Lump, Lump.position(), Size); - } - public static native boolean nilIsValidL(int Type, ByteBuffer Lump, int lump_offset, int Size); - public static native void ilKeyColour(float Red, float Green, float Blue, float Alpha); - public static native boolean ilLoad(int Type, String FileName); - //ilLoadF() uses a Windows file handle so will not be implemented -// public static native boolean ilLoadF(int Type, ILHANDLE File); - public static native boolean ilLoadImage(String fileName); - public static boolean ilLoadFromURL(URL url) { - boolean result = false; - int type = IL_TYPE_UNKNOWN; - - String file = url.toString(); - int index = file.lastIndexOf('.'); - if(index != -1) { - String extension = file.substring(index + 1); - if(extension.equalsIgnoreCase("bmp")) { - type = IL_BMP; - } - else if(extension.equalsIgnoreCase("cut")) { - type = IL_CUT; - } - else if(extension.equalsIgnoreCase("gif")) { - type = IL_GIF; - } - else if(extension.equalsIgnoreCase("ico")) { - type = IL_ICO; - } - else if(extension.equalsIgnoreCase("jpg")) { - type = IL_JPG; - } - else if(extension.equalsIgnoreCase("lif")) { - type = IL_LIF; - } - else if(extension.equalsIgnoreCase("mng")) { - type = IL_MNG; - } - else if(extension.equalsIgnoreCase("pcd")) { - type = IL_PCD; - } - else if(extension.equalsIgnoreCase("pcx")) { - type = IL_PCX; - } - else if(extension.equalsIgnoreCase("pic")) { - type = IL_PIC; - } - else if(extension.equalsIgnoreCase("png")) { - type = IL_PNG; - } - else if(extension.equalsIgnoreCase("pbm") || - extension.equalsIgnoreCase("pgm") || - extension.equalsIgnoreCase("ppm")) { - type = IL_PNM; - } - else if(extension.equalsIgnoreCase("psd")) { - type = IL_PSD; - } - else if(extension.equalsIgnoreCase("psp")) { - type = IL_PSP; - } - else if(extension.equalsIgnoreCase("bw") || - extension.equalsIgnoreCase("rgb") || - extension.equalsIgnoreCase("rgba") || - extension.equalsIgnoreCase("sgi")) { - type = IL_SGI; - } - else if(extension.equalsIgnoreCase("tga")) { - type = IL_TGA; - } - else if(extension.equalsIgnoreCase("tif") || - extension.equalsIgnoreCase("tiff")) { - type = IL_TIF; - } - } + public static final int IL_FALSE = 0; + public static final int IL_TRUE = 1; - try { - result = ilLoadFromStream(url.openStream(), type); - } - catch(IOException e) { - e.printStackTrace(); - result = false; - } - - return result; - } - public static boolean ilLoadFromStream(InputStream stream, int type) { - boolean result = false; - int bufferLength = BUFFER_LENGTH; - int lastRead = 0; - byte read[] = new byte[bufferLength]; - byte block[] = new byte[0]; - - BufferedInputStream buf = new BufferedInputStream(stream); - try { - do { - lastRead = buf.read(read); - if(lastRead != -1) { - block = appendByteArray(block, read, lastRead); - } - } while(lastRead != -1); - ByteBuffer lump = ByteBuffer.allocateDirect(block.length); - lump.put(block); - lump.flip(); - result = ilLoadL(type, lump, block.length); - } - catch(IOException e) { - e.printStackTrace(); - result = false; - } - - return result; - } - private static byte[] appendByteArray(byte oldArray[], byte copyArray[], int length) { - int oldLength = oldArray.length; - byte newArray[] = new byte[oldLength + length]; - - for(int i=0;i + * @author Brian Matzon * @version $Revision$ */ public class ILU { - /** Have we been created? */ - protected static boolean created; - - public static final int ILU_VERSION_1_6_7 = 1; - public static final int ILU_VERSION = 167; - + public static final int ILU_FILTER = 0x2600; public static final int ILU_NEAREST = 0x2601; public static final int ILU_LINEAR = 0x2602; @@ -62,7 +64,7 @@ public class ILU { public static final int ILU_SCALE_LANCZOS3 = 0x2608; public static final int ILU_SCALE_MITCHELL = 0x2609; -// Error types + // Error types public static final int ILU_INVALID_ENUM = 0x0501; public static final int ILU_OUT_OF_MEMORY = 0x0502; public static final int ILU_INTERNAL_ERROR = 0x0504; @@ -70,7 +72,7 @@ public class ILU { public static final int ILU_ILLEGAL_OPERATION = 0x0506; public static final int ILU_INVALID_PARAM = 0x0509; -// Values + // Values public static final int ILU_PLACEMENT = 0x0700; public static final int ILU_LOWER_LEFT = 0x0701; public static final int ILU_LOWER_RIGHT = 0x0702; @@ -78,23 +80,19 @@ public class ILU { public static final int ILU_UPPER_RIGHT = 0x0704; public static final int ILU_CENTER = 0x0705; public static final int ILU_CONVOLUTION_MATRIX = 0x0710; -// public static final int ILU_VERSION_NUM = IL_VERSION_NUM; -// public static final int ILU_VENDOR = IL_VENDOR; + public static final int ILU_VERSION_NUM = IL.IL_VERSION_NUM; + public static final int ILU_VENDOR = IL.IL_VENDOR; + + /** Have we been created? */ + protected static boolean created; - static { -// System.loadLibrary("ILU"); - System.loadLibrary("lwjgl-devil"); - } - /** - * @return true if DevIL has been created + * @return true if ILU has been created */ public static boolean isCreated() { return created; } - public static native void initNativeStubs() throws LWJGLException; - public static native boolean iluAlienify(); public static native boolean iluBlurAvg(int iter); public static native boolean iluBlurGaussian(int iter); @@ -121,25 +119,18 @@ public class ILU { BufferChecks.checkDirect(param); niluGetIntegerv(mode, param, param.position()); } - public static native void niluGetIntegerv(int mode, IntBuffer param, int param_offset); + private static native void niluGetIntegerv(int mode, IntBuffer param, int param_offset); public static native String iluGetString(int stringName); public static native void iluImageParameter(int pName, int param); - public static native void iluInit(); + private static native void iluInit(); public static native boolean iluInvertAlpha(); public static native int iluLoadImage(String fileName); public static native boolean iluMirror(); public static native boolean iluNegative(); public static native boolean iluNoisify(float tolerance); public static native boolean iluPixelize(int pixSize); - // TODO result placed in a pointer -// public static native void iluRegionfv(ILpointf points[], int n); - // TODO result placed in a pointer -// public static native void iluRegioniv(ILpointi points[], int n); public static native boolean iluReplaceColour(byte red, byte green, byte blue, float tolerance); public static native boolean iluRotate(float angle); - - // TODO Not implemented in the native lib -// public static native boolean iluRotate3D(float x, float y, float z, float Angle); public static native boolean iluSaturate1f(float saturation); public static native boolean iluSaturate4f(float r, float g, float b, float saturation); public static native boolean iluScale(int width, int height, int depth); @@ -147,23 +138,13 @@ public class ILU { public static native boolean iluSharpen(float factor, int iter); public static native boolean iluSwapColours(); public static native boolean iluWave(float angle); - /** - * - */ - public static void create() throws LWJGLException { - if (!created) { - nCreate(); - ILU.initNativeStubs(); - ILU.iluInit(); - created = true; - } - - } - public static native void nCreate(); + // public static native void iluRegionfv(ILpointf points[], int n); + // public static native void iluRegioniv(ILpointi points[], int n); + // public static native boolean iluRotate3D(float x, float y, float z, float Angle); - //DevIL lib allows both spellings of colour. - //Will do the same this way. + /* DevIL lib allows both spellings of colour. We support that too */ + // ======================================================================== public static void iluColorsUsed() { iluColoursUsed(); } @@ -176,4 +157,136 @@ public class ILU { public static void iluScaleColors(float r, float g, float b) { iluScaleColours(r, g, b); } + // ------------------------------------------------------------------------ + + /** + * Creates a new instance of ILU. Cannot be created unless IL has been created. + */ + public static void create() throws LWJGLException { + if(!IL.isCreated()) { + throw new LWJGLException("Cannot create ILU without having created IL instance"); + } + + String[] iluPaths = getILUPaths(); + nCreate(iluPaths); + created = true; + + try { + ILU.initNativeStubs(); + ILU.iluInit(); + created = true; + } catch (LWJGLException e) { + destroy(); + throw e; + } + } + + private static native void initNativeStubs() throws LWJGLException; + + private static native void resetNativeStubs(Class clazz); + + /** + * Exit cleanly by calling destroy. + */ + public static void destroy() { + resetNativeStubs(ILU.class); + if (created) { + nDestroy(); + } + created = false; + } + + /** + * Native method to create ILU instance + * + * @param iluPaths Array of strings containing paths to search for ILU library + */ + protected static native void nCreate(String[] iluPaths) throws LWJGLException; + + /** + * Native method the destroy the ILU + */ + protected static native void nDestroy(); + + private static String[] getILUPaths() throws LWJGLException { + // need to pass path of possible locations of ILU to native side + List possible_paths = new ArrayList(); + + String osName = System.getProperty("os.name"); + + String libname; + String platform_lib_name; + if (osName.startsWith("Win")) { + libname = "ILU"; + platform_lib_name = "ILU.dll"; + } else if (osName.startsWith("Lin")) { + libname = "ILU"; + platform_lib_name = "ILU.so"; + } else if (osName.startsWith("Mac")) { + libname = "ILU"; + platform_lib_name = "ILU.dylib"; + } else { + throw new LWJGLException("Unknown platform: " + osName); + } + + // Add all possible paths from java.library.path + String java_library_path = System.getProperty("java.library.path"); + StringTokenizer st = new StringTokenizer(System.getProperty("java.library.path"), File.pathSeparator); + while (st.hasMoreTokens()) { + String path = st.nextToken(); + possible_paths.add(path + File.separator + platform_lib_name); + } + + String classloader_path = getPathFromClassLoader(libname); + if (classloader_path != null) { + Sys.log("getPathFromClassLoader: Path found: " + classloader_path); + possible_paths.add(classloader_path); + } + String lwjgl_classloader_path = getPathFromClassLoader("lwjgl"); + if (lwjgl_classloader_path != null) { + Sys.log("getPathFromClassLoader: Path found: " + lwjgl_classloader_path); + possible_paths.add(lwjgl_classloader_path.substring(0, lwjgl_classloader_path.lastIndexOf(File.separator)) + + File.separator + platform_lib_name); + } + + //add cwd path + possible_paths.add(platform_lib_name); + + //create needed string array + String[] iluPaths = new String[possible_paths.size()]; + possible_paths.toArray(iluPaths); + + return iluPaths; + } + + /** + * Tries to locate ILU from the current ClassLoader + * This method exists because ILU is loaded from native code, and as such + * is exempt from ClassLoader library loading rutines. ILU therefore always fails. + * We therefore invoke the protected method of the ClassLoader to see if it can + * locate it. + * + * @param libname Name of library to search for + * @return Absolute path to library if found, otherwise null + */ + private static String getPathFromClassLoader(String libname) { + try { + Sys.log("getPathFromClassLoader: searching for: " + libname); + Object o = IL.class.getClassLoader(); + Class c = o.getClass(); + while (c != null) { + try { + Method findLibrary = c.getDeclaredMethod("findLibrary", new Class[] { String.class}); + findLibrary.setAccessible(true); + Object[] arguments = new Object[] { libname}; + return (String) findLibrary.invoke(o, arguments); + } catch (NoSuchMethodException e) { + c = c.getSuperclass(); + } + } + } catch (Exception e) { + Sys.log("Failure locating ILU using classloader:" + e); + } + return null; + } } diff --git a/src/java/org/lwjgl/devil/ILUT.java b/src/java/org/lwjgl/devil/ILUT.java index 1fba9097..8448ee01 100644 --- a/src/java/org/lwjgl/devil/ILUT.java +++ b/src/java/org/lwjgl/devil/ILUT.java @@ -31,7 +31,14 @@ */ package org.lwjgl.devil; +import java.io.File; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + import org.lwjgl.LWJGLException; +import org.lwjgl.Sys; /** * $Id$ @@ -39,22 +46,17 @@ import org.lwjgl.LWJGLException; * The DevIL ILUT API. * * @author captainjester + * @author Brian Matzon * @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 + // Attribute Bits public static final int ILUT_OPENGL_BIT = 0x00000001; public static final int ILUT_ALL_ATTRIB_BITS = 0x000FFFFF; -// Error Types + // 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; @@ -67,7 +69,7 @@ public class ILUT { public static final int ILUT_NOT_SUPPORTED = 0x0550; -// State Definitions + // 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; @@ -75,46 +77,32 @@ public class ILUT { 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? + // 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"); - } + + public static final int ILUT_VENDOR = IL.IL_VENDOR; + + /** Have we been created? */ + protected static boolean created; - /** - * @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 ilutRenderer(int renderer); 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(); + private 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); + // public static native void ilutGetBooleanv(int mode, ILboolean *Param); + // public static native void ilutGetIntegerv(int mode, ILint *Param); -// ImageLib Utility Toolkit's OpenGL Functions + // ImageLib Utility Toolkit's OpenGL Functions public static native int ilutGLBindTexImage(); public static native int ilutGLBindMipmaps(); public static native boolean ilutGLBuildMipmaps(); @@ -124,17 +112,142 @@ public class ILUT { public static native boolean ilutGLSaveImage(String fileName, int texID); public static native boolean ilutGLSetTex(int texID); public static native boolean ilutGLTexImage(int level); - + + /** + * @return true if ILUT has been created + */ + public static boolean isCreated() { + return created; + } + + /** + * Creates a new instance of ILUT. Cannot be created unless IL has been created. + */ public static void create() throws LWJGLException { - if (!created) { - nCreate(); - ILUT.initNativeStubs(); - ILUT.ilutInit(); - ilutRenderer(ILUT_OPENGL); - created = true; - } - + if(!IL.isCreated()) { + throw new LWJGLException("Cannot create ILUT without having created IL instance"); + } + + String[] ilutPaths = getILUTPaths(); + nCreate(ilutPaths); + created = true; + + try { + ILUT.initNativeStubs(); + ILUT.ilutInit(); + created = true; + } catch (LWJGLException e) { + destroy(); + throw e; + } } - public static native void nCreate(); + private static native void initNativeStubs() throws LWJGLException; + + private static native void resetNativeStubs(Class clazz); + + /** + * Exit cleanly by calling destroy. + */ + public static void destroy() { + resetNativeStubs(ILUT.class); + if (created) { + nDestroy(); + } + created = false; + } + + /** + * Native method to create ILUT instance + * + * @param iluPaths Array of strings containing paths to search for ILUT library + */ + protected static native void nCreate(String[] ilutPaths) throws LWJGLException; + + /** + * Native method the destroy the ILUT + */ + protected static native void nDestroy(); + + private static String[] getILUTPaths() throws LWJGLException { + // need to pass path of possible locations of IL to native side + List possible_paths = new ArrayList(); + + String osName = System.getProperty("os.name"); + + String libname; + String platform_lib_name; + if (osName.startsWith("Win")) { + libname = "ILUT"; + platform_lib_name = "ILUT.dll"; + } else if (osName.startsWith("Lin")) { + libname = "ILUT"; + platform_lib_name = "ILUT.so"; + } else if (osName.startsWith("Mac")) { + libname = "ILUT"; + platform_lib_name = "ILUT.dylib"; + } else { + throw new LWJGLException("Unknown platform: " + osName); + } + + // Add all possible paths from java.library.path + String java_library_path = System.getProperty("java.library.path"); + StringTokenizer st = new StringTokenizer(System.getProperty("java.library.path"), File.pathSeparator); + while (st.hasMoreTokens()) { + String path = st.nextToken(); + possible_paths.add(path + File.separator + platform_lib_name); + } + + String classloader_path = getPathFromClassLoader(libname); + if (classloader_path != null) { + Sys.log("getPathFromClassLoader: Path found: " + classloader_path); + possible_paths.add(classloader_path); + } + String lwjgl_classloader_path = getPathFromClassLoader("lwjgl"); + if (lwjgl_classloader_path != null) { + Sys.log("getPathFromClassLoader: Path found: " + lwjgl_classloader_path); + possible_paths.add(lwjgl_classloader_path.substring(0, lwjgl_classloader_path.lastIndexOf(File.separator)) + + File.separator + platform_lib_name); + } + + //add cwd path + possible_paths.add(platform_lib_name); + + //create needed string array + String[] ilutPaths = new String[possible_paths.size()]; + possible_paths.toArray(ilutPaths); + + return ilutPaths; + } + + /** + * Tries to locate ILUT from the current ClassLoader + * This method exists because ILUT is loaded from native code, and as such + * is exempt from ClassLoader library loading rutines. ILUT therefore always fails. + * We therefore invoke the protected method of the ClassLoader to see if it can + * locate it. + * + * @param libname Name of library to search for + * @return Absolute path to library if found, otherwise null + */ + private static String getPathFromClassLoader(String libname) { + try { + Sys.log("getPathFromClassLoader: searching for: " + libname); + Object o = IL.class.getClassLoader(); + Class c = o.getClass(); + while (c != null) { + try { + Method findLibrary = c.getDeclaredMethod("findLibrary", new Class[] { String.class}); + findLibrary.setAccessible(true); + Object[] arguments = new Object[] { libname}; + return (String) findLibrary.invoke(o, arguments); + } catch (NoSuchMethodException e) { + c = c.getSuperclass(); + } + } + } catch (Exception e) { + Sys.log("Failure locating ILUT using classloader:" + e); + } + return null; + } } diff --git a/src/java/org/lwjgl/test/devil/BasicTest.java b/src/java/org/lwjgl/test/devil/BasicTest.java index c9cf93ac..47bc57d8 100644 --- a/src/java/org/lwjgl/test/devil/BasicTest.java +++ b/src/java/org/lwjgl/test/devil/BasicTest.java @@ -37,6 +37,7 @@ import java.net.URL; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer; + /** * $Id$ *

The core DevIL and ILU API.

@@ -45,67 +46,73 @@ import java.nio.IntBuffer; * @version $Revision$ */ public class BasicTest { - public static void main(String args[]) { - try { - IL.create(); - ILU.create(); - } - catch(Exception e) { - e.printStackTrace(); - System.exit(0); - } - System.out.println("error = " + ILU.iluErrorString(IL.ilGetError())); - System.out.println("ilGenImages"); - IntBuffer im = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer(); - IL.ilGenImages(1, im); - System.out.println("ilBindImage"); - IL.ilBindImage(im.get(0)); - IL.ilEnable(IL.IL_ORIGIN_SET); - IL.ilOriginFunc(IL.IL_ORIGIN_UPPER_LEFT); - System.out.println("error = " + ILU.iluErrorString(IL.ilGetError())); - String imageFile = "F:/Apps/Java/eclipse/workspace/LWJGL/res/ILtest.tga"; - URL imageURL = BasicTest.class.getResource("/res/ILtest.tga"); - System.out.println("ilLoadFromURL " + imageURL); - System.out.println("load lump = " + IL.ilLoadFromURL(imageURL)); - System.out.println("error = " + ILU.iluErrorString(IL.ilGetError())); - int newIm = IL.ilCloneCurImage(); - IL.ilCopyImage(im.get(0)); - IL.ilBindImage(newIm); - ByteBuffer buf = IL.ilGetData(); - System.out.println("ilGetData"); - System.out.println("error = " + ILU.iluErrorString(IL.ilGetError())); - int limit = buf.limit(); - System.out.println("limit = " + limit); - for(int i=0;i +#include +#include +#include "org_lwjgl_devil_IL.h" +#include "org_lwjgl_devil_ILU.h" +#include "org_lwjgl_devil_ILUT.h" +#include "common_tools.h" + +/*-----------------------------------------*/ +typedef unsigned int GLuint; + +#ifdef _UNICODE + #ifndef _WIN32_WCE + #include + #endif + typedef wchar_t* ILstring; +#else + typedef char* ILstring; +#endif//_UNICODE + +#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) || defined(__LCC__) + #define ILAPIENTRY __stdcall + #define IL_PACKSTRUCT +//#elif defined(linux) || defined(MACOSX) || defined(__CYGWIN__) //fix bug 840364 +#elif defined( __GNUC__ ) + // this should work for any of the above commented platforms + // plus any platform using GCC + #define ILAPIENTRY + #define IL_PACKSTRUCT __attribute__ ((packed)) +#else + #define ILAPIENTRY + #define IL_PACKSTRUCT +#endif + +// This is from Win32's and +#if defined(__LCC__) + #define ILAPI __stdcall +#elif defined(_WIN32) //changed 20031221 to fix bug 840421 + #ifdef IL_STATIC_LIB + #define ILAPI + #else + #ifdef _IL_BUILD_LIBRARY + #define ILAPI __declspec(dllexport) + #else + #define ILAPI __declspec(dllimport) + #endif + #endif +#elif __APPLE__ + #define ILAPI extern +#else + #define ILAPI +#endif + +typedef void* ILHANDLE; +typedef unsigned int ILenum; +typedef unsigned char ILboolean; +typedef unsigned int ILbitfield; +typedef char ILbyte; +typedef short ILshort; +typedef int ILint; +typedef int ILsizei; +typedef unsigned char ILubyte; +typedef unsigned short ILushort; +typedef unsigned int ILuint; +typedef float ILfloat; +typedef float ILclampf; +typedef double ILdouble; +typedef double ILclampd; +typedef void ILvoid; + +typedef struct ILinfo +{ + ILuint Id; // the image's id + ILubyte *Data; // the image's data + ILuint Width; // the image's width + ILuint Height; // the image's height + ILuint Depth; // the image's depth + ILubyte Bpp; // bytes per pixel (not bits) of the image + ILuint SizeOfData; // the total size of the data (in bytes) + ILenum Format; // image format (in IL enum style) + ILenum Type; // image type (in IL enum style) + ILenum Origin; // origin of the image + ILubyte *Palette; // the image's palette + ILenum PalType; // palette type + ILuint PalSize; // palette size + ILenum CubeFlags; // flags for what cube map sides are present + ILuint NumNext; // number of images following + ILuint NumMips; // number of mipmaps + ILuint NumLayers; // number of layers +} ILinfo; + + +typedef struct ILpointf +{ + ILfloat x, y; +} ILpointf; + +typedef struct ILpointi +{ + ILint x, y; +} ILpointi; + +#define IL_IMAGE_WIDTH 0x0DE4 +#define IL_IMAGE_HEIGHT 0x0DE5 +#define IL_IMAGE_BYTES_PER_PIXEL 0x0DE8 + +// Registered format procedures +typedef ILenum (ILAPIENTRY *IL_LOADPROC)(const ILstring); +typedef ILenum (ILAPIENTRY *IL_SAVEPROC)(const ILstring); +/*-----------------------------------------*/ + +#if defined(_WIN32) && !defined(APIENTRY) +#define WIN32_LEAN_AND_MEAN 1 +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif + +#endif /* __EXTIL_H__ */ \ No newline at end of file diff --git a/src/native/common/devil/extil.c b/src/native/common/devil/extil.c index b10fb6c6..e0ffc436 100644 --- a/src/native/common/devil/extil.c +++ b/src/native/common/devil/extil.c @@ -1,67 +1,115 @@ #include "extil.h" -/* turn off the warning for the borland compiler*/ -#ifdef __BORLANDC__ -#pragma warn -8064 -#pragma warn -8065 -#endif /* __BORLANDC__ */ - +/* Handle to devil Library */ #ifdef _WIN32 -HMODULE devILhandle = NULL; +static HMODULE devILhandle; +#endif +#ifdef _X11 +static void* devILhandle; +#endif +#ifdef _MACOSX +#include +#include +#include +static const struct mach_header* devILhandle; #endif -/* getProcAddress */ - -void *extil_GetProcAddress(const char *name) { +/** + * Retrieves a function pointer from the devil library + * @param function Name of function to retrieve + */ +static void *NativeGetFunctionPointer(const char *function) { #ifdef _WIN32 - void *t = GetProcAddress(devILhandle, name); - - - if (t == NULL) { - printfDebug("Could not locate symbol %s\n", name); - } - - - return t; + return GetProcAddress(devILhandle, function); +#endif +#ifdef _X11 + return dlsym(devILhandle, function); +#endif +#ifdef _MACOSX + char *mac_symbol_name = (char *)malloc((strlen(function) + 2)*sizeof(char)); + if (mac_symbol_name == NULL) + return NULL; + mac_symbol_name[0] = '_'; + strcpy(&(mac_symbol_name[1]), function); + NSSymbol symbol = NSLookupSymbolInImage(devILhandle, mac_symbol_name, NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); + free(mac_symbol_name); + if (symbol == NULL) + return NULL; + return NSAddressOfSymbol(symbol); #endif } +/** + * Retrieves a pointer to the named function + * + * @param function Name of function + * @return pointer to named function, or NULL if not found + */ +static void* extil_GetProcAddress(const char* function) { + void *p = NativeGetFunctionPointer(function); + if (p == NULL) { + printfDebug("Could not locate symbol %s\n", function); + } + return p; +} + +/** + * Initializes all functions for class + */ void extil_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMethodAndExtFunction *functions) { ext_InitializeClass(env, clazz, &extil_GetProcAddress, num_functions, functions); } +/** + * Opens the native library + */ +bool extil_Open(JNIEnv *env, jobjectArray ilPaths) { + jsize pathcount = (*env)->GetArrayLength(env, ilPaths); + int i; + jstring path; + char *path_str; -bool extil_InitializeFunctions(int num_functions, ExtFunction *functions) { - return ext_InitializeFunctions(&extil_GetProcAddress, num_functions, functions); -} - + printfDebug("Found %d devil paths\n", (int)pathcount); + for(i=0;iGetObjectArrayElement(env, ilPaths, i); + path_str = GetStringNativeChars(env, path); + printfDebug("Testing '%s'\n", path_str); #ifdef _WIN32 -bool extil_Open(JNIEnv *env) { - bool result = true; + devILhandle = LoadLibrary(path_str); +#endif +#ifdef _X11 + devILhandle = dlopen(path_str, RTLD_LAZY); +#endif +#ifdef _MACOSX + devILhandle = NSAddImage(path_str, NSADDIMAGE_OPTION_RETURN_ON_ERROR); +#endif + if (devILhandle != NULL) { + printfDebug("Found devil at '%s'\n", path_str); + } - if (devILhandle == NULL) { - // load the dynamic libraries for DevIL - devILhandle = LoadLibrary("DevIL.dll"); - if (devILhandle == NULL) { - printf("\r\nfailed to load DevIL"); - result = false; - } - } - - return result; + free(path_str); + if (devILhandle != NULL) { + return true; + } + } + throwException(env, "Could not load devil library."); + return false; } -#endif /* WIN32 */ +/** + * Closes the native library + */ void extil_Close(void) { #ifdef _WIN32 - FreeLibrary(devILhandle); - devILhandle = NULL; + FreeLibrary(devILhandle); #endif -} - -/* turn on the warning for the borland compiler*/ -#ifdef __BORLANDC__ -#pragma warn .8064 -#pragma warn .8065 -#endif /* __BORLANDC__ */ - +#ifdef _X11 + if (devILhandle != NULL) { + dlclose(devILhandle); + } +#endif +#ifdef _MACOSX + // Cannot remove the image +#endif + devILhandle = NULL; +} \ No newline at end of file diff --git a/src/native/common/devil/extil.h b/src/native/common/devil/extil.h index a27b7001..ac5cd0bb 100644 --- a/src/native/common/devil/extil.h +++ b/src/native/common/devil/extil.h @@ -1,53 +1,10 @@ #ifndef __EXTIL_H__ #define __EXTIL_H__ -#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" +#include "devil-common.h" - -/*-----------------------------------------*/ -/*-----------------------------------------*/ - -#if defined(_WIN32) && !defined(APIENTRY) -#define WIN32_LEAN_AND_MEAN 1 -#include - -#endif - -#define __ilext_h_ -#define __ILEXT_H_ -#define __il_h_ -#define __IL_H__ - -#include - -#ifndef APIENTRY -#define APIENTRY -#endif - -#include "common_tools.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* initializes everything, call this right after the rc is created. the function returns 0 if successful */ -extern bool extil_Open(JNIEnv *env); +extern bool extil_Open(JNIEnv *env, jobjectArray ilPaths); extern void extil_Close(void); extern void extil_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMethodAndExtFunction *functions); -extern bool extil_InitializeFunctions(int num_functions, ExtFunction *functions); -#ifdef __cplusplus -} -#endif - -#endif /* __EXTIL_H__ */ +#endif \ No newline at end of file diff --git a/src/native/common/devil/extilu.c b/src/native/common/devil/extilu.c new file mode 100644 index 00000000..de147acf --- /dev/null +++ b/src/native/common/devil/extilu.c @@ -0,0 +1,115 @@ +#include "extilu.h" + +/* Handle to ilu Library */ +#ifdef _WIN32 +static HMODULE devILUhandle; +#endif +#ifdef _X11 +static void* devILUhandle; +#endif +#ifdef _MACOSX +#include +#include +#include +static const struct mach_header* devILUhandle; +#endif + +/** + * Retrieves a function pointer from the ilu library + * @param function Name of function to retrieve + */ +static void *NativeGetFunctionPointer(const char *function) { +#ifdef _WIN32 + return GetProcAddress(devILUhandle, function); +#endif +#ifdef _X11 + return dlsym(devILUhandle, function); +#endif +#ifdef _MACOSX + char *mac_symbol_name = (char *)malloc((strlen(function) + 2)*sizeof(char)); + if (mac_symbol_name == NULL) + return NULL; + mac_symbol_name[0] = '_'; + strcpy(&(mac_symbol_name[1]), function); + NSSymbol symbol = NSLookupSymbolInImage(devILUhandle, mac_symbol_name, NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); + free(mac_symbol_name); + if (symbol == NULL) + return NULL; + return NSAddressOfSymbol(symbol); +#endif +} + +/** + * Retrieves a pointer to the named function + * + * @param function Name of function + * @return pointer to named function, or NULL if not found + */ +static void* extilu_GetProcAddress(const char* function) { + void *p = NativeGetFunctionPointer(function); + if (p == NULL) { + printfDebug("Could not locate symbol %s\n", function); + } + return p; +} + +/** + * Initializes all functions for class + */ +void extilu_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMethodAndExtFunction *functions) { + ext_InitializeClass(env, clazz, &extilu_GetProcAddress, num_functions, functions); +} + +/** + * Opens the native library + */ +bool extilu_Open(JNIEnv *env, jobjectArray ilPaths) { + jsize pathcount = (*env)->GetArrayLength(env, ilPaths); + int i; + jstring path; + char *path_str; + + printfDebug("Found %d ilu paths\n", (int)pathcount); + for(i=0;iGetObjectArrayElement(env, ilPaths, i); + path_str = GetStringNativeChars(env, path); + printfDebug("Testing '%s'\n", path_str); +#ifdef _WIN32 + devILUhandle = LoadLibrary(path_str); +#endif +#ifdef _X11 + devILUhandle = dlopen(path_str, RTLD_LAZY); +#endif +#ifdef _MACOSX + devILUhandle = NSAddImage(path_str, NSADDIMAGE_OPTION_RETURN_ON_ERROR); +#endif + if (devILUhandle != NULL) { + printfDebug("Found ilu at '%s'\n", path_str); + } + + free(path_str); + if (devILUhandle != NULL) { + return true; + } + } + throwException(env, "Could not load ilu library."); + return false; +} + +/** + * Closes the native library + */ +void extilu_Close(void) { +#ifdef _WIN32 + FreeLibrary(devILUhandle); +#endif +#ifdef _X11 + if (devILUhandle != NULL) { + dlclose(devILUhandle); + } +#endif +#ifdef _MACOSX + // Cannot remove the image +#endif + devILUhandle = NULL; +} \ No newline at end of file diff --git a/src/native/common/devil/extilu.h b/src/native/common/devil/extilu.h new file mode 100644 index 00000000..bedd8c55 --- /dev/null +++ b/src/native/common/devil/extilu.h @@ -0,0 +1,10 @@ +#ifndef __EXTILU_H__ +#define __EXTILU_H__ + +#include "devil-common.h" + +extern bool extilu_Open(JNIEnv *env, jobjectArray ilPaths); +extern void extilu_Close(void); +extern void extilu_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMethodAndExtFunction *functions); + +#endif \ No newline at end of file diff --git a/src/native/common/devil/extilut.c b/src/native/common/devil/extilut.c new file mode 100644 index 00000000..f01f6068 --- /dev/null +++ b/src/native/common/devil/extilut.c @@ -0,0 +1,115 @@ +#include "extilut.h" + +/* Handle to ilut Library */ +#ifdef _WIN32 +static HMODULE devILUThandle; +#endif +#ifdef _X11 +static void* devILUThandle; +#endif +#ifdef _MACOSX +#include +#include +#include +static const struct mach_header* devILUThandle; +#endif + +/** + * Retrieves a function pointer from the ilut library + * @param function Name of function to retrieve + */ +static void *NativeGetFunctionPointer(const char *function) { +#ifdef _WIN32 + return GetProcAddress(devILUThandle, function); +#endif +#ifdef _X11 + return dlsym(devILUThandle, function); +#endif +#ifdef _MACOSX + char *mac_symbol_name = (char *)malloc((strlen(function) + 2)*sizeof(char)); + if (mac_symbol_name == NULL) + return NULL; + mac_symbol_name[0] = '_'; + strcpy(&(mac_symbol_name[1]), function); + NSSymbol symbol = NSLookupSymbolInImage(devILUThandle, mac_symbol_name, NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); + free(mac_symbol_name); + if (symbol == NULL) + return NULL; + return NSAddressOfSymbol(symbol); +#endif +} + +/** + * Retrieves a pointer to the named function + * + * @param function Name of function + * @return pointer to named function, or NULL if not found + */ +static void* extilut_GetProcAddress(const char* function) { + void *p = NativeGetFunctionPointer(function); + if (p == NULL) { + printfDebug("Could not locate symbol %s\n", function); + } + return p; +} + +/** + * Initializes all functions for class + */ +void extilut_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMethodAndExtFunction *functions) { + ext_InitializeClass(env, clazz, &extilut_GetProcAddress, num_functions, functions); +} + +/** + * Opens the native library + */ +bool extilut_Open(JNIEnv *env, jobjectArray ilPaths) { + jsize pathcount = (*env)->GetArrayLength(env, ilPaths); + int i; + jstring path; + char *path_str; + + printfDebug("Found %d ilut paths\n", (int)pathcount); + for(i=0;iGetObjectArrayElement(env, ilPaths, i); + path_str = GetStringNativeChars(env, path); + printfDebug("Testing '%s'\n", path_str); +#ifdef _WIN32 + devILUThandle = LoadLibrary(path_str); +#endif +#ifdef _X11 + devILUThandle = dlopen(path_str, RTLD_LAZY); +#endif +#ifdef _MACOSX + devILUThandle = NSAddImage(path_str, NSADDIMAGE_OPTION_RETURN_ON_ERROR); +#endif + if (devILUThandle != NULL) { + printfDebug("Found ilut at '%s'\n", path_str); + } + + free(path_str); + if (devILUThandle != NULL) { + return true; + } + } + throwException(env, "Could not load ilut library."); + return false; +} + +/** + * Closes the native library + */ +void extilut_Close(void) { +#ifdef _WIN32 + FreeLibrary(devILUThandle); +#endif +#ifdef _X11 + if (devILUThandle != NULL) { + dlclose(devILUThandle); + } +#endif +#ifdef _MACOSX + // Cannot remove the image +#endif + devILUThandle = NULL; +} \ No newline at end of file diff --git a/src/native/common/devil/extilut.h b/src/native/common/devil/extilut.h new file mode 100644 index 00000000..560b28d9 --- /dev/null +++ b/src/native/common/devil/extilut.h @@ -0,0 +1,10 @@ +#ifndef __EXTILUT_H__ +#define __EXTILUT_H__ + +#include "devil-common.h" + +extern bool extilut_Open(JNIEnv *env, jobjectArray ilPaths); +extern void extilut_Close(void); +extern void extilut_InitializeClass(JNIEnv *env, jclass clazz, int num_functions, JavaMethodAndExtFunction *functions); + +#endif \ No newline at end of file diff --git a/src/native/common/devil/org_lwjgl_devil_IL.c b/src/native/common/devil/org_lwjgl_devil_IL.c index 5a94d834..687b27f5 100644 --- a/src/native/common/devil/org_lwjgl_devil_IL.c +++ b/src/native/common/devil/org_lwjgl_devil_IL.c @@ -1,5 +1,179 @@ #include "extil.h" +typedef ILboolean (ILAPIENTRY *ilActiveImagePROC) (ILuint Number); +typedef ILboolean (ILAPIENTRY *ilActiveLayerPROC) (ILuint Number); +typedef ILboolean (ILAPIENTRY *ilActiveMipmapPROC) (ILuint Number); +typedef ILboolean (ILAPIENTRY *ilApplyPalPROC) (const ILstring FileName); +typedef ILboolean (ILAPIENTRY *ilApplyProfilePROC) (const ILstring InProfile, const ILstring OutProfile); +typedef ILvoid (ILAPIENTRY *ilBindImagePROC) (ILuint Image); +typedef ILboolean (ILAPIENTRY *ilBlitPROC) (ILuint Source, ILint DestX, ILint DestY, ILint DestZ, ILuint SrcX, ILuint SrcY, ILuint SrcZ, ILuint Width, ILuint Height, ILuint Depth); +typedef ILvoid (ILAPIENTRY *ilClearColourPROC) (ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha); +typedef ILboolean (ILAPIENTRY *ilClearImagePROC) (ILvoid); +typedef ILuint (ILAPIENTRY *ilCloneCurImagePROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilCompressFuncPROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilConvertImagePROC) (ILenum DestFormat, ILenum DestType); +typedef ILboolean (ILAPIENTRY *ilConvertPalPROC) (ILenum DestFormat); +typedef ILboolean (ILAPIENTRY *ilCopyImagePROC) (ILuint Src); +typedef ILuint (ILAPIENTRY *ilCopyPixelsPROC) (ILuint XOff, ILuint YOff, ILuint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, ILvoid *Data); +typedef ILuint (ILAPIENTRY *ilCreateSubImagePROC) (ILenum Type, ILuint Num); +typedef ILboolean (ILAPIENTRY *ilDefaultImagePROC) (ILvoid); +typedef ILvoid (ILAPIENTRY *ilDeleteImagesPROC) (ILsizei Num, const ILuint *Images); +typedef ILboolean (ILAPIENTRY *ilDisablePROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilEnablePROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilFormatFuncPROC) (ILenum Mode); +typedef ILvoid (ILAPIENTRY *ilGenImagesPROC) (ILsizei Num, ILuint *Images); +typedef ILubyte* (ILAPIENTRY *ilGetAlphaPROC) (ILenum Type); +typedef ILvoid (ILAPIENTRY *ilModAlphaPROC) ( ILint AlphaValue ); +typedef ILvoid (ILAPIENTRY *ilSetAlphaPROC) ( ILuint AlphaValue ); +typedef ILboolean (ILAPIENTRY *ilGetBooleanPROC) (ILenum Mode); +typedef ILvoid (ILAPIENTRY *ilGetBooleanvPROC) (ILenum Mode, ILboolean *Param); +typedef ILubyte* (ILAPIENTRY *ilGetDataPROC) (ILvoid); +typedef ILuint (ILAPIENTRY *ilGetDXTCDataPROC) (ILvoid *Buffer, ILuint BufferSize, ILenum DXTCFormat); +typedef ILenum (ILAPIENTRY *ilGetErrorPROC) (ILvoid); +typedef ILint (ILAPIENTRY *ilGetIntegerPROC) (ILenum Mode); +typedef ILvoid (ILAPIENTRY *ilGetIntegervPROC) (ILenum Mode, ILint *Param); +typedef ILuint (ILAPIENTRY *ilGetLumpPosPROC) (ILvoid); +typedef ILubyte* (ILAPIENTRY *ilGetPalettePROC) (ILvoid); +typedef const ILstring (ILAPIENTRY *ilGetStringPROC) (ILenum StringName); +typedef ILvoid (ILAPIENTRY *ilHintPROC) (ILenum Target, ILenum Mode); +typedef ILvoid (ILAPIENTRY *ilInitPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilIsDisabledPROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilIsEnabledPROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilIsImagePROC) (ILuint Image); +typedef ILboolean (ILAPIENTRY *ilIsValidPROC) (ILenum Type, const ILstring FileName); +typedef ILboolean (ILAPIENTRY *ilIsValidFPROC) (ILenum Type, ILHANDLE File); +typedef ILboolean (ILAPIENTRY *ilIsValidLPROC) (ILenum Type, ILvoid *Lump, ILuint Size); +typedef ILvoid (ILAPIENTRY *ilKeyColourPROC) (ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha); +typedef ILboolean (ILAPIENTRY *ilLoadPROC) (ILenum Type, const ILstring FileName); +typedef ILboolean (ILAPIENTRY *ilLoadFPROC) (ILenum Type, ILHANDLE File); +typedef ILboolean (ILAPIENTRY *ilLoadImagePROC) (const ILstring FileName); +typedef ILboolean (ILAPIENTRY *ilLoadLPROC) (ILenum Type, ILvoid *Lump, ILuint Size); +typedef ILboolean (ILAPIENTRY *ilLoadPalPROC) (const ILstring FileName); +typedef ILboolean (ILAPIENTRY *ilOriginFuncPROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilOverlayImagePROC) (ILuint Source, ILint XCoord, ILint YCoord, ILint ZCoord); +typedef ILvoid (ILAPIENTRY *ilPopAttribPROC) (ILvoid); +typedef ILvoid (ILAPIENTRY *ilPushAttribPROC) (ILuint Bits); +typedef ILvoid (ILAPIENTRY *ilRegisterFormatPROC) (ILenum Format); +typedef ILboolean (ILAPIENTRY *ilRegisterLoadPROC) (const ILstring Ext, IL_LOADPROC Load); +typedef ILboolean (ILAPIENTRY *ilRegisterMipNumPROC) (ILuint Num); +typedef ILboolean (ILAPIENTRY *ilRegisterNumImagesPROC) (ILuint Num); +typedef ILvoid (ILAPIENTRY *ilRegisterOriginPROC) (ILenum Origin); +typedef ILvoid (ILAPIENTRY *ilRegisterPalPROC) (ILvoid *Pal, ILuint Size, ILenum Type); +typedef ILboolean (ILAPIENTRY *ilRegisterSavePROC) (const ILstring Ext, IL_SAVEPROC Save); +typedef ILvoid (ILAPIENTRY *ilRegisterTypePROC) (ILenum Type); +typedef ILboolean (ILAPIENTRY *ilRemoveLoadPROC) (const ILstring Ext); +typedef ILboolean (ILAPIENTRY *ilRemoveSavePROC) (const ILstring Ext); +typedef ILvoid (ILAPIENTRY *ilResetMemoryPROC) (ILvoid); +typedef ILvoid (ILAPIENTRY *ilResetReadPROC) (ILvoid); +typedef ILvoid (ILAPIENTRY *ilResetWritePROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilSavePROC) (ILenum Type, const ILstring FileName); +typedef ILuint (ILAPIENTRY *ilSaveFPROC) (ILenum Type, ILHANDLE File); +typedef ILboolean (ILAPIENTRY *ilSaveImagePROC) (const ILstring FileName); +typedef ILuint (ILAPIENTRY *ilSaveLPROC) (ILenum Type, ILvoid *Lump, ILuint Size); +typedef ILboolean (ILAPIENTRY *ilSavePalPROC) (const ILstring FileName); +typedef ILboolean (ILAPIENTRY *ilSetDataPROC) (ILvoid *Data); +typedef ILboolean (ILAPIENTRY *ilSetDurationPROC) (ILuint Duration); +typedef ILvoid (ILAPIENTRY *ilSetIntegerPROC) (ILenum Mode, ILint Param); +typedef ILvoid (ILAPIENTRY *ilSetMemoryPROC) (mAlloc, mFree); +typedef ILvoid (ILAPIENTRY *ilSetPixelsPROC) (ILint XOff, ILint YOff, ILint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, ILvoid *Data); +typedef ILvoid (ILAPIENTRY *ilSetReadPROC) (fOpenRProc, fCloseRProc, fEofProc, fGetcProc, fReadProc, fSeekRProc, fTellRProc); +typedef ILvoid (ILAPIENTRY *ilSetStringPROC) (ILenum Mode, const char *String); +typedef ILvoid (ILAPIENTRY *ilSetWritePROC) (fOpenWProc, fCloseWProc, fPutcProc, fSeekWProc, fTellWProc, fWriteProc); +typedef ILvoid (ILAPIENTRY *ilShutDownPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilTexImagePROC) (ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILenum Format, ILenum Type, ILvoid *Data); +typedef ILboolean (ILAPIENTRY *ilTypeFuncPROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilLoadDataPROC) (const ILstring FileName, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +typedef ILboolean (ILAPIENTRY *ilLoadDataFPROC) (ILHANDLE File, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +typedef ILboolean (ILAPIENTRY *ilLoadDataLPROC) (ILvoid *Lump, ILuint Size, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +typedef ILboolean (ILAPIENTRY *ilSaveDataPROC) (const ILstring FileName); + +static ilActiveImagePROC ilActiveImage; +static ilActiveLayerPROC ilActiveLayer; +static ilActiveMipmapPROC ilActiveMipmap; +static ilApplyPalPROC ilApplyPal; +static ilApplyProfilePROC ilApplyProfile; +static ilBindImagePROC ilBindImage; +static ilBlitPROC ilBlit; +static ilClearColourPROC ilClearColour; +static ilClearImagePROC ilClearImage; +static ilCloneCurImagePROC ilCloneCurImage; +static ilCompressFuncPROC ilCompressFunc; +static ilConvertImagePROC ilConvertImage; +static ilConvertPalPROC ilConvertPal; +static ilCopyImagePROC ilCopyImage; +static ilCopyPixelsPROC ilCopyPixels; +static ilCreateSubImagePROC ilCreateSubImage; +static ilDefaultImagePROC ilDefaultImage; +static ilDeleteImagesPROC ilDeleteImages; +static ilDisablePROC ilDisable; +static ilEnablePROC ilEnable; +static ilFormatFuncPROC ilFormatFunc; +static ilGenImagesPROC ilGenImages; +static ilGetAlphaPROC ilGetAlpha; +static ilModAlphaPROC ilModAlpha; +static ilSetAlphaPROC ilSetAlpha; +static ilGetBooleanPROC ilGetBoolean; +static ilGetBooleanvPROC ilGetBooleanv; +static ilGetDataPROC ilGetData; +static ilGetDXTCDataPROC ilGetDXTCData; +static ilGetErrorPROC ilGetError; +static ilGetIntegerPROC ilGetInteger; +static ilGetIntegervPROC ilGetIntegerv; +static ilGetLumpPosPROC ilGetLumpPos; +static ilGetPalettePROC ilGetPalette; +static ilGetStringPROC ilGetString; +static ilHintPROC ilHint; +static ilInitPROC ilInit; +static ilIsDisabledPROC ilIsDisabled; +static ilIsEnabledPROC ilIsEnabled; +static ilIsImagePROC ilIsImage; +static ilIsValidPROC ilIsValid; +static ilIsValidFPROC ilIsValidF; +static ilIsValidLPROC ilIsValidL; +static ilKeyColourPROC ilKeyColour; +static ilLoadPROC ilLoad; +static ilLoadFPROC ilLoadF; +static ilLoadImagePROC ilLoadImage; +static ilLoadLPROC ilLoadL; +static ilLoadPalPROC ilLoadPal; +static ilOriginFuncPROC ilOriginFunc; +static ilOverlayImagePROC ilOverlayImage; +static ilPopAttribPROC ilPopAttrib; +static ilPushAttribPROC ilPushAttrib; +static ilRegisterFormatPROC ilRegisterFormat; +static ilRegisterLoadPROC ilRegisterLoad; +static ilRegisterMipNumPROC ilRegisterMipNum; +static ilRegisterNumImagesPROC ilRegisterNumImages; +static ilRegisterOriginPROC ilRegisterOrigin; +static ilRegisterPalPROC ilRegisterPal; +static ilRegisterSavePROC ilRegisterSave; +static ilRegisterTypePROC ilRegisterType; +static ilRemoveLoadPROC ilRemoveLoad; +static ilRemoveSavePROC ilRemoveSave; +static ilResetMemoryPROC ilResetMemory; +static ilResetReadPROC ilResetRead; +static ilResetWritePROC ilResetWrite; +static ilSavePROC ilSave; +static ilSaveFPROC ilSaveF; +static ilSaveImagePROC ilSaveImage; +static ilSaveLPROC ilSaveL; +static ilSavePalPROC ilSavePal; +static ilSetDataPROC ilSetData; +static ilSetDurationPROC ilSetDuration; +static ilSetIntegerPROC ilSetInteger; +static ilSetMemoryPROC ilSetMemory; +static ilSetPixelsPROC ilSetPixels; +static ilSetReadPROC ilSetRead; +static ilSetStringPROC ilSetString; +static ilSetWritePROC ilSetWrite; +static ilShutDownPROC ilShutDown; +static ilTexImagePROC ilTexImage; +static ilTypeFuncPROC ilTypeFunc; +static ilLoadDataPROC ilLoadData; +static ilLoadDataFPROC ilLoadDataF; +static ilLoadDataLPROC ilLoadDataL; +static ilSaveDataPROC ilSaveData; + /* * Class: org_lwjgl_devil_IL * Method: ilActiveImage @@ -214,7 +388,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_nilGenImages(JNIEnv *env , jclass ilGenImages((ILsizei)num, (ILuint *)lists); } - /* * Class: org_lwjgl_devil_IL * Method: ilGetAlpha @@ -657,7 +830,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_ilShutDown(JNIEnv *env, jclass cl */ JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_IL_nilTexImage(JNIEnv *env, jclass clazz, jint width, jint height, jint depth , jbyte bpp, jint format, jint type, jobject data_buffer, jint data_offset) { ILbyte *data = (ILbyte *)(*env)->GetDirectBufferAddress(env, data_buffer); - return ilTexImage((ILuint)width, (ILuint)height, (ILuint)depth , (ILubyte)bpp, (ILenum)format, (ILenum)type, (ILvoid *)(data + data_offset)); } @@ -712,18 +884,22 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_IL_ilSaveData(JNIEnv *env, jclas * Method: nCreate * Signature: ()V */ -JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_nCreate(JNIEnv *env, jclass clazz) { - /*if (!extil_Open(env)) { +JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_nCreate(JNIEnv *env, jclass clazz, jobjectArray ilPaths) { + if (!extil_Open(env, ilPaths)) { throwException(env, "Failed to load DevIL library"); return; - }*/ + } +} + +JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_nDestroy(JNIEnv *env, jclass clazz) { + extil_Close(); +} + +JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_resetNativeStubs(JNIEnv *env, jclass clazz, jclass il_class) { + (*env)->UnregisterNatives(env, il_class); } -#ifdef __cplusplus -extern "C" { -#endif JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_initNativeStubs(JNIEnv *env, jclass clazz) { -/* JavaMethodAndExtFunction functions[] = { {"ilActiveImage", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilActiveImage, "ilActiveImage", (void*)&ilActiveImage}, {"ilActiveLayer", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilActiveLayer, "ilActiveLayer", (void*)&ilActiveLayer}, @@ -747,15 +923,15 @@ JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_initNativeStubs(JNIEnv *env, jcla {"ilEnable", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilEnable, "ilEnable", (void*)&ilEnable}, {"ilFormatFunc", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilFormatFunc, "ilFormatFunc", (void*)&ilFormatFunc}, {"nilGenImages", "(ILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_devil_IL_nilGenImages, "ilGenImages", (void*)&ilGenImages}, - {"ilGetAlpha", "(I)[B", (void*)&Java_org_lwjgl_devil_IL_ilGetAlpha, "ilGetAlpha", (void*)&ilGetAlpha}, - {"ilModAlpha", "(I)V", (void*)&Java_org_lwjgl_devil_IL_ilModAlpha, "ilModAlpha", (void*)&ilModAlpha}, - {"ilSetAlpha", "(I)V", (void*)&Java_org_lwjgl_devil_IL_ilSetAlpha, "ilSetAlpha", (void*)&ilSetAlpha}, + {"ilGetAlpha", "(I)Ljava/nio/ByteBuffer;", (void*)&Java_org_lwjgl_devil_IL_ilGetAlpha, "ilGetAlpha", (void*)&ilGetAlpha}, + //{"ilModAlpha", "(I)V", (void*)&Java_org_lwjgl_devil_IL_ilModAlpha, "ilModAlpha", (void*)&ilModAlpha}, + //{"ilSetAlpha", "(I)V", (void*)&Java_org_lwjgl_devil_IL_ilSetAlpha, "ilSetAlpha", (void*)&ilSetAlpha}, {"ilGetBoolean", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilGetBoolean, "ilGetBoolean", (void*)&ilGetBoolean}, - {"ilGetData", "()[B", (void*)&Java_org_lwjgl_devil_IL_ilGetData, "ilGetData", (void*)&ilGetData}, + {"ilGetData", "()Ljava/nio/ByteBuffer;", (void*)&Java_org_lwjgl_devil_IL_ilGetData, "ilGetData", (void*)&ilGetData}, {"ilGetError", "()I", (void*)&Java_org_lwjgl_devil_IL_ilGetError, "ilGetError", (void*)&ilGetError}, {"ilGetInteger", "(I)I", (void*)&Java_org_lwjgl_devil_IL_ilGetInteger, "ilGetInteger", (void*)&ilGetInteger}, {"ilGetLumpPos", "()I", (void*)&Java_org_lwjgl_devil_IL_ilGetLumpPos, "ilGetLumpPos", (void*)&ilGetLumpPos}, - {"ilGetPalette", "()[B", (void*)&Java_org_lwjgl_devil_IL_ilGetPalette, "ilGetPalette", (void*)&ilGetPalette}, + {"ilGetPalette", "()Ljava/nio/ByteBuffer;", (void*)&Java_org_lwjgl_devil_IL_ilGetPalette, "ilGetPalette", (void*)&ilGetPalette}, {"ilGetString", "(I)Ljava/lang/String;", (void*)&Java_org_lwjgl_devil_IL_ilGetString, "ilGetString", (void*)&ilGetString}, {"ilHint", "(II)V", (void*)&Java_org_lwjgl_devil_IL_ilHint, "ilHint", (void*)&ilHint}, {"ilInit", "()V", (void*)&Java_org_lwjgl_devil_IL_ilInit, "ilInit", (void*)&ilInit}, @@ -781,7 +957,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_initNativeStubs(JNIEnv *env, jcla {"ilSave", "(ILjava/lang/String;)Z", (void*)&Java_org_lwjgl_devil_IL_ilSave, "ilSave", (void*)&ilSave}, {"ilSaveImage", "(Ljava/lang/String;)Z", (void*)&Java_org_lwjgl_devil_IL_ilSaveImage, "ilSaveImage", (void*)&ilSaveImage}, {"nilSaveL", "(ILjava/nio/ByteBuffer;II)I", (void*)&Java_org_lwjgl_devil_IL_nilSaveL, "ilSaveL", (void*)&ilSaveL}, - {"ilSavePal", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilSavePal, "ilSavePal", (void*)&ilSavePal}, + {"ilSavePal", "(Ljava/lang/String;)Z", (void*)&Java_org_lwjgl_devil_IL_ilSavePal, "ilSavePal", (void*)&ilSavePal}, {"nilSetData", "(Ljava/nio/ByteBuffer;I)Z", (void*)&Java_org_lwjgl_devil_IL_nilSetData, "ilSetData", (void*)&ilSetData}, {"ilSetDuration", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilSetDuration, "ilSetDuration", (void*)&ilSetDuration}, {"ilSetInteger", "(II)V", (void*)&Java_org_lwjgl_devil_IL_ilSetInteger, "ilSetInteger", (void*)&ilSetInteger}, @@ -791,14 +967,9 @@ JNIEXPORT void JNICALL Java_org_lwjgl_devil_IL_initNativeStubs(JNIEnv *env, jcla {"nilTexImage", "(IIIBIILjava/nio/ByteBuffer;I)Z", (void*)&Java_org_lwjgl_devil_IL_nilTexImage, "ilTexImage", (void*)&ilTexImage}, {"ilTypeFunc", "(I)Z", (void*)&Java_org_lwjgl_devil_IL_ilTypeFunc, "ilTypeFunc", (void*)&ilTypeFunc}, {"ilLoadData", "(Ljava/lang/String;IIIB)Z", (void*)&Java_org_lwjgl_devil_IL_ilLoadData, "ilLoadData", (void*)&ilLoadData}, - {"ilLoadDataL", "(Ljava/nio/ByteBuffer;IIIIIB)Z", (void*)&Java_org_lwjgl_devil_IL_nilLoadDataL, "ilLoadDataL", (void*)&ilLoadDataL}, + {"nilLoadDataL", "(Ljava/nio/ByteBuffer;IIIIIB)Z", (void*)&Java_org_lwjgl_devil_IL_nilLoadDataL, "ilLoadDataL", (void*)&ilLoadDataL}, {"ilSaveData", "(Ljava/lang/String;)Z", (void*)&Java_org_lwjgl_devil_IL_ilSaveData, "ilSaveData", (void*)&ilSaveData} }; int num_functions = NUMFUNCTIONS(functions); extil_InitializeClass(env, clazz, num_functions, functions); -*/ } - -#ifdef __cplusplus -} -#endif diff --git a/src/native/common/devil/org_lwjgl_devil_ILU.c b/src/native/common/devil/org_lwjgl_devil_ILU.c index ced6aedc..775101b5 100644 --- a/src/native/common/devil/org_lwjgl_devil_ILU.c +++ b/src/native/common/devil/org_lwjgl_devil_ILU.c @@ -1,4 +1,94 @@ -#include "extil.h" +#include "extilu.h" + +typedef ILboolean (ILAPIENTRY *iluAlienifyPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluBlurAvgPROC) (ILuint Iter); +typedef ILboolean (ILAPIENTRY *iluBlurGaussianPROC) (ILuint Iter); +typedef ILboolean (ILAPIENTRY *iluBuildMipmapsPROC) (ILvoid); +typedef ILuint (ILAPIENTRY *iluColoursUsedPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluCompareImagePROC) (ILuint Comp); +typedef ILboolean (ILAPIENTRY *iluContrastPROC) (ILfloat Contrast); +typedef ILboolean (ILAPIENTRY *iluCropPROC) (ILuint XOff, ILuint YOff, ILuint ZOff, ILuint Width, ILuint Height, ILuint Depth); +typedef ILvoid (ILAPIENTRY *iluDeleteImagePROC) (ILuint Id); +typedef ILboolean (ILAPIENTRY *iluEdgeDetectEPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluEdgeDetectPPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluEdgeDetectSPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluEmbossPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluEnlargeCanvasPROC) (ILuint Width, ILuint Height, ILuint Depth); +typedef ILboolean (ILAPIENTRY *iluEnlargeImagePROC) (ILfloat XDim, ILfloat YDim, ILfloat ZDim); +typedef ILboolean (ILAPIENTRY *iluEqualizePROC) (ILvoid); +typedef const ILstring (ILAPIENTRY *iluErrorStringPROC) (ILenum Error); +typedef ILboolean (ILAPIENTRY *iluFlipImagePROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluGammaCorrectPROC) (ILfloat Gamma); +typedef ILuint (ILAPIENTRY *iluGenImagePROC) (ILvoid); +typedef ILvoid (ILAPIENTRY *iluGetImageInfoPROC) (ILinfo *Info); +typedef ILint (ILAPIENTRY *iluGetIntegerPROC) (ILenum Mode); +typedef ILvoid (ILAPIENTRY *iluGetIntegervPROC) (ILenum Mode, ILint *Param); +typedef const ILstring (ILAPIENTRY *iluGetStringPROC) (ILenum StringName); +typedef ILvoid (ILAPIENTRY *iluImageParameterPROC) (ILenum PName, ILenum Param); +typedef ILvoid (ILAPIENTRY *iluInitPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluInvertAlphaPROC) (ILvoid); +typedef ILuint (ILAPIENTRY *iluLoadImagePROC) (const ILstring FileName); +typedef ILboolean (ILAPIENTRY *iluMirrorPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluNegativePROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluNoisifyPROC) (ILclampf Tolerance); +typedef ILboolean (ILAPIENTRY *iluPixelizePROC) (ILuint PixSize); +typedef ILvoid (ILAPIENTRY *iluRegionfvPROC) (ILpointf *Points, ILuint n); +typedef ILvoid (ILAPIENTRY *iluRegionivPROC) (ILpointi *Points, ILuint n); +typedef ILboolean (ILAPIENTRY *iluReplaceColourPROC) (ILubyte Red, ILubyte Green, ILubyte Blue, ILfloat Tolerance); +typedef ILboolean (ILAPIENTRY *iluRotatePROC) (ILfloat Angle); +typedef ILboolean (ILAPIENTRY *iluRotate3DPROC) (ILfloat x, ILfloat y, ILfloat z, ILfloat Angle); +typedef ILboolean (ILAPIENTRY *iluSaturate1fPROC) (ILfloat Saturation); +typedef ILboolean (ILAPIENTRY *iluSaturate4fPROC) (ILfloat r, ILfloat g, ILfloat b, ILfloat Saturation); +typedef ILboolean (ILAPIENTRY *iluScalePROC) (ILuint Width, ILuint Height, ILuint Depth); +typedef ILboolean (ILAPIENTRY *iluScaleColoursPROC) (ILfloat r, ILfloat g, ILfloat b); +typedef ILboolean (ILAPIENTRY *iluSharpenPROC) (ILfloat Factor, ILuint Iter); +typedef ILboolean (ILAPIENTRY *iluSwapColoursPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *iluWavePROC) (ILfloat Angle); + +static iluAlienifyPROC iluAlienify; +static iluBlurAvgPROC iluBlurAvg; +static iluBlurGaussianPROC iluBlurGaussian; +static iluBuildMipmapsPROC iluBuildMipmaps; +static iluColoursUsedPROC iluColoursUsed; +static iluCompareImagePROC iluCompareImage; +static iluContrastPROC iluContrast; +static iluCropPROC iluCrop; +static iluDeleteImagePROC iluDeleteImage; +static iluEdgeDetectEPROC iluEdgeDetectE; +static iluEdgeDetectPPROC iluEdgeDetectP; +static iluEdgeDetectSPROC iluEdgeDetectS; +static iluEmbossPROC iluEmboss; +static iluEnlargeCanvasPROC iluEnlargeCanvas; +static iluEnlargeImagePROC iluEnlargeImage; +static iluEqualizePROC iluEqualize; +static iluErrorStringPROC iluErrorString; +static iluFlipImagePROC iluFlipImage; +static iluGammaCorrectPROC iluGammaCorrect; +static iluGenImagePROC iluGenImage; +static iluGetImageInfoPROC iluGetImageInfo; +static iluGetIntegerPROC iluGetInteger; +static iluGetIntegervPROC iluGetIntegerv; +static iluGetStringPROC iluGetString; +static iluImageParameterPROC iluImageParameter; +static iluInitPROC iluInit; +static iluInvertAlphaPROC iluInvertAlpha; +static iluLoadImagePROC iluLoadImage; +static iluMirrorPROC iluMirror; +static iluNegativePROC iluNegative; +static iluNoisifyPROC iluNoisify; +static iluPixelizePROC iluPixelize; +static iluRegionfvPROC iluRegionfv; +static iluRegionivPROC iluRegioniv; +static iluReplaceColourPROC iluReplaceColour; +static iluRotatePROC iluRotate; +static iluRotate3DPROC iluRotate3D; +static iluSaturate1fPROC iluSaturate1f; +static iluSaturate4fPROC iluSaturate4f; +static iluScalePROC iluScale; +static iluScaleColoursPROC iluScaleColours; +static iluSharpenPROC iluSharpen; +static iluSwapColoursPROC iluSwapColours; +static iluWavePROC iluWave; /* * Class: org_lwjgl_devil_ILU @@ -260,9 +350,9 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_devil_ILU_iluGetInteger(JNIEnv *env, jclas * Method: iluGetIntegerv * Signature: (ILjava/nio/IntBuffer;)V */ -JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_iluGetIntegerv(JNIEnv *env, jclass clazz, jint mode, jobject param_buffer, jint param_offset) { +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_niluGetIntegerv(JNIEnv *env, jclass clazz, jint mode, jobject param_buffer, jint param_offset) { ILbyte *lists = (ILbyte *) safeGetBufferAddress(env, param_buffer) + param_offset; - ilGenImages((ILsizei)mode, (ILuint *)lists); + iluGetIntegerv((ILsizei)mode, (ILuint *)lists); } /* @@ -356,7 +446,7 @@ 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; + /*jfieldID fieldId; jmethodID methodId; jobject element; int i; @@ -392,7 +482,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_iluRegionfv(JNIEnv *env, jclass } printf("\nHere 5"); - free(pointInfo); + free(pointInfo);*/ } /* @@ -409,6 +499,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_iluRegioniv(JNIEnv *env, jclass * Signature: (BBBF)Z */ JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILU_iluReplaceColour(JNIEnv *env, jclass clazz, jbyte red, jbyte green, jbyte blue, jfloat tolerence) { + return false; } /* @@ -488,31 +579,65 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILU_iluWave(JNIEnv *env, jclass * Method: nCreate * Signature: ()V */ -JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_nCreate(JNIEnv *env, jclass clazz) { - /*if (!extilu_Open(env)) { +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_nCreate(JNIEnv *env, jclass clazz, jobjectArray iluPaths) { + if (!extilu_Open(env, iluPaths)) { throwException(env, "Failed to load ILU library"); return; - }*/ + } +} + +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_nDestroy(JNIEnv *env, jclass clazz) { + extilu_Close(); +} + +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_resetNativeStubs(JNIEnv *env, jclass clazz, jclass ilu_class) { + (*env)->UnregisterNatives(env, ilu_class); } -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_lwjgl_devil_ILU - * Method: initNativeStubs - * Signature: ()V - */ JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILU_initNativeStubs(JNIEnv *env, jclass clazz) { -/* JavaMethodAndExtFunction functions[] = { - {"iluAlienify", "()Z", (void*)&Java_org_lwjgl_devil_IL_iluAlienify, "iluAlienify", (void*)&iluAlienify}, + {"iluAlienify", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluAlienify, "iluAlienify", (void*)&iluAlienify}, + {"iluBlurAvg", "(I)Z", (void*)&Java_org_lwjgl_devil_ILU_iluBlurAvg, "iluBlurAvg", (void*)&iluBlurAvg}, + {"iluBlurGaussian", "(I)Z", (void*)&Java_org_lwjgl_devil_ILU_iluBlurGaussian, "iluBlurGaussian", (void*)&iluBlurGaussian}, + {"iluBuildMipmaps", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluBuildMipmaps, "iluBuildMipmaps", (void*)&iluBuildMipmaps}, + {"iluColoursUsed", "()I", (void*)&Java_org_lwjgl_devil_ILU_iluColoursUsed, "iluColoursUsed", (void*)&iluColoursUsed}, + {"iluCompareImage", "(I)Z", (void*)&Java_org_lwjgl_devil_ILU_iluCompareImage, "iluCompareImage", (void*)&iluCompareImage}, + {"iluContrast", "(F)Z", (void*)&Java_org_lwjgl_devil_ILU_iluContrast, "iluContrast", (void*)&iluContrast}, + {"iluCrop", "(IIIIII)Z", (void*)&Java_org_lwjgl_devil_ILU_iluCrop, "iluCrop", (void*)&iluCrop}, + {"iluDeleteImage", "(I)V", (void*)&Java_org_lwjgl_devil_ILU_iluDeleteImage, "iluDeleteImage", (void*)&iluDeleteImage}, + {"iluEdgeDetectE", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluEdgeDetectE, "iluEdgeDetectE", (void*)&iluEdgeDetectE}, + {"iluEdgeDetectP", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluEdgeDetectP, "iluEdgeDetectP", (void*)&iluEdgeDetectP}, + {"iluEdgeDetectS", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluEdgeDetectS, "iluEdgeDetectS", (void*)&iluEdgeDetectS}, + {"iluEmboss", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluEmboss, "iluEmboss", (void*)&iluEmboss}, + {"iluEnlargeCanvas", "(III)Z", (void*)&Java_org_lwjgl_devil_ILU_iluEnlargeCanvas, "iluEnlargeCanvas", (void*)&iluEnlargeCanvas}, + {"iluEnlargeImage", "(FFF)Z", (void*)&Java_org_lwjgl_devil_ILU_iluEnlargeImage, "iluEnlargeImage", (void*)&iluEnlargeImage}, + {"iluEqualize", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluEqualize, "iluEqualize", (void*)&iluEqualize}, + {"iluErrorString", "(I)Ljava/lang/String;", (void*)&Java_org_lwjgl_devil_ILU_iluErrorString, "iluErrorString", (void*)&iluErrorString}, + {"iluFlipImage", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluFlipImage, "iluFlipImage", (void*)&iluFlipImage}, + {"iluGammaCorrect", "(F)Z", (void*)&Java_org_lwjgl_devil_ILU_iluGammaCorrect, "iluGammaCorrect", (void*)&iluGammaCorrect}, + {"iluGenImage", "()I", (void*)&Java_org_lwjgl_devil_ILU_iluGenImage, "iluGenImage", (void*)&iluGenImage}, + {"iluGetImageInfo", "(Lorg/lwjgl/devil/ILinfo;)V", (void*)&Java_org_lwjgl_devil_ILU_iluGetImageInfo, "iluGetImageInfo", (void*)&iluGetImageInfo}, + {"iluGetInteger", "(I)I", (void*)&Java_org_lwjgl_devil_ILU_iluGetInteger, "iluGetInteger", (void*)&iluGetInteger}, + //{"niluGetIntegerv", "(ILjava/nio/IntBuffer;)V", (void*)&Java_org_lwjgl_devil_ILU_niluGetIntegerv, "iluGetIntegerv", (void*)&iluGetIntegerv}, + {"iluGetString", "(I)Ljava/lang/String;", (void*)&Java_org_lwjgl_devil_ILU_iluGetString, "iluGetString", (void*)&iluGetString}, + {"iluImageParameter", "(II)V", (void*)&Java_org_lwjgl_devil_ILU_iluImageParameter, "iluImageParameter", (void*)&iluImageParameter}, + {"iluInit", "()V", (void*)&Java_org_lwjgl_devil_ILU_iluInit, "iluInit", (void*)&iluInit}, + {"iluInvertAlpha", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluInvertAlpha, "iluInvertAlpha", (void*)&iluInvertAlpha}, + {"iluLoadImage", "(Ljava/lang/String;)I", (void*)&Java_org_lwjgl_devil_ILU_iluLoadImage, "iluLoadImage", (void*)&iluLoadImage}, + {"iluMirror", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluMirror, "iluMirror", (void*)&iluMirror}, + {"iluNegative", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluNegative, "iluNegative", (void*)&iluNegative}, + {"iluNoisify", "(F)Z", (void*)&Java_org_lwjgl_devil_ILU_iluNoisify, "iluNoisify", (void*)&iluNoisify}, + {"iluPixelize", "(I)Z", (void*)&Java_org_lwjgl_devil_ILU_iluPixelize, "iluPixelize", (void*)&iluPixelize}, + {"iluReplaceColour", "(BBBF)Z", (void*)&Java_org_lwjgl_devil_ILU_iluReplaceColour, "iluReplaceColour", (void*)&iluReplaceColour}, + {"iluRotate", "(F)Z", (void*)&Java_org_lwjgl_devil_ILU_iluRotate, "iluRotate", (void*)&iluRotate}, + {"iluSaturate1f", "(F)Z", (void*)&Java_org_lwjgl_devil_ILU_iluSaturate1f, "iluSaturate1f", (void*)&iluSaturate1f}, + {"iluSaturate4f", "(FFFF)Z", (void*)&Java_org_lwjgl_devil_ILU_iluSaturate4f, "iluSaturate4f", (void*)&iluSaturate4f}, + {"iluScale", "(III)Z", (void*)&Java_org_lwjgl_devil_ILU_iluScale, "iluScale", (void*)&iluScale}, + {"iluScaleColours", "(FFF)Z", (void*)&Java_org_lwjgl_devil_ILU_iluScaleColours, "iluScaleColours", (void*)&iluScaleColours}, + {"iluSharpen", "(FI)Z", (void*)&Java_org_lwjgl_devil_ILU_iluSharpen, "iluSharpen", (void*)&iluSharpen}, + {"iluSwapColours", "()Z", (void*)&Java_org_lwjgl_devil_ILU_iluSwapColours, "iluSwapColours", (void*)&iluSwapColours}, + {"iluWave", "(F)Z", (void*)&Java_org_lwjgl_devil_ILU_iluWave, "iluWave", (void*)&iluWave}, }; int num_functions = NUMFUNCTIONS(functions); - extil_InitializeClass(env, clazz, num_functions, functions); -*/ + extilu_InitializeClass(env, clazz, num_functions, functions); } - -#ifdef __cplusplus -} -#endif diff --git a/src/native/common/devil/org_lwjgl_devil_ILUT.c b/src/native/common/devil/org_lwjgl_devil_ILUT.c index 8a920aea..c125d97c 100644 --- a/src/native/common/devil/org_lwjgl_devil_ILUT.c +++ b/src/native/common/devil/org_lwjgl_devil_ILUT.c @@ -1,4 +1,48 @@ -#include "extil.h" +#include "extilut.h" + +typedef ILboolean (ILAPIENTRY *ilutRendererPROC) (ILenum Renderer); +typedef ILboolean (ILAPIENTRY *ilutDisablePROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilutEnablePROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilutGetBooleanPROC) (ILenum Mode); +typedef ILint (ILAPIENTRY *ilutGetIntegerPROC) (ILenum Mode); +typedef const ILstring (ILAPIENTRY *ilutGetStringPROC) (ILenum StringName); +typedef ILvoid (ILAPIENTRY *ilutInitPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilutIsDisabledPROC) (ILenum Mode); +typedef ILboolean (ILAPIENTRY *ilutIsEnabledPROC) (ILenum Mode); +typedef ILvoid (ILAPIENTRY *ilutPopAttribPROC) (ILvoid); +typedef ILvoid (ILAPIENTRY *ilutPushAttribPROC) (ILuint Bits); +typedef ILvoid (ILAPIENTRY *ilutSetIntegerPROC) (ILenum Mode, ILint Param); +typedef GLuint (ILAPIENTRY *ilutGLBindTexImagePROC) (); +typedef GLuint (ILAPIENTRY *ilutGLBindMipmapsPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilutGLBuildMipmapsPROC) (ILvoid); +typedef GLuint (ILAPIENTRY *ilutGLLoadImagePROC) (const ILstring FileName); +typedef ILboolean (ILAPIENTRY *ilutGLScreenPROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilutGLScreeniePROC) (ILvoid); +typedef ILboolean (ILAPIENTRY *ilutGLSaveImagePROC) (const ILstring FileName, GLuint TexID); +typedef ILboolean (ILAPIENTRY *ilutGLSetTexPROC) (GLuint TexID); +typedef ILboolean (ILAPIENTRY *ilutGLTexImagePROC) (GLuint Level); + +static ilutRendererPROC ilutRenderer; +static ilutDisablePROC ilutDisable; +static ilutEnablePROC ilutEnable; +static ilutGetBooleanPROC ilutGetBoolean; +static ilutGetIntegerPROC ilutGetInteger; +static ilutGetStringPROC ilutGetString; +static ilutInitPROC ilutInit; +static ilutIsDisabledPROC ilutIsDisabled; +static ilutIsEnabledPROC ilutIsEnabled; +static ilutPopAttribPROC ilutPopAttrib; +static ilutPushAttribPROC ilutPushAttrib; +static ilutSetIntegerPROC ilutSetInteger; +static ilutGLBindTexImagePROC ilutGLBindTexImage; +static ilutGLBindMipmapsPROC ilutGLBindMipmaps; +static ilutGLBuildMipmapsPROC ilutGLBuildMipmaps; +static ilutGLLoadImagePROC ilutGLLoadImage; +static ilutGLScreenPROC ilutGLScreen; +static ilutGLScreeniePROC ilutGLScreenie; +static ilutGLSaveImagePROC ilutGLSaveImage; +static ilutGLSetTexPROC ilutGLSetTex; +static ilutGLTexImagePROC ilutGLTexImage; /* * Class: org_lwjgl_devil_ILUT @@ -202,25 +246,46 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_devil_ILUT_ilutGLTexImage(JNIEnv *env, * Method: nCreate * Signature: ()V */ -JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_nCreate(JNIEnv *env, jclass clazz){ - /*if (!extilut_Open(env)) { +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_nCreate(JNIEnv *env, jclass clazz, jobjectArray ilutPaths){ + if (!extilut_Open(env, ilutPaths)) { throwException(env, "Failed to load ILUT library"); return; - }*/ + } } -#ifdef __cplusplus -extern "C" { -#endif +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_nDestroy(JNIEnv *env, jclass clazz) { + extilut_Close(); +} + +JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_resetNativeStubs(JNIEnv *env, jclass clazz, jclass ilut_class) { + (*env)->UnregisterNatives(env, ilut_class); +} -/* - * Class: org_lwjgl_devil_ILUT - * Method: initNativeStubs - * Signature: ()V - */ JNIEXPORT void JNICALL Java_org_lwjgl_devil_ILUT_initNativeStubs(JNIEnv *env, jclass clazz){ -} +JavaMethodAndExtFunction functions[] = { + {"ilutRenderer", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutRenderer, "ilutRenderer", (void*)&ilutRenderer}, + {"ilutDisable", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutDisable, "ilutDisable", (void*)&ilutDisable}, + {"ilutEnable", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutEnable, "ilutEnable", (void*)&ilutEnable}, + {"ilutGetBoolean", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutGetBoolean, "ilutGetBoolean", (void*)&ilutGetBoolean}, + {"ilutGetInteger", "(I)I", (void*)&Java_org_lwjgl_devil_ILUT_ilutGetInteger, "ilutGetInteger", (void*)&ilutGetInteger}, + {"ilutGetString", "(I)Ljava/lang/String;", (void*)&Java_org_lwjgl_devil_ILUT_ilutGetString, "ilutGetString", (void*)&ilutGetString}, + {"ilutInit", "()V", (void*)&Java_org_lwjgl_devil_ILUT_ilutInit, "ilutInit", (void*)&ilutInit}, + {"ilutIsDisabled", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutIsDisabled, "ilutIsDisabled", (void*)&ilutIsDisabled}, + {"ilutIsEnabled", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutIsDisabled, "ilutIsDisabled", (void*)&ilutIsDisabled}, + {"ilutPopAttrib", "()V", (void*)&Java_org_lwjgl_devil_ILUT_ilutPopAttrib, "ilutPopAttrib", (void*)&ilutPopAttrib}, + {"ilutPushAttrib", "(I)V", (void*)&Java_org_lwjgl_devil_ILUT_ilutPushAttrib, "ilutPushAttrib", (void*)&ilutPushAttrib}, + {"ilutSetInteger", "(II)V", (void*)&Java_org_lwjgl_devil_ILUT_ilutSetInteger, "ilutSetInteger", (void*)&ilutSetInteger}, -#ifdef __cplusplus + {"ilutGLBindTexImage", "()I", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLBindTexImage, "ilutGLBindTexImage", (void*)&ilutGLBindTexImage}, + {"ilutGLBindMipmaps", "()I", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLBindMipmaps, "ilutGLBindMipmaps", (void*)&ilutGLBindMipmaps}, + {"ilutGLBuildMipmaps", "()Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLBuildMipmaps, "ilutGLBuildMipmaps", (void*)&ilutGLBuildMipmaps}, + {"ilutGLLoadImage", "(Ljava/lang/String;)I", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLLoadImage, "ilutGLLoadImage", (void*)&ilutGLLoadImage}, + {"ilutGLScreen", "()Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLScreen, "ilutGLScreen", (void*)&ilutGLScreen}, + {"ilutGLScreenie", "()Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLScreenie, "ilutGLScreenie", (void*)&ilutGLScreenie}, + {"ilutGLSaveImage", "(Ljava/lang/String;I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLSaveImage, "ilutGLSaveImage", (void*)&ilutGLSaveImage}, + {"ilutGLSetTex", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLSetTex, "ilutGLSetTex", (void*)&ilutGLSetTex}, + {"ilutGLTexImage", "(I)Z", (void*)&Java_org_lwjgl_devil_ILUT_ilutGLTexImage, "ilutGLTexImage", (void*)&ilutGLTexImage}, + }; + int num_functions = NUMFUNCTIONS(functions); + extilut_InitializeClass(env, clazz, num_functions, functions); } -#endif