Package com.jme3.util
Class BufferUtils
java.lang.Object
com.jme3.util.BufferUtils
BufferUtils
is a helper class for generating nio buffers from
jME data classes such as Vectors and ColorRGBA.-
Method Summary
Modifier and TypeMethodDescriptionstatic void
addInBuffer
(Vector2f toAdd, FloatBuffer buf, int index) Add to a Vector2f in-buffer.static void
addInBuffer
(Vector3f toAdd, FloatBuffer buf, int index) Add to a Vector3f in-buffer.static Buffer
Creates a clone of the given buffer.static ByteBuffer
clone
(ByteBuffer buf) Creates a new ByteBuffer with the same contents as the given ByteBuffer.static DoubleBuffer
clone
(DoubleBuffer buf) Creates a new DoubleBuffer with the same contents as the given DoubleBuffer.static FloatBuffer
clone
(FloatBuffer buf) Creates a new FloatBuffer with the same contents as the given FloatBuffer.static IntBuffer
Creates a new IntBuffer with the same contents as the given IntBuffer.static ShortBuffer
clone
(ShortBuffer buf) Creates a new ShortBuffer with the same contents as the given ShortBuffer.static void
copyInternal
(FloatBuffer buf, int fromPos, int toPos, int length) Copies floats from one position in the buffer to another.static void
copyInternalVector2
(FloatBuffer buf, int fromPos, int toPos) Copies a Vector2f from one position in the buffer to another.static void
copyInternalVector3
(FloatBuffer buf, int fromPos, int toPos) Copies a Vector3f from one position in the buffer to another.static ByteBuffer
createByteBuffer
(byte... data) static ByteBuffer
createByteBuffer
(int size) Create a new ByteBuffer of the specified size.static ByteBuffer
createByteBuffer
(String data) static ByteBuffer
createByteBuffer
(ByteBuffer buf, int size) Create a new ByteBuffer of an appropriate size to hold the specified number of ints only if the given buffer if not already the right size.static DoubleBuffer
createDoubleBuffer
(int size) Create a new DoubleBuffer of the specified size.static DoubleBuffer
createDoubleBuffer
(DoubleBuffer buf, int size) Create a new DoubleBuffer of an appropriate size to hold the specified number of doubles only if the given buffer if not already the right size.static FloatBuffer
createFloatBuffer
(float... data) Generate a new FloatBuffer using the given array of float primitives.static FloatBuffer
createFloatBuffer
(int size) Create a new FloatBuffer of the specified size.static FloatBuffer
createFloatBuffer
(ColorRGBA... data) Generate a new FloatBuffer using the given array of ColorRGBA objects.static FloatBuffer
createFloatBuffer
(Quaternion... data) Generate a new FloatBuffer using the given array of Quaternion objects.static FloatBuffer
createFloatBuffer
(Vector2f... data) Generate a new FloatBuffer using the given array of Vector2f objects.static FloatBuffer
createFloatBuffer
(Vector3f... data) Generate a new FloatBuffer using the given array of Vector3f objects.static FloatBuffer
createFloatBuffer
(Vector4f... data) Generate a new FloatBuffer using the given array of Vector4 objects.static IntBuffer
createIntBuffer
(int size) Create a new IntBuffer of the specified size.static IntBuffer
createIntBuffer
(int... data) Generate a new IntBuffer using the given array of ints.static IntBuffer
createIntBuffer
(IntBuffer buf, int size) Create a new IntBuffer of an appropriate size to hold the specified number of ints only if the given buffer if not already the right size.static ShortBuffer
createShortBuffer
(int size) Create a new ShortBuffer of the specified size.static ShortBuffer
createShortBuffer
(short... data) static ShortBuffer
createShortBuffer
(ShortBuffer buf, int size) Create a new ShortBuffer of an appropriate size to hold the specified number of shorts only if the given buffer if not already the right size.static FloatBuffer
createVector2Buffer
(int vertices) Create a new FloatBuffer of an appropriate size to hold the specified number of Vector2f object data.static FloatBuffer
createVector2Buffer
(FloatBuffer buf, int vertices) Create a new FloatBuffer of an appropriate size to hold the specified number of Vector2f object data only if the given buffer if not already the right size.static FloatBuffer
createVector3Buffer
(int vertices) Create a new FloatBuffer of an appropriate size to hold the specified number of Vector3f object data.static FloatBuffer
createVector3Buffer
(FloatBuffer buf, int vertices) Create a new FloatBuffer of an appropriate size to hold the specified number of Vector3f object data only if the given buffer if not already the right size.static void
destroyDirectBuffer
(Buffer toBeDestroyed) Direct buffers are garbage collected by using a phantom reference and a reference queue.static ByteBuffer
ensureLargeEnough
(ByteBuffer buffer, int required) static FloatBuffer
ensureLargeEnough
(FloatBuffer buffer, int required) Ensures there is at least therequired
number of entries left after the current position of the buffer.static IntBuffer
ensureLargeEnough
(IntBuffer buffer, int required) static ShortBuffer
ensureLargeEnough
(ShortBuffer buffer, int required) static boolean
equals
(Vector2f check, FloatBuffer buf, int index) Checks to see if the given Vector2f is equals to the data stored in the buffer at the given data index.static boolean
equals
(Vector3f check, FloatBuffer buf, int index) Checks to see if the given Vector3f is equals to the data stored in the buffer at the given data index.static float[]
getFloatArray
(FloatBuffer buff) Create a new float[] array and populate it with the given FloatBuffer's contents.static int[]
getIntArray
(IntBuffer buff) Create a new int[] array and populate it with the given IntBuffer's contents.static Vector2f[]
getVector2Array
(FloatBuffer buff) Generates a Vector2f array from the given FloatBuffer.static Vector3f[]
getVector3Array
(FloatBuffer buff) Generates a Vector3f array from the given FloatBuffer.static void
multInBuffer
(Vector2f toMult, FloatBuffer buf, int index) Multiply and store a Vector2f in-buffer.static void
multInBuffer
(Vector3f toMult, FloatBuffer buf, int index) Multiply and store a Vector3f in-buffer.static void
normalizeVector2
(FloatBuffer buf, int index) Normalize a Vector2f in-buffer.static void
normalizeVector3
(FloatBuffer buf, int index) Normalize a Vector3f in-buffer.static void
populateFromBuffer
(Vector2f vector, FloatBuffer buf, int index) Updates the values of the given vector from the specified buffer at the index provided.static void
populateFromBuffer
(Vector3f vector, FloatBuffer buf, int index) Updates the values of the given vector from the specified buffer at the index provided.static void
populateFromBuffer
(Vector4f vector, FloatBuffer buf, int index) Updates the values of the given vector from the specified buffer at the index provided.static void
static void
setInBuffer
(ColorRGBA color, FloatBuffer buf, int index) Sets the data contained in the given color into the FloatBuffer at the specified index.static void
setInBuffer
(Quaternion quat, FloatBuffer buf, int index) Sets the data contained in the given quaternion into the FloatBuffer at the specified index.static void
setInBuffer
(Vector2f vector, FloatBuffer buf, int index) Sets the data contained in the given Vector2F into the FloatBuffer at the specified index.static void
setInBuffer
(Vector3f vector, FloatBuffer buf, int index) Sets the data contained in the given Vector3F into the FloatBuffer at the specified index.static void
setInBuffer
(Vector4f vec, FloatBuffer buf, int index) Sets the data contained in the given vector4 into the FloatBuffer at the specified index.static void
setTrackDirectMemoryEnabled
(boolean enabled) Set it to true if you want to enable direct memory tracking for debugging purpose.
-
Method Details
-
setTrackDirectMemoryEnabled
public static void setTrackDirectMemoryEnabled(boolean enabled) Set it to true if you want to enable direct memory tracking for debugging purpose. Default is false. To print direct memory usage use BufferUtils.printCurrentDirectMemory(StringBuilder store);- Parameters:
enabled
- true to enable tracking, false to disable it (default=false)
-
clone
Creates a clone of the given buffer. The clone's capacity is equal to the given buffer's limit.- Parameters:
buf
- The buffer to clone- Returns:
- The cloned buffer
-
createFloatBuffer
Generate a new FloatBuffer using the given array of Vector3f objects. The FloatBuffer will be 3 * data.length long and contain the vector data as data[0].x, data[0].y, data[0].z, data[1].x... etc.- Parameters:
data
- array of Vector3f objects to place into a new FloatBuffer- Returns:
- a new direct, flipped FloatBuffer, or null if data was null
-
createFloatBuffer
Generate a new FloatBuffer using the given array of Quaternion objects. The FloatBuffer will be 4 * data.length long and contain the vector data.- Parameters:
data
- array of Quaternion objects to place into a new FloatBuffer- Returns:
- a new direct, flipped FloatBuffer, or null if data was null
-
createFloatBuffer
Generate a new FloatBuffer using the given array of Vector4 objects. The FloatBuffer will be 4 * data.length long and contain the vector data.- Parameters:
data
- array of Vector4 objects to place into a new FloatBuffer- Returns:
- a new direct, flipped FloatBuffer, or null if data was null
-
createFloatBuffer
Generate a new FloatBuffer using the given array of ColorRGBA objects. The FloatBuffer will be 4 * data.length long and contain the color data.- Parameters:
data
- array of ColorRGBA objects to place into a new FloatBuffer- Returns:
- a new direct, flipped FloatBuffer, or null if data was null
-
createFloatBuffer
Generate a new FloatBuffer using the given array of float primitives.- Parameters:
data
- array of float primitives to place into a new FloatBuffer- Returns:
- a new direct, flipped FloatBuffer, or null if data was null
-
createVector3Buffer
Create a new FloatBuffer of an appropriate size to hold the specified number of Vector3f object data.- Parameters:
vertices
- number of vertices that need to be held by the newly created buffer- Returns:
- the requested new FloatBuffer
-
createVector3Buffer
Create a new FloatBuffer of an appropriate size to hold the specified number of Vector3f object data only if the given buffer if not already the right size.- Parameters:
buf
- the buffer to first check and rewindvertices
- number of vertices that need to be held by the newly created buffer- Returns:
- the requested new FloatBuffer
-
setInBuffer
Sets the data contained in the given color into the FloatBuffer at the specified index.- Parameters:
color
- the data to insertbuf
- the buffer to insert intoindex
- the position to place the data; in terms of colors not floats
-
setInBuffer
Sets the data contained in the given quaternion into the FloatBuffer at the specified index.- Parameters:
quat
- theQuaternion
to insertbuf
- the buffer to insert intoindex
- the position to place the data; in terms of quaternions not floats
-
setInBuffer
Sets the data contained in the given vector4 into the FloatBuffer at the specified index.- Parameters:
vec
- theVector4f
to insertbuf
- the buffer to insert intoindex
- the position to place the data; in terms of vector4 not floats
-
setInBuffer
Sets the data contained in the given Vector3F into the FloatBuffer at the specified index.- Parameters:
vector
- the data to insertbuf
- the buffer to insert intoindex
- the position to place the data; in terms of vectors not floats
-
populateFromBuffer
Updates the values of the given vector from the specified buffer at the index provided.- Parameters:
vector
- the vector to set data onbuf
- the buffer to read fromindex
- the position (in terms of vectors, not floats) to read from the buf
-
populateFromBuffer
Updates the values of the given vector from the specified buffer at the index provided.- Parameters:
vector
- the vector to set data onbuf
- the buffer to read fromindex
- the position (in terms of vectors, not floats) to read from the buf
-
getVector3Array
Generates a Vector3f array from the given FloatBuffer.- Parameters:
buff
- the FloatBuffer to read from- Returns:
- a newly generated array of Vector3f objects
-
copyInternalVector3
Copies a Vector3f from one position in the buffer to another. The index values are in terms of vector number (eg, vector number 0 is positions 0-2 in the FloatBuffer.)- Parameters:
buf
- the buffer to copy from/tofromPos
- the index of the vector to copytoPos
- the index to copy the vector to
-
normalizeVector3
Normalize a Vector3f in-buffer.- Parameters:
buf
- the buffer to find the Vector3f withinindex
- the position (in terms of vectors, not floats) of the vector to normalize
-
addInBuffer
Add to a Vector3f in-buffer.- Parameters:
toAdd
- the vector to add frombuf
- the buffer to find the Vector3f withinindex
- the position (in terms of vectors, not floats) of the vector to add to
-
multInBuffer
Multiply and store a Vector3f in-buffer.- Parameters:
toMult
- the vector to multiply againstbuf
- the buffer to find the Vector3f withinindex
- the position (in terms of vectors, not floats) of the vector to multiply
-
equals
Checks to see if the given Vector3f is equals to the data stored in the buffer at the given data index.- Parameters:
check
- the vector to check against - null will return false.buf
- the buffer to compare data withindex
- the position (in terms of vectors, not floats) of the vector in the buffer to check against- Returns:
- true if the data is equivalent, otherwise false.
-
createFloatBuffer
Generate a new FloatBuffer using the given array of Vector2f objects. The FloatBuffer will be 2 * data.length long and contain the vector data as data[0].x, data[0].y, data[1].x... etc.- Parameters:
data
- array of Vector2f objects to place into a new FloatBuffer- Returns:
- a new direct, flipped FloatBuffer, or null if data was null
-
createVector2Buffer
Create a new FloatBuffer of an appropriate size to hold the specified number of Vector2f object data.- Parameters:
vertices
- number of vertices that need to be held by the newly created buffer- Returns:
- the requested new FloatBuffer
-
createVector2Buffer
Create a new FloatBuffer of an appropriate size to hold the specified number of Vector2f object data only if the given buffer if not already the right size.- Parameters:
buf
- the buffer to first check and rewindvertices
- number of vertices that need to be held by the newly created buffer- Returns:
- the requested new FloatBuffer
-
setInBuffer
Sets the data contained in the given Vector2F into the FloatBuffer at the specified index.- Parameters:
vector
- the data to insertbuf
- the buffer to insert intoindex
- the position to place the data; in terms of vectors not floats
-
populateFromBuffer
Updates the values of the given vector from the specified buffer at the index provided.- Parameters:
vector
- the vector to set data onbuf
- the buffer to read fromindex
- the position (in terms of vectors, not floats) to read from the buf
-
getVector2Array
Generates a Vector2f array from the given FloatBuffer.- Parameters:
buff
- the FloatBuffer to read from- Returns:
- a newly generated array of Vector2f objects
-
copyInternalVector2
Copies a Vector2f from one position in the buffer to another. The index values are in terms of vector number (eg, vector number 0 is positions 0-1 in the FloatBuffer.)- Parameters:
buf
- the buffer to copy from/tofromPos
- the index of the vector to copytoPos
- the index to copy the vector to
-
normalizeVector2
Normalize a Vector2f in-buffer.- Parameters:
buf
- the buffer to find the Vector2f withinindex
- the position (in terms of vectors, not floats) of the vector to normalize
-
addInBuffer
Add to a Vector2f in-buffer.- Parameters:
toAdd
- the vector to add frombuf
- the buffer to find the Vector2f withinindex
- the position (in terms of vectors, not floats) of the vector to add to
-
multInBuffer
Multiply and store a Vector2f in-buffer.- Parameters:
toMult
- the vector to multiply againstbuf
- the buffer to find the Vector2f withinindex
- the position (in terms of vectors, not floats) of the vector to multiply
-
equals
Checks to see if the given Vector2f is equals to the data stored in the buffer at the given data index.- Parameters:
check
- the vector to check against - null will return false.buf
- the buffer to compare data withindex
- the position (in terms of vectors, not floats) of the vector in the buffer to check against- Returns:
- true if the data is equivalent, otherwise false.
-
createIntBuffer
Generate a new IntBuffer using the given array of ints. The IntBuffer will be data.length long and contain the int data as data[0], data[1]... etc.- Parameters:
data
- array of ints to place into a new IntBuffer- Returns:
- a new direct, flipped IntBuffer, or null if data was null
-
getIntArray
Create a new int[] array and populate it with the given IntBuffer's contents.- Parameters:
buff
- the IntBuffer to read from- Returns:
- a new int array populated from the IntBuffer
-
getFloatArray
Create a new float[] array and populate it with the given FloatBuffer's contents.- Parameters:
buff
- the FloatBuffer to read from- Returns:
- a new float array populated from the FloatBuffer
-
createDoubleBuffer
Create a new DoubleBuffer of the specified size.- Parameters:
size
- required number of double to store.- Returns:
- the new DoubleBuffer
-
createDoubleBuffer
Create a new DoubleBuffer of an appropriate size to hold the specified number of doubles only if the given buffer if not already the right size.- Parameters:
buf
- the buffer to first check and rewindsize
- number of doubles that need to be held by the newly created buffer- Returns:
- the requested new DoubleBuffer
-
clone
Creates a new DoubleBuffer with the same contents as the given DoubleBuffer. The new DoubleBuffer is separate from the old one and changes are not reflected across. If you want to reflect changes, consider using Buffer.duplicate().- Parameters:
buf
- the DoubleBuffer to copy- Returns:
- the copy
-
createFloatBuffer
Create a new FloatBuffer of the specified size.- Parameters:
size
- required number of floats to store.- Returns:
- the new FloatBuffer
-
copyInternal
Copies floats from one position in the buffer to another.- Parameters:
buf
- the buffer to copy from/tofromPos
- the starting point to copy fromtoPos
- the starting point to copy tolength
- the number of floats to copy
-
clone
Creates a new FloatBuffer with the same contents as the given FloatBuffer. The new FloatBuffer is separate from the old one and changes are not reflected across. If you want to reflect changes, consider using Buffer.duplicate().- Parameters:
buf
- the FloatBuffer to copy- Returns:
- the copy
-
createIntBuffer
Create a new IntBuffer of the specified size.- Parameters:
size
- required number of ints to store.- Returns:
- the new IntBuffer
-
createIntBuffer
Create a new IntBuffer of an appropriate size to hold the specified number of ints only if the given buffer if not already the right size.- Parameters:
buf
- the buffer to first check and rewindsize
- number of ints that need to be held by the newly created buffer- Returns:
- the requested new IntBuffer
-
clone
Creates a new IntBuffer with the same contents as the given IntBuffer. The new IntBuffer is separate from the old one and changes are not reflected across. If you want to reflect changes, consider using Buffer.duplicate().- Parameters:
buf
- the IntBuffer to copy- Returns:
- the copy
-
createByteBuffer
Create a new ByteBuffer of the specified size.- Parameters:
size
- required number of ints to store.- Returns:
- the new IntBuffer
-
createByteBuffer
Create a new ByteBuffer of an appropriate size to hold the specified number of ints only if the given buffer if not already the right size.- Parameters:
buf
- the buffer to first check and rewindsize
- number of bytes that need to be held by the newly created buffer- Returns:
- the requested new IntBuffer
-
createByteBuffer
-
createByteBuffer
-
clone
Creates a new ByteBuffer with the same contents as the given ByteBuffer. The new ByteBuffer is separate from the old one and changes are not reflected across. If you want to reflect changes, consider using Buffer.duplicate().- Parameters:
buf
- the ByteBuffer to copy- Returns:
- the copy
-
createShortBuffer
Create a new ShortBuffer of the specified size.- Parameters:
size
- required number of shorts to store.- Returns:
- the new ShortBuffer
-
createShortBuffer
Create a new ShortBuffer of an appropriate size to hold the specified number of shorts only if the given buffer if not already the right size.- Parameters:
buf
- the buffer to first check and rewindsize
- number of shorts that need to be held by the newly created buffer- Returns:
- the requested new ShortBuffer
-
createShortBuffer
-
clone
Creates a new ShortBuffer with the same contents as the given ShortBuffer. The new ShortBuffer is separate from the old one and changes are not reflected across. If you want to reflect changes, consider using Buffer.duplicate().- Parameters:
buf
- the ShortBuffer to copy- Returns:
- the copy
-
ensureLargeEnough
Ensures there is at least therequired
number of entries left after the current position of the buffer. If the buffer is too small a larger one is created and the old one copied to the new buffer.- Parameters:
buffer
- buffer that should be checked/copied (may be null)required
- minimum number of elements that should be remaining in the returned buffer- Returns:
- a buffer large enough to receive at least the
required
number of entries, same position as the input buffer, not null
-
ensureLargeEnough
-
ensureLargeEnough
-
ensureLargeEnough
-
printCurrentDirectMemory
-
destroyDirectBuffer
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 cleans the direct buffers. However, as this doesn't happen immediately after discarding all references to a direct buffer, it's easy to OutOfMemoryError yourself using direct buffers.- Parameters:
toBeDestroyed
- the buffer to de-allocate (not null)
-