|
From: <sp...@us...> - 2011-05-11 00:12:59
|
Revision: 3528
http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3528&view=rev
Author: spasi
Date: 2011-05-11 00:12:52 +0000 (Wed, 11 May 2011)
Log Message:
-----------
Added alignment checks to PointerBuffer constructor.
Modified Paths:
--------------
trunk/LWJGL/src/java/org/lwjgl/BufferUtils.java
trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java
trunk/LWJGL/src/native/common/org_lwjgl_BufferUtils.c
Modified: trunk/LWJGL/src/java/org/lwjgl/BufferUtils.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/BufferUtils.java 2011-05-10 20:22:08 UTC (rev 3527)
+++ trunk/LWJGL/src/java/org/lwjgl/BufferUtils.java 2011-05-11 00:12:52 UTC (rev 3528)
@@ -192,4 +192,14 @@
/** Fill buffer with zeros from position to remaining */
private static native void zeroBuffer0(Buffer b, long off, long size);
+
+ /**
+ * Returns the memory address of the specified buffer.
+ *
+ * @param buffer the buffer
+ *
+ * @return the memory address
+ */
+ static native long getBufferAddress(Buffer buffer);
+
}
Modified: trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java 2011-05-10 20:22:08 UTC (rev 3527)
+++ trunk/LWJGL/src/java/org/lwjgl/PointerBuffer.java 2011-05-11 00:12:52 UTC (rev 3528)
@@ -59,8 +59,8 @@
protected final ByteBuffer pointers;
- protected final Buffer view;
- protected final IntBuffer view32;
+ protected final Buffer view;
+ protected final IntBuffer view32;
protected final LongBuffer view64;
/**
@@ -83,6 +83,10 @@
if ( !source.isDirect() )
throw new IllegalArgumentException("ByteBuffer is not direct");
+ final int alignment = is64Bit ? 8 : 4;
+ if ( (BufferUtils.getBufferAddress(source) + source.position()) % alignment != 0 || source.remaining() % alignment != 0 )
+ throw new IllegalArgumentException("The source buffer is not aligned to " + alignment + " bytes.");
+
pointers = source.slice().order(source.order());
if ( is64Bit ) {
Modified: trunk/LWJGL/src/native/common/org_lwjgl_BufferUtils.c
===================================================================
--- trunk/LWJGL/src/native/common/org_lwjgl_BufferUtils.c 2011-05-10 20:22:08 UTC (rev 3527)
+++ trunk/LWJGL/src/native/common/org_lwjgl_BufferUtils.c 2011-05-11 00:12:52 UTC (rev 3528)
@@ -2,4 +2,8 @@
JNIEXPORT void JNICALL Java_org_lwjgl_BufferUtils_zeroBuffer0(JNIEnv *env, jclass clazz, jobject buffer, jlong offset, jlong size) {
memset((char*)(*env)->GetDirectBufferAddress(env, buffer) + (size_t)offset, 0, (size_t)size);
+}
+
+JNIEXPORT jlong JNICALL Java_org_lwjgl_BufferUtils_getBufferAddress(JNIEnv *env, jclass clazz, jobject buffer) {
+ return (uintptr_t)(*env)->GetDirectBufferAddress(env, buffer);
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|