@ -378,7 +378,7 @@ public final class BufferUtils {
vector . z = buf . get ( index * 3 + 2 ) ;
vector . z = buf . get ( index * 3 + 2 ) ;
}
}
/ * *
/ * *
* Generates a Vector3f array from the given FloatBuffer .
* Generates a Vector3f array from the given FloatBuffer .
*
*
* @param buff
* @param buff
@ -1105,6 +1105,9 @@ public final class BufferUtils {
* the input buffer , not null
* the input buffer , not null
* /
* /
public static FloatBuffer ensureLargeEnough ( FloatBuffer buffer , int required ) {
public static FloatBuffer ensureLargeEnough ( FloatBuffer buffer , int required ) {
if ( buffer ! = null ) {
buffer . limit ( buffer . capacity ( ) ) ;
}
if ( buffer = = null | | ( buffer . remaining ( ) < required ) ) {
if ( buffer = = null | | ( buffer . remaining ( ) < required ) ) {
int position = ( buffer ! = null ? buffer . position ( ) : 0 ) ;
int position = ( buffer ! = null ? buffer . position ( ) : 0 ) ;
FloatBuffer newVerts = createFloatBuffer ( position + required ) ;
FloatBuffer newVerts = createFloatBuffer ( position + required ) ;
@ -1119,6 +1122,9 @@ public final class BufferUtils {
}
}
public static ShortBuffer ensureLargeEnough ( ShortBuffer buffer , int required ) {
public static ShortBuffer ensureLargeEnough ( ShortBuffer buffer , int required ) {
if ( buffer ! = null ) {
buffer . limit ( buffer . capacity ( ) ) ;
}
if ( buffer = = null | | ( buffer . remaining ( ) < required ) ) {
if ( buffer = = null | | ( buffer . remaining ( ) < required ) ) {
int position = ( buffer ! = null ? buffer . position ( ) : 0 ) ;
int position = ( buffer ! = null ? buffer . position ( ) : 0 ) ;
ShortBuffer newVerts = createShortBuffer ( position + required ) ;
ShortBuffer newVerts = createShortBuffer ( position + required ) ;
@ -1133,6 +1139,9 @@ public final class BufferUtils {
}
}
public static ByteBuffer ensureLargeEnough ( ByteBuffer buffer , int required ) {
public static ByteBuffer ensureLargeEnough ( ByteBuffer buffer , int required ) {
if ( buffer ! = null ) {
buffer . limit ( buffer . capacity ( ) ) ;
}
if ( buffer = = null | | ( buffer . remaining ( ) < required ) ) {
if ( buffer = = null | | ( buffer . remaining ( ) < required ) ) {
int position = ( buffer ! = null ? buffer . position ( ) : 0 ) ;
int position = ( buffer ! = null ? buffer . position ( ) : 0 ) ;
ByteBuffer newVerts = createByteBuffer ( position + required ) ;
ByteBuffer newVerts = createByteBuffer ( position + required ) ;
@ -1201,7 +1210,7 @@ public final class BufferUtils {
private static Method viewedBufferMethod = null ;
private static Method viewedBufferMethod = null ;
private static Method freeMethod = null ;
private static Method freeMethod = null ;
private static Method loadMethod ( String className , String methodName ) {
private static Method loadMethod ( String className , String methodName ) {
try {
try {
Method method = Class . forName ( className ) . getMethod ( methodName ) ;
Method method = Class . forName ( className ) . getMethod ( methodName ) ;
method . setAccessible ( true ) ;
method . setAccessible ( true ) ;
@ -1224,19 +1233,19 @@ public final class BufferUtils {
// threads
// threads
synchronized ( BufferUtils . loadedMethods ) {
synchronized ( BufferUtils . loadedMethods ) {
// Oracle JRE / OpenJDK
// Oracle JRE / OpenJDK
cleanerMethod = loadMethod ( "sun.nio.ch.DirectBuffer" , "cleaner" ) ;
cleanerMethod = loadMethod ( "sun.nio.ch.DirectBuffer" , "cleaner" ) ;
cleanMethod = loadMethod ( "sun.misc.Cleaner" , "clean" ) ;
cleanMethod = loadMethod ( "sun.misc.Cleaner" , "clean" ) ;
viewedBufferMethod = loadMethod ( "sun.nio.ch.DirectBuffer" , "viewedBuffer" ) ;
viewedBufferMethod = loadMethod ( "sun.nio.ch.DirectBuffer" , "viewedBuffer" ) ;
if ( viewedBufferMethod = = null ) {
if ( viewedBufferMethod = = null ) {
// They changed the name in Java 7 (???)
// They changed the name in Java 7 (???)
viewedBufferMethod = loadMethod ( "sun.nio.ch.DirectBuffer" , "attachment" ) ;
viewedBufferMethod = loadMethod ( "sun.nio.ch.DirectBuffer" , "attachment" ) ;
}
}
// Apache Harmony
// Apache Harmony
ByteBuffer bb = BufferUtils . createByteBuffer ( 1 ) ;
ByteBuffer bb = BufferUtils . createByteBuffer ( 1 ) ;
Class < ? > clazz = bb . getClass ( ) ;
Class < ? > clazz = bb . getClass ( ) ;
try {
try {
freeMethod = clazz . getMethod ( "free" ) ;
freeMethod = clazz . getMethod ( "free" ) ;
} catch ( NoSuchMethodException ex ) {
} catch ( NoSuchMethodException ex ) {
} catch ( SecurityException ex ) {
} catch ( SecurityException ex ) {
}
}
@ -1245,14 +1254,14 @@ public final class BufferUtils {
/ * *
/ * *
* Direct buffers are garbage collected by using a phantom reference and a
* Direct buffers are garbage collected by using a phantom reference and a
* reference queue . Every once a while , the JVM checks the reference queue and
* reference queue . Every once a while , the JVM checks the reference queue and
* cleans the direct buffers . However , as this doesn ' t happen
* cleans the direct buffers . However , as this doesn ' t happen
* immediately after discarding all references to a direct buffer , it ' s
* immediately after discarding all references to a direct buffer , it ' s
* easy to OutOfMemoryError yourself using direct buffers . This function
* easy to OutOfMemoryError yourself using direct buffers . This function
* explicitly calls the Cleaner method of a direct buffer .
* explicitly calls the Cleaner method of a direct buffer .
*
*
* @param toBeDestroyed
* @param toBeDestroyed
* The direct buffer that will be "cleaned" . Utilizes reflection .
* The direct buffer that will be "cleaned" . Utilizes reflection .
*
*
* /
* /
public static void destroyDirectBuffer ( Buffer toBeDestroyed ) {
public static void destroyDirectBuffer ( Buffer toBeDestroyed ) {