summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/java/com/jogamp/common/nio/Buffers.java40
-rw-r--r--src/java/com/jogamp/common/nio/CachedBufferFactory.java4
-rw-r--r--src/junit/com/jogamp/common/nio/CachedBufferFactoryTest.java2
3 files changed, 13 insertions, 33 deletions
diff --git a/src/java/com/jogamp/common/nio/Buffers.java b/src/java/com/jogamp/common/nio/Buffers.java
index d46391f..45cb5a6 100755
--- a/src/java/com/jogamp/common/nio/Buffers.java
+++ b/src/java/com/jogamp/common/nio/Buffers.java
@@ -208,12 +208,13 @@ public class Buffers {
}
/**
- * Calls slice on the specified buffer.
+ * Calls slice on the specified buffer while maintaining the byteorder.
* @see #slice(java.nio.Buffer, int, int)
*/
public static <B extends Buffer> B slice(B buffer) {
if (buffer instanceof ByteBuffer) {
- return (B) ((ByteBuffer) buffer).slice();
+ ByteBuffer bb = (ByteBuffer) buffer;
+ return (B) bb.slice().order(bb.order()); // bb can change byte order on slice and duplicate
} else if (buffer instanceof IntBuffer) {
return (B) ((IntBuffer) buffer).slice();
} else if (buffer instanceof ShortBuffer) {
@@ -231,7 +232,8 @@ public class Buffers {
}
/**
- * Slices the specified buffer with offset as position and offset+size as limit.
+ * Slices the specified buffer with offset as position and offset+size as limit
+ * while maintaining the byteorder.
* Concurrency warning: this method changes the buffers position and limit but
* will restore it before return.
*/
@@ -293,24 +295,12 @@ public class Buffers {
if (buf == null) {
return true;
}
- if (buf instanceof ByteBuffer) {
- return ((ByteBuffer) buf).isDirect();
- } else if (buf instanceof FloatBuffer) {
- return ((FloatBuffer) buf).isDirect();
- } else if (buf instanceof IntBuffer) {
- return ((IntBuffer) buf).isDirect();
- } else if (buf instanceof ShortBuffer) {
- return ((ShortBuffer) buf).isDirect();
+ if (buf instanceof Buffer) {
+ return ((Buffer) buf).isDirect();
} else if (buf instanceof Int64Buffer) {
return ((Int64Buffer) buf).isDirect();
} else if (buf instanceof PointerBuffer) {
return ((PointerBuffer) buf).isDirect();
- } else if (buf instanceof DoubleBuffer) {
- return ((DoubleBuffer) buf).isDirect();
- } else if (buf instanceof LongBuffer) {
- return ((LongBuffer) buf).isDirect();
- }else if (buf instanceof CharBuffer) {
- return ((CharBuffer) buf).isDirect();
}
throw new IllegalArgumentException("Unexpected buffer type " + buf.getClass().getName());
}
@@ -360,24 +350,12 @@ public class Buffers {
if (buf == null) {
return null;
}
- if (buf instanceof ByteBuffer) {
- return ((ByteBuffer) buf).array();
- } else if (buf instanceof FloatBuffer) {
- return ((FloatBuffer) buf).array();
- } else if (buf instanceof IntBuffer) {
- return ((IntBuffer) buf).array();
- } else if (buf instanceof ShortBuffer) {
- return ((ShortBuffer) buf).array();
+ if (buf instanceof Buffer) {
+ return ((Buffer) buf).array();
} else if (buf instanceof Int64Buffer) {
return ((Int64Buffer) buf).array();
} else if (buf instanceof PointerBuffer) {
return ((PointerBuffer) buf).array();
- }else if (buf instanceof DoubleBuffer) {
- return ((DoubleBuffer) buf).array();
- } else if (buf instanceof LongBuffer) {
- return ((LongBuffer) buf).array();
- } else if (buf instanceof CharBuffer) {
- return ((CharBuffer) buf).array();
}
throw new IllegalArgumentException("Disallowed array backing store type in buffer " + buf.getClass().getName());
diff --git a/src/java/com/jogamp/common/nio/CachedBufferFactory.java b/src/java/com/jogamp/common/nio/CachedBufferFactory.java
index 36bac13..dbeed2d 100644
--- a/src/java/com/jogamp/common/nio/CachedBufferFactory.java
+++ b/src/java/com/jogamp/common/nio/CachedBufferFactory.java
@@ -168,7 +168,7 @@ public class CachedBufferFactory {
public ByteBuffer newDirectByteBuffer(int size) {
// if large enough... just create it
- if (size >= currentBuffer.capacity()) {
+ if (size > currentBuffer.capacity()) {
checkIfFixed();
return Buffers.newDirectByteBuffer(size);
}
@@ -180,7 +180,7 @@ public class CachedBufferFactory {
}
currentBuffer.limit(currentBuffer.position() + size);
- ByteBuffer result = currentBuffer.slice();
+ ByteBuffer result = currentBuffer.slice().order(currentBuffer.order());
currentBuffer.position(currentBuffer.limit());
currentBuffer.limit(currentBuffer.capacity());
return result;
diff --git a/src/junit/com/jogamp/common/nio/CachedBufferFactoryTest.java b/src/junit/com/jogamp/common/nio/CachedBufferFactoryTest.java
index 0b10fe8..a00f4c9 100644
--- a/src/junit/com/jogamp/common/nio/CachedBufferFactoryTest.java
+++ b/src/junit/com/jogamp/common/nio/CachedBufferFactoryTest.java
@@ -28,6 +28,7 @@
package com.jogamp.common.nio;
import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
import java.nio.IntBuffer;
import java.util.ArrayList;
import java.util.List;
@@ -88,6 +89,7 @@ public class CachedBufferFactoryTest {
// create
for (int i = 0; i < sizes.length; i++) {
buffers[i] = factory.newDirectIntBuffer(sizes[i]);
+ assertEquals(ByteOrder.nativeOrder(), buffers[i].order());
fill(buffers[i], values[i]);
}