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. |