Class IntIndexBufferObject

java.lang.Object
gaiasky.util.gdx.mesh.IntIndexBufferObject
All Implemented Interfaces:
com.badlogic.gdx.utils.Disposable, IntIndexData

public class IntIndexBufferObject extends Object implements IntIndexData

This implementation uses 32-bit integer indices instead of 16-bit shorts

In IntIndexBufferObject wraps OpenGL's index buffer functionality to be used in conjunction with VBOs. This class can be seamlessly used with OpenGL ES 1.x and 2.0.

Uses indirect Buffers on Android 1.5/1.6 to fix GC invocation due to leaking PlatformAddress instances.

You can also use this to store indices for vertex arrays. Do not call bind() or unbind() in this case but rather use getBuffer() to use the buffer directly with glDrawElements. You must also create the IntIndexBufferObject with the second constructor and specify isDirect as true as glDrawElements in conjunction with vertex arrays needs direct buffers.

VertexBufferObjects must be disposed via the dispose() method when no longer needed

  • Constructor Summary

    Constructors
    Constructor
    Description
    IntIndexBufferObject​(boolean isStatic, int maxIndices)
    Creates a new IntIndexBufferObject.
    IntIndexBufferObject​(int maxIndices)
    Creates a new static IntIndexBufferObject to be used with vertex arrays.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Binds this IntIndexBufferObject for rendering with glDrawElements.
    void
    Disposes this IntIndexBufferObject and all its associated OpenGL resources.
    Returns the underlying IntBuffer.
    int
     
    int
     
    void
    Invalidates the IntIndexBufferObject so a new OpenGL buffer handle is created.
    void
    setIndices​(int[] indices, int offset, int count)
    Sets the indices of this IntIndexBufferObject, discarding the old indices.
    void
    setIndices​(IntBuffer indices)
    Copies the specified indices to the indices of this IntIndexBufferObject, discarding the old indices.
    void
    Unbinds this IntIndexBufferObject.
    void
    updateIndices​(int targetOffset, int[] indices, int offset, int count)
    Update (a portion of) the indices.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • IntIndexBufferObject

      public IntIndexBufferObject(int maxIndices)
      Creates a new static IntIndexBufferObject to be used with vertex arrays.
      Parameters:
      maxIndices - the maximum number of indices this buffer can hold
    • IntIndexBufferObject

      public IntIndexBufferObject(boolean isStatic, int maxIndices)
      Creates a new IntIndexBufferObject.
      Parameters:
      isStatic - whether the index buffer is static
      maxIndices - the maximum number of indices this buffer can hold
  • Method Details

    • getNumIndices

      public int getNumIndices()
      Specified by:
      getNumIndices in interface IntIndexData
      Returns:
      the number of indices currently stored in this buffer
    • getNumMaxIndices

      public int getNumMaxIndices()
      Specified by:
      getNumMaxIndices in interface IntIndexData
      Returns:
      the maximum number of indices this IntIndexBufferObject can store.
    • setIndices

      public void setIndices(int[] indices, int offset, int count)

      Sets the indices of this IntIndexBufferObject, discarding the old indices. The count must equal the number of indices to be copied to this IntIndexBufferObject.

      This can be called in between calls to bind() and unbind(). The index data will be updated instantly.

      Specified by:
      setIndices in interface IntIndexData
      Parameters:
      indices - the index data
      offset - the offset to start copying the data from
      count - the number of integers to copy
    • setIndices

      public void setIndices(IntBuffer indices)
      Description copied from interface: IntIndexData
      Copies the specified indices to the indices of this IntIndexBufferObject, discarding the old indices. Copying start at the current Buffer.position() of the specified buffer and copied the Buffer.remaining() amount of indices. This can be called in between calls to IntIndexData.bind() and IntIndexData.unbind(). The index data will be updated instantly.
      Specified by:
      setIndices in interface IntIndexData
      Parameters:
      indices - the index data to copy
    • updateIndices

      public void updateIndices(int targetOffset, int[] indices, int offset, int count)
      Description copied from interface: IntIndexData
      Update (a portion of) the indices.
      Specified by:
      updateIndices in interface IntIndexData
      Parameters:
      targetOffset - offset in indices buffer
      indices - the index data
      offset - the offset to start copying the data from
      count - the number of ints to copy
    • getBuffer

      public IntBuffer getBuffer()

      Returns the underlying IntBuffer. If you modify the buffer contents they wil be uploaded on the call to bind(). If you need immediate uploading use setIndices(int[], int, int).

      Specified by:
      getBuffer in interface IntIndexData
      Returns:
      the underlying int buffer.
    • bind

      public void bind()
      Binds this IntIndexBufferObject for rendering with glDrawElements.
      Specified by:
      bind in interface IntIndexData
    • unbind

      public void unbind()
      Unbinds this IntIndexBufferObject.
      Specified by:
      unbind in interface IntIndexData
    • invalidate

      public void invalidate()
      Invalidates the IntIndexBufferObject so a new OpenGL buffer handle is created. Use this in case of a context loss.
      Specified by:
      invalidate in interface IntIndexData
    • dispose

      public void dispose()
      Disposes this IntIndexBufferObject and all its associated OpenGL resources.
      Specified by:
      dispose in interface com.badlogic.gdx.utils.Disposable
      Specified by:
      dispose in interface IntIndexData