Package com.jme3.util

Class BufferUtils

java.lang.Object
com.jme3.util.BufferUtils

public final class BufferUtils extends Object
BufferUtils is a helper class for generating nio buffers from jME data classes such as Vectors and ColorRGBA.
  • 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

      public static Buffer clone(Buffer buf)
      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

      public static FloatBuffer createFloatBuffer(Vector3f... data)
      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

      public static FloatBuffer createFloatBuffer(Quaternion... data)
      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

      public static FloatBuffer createFloatBuffer(Vector4f... data)
      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

      public static FloatBuffer createFloatBuffer(ColorRGBA... data)
      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

      public static FloatBuffer createFloatBuffer(float... data)
      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

      public static FloatBuffer createVector3Buffer(int vertices)
      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

      public 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.
      Parameters:
      buf - the buffer to first check and rewind
      vertices - number of vertices that need to be held by the newly created buffer
      Returns:
      the requested new FloatBuffer
    • setInBuffer

      public static void setInBuffer(ColorRGBA color, FloatBuffer buf, int index)
      Sets the data contained in the given color into the FloatBuffer at the specified index.
      Parameters:
      color - the data to insert
      buf - the buffer to insert into
      index - the position to place the data; in terms of colors not floats
    • setInBuffer

      public static void setInBuffer(Quaternion quat, FloatBuffer buf, int index)
      Sets the data contained in the given quaternion into the FloatBuffer at the specified index.
      Parameters:
      quat - the Quaternion to insert
      buf - the buffer to insert into
      index - the position to place the data; in terms of quaternions not floats
    • setInBuffer

      public static void setInBuffer(Vector4f vec, FloatBuffer buf, int index)
      Sets the data contained in the given vector4 into the FloatBuffer at the specified index.
      Parameters:
      vec - the Vector4f to insert
      buf - the buffer to insert into
      index - the position to place the data; in terms of vector4 not floats
    • setInBuffer

      public static void setInBuffer(Vector3f vector, FloatBuffer buf, int index)
      Sets the data contained in the given Vector3F into the FloatBuffer at the specified index.
      Parameters:
      vector - the data to insert
      buf - the buffer to insert into
      index - the position to place the data; in terms of vectors not floats
    • populateFromBuffer

      public static void populateFromBuffer(Vector3f vector, FloatBuffer buf, int index)
      Updates the values of the given vector from the specified buffer at the index provided.
      Parameters:
      vector - the vector to set data on
      buf - the buffer to read from
      index - the position (in terms of vectors, not floats) to read from the buf
    • populateFromBuffer

      public static void populateFromBuffer(Vector4f vector, FloatBuffer buf, int index)
      Updates the values of the given vector from the specified buffer at the index provided.
      Parameters:
      vector - the vector to set data on
      buf - the buffer to read from
      index - the position (in terms of vectors, not floats) to read from the buf
    • getVector3Array

      public static Vector3f[] getVector3Array(FloatBuffer buff)
      Generates a Vector3f array from the given FloatBuffer.
      Parameters:
      buff - the FloatBuffer to read from
      Returns:
      a newly generated array of Vector3f objects
    • copyInternalVector3

      public static void copyInternalVector3(FloatBuffer buf, int fromPos, int toPos)
      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/to
      fromPos - the index of the vector to copy
      toPos - the index to copy the vector to
    • normalizeVector3

      public static void normalizeVector3(FloatBuffer buf, int index)
      Normalize a Vector3f in-buffer.
      Parameters:
      buf - the buffer to find the Vector3f within
      index - the position (in terms of vectors, not floats) of the vector to normalize
    • addInBuffer

      public static void addInBuffer(Vector3f toAdd, FloatBuffer buf, int index)
      Add to a Vector3f in-buffer.
      Parameters:
      toAdd - the vector to add from
      buf - the buffer to find the Vector3f within
      index - the position (in terms of vectors, not floats) of the vector to add to
    • multInBuffer

      public static void multInBuffer(Vector3f toMult, FloatBuffer buf, int index)
      Multiply and store a Vector3f in-buffer.
      Parameters:
      toMult - the vector to multiply against
      buf - the buffer to find the Vector3f within
      index - the position (in terms of vectors, not floats) of the vector to multiply
    • equals

      public 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.
      Parameters:
      check - the vector to check against - null will return false.
      buf - the buffer to compare data with
      index - 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

      public static FloatBuffer createFloatBuffer(Vector2f... data)
      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

      public static FloatBuffer createVector2Buffer(int vertices)
      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

      public 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.
      Parameters:
      buf - the buffer to first check and rewind
      vertices - number of vertices that need to be held by the newly created buffer
      Returns:
      the requested new FloatBuffer
    • setInBuffer

      public static void setInBuffer(Vector2f vector, FloatBuffer buf, int index)
      Sets the data contained in the given Vector2F into the FloatBuffer at the specified index.
      Parameters:
      vector - the data to insert
      buf - the buffer to insert into
      index - the position to place the data; in terms of vectors not floats
    • populateFromBuffer

      public static void populateFromBuffer(Vector2f vector, FloatBuffer buf, int index)
      Updates the values of the given vector from the specified buffer at the index provided.
      Parameters:
      vector - the vector to set data on
      buf - the buffer to read from
      index - the position (in terms of vectors, not floats) to read from the buf
    • getVector2Array

      public static Vector2f[] getVector2Array(FloatBuffer buff)
      Generates a Vector2f array from the given FloatBuffer.
      Parameters:
      buff - the FloatBuffer to read from
      Returns:
      a newly generated array of Vector2f objects
    • copyInternalVector2

      public static void copyInternalVector2(FloatBuffer buf, int fromPos, int toPos)
      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/to
      fromPos - the index of the vector to copy
      toPos - the index to copy the vector to
    • normalizeVector2

      public static void normalizeVector2(FloatBuffer buf, int index)
      Normalize a Vector2f in-buffer.
      Parameters:
      buf - the buffer to find the Vector2f within
      index - the position (in terms of vectors, not floats) of the vector to normalize
    • addInBuffer

      public static void addInBuffer(Vector2f toAdd, FloatBuffer buf, int index)
      Add to a Vector2f in-buffer.
      Parameters:
      toAdd - the vector to add from
      buf - the buffer to find the Vector2f within
      index - the position (in terms of vectors, not floats) of the vector to add to
    • multInBuffer

      public static void multInBuffer(Vector2f toMult, FloatBuffer buf, int index)
      Multiply and store a Vector2f in-buffer.
      Parameters:
      toMult - the vector to multiply against
      buf - the buffer to find the Vector2f within
      index - the position (in terms of vectors, not floats) of the vector to multiply
    • equals

      public 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.
      Parameters:
      check - the vector to check against - null will return false.
      buf - the buffer to compare data with
      index - 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

      public static IntBuffer createIntBuffer(int... data)
      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

      public static int[] getIntArray(IntBuffer buff)
      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

      public static float[] getFloatArray(FloatBuffer buff)
      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

      public static DoubleBuffer createDoubleBuffer(int size)
      Create a new DoubleBuffer of the specified size.
      Parameters:
      size - required number of double to store.
      Returns:
      the new DoubleBuffer
    • createDoubleBuffer

      public 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.
      Parameters:
      buf - the buffer to first check and rewind
      size - number of doubles that need to be held by the newly created buffer
      Returns:
      the requested new DoubleBuffer
    • clone

      public static DoubleBuffer clone(DoubleBuffer buf)
      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

      public static FloatBuffer createFloatBuffer(int size)
      Create a new FloatBuffer of the specified size.
      Parameters:
      size - required number of floats to store.
      Returns:
      the new FloatBuffer
    • copyInternal

      public static void copyInternal(FloatBuffer buf, int fromPos, int toPos, int length)
      Copies floats from one position in the buffer to another.
      Parameters:
      buf - the buffer to copy from/to
      fromPos - the starting point to copy from
      toPos - the starting point to copy to
      length - the number of floats to copy
    • clone

      public static FloatBuffer clone(FloatBuffer buf)
      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

      public static IntBuffer createIntBuffer(int size)
      Create a new IntBuffer of the specified size.
      Parameters:
      size - required number of ints to store.
      Returns:
      the new IntBuffer
    • createIntBuffer

      public 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.
      Parameters:
      buf - the buffer to first check and rewind
      size - number of ints that need to be held by the newly created buffer
      Returns:
      the requested new IntBuffer
    • clone

      public static IntBuffer clone(IntBuffer buf)
      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

      public static ByteBuffer createByteBuffer(int size)
      Create a new ByteBuffer of the specified size.
      Parameters:
      size - required number of ints to store.
      Returns:
      the new IntBuffer
    • createByteBuffer

      public 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.
      Parameters:
      buf - the buffer to first check and rewind
      size - number of bytes that need to be held by the newly created buffer
      Returns:
      the requested new IntBuffer
    • createByteBuffer

      public static ByteBuffer createByteBuffer(byte... data)
    • createByteBuffer

      public static ByteBuffer createByteBuffer(String data)
    • clone

      public static ByteBuffer clone(ByteBuffer buf)
      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

      public static ShortBuffer createShortBuffer(int size)
      Create a new ShortBuffer of the specified size.
      Parameters:
      size - required number of shorts to store.
      Returns:
      the new ShortBuffer
    • createShortBuffer

      public 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.
      Parameters:
      buf - the buffer to first check and rewind
      size - number of shorts that need to be held by the newly created buffer
      Returns:
      the requested new ShortBuffer
    • createShortBuffer

      public static ShortBuffer createShortBuffer(short... data)
    • clone

      public static ShortBuffer clone(ShortBuffer buf)
      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

      public static FloatBuffer ensureLargeEnough(FloatBuffer buffer, int required)
      Ensures there is at least the required 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

      public static IntBuffer ensureLargeEnough(IntBuffer buffer, int required)
    • ensureLargeEnough

      public static ShortBuffer ensureLargeEnough(ShortBuffer buffer, int required)
    • ensureLargeEnough

      public static ByteBuffer ensureLargeEnough(ByteBuffer buffer, int required)
    • printCurrentDirectMemory

      public static void printCurrentDirectMemory(StringBuilder store)
    • destroyDirectBuffer

      public static void destroyDirectBuffer(Buffer toBeDestroyed)
      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)