From 73958353a8e6bbede56b207dbd2d8c077e6a8dd5 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Fri, 31 Jul 2020 10:11:10 +0700 Subject: [PATCH] Put org.lwjgl into separate file --- app/src/main/java/org/lwjgl/BufferChecks.java | 286 -------- .../org/lwjgl/DefaultSysImplementation.java | 63 -- app/src/main/java/org/lwjgl/LWJGLUtil.java | 621 ------------------ .../main/java/org/lwjgl/opengl/GLContext.java | 420 ------------ .../org/lwjgl/system/CheckIntrinsics.java | 38 -- .../org/lwjgl/test/opencl/gl/Mandelbrot.cl | 83 --- .../org/lwjgl/test/opengl/shaders/shaderFP.fp | 40 -- .../org/lwjgl/test/opengl/shaders/shaderFP.vp | 37 -- .../lwjgl/test/opengl/shaders/shaderFSH.fsh | 21 - .../lwjgl/test/opengl/shaders/shaderFSH.vsh | 13 - .../lwjgl/test/opengl/shaders/shaderUNI.vsh | 28 - .../org/lwjgl/test/opengl/shaders/shaderVP.vp | 59 -- .../lwjgl/test/opengl/shaders/shaderVSH.vsh | 22 - 13 files changed, 1731 deletions(-) delete mode 100644 app/src/main/java/org/lwjgl/BufferChecks.java delete mode 100644 app/src/main/java/org/lwjgl/DefaultSysImplementation.java delete mode 100644 app/src/main/java/org/lwjgl/LWJGLUtil.java delete mode 100644 app/src/main/java/org/lwjgl/opengl/GLContext.java delete mode 100644 app/src/main/java/org/lwjgl/system/CheckIntrinsics.java delete mode 100644 app/src/main/java/org/lwjgl/test/opencl/gl/Mandelbrot.cl delete mode 100644 app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.fp delete mode 100644 app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.vp delete mode 100644 app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.fsh delete mode 100644 app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.vsh delete mode 100644 app/src/main/java/org/lwjgl/test/opengl/shaders/shaderUNI.vsh delete mode 100644 app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVP.vp delete mode 100644 app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVSH.vsh diff --git a/app/src/main/java/org/lwjgl/BufferChecks.java b/app/src/main/java/org/lwjgl/BufferChecks.java deleted file mode 100644 index d9e1300c2..000000000 --- a/app/src/main/java/org/lwjgl/BufferChecks.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (c) 2002-2008 LWJGL Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.lwjgl; - -import java.nio.*; - -/** - *

A class to check buffer boundaries in general. If there is unsufficient space - * in the buffer when the call is made then a buffer overflow would otherwise - * occur and cause unexpected behaviour, a crash, or worse, a security risk. - * - * Internal class, don't use. - *

- * @author cix_foo - * @author elias_naur - * @version $Revision$ - * $Id$ - */ -public class BufferChecks { - /** Static methods only! */ - private BufferChecks() { - } - - /** - * Helper methods to ensure a function pointer is not-null (0) - */ - public static void checkFunctionAddress(long pointer) { - if (LWJGLUtil.CHECKS && pointer == 0) { - // throw new IllegalStateException("Function is not supported"); - } - } - - /** - * Helper methods to ensure a ByteBuffer is null-terminated - */ - public static void checkNullTerminated(ByteBuffer buf) { - if ( LWJGLUtil.CHECKS && buf.get(buf.limit() - 1) != 0) { - throw new IllegalArgumentException("Missing null termination"); - } - } - - public static void checkNullTerminated(ByteBuffer buf, int count) { - if ( LWJGLUtil.CHECKS ) { - int nullFound = 0; - for ( int i = buf.position(); i < buf.limit(); i++ ) { - if ( buf.get(i) == 0 ) - nullFound++; - } - - if ( nullFound < count ) - throw new IllegalArgumentException("Missing null termination"); - } - } - - /** Helper method to ensure an IntBuffer is null-terminated */ - public static void checkNullTerminated(IntBuffer buf) { - if ( LWJGLUtil.CHECKS && buf.get(buf.limit() - 1) != 0 ) { - throw new IllegalArgumentException("Missing null termination"); - } - } - - /** Helper method to ensure a LongBuffer is null-terminated */ - public static void checkNullTerminated(LongBuffer buf) { - if ( LWJGLUtil.CHECKS && buf.get(buf.limit() - 1) != 0 ) { - throw new IllegalArgumentException("Missing null termination"); - } - } - - /** Helper method to ensure a PointerBuffer is null-terminated */ - public static void checkNullTerminated(PointerBuffer buf) { - if ( LWJGLUtil.CHECKS && buf.get(buf.limit() - 1) != 0 ) { - throw new IllegalArgumentException("Missing null termination"); - } - } - - public static void checkNotNull(Object o) { - if ( LWJGLUtil.CHECKS && o == null) - throw new IllegalArgumentException("Null argument"); - } - - /** - * Helper methods to ensure a buffer is direct (and, implicitly, non-null). - */ - public static void checkDirect(ByteBuffer buf) { - if ( LWJGLUtil.CHECKS && !buf.isDirect()) { - throw new IllegalArgumentException("ByteBuffer is not direct"); - } - } - - public static void checkDirect(ShortBuffer buf) { - if ( LWJGLUtil.CHECKS && !buf.isDirect()) { - throw new IllegalArgumentException("ShortBuffer is not direct"); - } - } - - public static void checkDirect(IntBuffer buf) { - if ( LWJGLUtil.CHECKS && !buf.isDirect()) { - throw new IllegalArgumentException("IntBuffer is not direct"); - } - } - - public static void checkDirect(LongBuffer buf) { - if ( LWJGLUtil.CHECKS && !buf.isDirect()) { - throw new IllegalArgumentException("LongBuffer is not direct"); - } - } - - public static void checkDirect(FloatBuffer buf) { - if ( LWJGLUtil.CHECKS && !buf.isDirect()) { - throw new IllegalArgumentException("FloatBuffer is not direct"); - } - } - - public static void checkDirect(DoubleBuffer buf) { - if ( LWJGLUtil.CHECKS && !buf.isDirect()) { - throw new IllegalArgumentException("DoubleBuffer is not direct"); - } - } - - public static void checkDirect(PointerBuffer buf) { - // NO-OP, PointerBuffer is always direct. - } - - public static void checkArray(Object[] array) { - if ( LWJGLUtil.CHECKS && (array == null || array.length == 0) ) - throw new IllegalArgumentException("Invalid array"); - } - - /** - * This is a separate call to help inline checkBufferSize. - */ - private static void throwBufferSizeException(Buffer buf, int size) { - throw new IllegalArgumentException("Number of remaining buffer elements is " + buf.remaining() + ", must be at least " + size + ". Because at most " + size + " elements can be returned, a buffer with at least " + size + " elements is required, regardless of actual returned element count"); - } - - private static void throwBufferSizeException(PointerBuffer buf, int size) { - throw new IllegalArgumentException("Number of remaining pointer buffer elements is " + buf.remaining() + ", must be at least " + size); - } - - private static void throwArraySizeException(Object[] array, int size) { - throw new IllegalArgumentException("Number of array elements is " + array.length + ", must be at least " + size); - } - - private static void throwArraySizeException(long[] array, int size) { - throw new IllegalArgumentException("Number of array elements is " + array.length + ", must be at least " + size); - } - - /** - * Helper method to ensure a buffer is big enough to receive data from a - * glGet* operation. - * - * @param buf - * The buffer to check - * @param size - * The minimum buffer size - * @throws IllegalArgumentException - */ - public static void checkBufferSize(Buffer buf, int size) { - if ( LWJGLUtil.CHECKS && buf.remaining() < size) { - throwBufferSizeException(buf, size); - } - } - - /** - * Detects the buffer type and performs the corresponding check - * and also returns the buffer position in bytes. - * - * @param buffer the buffer to check - * @param size the size to check - * - * @return the buffer position in bytes - */ - public static int checkBuffer(final Buffer buffer, final int size) { - final int posShift; - if ( buffer instanceof ByteBuffer ) { - BufferChecks.checkBuffer((ByteBuffer)buffer, size); - posShift = 0; - } else if ( buffer instanceof ShortBuffer ) { - BufferChecks.checkBuffer((ShortBuffer)buffer, size); - posShift = 1; - } else if ( buffer instanceof IntBuffer ) { - BufferChecks.checkBuffer((IntBuffer)buffer, size); - posShift = 2; - } else if ( buffer instanceof LongBuffer ) { - BufferChecks.checkBuffer((LongBuffer)buffer, size); - posShift = 4; - } else if ( buffer instanceof FloatBuffer ) { - BufferChecks.checkBuffer((FloatBuffer)buffer, size); - posShift = 2; - } else if ( buffer instanceof DoubleBuffer ) { - BufferChecks.checkBuffer((DoubleBuffer)buffer, size); - posShift = 4; - } else - throw new IllegalArgumentException("Unsupported Buffer type specified: " + buffer.getClass()); - - return buffer.position() << posShift; - } - - public static void checkBuffer(ByteBuffer buf, int size) { - if ( LWJGLUtil.CHECKS ) { - checkBufferSize(buf, size); - checkDirect(buf); - } - } - - public static void checkBuffer(ShortBuffer buf, int size) { - if ( LWJGLUtil.CHECKS ) { - checkBufferSize(buf, size); - checkDirect(buf); - } - } - - public static void checkBuffer(IntBuffer buf, int size) { - if ( LWJGLUtil.CHECKS ) { - checkBufferSize(buf, size); - checkDirect(buf); - } - } - - public static void checkBuffer(LongBuffer buf, int size) { - if ( LWJGLUtil.CHECKS ) { - checkBufferSize(buf, size); - checkDirect(buf); - } - } - - public static void checkBuffer(FloatBuffer buf, int size) { - if ( LWJGLUtil.CHECKS ) { - checkBufferSize(buf, size); - checkDirect(buf); - } - } - - public static void checkBuffer(DoubleBuffer buf, int size) { - if ( LWJGLUtil.CHECKS ) { - checkBufferSize(buf, size); - checkDirect(buf); - } - } - - public static void checkBuffer(PointerBuffer buf, int size) { - if ( LWJGLUtil.CHECKS && buf.remaining() < size ) { - throwBufferSizeException(buf, size); - } - } - - public static void checkArray(Object[] array, int size) { - if ( LWJGLUtil.CHECKS && array.length < size ) - throwArraySizeException(array, size); - } - - public static void checkArray(long[] array, int size) { - if ( LWJGLUtil.CHECKS && array.length < size ) - throwArraySizeException(array, size); - } - -} diff --git a/app/src/main/java/org/lwjgl/DefaultSysImplementation.java b/app/src/main/java/org/lwjgl/DefaultSysImplementation.java deleted file mode 100644 index 924841a23..000000000 --- a/app/src/main/java/org/lwjgl/DefaultSysImplementation.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2002-2008 LWJGL Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.lwjgl; - - -/** - * - * @author elias_naur - * @version $Revision$ - * $Id$ - */ -abstract class DefaultSysImplementation implements SysImplementation { - public /* native */ int getJNIVersion() { - // Bypass JNI Version check. - return getRequiredJNIVersion(); - } - - public /* native */ int getPointerSize() { - return 1; - } - public native void setDebug(boolean debug); - - public long getTimerResolution() { - return 1000; - } - - public boolean has64Bit() { - return System.getProperty("os.arch").contains("64"); - } - - public abstract long getTime(); - public abstract void alert(String title, String message); - public abstract String getClipboard(); -} diff --git a/app/src/main/java/org/lwjgl/LWJGLUtil.java b/app/src/main/java/org/lwjgl/LWJGLUtil.java deleted file mode 100644 index 978233bff..000000000 --- a/app/src/main/java/org/lwjgl/LWJGLUtil.java +++ /dev/null @@ -1,621 +0,0 @@ -/* - * Copyright (c) 2002-2008 LWJGL Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.lwjgl; - -import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.nio.ByteBuffer; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; -import java.util.*; - -/** - *

- * Internal library methods - *

- * - * @author Brian Matzon - * @version $Revision$ - * $Id$ - */ -public class LWJGLUtil { - public static final int PLATFORM_LINUX = 1; - public static final int PLATFORM_MACOSX = 2; - public static final int PLATFORM_WINDOWS = 3; - public static final int PLATFORM_ANDROID = 1337; - public static final String PLATFORM_LINUX_NAME = "linux"; - public static final String PLATFORM_MACOSX_NAME = "macosx"; - public static final String PLATFORM_WINDOWS_NAME = "windows"; - public static final String PLATFORM_ANDROID_NAME = "android"; - - private static final String LWJGL_ICON_DATA_16x16 = - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\376\377\377\377\302\327\350\377" + - "\164\244\313\377\120\213\275\377\124\216\277\377\206\257\322\377" + - "\347\357\366\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\365\365\365\377\215\217\221\377\166\202\215\377" + - "\175\215\233\377\204\231\252\377\224\267\325\377\072\175\265\377" + - "\110\206\272\377\332\347\361\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\364\370\373\377\234\236\240\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\344\344\344\377\204\255\320\377" + - "\072\175\265\377\133\222\301\377\374\375\376\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\221\266\325\377\137\137\137\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\042\042\042\377\377\377\377\377\350\360\366\377" + - "\071\174\265\377\072\175\265\377\304\330\351\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\306\331\351\377" + - "\201\253\316\377\035\035\035\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\146\146\146\377\377\377\377\377\320\340\355\377" + - "\072\175\265\377\072\175\265\377\215\264\324\377\377\377\377\377" + - "\362\362\362\377\245\245\245\377\337\337\337\377\242\301\334\377" + - "\260\305\326\377\012\012\012\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\250\250\250\377\377\377\377\377\227\272\330\377" + - "\072\175\265\377\072\175\265\377\161\241\312\377\377\377\377\377" + - "\241\241\241\377\000\000\000\377\001\001\001\377\043\043\043\377" + - "\314\314\314\377\320\320\320\377\245\245\245\377\204\204\204\377" + - "\134\134\134\377\357\357\357\377\377\377\377\377\140\226\303\377" + - "\072\175\265\377\072\175\265\377\155\236\310\377\377\377\377\377" + - "\136\136\136\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\317\317\317\377\037\037\037\377\003\003\003\377\053\053\053\377" + - "\154\154\154\377\306\306\306\377\372\374\375\377\236\277\332\377" + - "\167\245\314\377\114\211\274\377\174\250\316\377\377\377\377\377" + - "\033\033\033\377\000\000\000\377\000\000\000\377\027\027\027\377" + - "\326\326\326\377\001\001\001\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\122\122\122\377\345\345\345\377\075\075\075\377" + - "\150\150\150\377\246\246\247\377\332\336\341\377\377\377\377\377" + - "\164\164\164\377\016\016\016\377\000\000\000\377\131\131\131\377" + - "\225\225\225\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\221\221\221\377\233\233\233\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\002\002\002\377\103\103\103\377" + - "\377\377\377\377\356\356\356\377\214\214\214\377\277\277\277\377" + - "\126\126\126\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\323\323\323\377\130\130\130\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\063\063\063\377" + - "\377\377\377\377\377\377\377\377\374\375\376\377\377\377\377\377" + - "\300\300\300\377\100\100\100\377\002\002\002\377\000\000\000\377" + - "\033\033\033\377\373\373\373\377\027\027\027\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\170\170\170\377" + - "\377\377\377\377\377\377\377\377\322\341\356\377\176\251\316\377" + - "\340\352\363\377\377\377\377\377\324\324\324\377\155\155\155\377" + - "\204\204\204\377\323\323\323\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\275\275\275\377" + - "\377\377\377\377\377\377\377\377\376\376\376\377\146\232\305\377" + - "\075\177\266\377\202\254\320\377\344\355\365\377\377\377\377\377" + - "\377\377\377\377\345\345\345\377\055\055\055\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\014\014\014\377\366\366\366\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\342\354\364\377" + - "\115\211\274\377\072\175\265\377\076\200\266\377\207\260\322\377" + - "\347\357\366\377\377\377\377\377\376\376\376\377\274\274\274\377" + - "\117\117\117\377\003\003\003\377\112\112\112\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\353\362\370\377\214\263\324\377\126\220\300\377\120\214\275\377" + - "\167\245\314\377\355\363\370\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\337\337\337\377\346\346\346\377\377\377\377\377"; - - private static final String LWJGL_ICON_DATA_32x32 = - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\374\375\377" + - "\313\335\354\377\223\267\326\377\157\240\311\377\134\223\302\377\140\226\303\377\172\247\315\377\254\310\340\377\355\363\370\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\375\376\377\265\316\343\377\132\222\301\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\105\205\271\377" + - "\241\301\334\377\374\375\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\374\374\377\342\352\361\377\270\317\343\377\256\311\340\377" + - "\243\302\334\377\230\272\330\377\214\263\323\377\201\254\317\377\156\237\310\377\075\177\266\377\072\175\265\377\072\175\265\377" + - "\072\175\265\377\162\242\312\377\365\370\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\330\330\330\377\061\061\061\377\044\044\044\377\061\061\061\377\100\100\100\377" + - "\122\122\122\377\145\145\145\377\164\164\164\377\217\217\217\377\367\370\370\377\254\310\337\377\073\175\265\377\072\175\265\377" + - "\072\175\265\377\072\175\265\377\171\247\315\377\374\375\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\376\376\376\377\150\150\150\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\266\266\266\377\376\376\376\377\206\256\321\377\072\175\265\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\256\312\341\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\323\342\356\377\341\352\362\377\050\050\050\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\002\002\002\377\336\336\336\377\377\377\377\377\365\370\373\377\133\222\301\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\110\206\272\377\364\370\373\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\354\363\370\377\144\231\305\377\327\331\333\377\005\005\005\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\044\044\044\377\376\376\376\377\377\377\377\377\377\377\377\377\300\325\347\377" + - "\071\174\265\377\072\175\265\377\072\175\265\377\072\175\265\377\253\310\340\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377" + - "\170\246\314\377\173\247\315\377\236\236\236\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\145\145\145\377\377\377\377\377\377\377\377\377\377\377\377\377\342\354\364\377" + - "\067\173\264\377\072\175\265\377\072\175\265\377\072\175\265\377\146\232\305\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\303\327\350\377" + - "\071\175\265\377\262\314\341\377\130\130\130\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\251\251\251\377\377\377\377\377\377\377\377\377\377\377\377\377\274\322\345\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\100\201\267\377\356\364\371\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\374\375\377\132\222\301\377" + - "\075\177\266\377\335\345\355\377\034\034\034\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\007\007\007\377\347\347\347\377\377\377\377\377\377\377\377\377\377\377\377\377\205\256\321\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\071\175\265\377\314\336\354\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\272\322\345\377\072\175\265\377" + - "\127\220\277\377\320\321\321\377\003\003\003\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\063\063\063\377\375\375\375\377\377\377\377\377\377\377\377\377\373\374\375\377\120\213\275\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\071\175\265\377\261\314\342\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\312\312\312\377\067\067\067\377\141\141\141\377\242\242\242\377\335\335\335\377\344\354\363\377\261\313\341\377" + - "\264\315\342\377\346\346\346\377\043\043\043\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\162\162\162\377\377\377\377\377\377\377\377\377\377\377\377\377\330\345\360\377\072\175\265\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\240\300\333\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\146\146\146\377\000\000\000\377\000\000\000\377\000\000\000\377\006\006\006\377\047\047\047\377\146\146\146\377" + - "\324\324\324\377\377\377\377\377\366\366\366\377\320\320\320\377\227\227\227\377\136\136\136\377\047\047\047\377\004\004\004\377" + - "\000\000\000\377\003\003\003\377\300\300\300\377\377\377\377\377\377\377\377\377\377\377\377\377\242\301\333\377\072\175\265\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\236\277\332\377\377\377\377\377\377\377\377\377" + - "\373\373\373\377\045\045\045\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\134\134\134\377\377\377\377\377\352\352\352\377\217\217\217\377\265\265\265\377\351\351\351\377\375\375\375\377\347\347\347\377" + - "\262\262\262\377\275\275\275\377\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\153\235\307\377\072\175\265\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\241\301\334\377\377\377\377\377\377\377\377\377" + - "\333\333\333\377\003\003\003\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\203\203\203\377\377\377\377\377\137\137\137\377\000\000\000\377\000\000\000\377\013\013\013\377\067\067\067\377\166\166\166\377" + - "\267\267\267\377\360\360\360\377\377\377\377\377\377\377\377\377\377\377\377\377\360\365\371\377\113\210\273\377\075\177\266\377" + - "\071\174\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\262\314\342\377\377\377\377\377\377\377\377\377" + - "\232\232\232\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\305\305\305\377\367\367\367\377\035\035\035\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\007\007\007\377\074\074\074\377\337\337\337\377\377\377\377\377\373\374\375\377\374\375\376\377\363\367\372\377" + - "\314\335\353\377\236\276\332\377\162\241\311\377\114\211\273\377\072\175\265\377\311\334\353\377\377\377\377\377\377\377\377\377" + - "\126\126\126\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\017\017\017\377" + - "\371\371\371\377\321\321\321\377\003\003\003\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\216\216\216\377\377\377\377\377\371\371\371\377\204\204\204\377\160\160\160\377" + - "\260\260\260\377\352\352\352\377\377\377\377\377\371\373\374\377\334\350\362\377\366\371\374\377\377\377\377\377\377\377\377\377" + - "\025\025\025\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\116\116\116\377" + - "\377\377\377\377\221\221\221\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\273\273\273\377\377\377\377\377\236\236\236\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\004\004\004\377\057\057\057\377\160\160\160\377\260\260\260\377\346\346\346\377\376\376\376\377\377\377\377\377" + - "\071\071\071\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\220\220\220\377" + - "\377\377\377\377\115\115\115\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\020\020\020\377\360\360\360\377\377\377\377\377\132\132\132\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\011\011\011\377\062\062\062\377\261\261\261\377" + - "\366\366\366\377\241\241\241\377\065\065\065\377\002\002\002\377\000\000\000\377\000\000\000\377\002\002\002\377\321\321\321\377" + - "\365\365\365\377\023\023\023\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\105\105\105\377\376\376\376\377\370\370\370\377\035\035\035\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\053\053\053\377" + - "\377\377\377\377\377\377\377\377\374\374\374\377\276\276\276\377\120\120\120\377\005\005\005\377\045\045\045\377\371\371\371\377" + - "\302\302\302\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\206\206\206\377\377\377\377\377\322\322\322\377\001\001\001\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\103\103\103\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377\334\334\334\377\340\340\340\377\377\377\377\377" + - "\225\225\225\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\001\001\001\377\310\310\310\377\377\377\377\377\216\216\216\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\210\210\210\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\337\337\337\377\051\051\051\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\030\030\030\377\365\365\365\377\377\377\377\377\112\112\112\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\317\317\317\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\361\366\372\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\371\371\371\377\265\265\265\377\113\113\113\377\006\006\006\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\122\122\122\377\377\377\377\377\370\370\370\377\020\020\020\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\034\034\034\377\370\370\370\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\206\257\321\377\220\265\325\377\352\361\367\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\333\333\333\377\170\170\170\377\033\033\033\377\000\000\000\377" + - "\000\000\000\377\226\226\226\377\377\377\377\377\306\306\306\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\132\132\132\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\303\330\351\377\072\175\265\377\103\203\270\377" + - "\224\270\326\377\355\363\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\364\364\364\377\247\247\247\377" + - "\205\205\205\377\364\364\364\377\377\377\377\377\206\206\206\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\235\235\235\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\373\375\377\135\224\302\377\072\175\265\377" + - "\072\175\265\377\106\205\271\377\230\273\330\377\357\364\371\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\233\233\233\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\005\005\005\377\335\335\335\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\305\331\351\377\073\176\266\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\110\206\272\377\236\276\332\377\362\366\372\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\373\373\373\377\216\216\216\377\045\045\045\377\001\001\001\377\000\000\000\377" + - "\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\054\054\054\377\374\374\374\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\217\265\325\377" + - "\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\112\207\273\377\243\302\334\377\363\367\372\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\372\372\377\260\260\260\377\105\105\105\377" + - "\004\004\004\377\000\000\000\377\000\000\000\377\000\000\000\377\000\000\000\377\156\156\156\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\375\376\377" + - "\205\257\321\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\115\211\274\377" + - "\250\305\336\377\366\371\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377" + - "\322\322\322\377\150\150\150\377\016\016\016\377\000\000\000\377\001\001\001\377\270\270\270\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\376\376\377\377\261\313\342\377\114\211\274\377\071\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377\072\175\265\377" + - "\072\175\265\377\115\211\274\377\277\324\347\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\354\354\354\377\223\223\223\377\233\233\233\377\375\375\375\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\363\367\372\377\265\316\343\377\201\254\320\377\145\231\305\377\141\227\304\377\154\236\310\377" + - "\217\265\325\377\305\331\351\377\367\372\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"; - - /** LWJGL Logo - 16 by 16 pixels */ - public static final ByteBuffer LWJGLIcon16x16 = loadIcon(LWJGL_ICON_DATA_16x16); - - /** LWJGL Logo - 32 by 32 pixels */ - public static final ByteBuffer LWJGLIcon32x32 = loadIcon(LWJGL_ICON_DATA_32x32); - - /** Debug flag. */ - public static final boolean DEBUG = true;/*getPrivilegedBoolean("org.lwjgl.util.Debug");*/ - - public static final boolean CHECKS = !getPrivilegedBoolean("org.lwjgl.util.NoChecks"); - - private static final int PLATFORM; - - static { - /*final String osName = getPrivilegedProperty("os.name"); - if ( osName.startsWith("Windows") ) - PLATFORM = PLATFORM_WINDOWS; - else if ( osName.startsWith("Linux") || osName.startsWith("FreeBSD") || osName.startsWith("SunOS") || osName.startsWith("Unix") ) - PLATFORM = PLATFORM_LINUX; - else if ( osName.startsWith("Mac OS X") || osName.startsWith("Darwin") ) - PLATFORM = PLATFORM_MACOSX; - else - throw new LinkageError("Unknown platform: " + osName);*/ - PLATFORM = PLATFORM_ANDROID; - } - - private static ByteBuffer loadIcon(String data) { - int len = data.length(); - ByteBuffer bb = BufferUtils.createByteBuffer(len); - for(int i=0 ; i possible_paths = new ArrayList(); - - String classloader_path = getPathFromClassLoader(libname, classloader); - if (classloader_path != null) { - log("getPathFromClassLoader: Path found: " + classloader_path); - possible_paths.add(classloader_path); - } - - for ( String platform_lib_name : platform_lib_names ) { - String lwjgl_classloader_path = getPathFromClassLoader("lwjgl", classloader); - if ( lwjgl_classloader_path != null ) { - 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 Installer path - String alternative_path = getPrivilegedProperty("org.lwjgl.librarypath"); - if ( alternative_path != null ) { - possible_paths.add(alternative_path + File.separator + platform_lib_name); - } - - // Add all possible paths from java.library.path - String java_library_path = getPrivilegedProperty("java.library.path"); - - StringTokenizer st = new StringTokenizer(java_library_path, File.pathSeparator); - while ( st.hasMoreTokens() ) { - String path = st.nextToken(); - possible_paths.add(path + File.separator + platform_lib_name); - } - - //add current path - String current_dir = getPrivilegedProperty("user.dir"); - possible_paths.add(current_dir + File.separator + platform_lib_name); - - //add pure library (no path, let OS search) - possible_paths.add(platform_lib_name); - } - - //create needed string array - return possible_paths.toArray(new String[possible_paths.size()]); - } - - static void execPrivileged(final String[] cmd_array) throws Exception { - try { - Process process = AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Process run() throws Exception { - return Runtime.getRuntime().exec(cmd_array); - } - }); - // Close unused streams to make sure the child process won't hang - process.getInputStream().close(); - process.getOutputStream().close(); - process.getErrorStream().close(); - } catch (PrivilegedActionException e) { - throw (Exception)e.getCause(); - } - } - - private static String getPrivilegedProperty(final String property_name) { - return AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - return System.getProperty(property_name); - } - }); - } - - /** - * Tries to locate named library from the current ClassLoader - * This method exists because native libraries are loaded from native code, and as such - * is exempt from ClassLoader library loading rutines. It 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 - * @param classloader Classloader to use - * @return Absolute path to library if found, otherwise null - */ - private static String getPathFromClassLoader(final String libname, final ClassLoader classloader) { - Class c = null; - - try { - log("getPathFromClassLoader: searching for: " + libname); - c = classloader.getClass(); - while (c != null) { - final Class clazz = c; - try { - return AccessController.doPrivileged(new PrivilegedExceptionAction() { - public String run() throws Exception { - Method findLibrary = clazz.getDeclaredMethod("findLibrary", String.class); - findLibrary.setAccessible(true); - String path = (String)findLibrary.invoke(classloader, libname); - return path; - } - }); - } catch (PrivilegedActionException e) { - log("Failed to locate findLibrary method: " + e.getCause()); - c = c.getSuperclass(); - } - } - } catch (Exception e) { - log("Failure locating " + e + " using classloader:" + c); - } - return null; - } - - /** - * Gets a boolean property as a privileged action. - */ - public static boolean getPrivilegedBoolean(final String property_name) { - return AccessController.doPrivileged(new PrivilegedAction() { - public Boolean run() { - return Boolean.getBoolean(property_name); - } - }); - } - - /** - * Gets an integer property as a privileged action. - * - * @param property_name the integer property name - * - * @return the property value - */ - public static Integer getPrivilegedInteger(final String property_name) { - return AccessController.doPrivileged(new PrivilegedAction() { - public Integer run() { - return Integer.getInteger(property_name); - } - }); - } - - /** - * Gets an integer property as a privileged action. - * - * @param property_name the integer property name - * @param default_val the default value to use if the property is not defined - * - * @return the property value - */ - public static Integer getPrivilegedInteger(final String property_name, final int default_val) { - return AccessController.doPrivileged(new PrivilegedAction() { - public Integer run() { - return Integer.getInteger(property_name, default_val); - } - }); - } - - /** - * Prints the given message to System.err if DEBUG is true. - * - * @param msg Message to print - */ - public static void log(CharSequence msg) { - if (DEBUG) { - System.err.println("[LWJGL] " + msg); - } - } - - /** - * Method to determine if the current system is running a version of - * Mac OS X better than the given version. This is only useful for Mac OS X - * specific code and will not work for any other platform. - */ - public static boolean isMacOSXEqualsOrBetterThan(int major_required, int minor_required) { - String os_version = getPrivilegedProperty("os.version"); - StringTokenizer version_tokenizer = new StringTokenizer(os_version, "."); - int major; - int minor; - try { - String major_str = version_tokenizer.nextToken(); - String minor_str = version_tokenizer.nextToken(); - major = Integer.parseInt(major_str); - minor = Integer.parseInt(minor_str); - } catch (Exception e) { - LWJGLUtil.log("Exception occurred while trying to determine OS version: " + e); - // Best guess, no - return false; - } - return major > major_required || (major == major_required && minor >= minor_required); - } - - /** - * Returns a map of public static final integer fields in the specified classes, to their String representations. - * An optional filter can be specified to only include specific fields. The target map may be null, in which - * case a new map is allocated and returned. - *

- * This method is useful when debugging to quickly identify values returned from the AL/GL/CL APIs. - * - * @param filter the filter to use (optional) - * @param target the target map (optional) - * @param tokenClasses an array of classes to get tokens from - * - * @return the token map - */ - - public static Map getClassTokens(final TokenFilter filter, final Map target, final Class ... tokenClasses) { - return getClassTokens(filter, target, Arrays.asList(tokenClasses)); - } - - /** - * Returns a map of public static final integer fields in the specified classes, to their String representations. - * An optional filter can be specified to only include specific fields. The target map may be null, in which - * case a new map is allocated and returned. - *

- * This method is useful when debugging to quickly identify values returned from the AL/GL/CL APIs. - * - * @param filter the filter to use (optional) - * @param target the target map (optional) - * @param tokenClasses the classes to get tokens from - * - * @return the token map - */ - public static Map getClassTokens(final TokenFilter filter, Map target, final Iterable tokenClasses) { - if ( target == null ) - target = new HashMap(); - - final int TOKEN_MODIFIERS = Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL; - - for ( final Class tokenClass : tokenClasses ) { - for ( final Field field : tokenClass.getDeclaredFields() ) { - // Get only fields. - if ( (field.getModifiers() & TOKEN_MODIFIERS) == TOKEN_MODIFIERS && field.getType() == int.class ) { - try { - final int value = field.getInt(null); - if ( filter != null && !filter.accept(field, value) ) - continue; - - if ( target.containsKey(value) ) // Print colliding tokens in their hex representation. - target.put(value, toHexString(value)); - else - target.put(value, field.getName()); - } catch (IllegalAccessException e) { - // Ignore - } - } - } - } - - return target; - } - - /** - * Returns a string representation of the integer argument as an - * unsigned integer in base 16. The string will be uppercase - * and will have a leading '0x'. - * - * @param value the integer value - * - * @return the hex string representation - */ - public static String toHexString(final int value) { - return "0x" + Integer.toHexString(value).toUpperCase(); - } - - /** Simple interface for Field filtering. */ - public interface TokenFilter { - - /** - * Should return true if the specified Field passes the filter. - * - * @param field the Field to test - * @param value the integer value of the field - * - * @result true if the Field is accepted - */ - boolean accept(Field field, int value); - - } - -} diff --git a/app/src/main/java/org/lwjgl/opengl/GLContext.java b/app/src/main/java/org/lwjgl/opengl/GLContext.java deleted file mode 100644 index fd28528c0..000000000 --- a/app/src/main/java/org/lwjgl/opengl/GLContext.java +++ /dev/null @@ -1,420 +0,0 @@ -/* - * Copyright (c) 2002-2008 LWJGL Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.lwjgl.opengl; - -import org.lwjgl.LWJGLException; -import org.lwjgl.LWJGLUtil; -import org.lwjgl.MemoryUtil; -import org.lwjgl.Sys; - -import java.lang.reflect.Method; -import java.nio.ByteBuffer; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.security.PrivilegedExceptionAction; -import java.util.*; - -import static org.lwjgl.opengl.GL11.*; -import static org.lwjgl.opengl.GL30.*; -import static org.lwjgl.opengl.GL32.*; - -/** - *

- * Manages GL contexts. Before any rendering is done by a LWJGL system, a call should be made to GLContext.useContext() with a - * context. This will ensure that GLContext has an accurate reflection of the current context's capabilities and function - * pointers. - *

- * This class is thread-safe in the sense that multiple threads can safely call all public methods. The class is also - * thread-aware in the sense that it tracks a per-thread current context (including capabilities and function pointers). - * That way, multiple threads can have multiple contexts current and render to them concurrently. - * - * @author elias_naur - * @version $Revision$ - * $Id$ - */ -public final class GLContext { - - /** Maps threads to their current context's ContextCapabilities, if any */ - private static final ThreadLocal current_capabilities = new ThreadLocal(); - - /** - * The getCapabilities() method is a potential hot spot in any LWJGL application, since - * it is needed for context capability discovery (e.g. is OpenGL 2.0 supported?), and - * for the function pointers of gl functions. However, the 'current_capabilities' ThreadLocal - * is (relatively) expensive to look up, and since most OpenGL applications use are single threaded - * rendering, the following two is an optimization for this case. - *

- * ThreadLocals can be thought of as a mapping between threads and values, so the idea - * is to use a lock-less cache of mappings between threads and the current ContextCapabilities. The cache - * could be any size, but in our case, we want a single sized cache for optimal performance - * in the single threaded case. - *

- * 'fast_path_cache' is the most recent ContextCapabilities (potentially null) and its owner. By - * recent I mean the last thread setting the value in setCapabilities(). When getCapabilities() - * is called, a check to see if the current is the owner of the ContextCapabilities instance in - * fast_path_cache. If so, the instance is returned, if not, some thread has since taken ownership - * of the cache entry and the slower current_capabilities ThreadLocal is queried instead. - *

- * No locks are needed in get/setCapabilities, because even though fast_path_cache can be accessed - * from multiple threads at once, we are guaranteed by the JVM spec that its value is always valid. - * Furthermore, if the ownership test in getCapabilities() succeeds, the cache entry can only contain - * the correct ContextCapabilites (that is, the one from getThreadLocalCapabilites()), - * since no other thread can set the owner to anyone else than itself. - */ - private static CapabilitiesCacheEntry fast_path_cache = new CapabilitiesCacheEntry(); - - /** - * Simple lock-free cache of CapabilitesEntryCache to avoid allocating more than one - * cache entry per thread - */ - private static final ThreadLocal thread_cache_entries = new ThreadLocal(); - - /** - * The weak mapping from context Object instances to ContextCapabilities. Used - * to avoid recreating a ContextCapabilities every time a context is made current. - */ - private static final Map capability_cache = new WeakHashMap(); - - /** Reference count of the native opengl implementation library */ - private static int gl_ref_count; - private static boolean did_auto_load; - - static { - Sys.initialize(); - } - - /** - * Get the current capabilities instance. It contains the flags used - * to test for support of a particular extension. - * - * @return The current capabilities instance. - */ - public static ContextCapabilities getCapabilities() { - ContextCapabilities caps = getCapabilitiesImpl(); - if ( caps == null ) - throw new RuntimeException("No OpenGL context found in the current thread."); - - return caps; - } - - private static ContextCapabilities getCapabilitiesImpl() { - CapabilitiesCacheEntry recent_cache_entry = fast_path_cache; - // Check owner of cache entry - if ( recent_cache_entry.owner == Thread.currentThread() ) { - /* The owner ship test succeeded, so the cache must contain the current ContextCapabilities instance - * assert recent_cache_entry.capabilities == getThreadLocalCapabilities(); - */ - return recent_cache_entry.capabilities; - } else // Some other thread has written to the cache since, and we fall back to the slower path - return getThreadLocalCapabilities(); - } - - /** - * Returns the capabilities instance associated with the specified context object. - * - * @param context the context object - * - * @return the capabilities instance - */ - static ContextCapabilities getCapabilities(Object context) { - return capability_cache.get(context); - } - - private static ContextCapabilities getThreadLocalCapabilities() { - return current_capabilities.get(); - } - - /** - * Set the current capabilities instance. It contains the flags used - * to test for support of a particular extension. - * - * @return The current capabilities instance. - */ - static void setCapabilities(ContextCapabilities capabilities) { - current_capabilities.set(capabilities); - - CapabilitiesCacheEntry thread_cache_entry = thread_cache_entries.get(); - if ( thread_cache_entry == null ) { - thread_cache_entry = new CapabilitiesCacheEntry(); - thread_cache_entries.set(thread_cache_entry); - } - thread_cache_entry.owner = Thread.currentThread(); - thread_cache_entry.capabilities = capabilities; - - fast_path_cache = thread_cache_entry; - } - - /** - * Helper method to get a pointer to a named function in the OpenGL library - * with a name dependent on the current platform - */ - static long getPlatformSpecificFunctionAddress(String function_prefix, String[] os_prefixes, String[] os_function_prefixes, String function) { - String os_name = AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - return System.getProperty("os.name"); - } - }); - for ( int i = 0; i < os_prefixes.length; i++ ) - if ( os_name.startsWith(os_prefixes[i]) ) { - String platform_function_name = function.replaceFirst(function_prefix, os_function_prefixes[i]); - long address = getFunctionAddress(platform_function_name); - return address; - } - return 0; - } - - /** - * Helper method to get a pointer to a named function with aliases in the OpenGL library. - * - * @param aliases the function name aliases. - * - * @return the function pointer address - */ - static long getFunctionAddress(String[] aliases) { - for ( String alias : aliases ) { - long address = getFunctionAddress(alias); - if ( address != 0 ) - return address; - } - return 0; - } - - /** Helper method to get a pointer to a named function in the OpenGL library. */ - static long getFunctionAddress(String name) { - ByteBuffer buffer = MemoryUtil.encodeASCII(name); - return ngetFunctionAddress(MemoryUtil.getAddress(buffer)); - } - private static native long ngetFunctionAddress(long name); - - /** - * Determine which extensions are available and returns the context profile mask. Helper method to ContextCapabilities. - * - * @param supported_extensions the Set to fill with the available extension names - * - * @return the context profile mask, will be 0 for any version < 3.2 - */ - static int getSupportedExtensions(final Set supported_extensions) { - // Detect OpenGL version first - - /* final */ String version = glGetString(GL_VERSION); - - if (version == null) { - // throw new IllegalStateException("glGetString(GL_VERSION) returned null - possibly caused by missing current context."); - - System.err.println("Unable to get real OpenGL version, inserting OpenGL 2.0."); - version = "2.0"; - } - - final StringTokenizer version_tokenizer = new StringTokenizer(version, ". "); - final String major_string = version_tokenizer.nextToken(); - final String minor_string = version_tokenizer.nextToken(); - - int majorVersion = 0; - int minorVersion = 0; - try { - majorVersion = Integer.parseInt(major_string); - minorVersion = Integer.parseInt(minor_string); - } catch (NumberFormatException e) { - LWJGLUtil.log("The major and/or minor OpenGL version is malformed: " + e.getMessage()); - } - - final int[][] GL_VERSIONS = { - { 1, 2, 3, 4, 5 }, // OpenGL 1 - { 0, 1 }, // OpenGL 2 - { 0, 1, 2, 3 }, // OpenGL 3 - { 0, 1, 2, 3, 4 }, // OpenGL 4 - }; - - for ( int major = 1; major <= GL_VERSIONS.length; major++ ) { - int[] minors = GL_VERSIONS[major - 1]; - for ( int minor : minors ) { - if ( major < majorVersion || (major == majorVersion && minor <= minorVersion) ) - supported_extensions.add("OpenGL" + Integer.toString(major) + Integer.toString(minor)); - } - } - - int profileMask = 0; - - if ( majorVersion < 3 ) { - // Parse EXTENSIONS string - final String extensions_string = glGetString(GL_EXTENSIONS); - if ( extensions_string == null ) - throw new IllegalStateException("glGetString(GL_EXTENSIONS) returned null - is there a context current?"); - - final StringTokenizer tokenizer = new StringTokenizer(extensions_string); - while ( tokenizer.hasMoreTokens() ) - supported_extensions.add(tokenizer.nextToken()); - } else { - // Use forward compatible indexed EXTENSIONS - final int extensionCount = GL11.glGetInteger(GL_NUM_EXTENSIONS); - - for ( int i = 0; i < extensionCount; i++ ) - supported_extensions.add(glGetStringi(GL_EXTENSIONS, i)); - - // Get the context profile mask for versions >= 3.2 - if ( 3 < majorVersion || 2 <= minorVersion ) { - Util.checkGLError(); // Make sure we have no errors up to this point - - try { - profileMask = GL11.glGetInteger(GL_CONTEXT_PROFILE_MASK); - // Retrieving GL_CONTEXT_PROFILE_MASK may generate an INVALID_OPERATION error on certain implementations, ignore. - // Happens on pre10.1 ATI drivers, when ContextAttribs.withProfileCompatibility is not used - Util.checkGLError(); - } catch (OpenGLException e) { - LWJGLUtil.log("Failed to retrieve CONTEXT_PROFILE_MASK"); - } - } - } - - return profileMask; - } - - /** - * Helper method to ContextCapabilities. It will try to initialize the native stubs, - * and remove the given extension name from the extension set if the initialization fails. - */ - static void initNativeStubs(final Class extension_class, Set supported_extensions, String ext_name) { - resetNativeStubs(extension_class); - if ( supported_extensions.contains(ext_name) ) { - try { - AccessController.doPrivileged(new PrivilegedExceptionAction() { - public Object run() throws Exception { - Method init_stubs_method = extension_class.getDeclaredMethod("initNativeStubs"); - init_stubs_method.invoke(null); - return null; - } - }); - } catch (Exception e) { - LWJGLUtil.log("Failed to initialize extension " + extension_class + " - exception: " + e); - supported_extensions.remove(ext_name); - } - } - } - - /** - * Makes a GL context the current LWJGL context by loading GL function pointers. The context must be current before a call to - * this method! Instead it simply ensures that the current context is reflected accurately by GLContext's extension caps and - * function pointers. Use useContext(null) when no context is active.

If the context is the same as last time, then this is - * a no-op.

If the context has not been encountered before it will be fully initialized from scratch. Otherwise a cached set - * of caps and function pointers will be used.

The reference to the context is held in a weak reference; therefore if no - * strong reference exists to the GL context it will automatically be forgotten by the VM at an indeterminate point in the - * future, freeing up a little RAM. - * - * @param context The context object, which uniquely identifies a GL context. If context is null, the native stubs are - * unloaded. - * - * @throws LWJGLException if context non-null, and the gl library can't be loaded or the basic GL11 functions can't be loaded - */ - public static synchronized void useContext(Object context) throws LWJGLException { - useContext(context, false); - } - - /** - * Makes a GL context the current LWJGL context by loading GL function pointers. The context must be current before a call to - * this method! Instead it simply ensures that the current context is reflected accurately by GLContext's extension caps and - * function pointers. Use useContext(null) when no context is active.

If the context is the same as last time, then this is - * a no-op.

If the context has not been encountered before it will be fully initialized from scratch. Otherwise a cached set - * of caps and function pointers will be used.

The reference to the context is held in a weak reference; therefore if no - * strong reference exists to the GL context it will automatically be forgotten by the VM at an indeterminate point in the - * future, freeing up a little RAM. - *

If forwardCompatible is true, function pointers of deprecated GL11-GL21 functionality will not be loaded. Calling a deprecated - * function using the specified context will result in an IllegalStateException. - * - * @param context The context object, which uniquely identifies a GL context. If context is null, the native stubs are - * unloaded. - * @param forwardCompatible If the context is a forward compatible context (does not expose deprecated functionality, see XGL_ARB_create_context) - * - * @throws LWJGLException if context non-null, and the gl library can't be loaded or the basic GL11 functions can't be loaded - */ - public static synchronized void useContext(Object context, boolean forwardCompatible) throws LWJGLException { - if ( context == null ) { - ContextCapabilities.unloadAllStubs(); - setCapabilities(null); - if ( did_auto_load ) - unloadOpenGLLibrary(); - return; - } - if ( gl_ref_count == 0 ) { - loadOpenGLLibrary(); - did_auto_load = true; - } - try { - ContextCapabilities capabilities = capability_cache.get(context); - if ( capabilities == null ) { - /* - * The capabilities object registers itself as current. This behaviour is caused - * by a chicken-and-egg situation where the constructor needs to call GL functions - * as part of its capability discovery, but GL functions cannot be called before - * a capabilities object has been set. - */ - new ContextCapabilities(forwardCompatible); - capability_cache.put(context, getCapabilities()); - } else - setCapabilities(capabilities); - } catch (LWJGLException e) { - if ( did_auto_load ) - unloadOpenGLLibrary(); - throw e; - } - } - - /** If the OpenGL reference count is 0, the library is loaded. The reference count is then incremented. */ - public static synchronized void loadOpenGLLibrary() throws LWJGLException { - if ( gl_ref_count == 0 ) - nLoadOpenGLLibrary(); - gl_ref_count++; - } - - private static native void nLoadOpenGLLibrary() throws LWJGLException; - - /** The OpenGL library reference count is decremented, and if it reaches 0, the library is unloaded. */ - public static synchronized void unloadOpenGLLibrary() { - gl_ref_count--; - /* - * Unload the native OpenGL library unless we're on linux, since - * some drivers (NVIDIA proprietary) crash on exit when unloading the library. - */ - if ( gl_ref_count == 0 && LWJGLUtil.getPlatform() != LWJGLUtil.PLATFORM_LINUX ) - nUnloadOpenGLLibrary(); - } - - private static native void nUnloadOpenGLLibrary(); - - /** Native method to clear native stub bindings */ - static native void resetNativeStubs(Class clazz); - - private static final class CapabilitiesCacheEntry { - - Thread owner; - ContextCapabilities capabilities; - } -} diff --git a/app/src/main/java/org/lwjgl/system/CheckIntrinsics.java b/app/src/main/java/org/lwjgl/system/CheckIntrinsics.java deleted file mode 100644 index 7ea7e01f6..000000000 --- a/app/src/main/java/org/lwjgl/system/CheckIntrinsics.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright LWJGL. All rights reserved. - * License terms: https://www.lwjgl.org/license - */ -package org.lwjgl.system; - -/** - * Simple index checks. - * - *

On Java 9 these checks are replaced with the corresponding {@link java.util.Objects} methods, which perform better.

- */ -public final class CheckIntrinsics { - - private CheckIntrinsics() { - } - - public static int checkIndex(int index, int length) { - if (index < 0 || length <= index) { - throw new IndexOutOfBoundsException(); - } - return index; - } - - public static int checkFromToIndex(int fromIndex, int toIndex, int length) { - if (fromIndex < 0 || toIndex < fromIndex || length < toIndex) { - throw new IndexOutOfBoundsException(); - } - return fromIndex; - } - - public static int checkFromIndexSize(int fromIndex, int size, int length) { - if ((length | fromIndex | size) < 0 || length - fromIndex < size) { - throw new IndexOutOfBoundsException(); - } - return fromIndex; - } - -} diff --git a/app/src/main/java/org/lwjgl/test/opencl/gl/Mandelbrot.cl b/app/src/main/java/org/lwjgl/test/opencl/gl/Mandelbrot.cl deleted file mode 100644 index 237b98f73..000000000 --- a/app/src/main/java/org/lwjgl/test/opencl/gl/Mandelbrot.cl +++ /dev/null @@ -1,83 +0,0 @@ -#ifdef DOUBLE_FP - #ifdef AMD_FP - #pragma OPENCL EXTENSION cl_amd_fp64 : enable - #else - #ifndef CL_VERSION_1_2 - #pragma OPENCL EXTENSION cl_khr_fp64 : enable - #endif - #endif - #define varfloat double - #define _255 255.0 -#else - #define varfloat float - #define _255 255.0f -#endif - -#ifdef USE_TEXTURE - #define OUTPUT_TYPE __write_only image2d_t -#else - #define OUTPUT_TYPE global uint * -#endif - -/** - * For a description of this algorithm please refer to - * http://en.wikipedia.org/wiki/Mandelbrot_set - * @author Michael Bien - */ -kernel void mandelbrot( - const int width, const int height, - const varfloat x0, const varfloat y0, - const varfloat rangeX, const varfloat rangeY, - OUTPUT_TYPE output, global uint *colorMap, - const int colorMapSize, const int maxIterations -) { - unsigned int ix = get_global_id(0); - unsigned int iy = get_global_id(1); - - varfloat r = x0 + ix * rangeX / width; - varfloat i = y0 + iy * rangeY / height; - - varfloat x = 0; - varfloat y = 0; - - varfloat magnitudeSquared = 0; - int iteration = 0; - - while ( magnitudeSquared < 4 && iteration < maxIterations ) { - varfloat x2 = x*x; - varfloat y2 = y*y; - y = 2 * x * y + i; - x = x2 - y2 + r; - magnitudeSquared = x2+y2; - iteration++; - } - - if ( iteration == maxIterations ) { - #ifdef USE_TEXTURE - write_imagef(output, (int2)(ix, iy), (float4)0); - #else - output[iy * width + ix] = 0; - #endif - } else { - float alpha = (float)iteration / maxIterations; - int colorIndex = (int)(alpha * colorMapSize); - #ifdef USE_TEXTURE - // We could have changed colorMap to a texture + sampler, but the - // unpacking below has minimal overhead and it's kinda interesting. - // We could also use an R32UI texture and do the unpacking in GLSL, - // but then we'd require OpenGL 3.0 (GLSL 1.30). - uint c = colorMap[colorIndex]; - float4 oc = (float4)( - (c & 0xFF) >> 0, - (c & 0xFF00) >> 8, - (c & 0xFF0000) >> 16, - 255.0f - ); - write_imagef(output, (int2)(ix, iy), oc / 255.0f); - #else - output[iy * width + ix] = colorMap[colorIndex]; - #endif - // monochrom - //output[iy * width + ix] = 255*iteration/maxIterations; - } -} \ No newline at end of file diff --git a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.fp b/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.fp deleted file mode 100644 index 65c3ed2eb..000000000 --- a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.fp +++ /dev/null @@ -1,40 +0,0 @@ -!!ARBfp1.0 -OPTION ARB_precision_hint_fastest; - -ATTRIB winPos = fragment.position; -ATTRIB iDots = fragment.texcoord[0]; - -PARAM ambience = state.lightmodel.ambient; - -PARAM specularColor = state.light[0].specular; - -PARAM UNIFORMS = program.local[0]; - -TEMP temp; - -OUTPUT oColor = result.color; - -# Offset window-space fragment position. -ADD temp.xyz, winPos, UNIFORMS.zwxx; -# Normalize position. -DP3 temp.w, temp, temp; -RSQ temp.w, temp.w; -MUL temp.xy, temp, temp.w; - -# Multiply with current sin. -MUL temp.xy, temp, UNIFORMS.x; -# {-1..1} => {0..1} -MAD temp.xy, temp, 0.5, 0.5; -# Intensify colors. -MUL temp.xy, temp, 2.0; -MOV temp.z, 1.0; - -# Accumulate color contributions. -MAD temp.xyz, iDots.x, temp, ambience; -# Calculate ^ -POW temp.w, iDots.y, UNIFORMS.y; -MAD oColor.xyz, temp.w, specularColor, temp; - -MOV oColor.w, 1.0; - -END \ No newline at end of file diff --git a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.vp b/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.vp deleted file mode 100644 index d6407f9d1..000000000 --- a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFP.vp +++ /dev/null @@ -1,37 +0,0 @@ -!!ARBvp1.0 - -ATTRIB iPos = vertex.position; -ATTRIB iNormal = vertex.normal; - -PARAM mvp[4] = { state.matrix.mvp }; -PARAM mvIT[4] = { state.matrix.modelview.invtrans }; - -PARAM lightDir = state.light[0].position; -PARAM halfDir = state.light[0].half; - -PARAM UNIFORMS = program.local[0]; - -TEMP normal, dots; - -OUTPUT oPos = result.position; -OUTPUT oDots = result.texcoord[0]; - -# Transform the vertex to clip coordinates. -DP4 oPos.x, mvp[0], iPos; -DP4 oPos.y, mvp[1], iPos; -DP4 oPos.z, mvp[2], iPos; -DP4 oPos.w, mvp[3], iPos; - -# Transform the normal to eye coordinates. -DP3 normal.x, mvIT[0], iNormal; -DP3 normal.y, mvIT[1], iNormal; -DP3 normal.z, mvIT[2], iNormal; - -# Compute diffuse and specular dot products and clamp them. -DP3 dots.x, normal, lightDir; -MAX oDots.x, dots.x, 0.0; - -DP3 dots.y, normal, halfDir; -MAX oDots.y, dots.y, 0.0; - -END \ No newline at end of file diff --git a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.fsh b/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.fsh deleted file mode 100644 index dd5102979..000000000 --- a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.fsh +++ /dev/null @@ -1,21 +0,0 @@ -uniform vec4 UNIFORMS; - -varying vec2 dots; - -void main(void) { - // Offset window-space fragment position. - vec3 color2D = vec3(gl_FragCoord + UNIFORMS.zwxx); - - // Normalize position. - // Multiply with current sin. - color2D.xy = normalize(color2D).xy * UNIFORMS.x; - // {-1..1} => {0..1} & Intensify colors. - color2D.xy = (vec2(color2D) * 0.5 + 0.5) * 2.0; - color2D.z = 1.0; - - // Accumulate color contributions. - // Hardcoded ambience and specular color, due to buggy drivers. - color2D = dots.x * color2D + vec3(0.2, 0.2, 0.2); - gl_FragColor.rgb = pow(dots.y, UNIFORMS.y) * vec3(1.0, 1.0, 0.5) + color2D; - gl_FragColor.a = 1.0; -} \ No newline at end of file diff --git a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.vsh b/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.vsh deleted file mode 100644 index 242ba9f49..000000000 --- a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderFSH.vsh +++ /dev/null @@ -1,13 +0,0 @@ -uniform vec4 UNIFORMS; - -varying vec2 dots; - -void main(void) { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - vec3 normal = gl_NormalMatrix * gl_Normal; - - // Pass the dot products to the fragment shader. - dots.x = max(dot(normal, vec3(gl_LightSource[0].position)), 0.0); - dots.y = max(dot(normal, vec3(gl_LightSource[0].halfVector)), 0.0); -} \ No newline at end of file diff --git a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderUNI.vsh b/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderUNI.vsh deleted file mode 100644 index d1fbd74e2..000000000 --- a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderUNI.vsh +++ /dev/null @@ -1,28 +0,0 @@ -#version 140 -#extension GL_ARB_uniform_buffer_object : enable - -layout(std140) uniform test { - vec2 uniformA; - vec3 uniformB; -}; - -void main(void) { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - vec3 normal = gl_NormalMatrix * gl_Normal; - - float diffuseDot = max(dot(normal, vec3(gl_LightSource[0].position)), 0.0); - float specularDot = max(dot(normal, vec3(gl_LightSource[0].halfVector)), 0.0); - specularDot = pow(specularDot, uniformA.y); - - // Normalize position, to get a {-1..1} value for each vertex. - // Multiply with current sin. - vec3 color3D = normalize(vec3(gl_Vertex)) * uniformA.x; - // {-1..1} => {0..1} & Intensify colors. - color3D = (color3D * 0.5 + 0.5) * 2.0; - - // Accumulate color contributions. - color3D = diffuseDot * (uniformB + color3D) + vec3(gl_LightModel.ambient); - gl_FrontColor.rgb = specularDot * vec3(gl_LightSource[0].specular) + color3D; - gl_FrontColor.a = 1.0; -} \ No newline at end of file diff --git a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVP.vp b/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVP.vp deleted file mode 100644 index efb5ed121..000000000 --- a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVP.vp +++ /dev/null @@ -1,59 +0,0 @@ -!!ARBvp1.0 - -ATTRIB iPos = vertex.position; -ATTRIB iNormal = vertex.normal; - -PARAM mvp[4] = { state.matrix.mvp }; -PARAM mvIT[4] = { state.matrix.modelview.invtrans }; - -PARAM ambience = state.lightmodel.ambient; - -PARAM lightDir = state.light[0].position; -PARAM halfDir = state.light[0].half; -PARAM diffuseColor = state.light[0].diffuse; -PARAM specularColor = state.light[0].specular; - -PARAM UNIFORMS = program.local[0]; - -TEMP temp, temp2, normal, dots; - -OUTPUT oPos = result.position; -OUTPUT oColor = result.color; - -# Transform the vertex to clip coordinates. -DP4 oPos.x, mvp[0], iPos; -DP4 oPos.y, mvp[1], iPos; -DP4 oPos.z, mvp[2], iPos; -DP4 oPos.w, mvp[3], iPos; - -# Transform the normal to eye coordinates. -DP3 normal.x, mvIT[0], iNormal; -DP3 normal.y, mvIT[1], iNormal; -DP3 normal.z, mvIT[2], iNormal; - -# Compute diffuse and specular dot products and use LIT to compute -# lighting coefficients. -DP3 dots.x, normal, lightDir; -DP3 dots.y, normal, halfDir; -MOV dots.w, UNIFORMS.y; -LIT dots, dots; - -# Normalize position, to get a {-1..1} value for each vertex. -DP3 temp.w, iPos, iPos; -RSQ temp.w, temp.w; -MUL temp.xyz, iPos, temp.w; - -# Multiply with current sin. -MUL temp.xyz, temp, UNIFORMS.x; -# {-1..1} => {0..1} -MAD temp.xyz, temp, 0.5, 0.5; -# Intensify colors. -MUL temp.xyz, temp, 2.0; - -# Accumulate color contributions. -MAD temp.xyz, dots.y, temp, ambience; -MAD oColor.xyz, dots.z, specularColor, temp; -MOV oColor.w, 1.0; - - -END \ No newline at end of file diff --git a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVSH.vsh b/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVSH.vsh deleted file mode 100644 index 3516b3f5a..000000000 --- a/app/src/main/java/org/lwjgl/test/opengl/shaders/shaderVSH.vsh +++ /dev/null @@ -1,22 +0,0 @@ -uniform vec2 UNIFORMS; - -void main(void) { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - vec3 normal = gl_NormalMatrix * gl_Normal; - - float diffuseDot = max(dot(normal, vec3(gl_LightSource[0].position)), 0.0); - float specularDot = max(dot(normal, vec3(gl_LightSource[0].halfVector)), 0.0); - specularDot = pow(specularDot, UNIFORMS.y); - - // Normalize position, to get a {-1..1} value for each vertex. - // Multiply with current sin. - vec3 color3D = normalize(vec3(gl_Vertex)) * UNIFORMS.x; - // {-1..1} => {0..1} & Intensify colors. - color3D = (color3D * 0.5 + 0.5) * 2.0; - - // Accumulate color contributions. - color3D = diffuseDot * color3D + vec3(gl_LightModel.ambient); - gl_FrontColor.rgb = specularDot * vec3(gl_LightSource[0].specular) + color3D; - gl_FrontColor.a = 1.0; -} \ No newline at end of file