diff --git a/src/java/org/lwjgl/devil/IL.java b/src/java/org/lwjgl/devil/IL.java new file mode 100644 index 00000000..97a94b90 --- /dev/null +++ b/src/java/org/lwjgl/devil/IL.java @@ -0,0 +1,422 @@ +/* + * 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 java.nio.ByteBuffer; +import java.nio.IntBuffer; + +import org.lwjgl.BufferChecks; +import org.lwjgl.LWJGLException; + +/** + * $Id$ + * + * The core DevIL API. + * + * @author captainjester + * @version $Revision$ + */ +public class IL { + + /** 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(ILuint Number); +// public static native boolean ilActiveLayer(ILuint Number); +// public static native boolean ilActiveMipmap(ILuint Number); +// public static native boolean ilApplyPal(const ILstring FileName); +// public static native boolean ilApplyProfile(const ILstring InProfile, const ILstring OutProfile); + public static native void ilBindImage(int image); +// public static native boolean ilBlit(ILuint Source, ILint DestX, ILint DestY, ILint DestZ, ILuint SrcX, ILuint SrcY, ILuint SrcZ, ILuint Width, ILuint Height, ILuint Depth); +// public static native void ilClearColour(ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha); +// public static native boolean ilClearImage(ILvoid); +// public static native int ilCloneCurImage(ILvoid); +// public static native boolean ilCompressFunc(ILenum Mode); +// public static native boolean ilConvertImage(ILenum DestFormat, ILenum DestType); +// public static native boolean ilConvertPal(ILenum DestFormat); +// public static native boolean ilCopyImage(ILuint Src); +// public static native int ilCopyPixels(ILuint XOff, ILuint YOff, ILuint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, ILvoid *Data); +// public static native int ilCreateSubImage(ILenum Type, ILuint Num); +// public static native boolean ilDefaultImage(ILvoid); + public static void ilDeleteImages(int num, IntBuffer images) { + BufferChecks.checkDirect(images); + nilGenImages(num, images, images.position()); + } + public static native void nilDeleteImages(int num, IntBuffer images, int images_offset); +// public static native boolean ilDisable(ILenum Mode); +// public static native boolean ilEnable(ILenum Mode); +// public static native boolean ilFormatFunc(ILenum 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 byte[] ilGetAlpha(ILenum Type);//ILubyte* +// public static native void ilModAlpha( ILint AlphaValue ); +// public static native void ilSetAlpha( ILuint AlphaValue ); +// public static native boolean ilGetBoolean(ILenum Mode); +// public static native void ilGetBooleanv(ILenum Mode, ILboolean *Param); + public static native ByteBuffer ilGetData(); +// public static native int ilGetDXTCData(ILvoid *Buffer, ILuint BufferSize, ILenum DXTCFormat); + public static native int ilGetError(); + public static native int ilGetInteger(int mode); +// public static native void ilGetIntegerv(ILenum Mode, ILint *Param); +// public static native int ilGetLumpPos(ILvoid); +// public static native byte[] ilGetPalette(ILvoid);//ILubyte* +// public static native String ilGetString(ILenum StringName);//const ILstring +// public static native void ilHint(ILenum Target, ILenum Mode); + public static native void ilInit(); +// public static native boolean ilIsDisabled(ILenum Mode); +// public static native boolean ilIsEnabled(ILenum Mode); +// public static native boolean ilIsImage(ILuint Image); +// public static native boolean ilIsValid(ILenum Type, const ILstring FileName); +// public static native boolean ilIsValidF(ILenum Type, ILHANDLE File); +// public static native boolean ilIsValidL(ILenum Type, ILvoid *Lump, ILuint Size); +// public static native void ilKeyColour(ILclampf Red, ILclampf Green, ILclampf Blue, ILclampf Alpha); +// public static native boolean ilLoad(ILenum Type, const ILstring FileName); +// public static native boolean ilLoadF(ILenum Type, ILHANDLE File); + public static native boolean ilLoadImage(String fileName); +// public static native boolean ilLoadL(ILenum Type, ILvoid *Lump, ILuint Size); +// public static native boolean ilLoadPal(const ILstring FileName); +// public static native boolean ilOriginFunc(ILenum Mode); +// public static native boolean ilOverlayImage(ILuint Source, ILint XCoord, ILint YCoord, ILint ZCoord); +// public static native void ilPopAttrib(ILvoid); +// public static native void ilPushAttrib(ILuint Bits); +// public static native void ilRegisterFormat(ILenum Format); +// public static native boolean ilRegisterLoad(const ILstring Ext, IL_LOADPROC Load); +// public static native boolean ilRegisterMipNum(ILuint Num); +// public static native boolean ilRegisterNumImages(ILuint Num); +// public static native void ilRegisterOrigin(ILenum Origin); +// public static native void ilRegisterPal(ILvoid *Pal, ILuint Size, ILenum Type); +// public static native boolean ilRegisterSave(const ILstring Ext, IL_SAVEPROC Save); +// public static native void ilRegisterType(ILenum Type); +// public static native boolean ilRemoveLoad(const ILstring Ext); +// public static native boolean ilRemoveSave(const ILstring Ext); +// public static native void ilResetMemory(ILvoid); +// public static native void ilResetRead(ILvoid); +// public static native void ilResetWrite(ILvoid); +// public static native boolean ilSave(ILenum Type, const ILstring FileName); +// public static native int ilSaveF(ILenum Type, ILHANDLE File); +// public static native boolean ilSaveImage(const ILstring FileName); +// public static native int ilSaveL(ILenum Type, ILvoid *Lump, ILuint Size); +// public static native boolean ilSavePal(const ILstring FileName); +// public static native boolean ilSetData(ILvoid *Data); +// public static native boolean ilSetDuration(ILuint Duration); +// public static native void ilSetInteger(ILenum Mode, ILint Param); +// public static native void ilSetMemory(mAlloc, mFree); +// public static native void ilSetPixels(ILint XOff, ILint YOff, ILint ZOff, ILuint Width, ILuint Height, ILuint Depth, ILenum Format, ILenum Type, ILvoid *Data); +// public static native void ilSetRead(fOpenRProc, fCloseRProc, fEofProc, fGetcProc, fReadProc, fSeekRProc, fTellRProc); +// public static native void ilSetString(ILenum Mode, const char *String); +// public static native void ilSetWrite(fOpenWProc, fCloseWProc, fPutcProc, fSeekWProc, fTellWProc, fWriteProc); +// public static native void ilShutDown(ILvoid); +// public static native boolean ilTexImage(ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp, ILenum Format, ILenum Type, ILvoid *Data); +// public static native boolean ilTypeFunc(ILenum Mode); + + /** + * + */ + public static void create() throws LWJGLException { + if (!created) { + IL.initNativeStubs(); + created = true; + } + } + +// public static native boolean ilLoadData(const ILstring FileName, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +// public static native boolean ilLoadDataF(ILHANDLE File, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +// public static native boolean ilLoadDataL(ILvoid *Lump, ILuint Size, ILuint Width, ILuint Height, ILuint Depth, ILubyte Bpp); +// public static native boolean ilSaveData(const ILstring FileName); + +// public static native boolean ilLoadFromJpegStruct(ILvoid* JpegDecompressorPtr); +// public static native boolean ilSaveFromJpegStruct(ILvoid* JpegCompressorPtr); +}