Class GLArrayDataClient

java.lang.Object
com.jogamp.opengl.util.GLArrayDataWrapper
com.jogamp.opengl.util.GLArrayDataClient
All Implemented Interfaces:
GLArrayData, GLArrayDataEditable
Direct Known Subclasses:
GLArrayDataServer

public class GLArrayDataClient extends GLArrayDataWrapper implements GLArrayDataEditable
  • Constructor Details

    • GLArrayDataClient

      public GLArrayDataClient(GLArrayDataClient src)
      Copy Constructor

      Buffer is sliced, i.e. sharing content but using own state.

      All other values are simply copied.

  • Method Details

    • createFixed

      public static GLArrayDataClient createFixed(int index, int comps, int dataType, boolean normalized, int initialElementCount) throws GLException
      Create a client side buffer object, using a predefined fixed function array index and starting with a new created Buffer object with initialElementCount size On profiles GL2 and ES1 the fixed function pipeline behavior is as expected. On profile ES2 the fixed function emulation will transform these calls to EnableVertexAttribArray and VertexAttribPointer calls, and a predefined vertex attribute variable name will be chosen. The default name mapping will be used, see GLPointerFuncUtil.getPredefinedArrayIndexName(int).
      Parameters:
      index - The GL array index
      comps - The array component number
      dataType - The array index GL data type
      normalized - Whether the data shall be normalized
      initialElementCount -
      Throws:
      GLException
      See Also:
      • com.jogamp.opengl.GLContext#getPredefinedArrayIndexName(int)
    • createFixed

      public static GLArrayDataClient createFixed(int index, int comps, int dataType, boolean normalized, int stride, Buffer buffer) throws GLException
      Create a client side buffer object, using a predefined fixed function array index and starting with a given Buffer object incl it's stride On profiles GL2 and ES1 the fixed function pipeline behavior is as expected. On profile ES2 the fixed function emulation will transform these calls to EnableVertexAttribArray and VertexAttribPointer calls, and a predefined vertex attribute variable name will be chosen. The default name mapping will be used, see GLPointerFuncUtil.getPredefinedArrayIndexName(int).
      Parameters:
      index - The GL array index
      comps - The array component number
      dataType - The array index GL data type
      normalized - Whether the data shall be normalized
      stride -
      buffer - the user define data
      Throws:
      GLException
      See Also:
      • com.jogamp.opengl.GLContext#getPredefinedArrayIndexName(int)
    • createGLSL

      public static GLArrayDataClient createGLSL(String name, int comps, int dataType, boolean normalized, int initialElementCount) throws GLException
      Create a client side buffer object, using a custom GLSL array attribute name and starting with a new created Buffer object with initialElementCount size
      Parameters:
      name - The custom name for the GL attribute.
      comps - The array component number
      dataType - The array index GL data type
      normalized - Whether the data shall be normalized
      initialElementCount -
      Throws:
      GLException
    • createGLSL

      public static GLArrayDataClient createGLSL(String name, int comps, int dataType, boolean normalized, int stride, Buffer buffer) throws GLException
      Create a client side buffer object, using a custom GLSL array attribute name and starting with a given Buffer object incl it's stride
      Parameters:
      name - The custom name for the GL attribute.
      comps - The array component number
      dataType - The array index GL data type
      normalized - Whether the data shall be normalized
      stride -
      buffer - the user define data
      Throws:
      GLException
    • associate

      public void associate(Object obj, boolean enable)
      Description copied from interface: GLArrayData
      Implementation and type dependent object association.

      One currently known use case is to associate a ShaderState to an GLSL aware vertex attribute object, allowing to use the ShaderState to handle it's data persistence, location and state change.
      This is implicitly done via shaderState.ownAttribute(GLArrayData, boolean).

      Specified by:
      associate in interface GLArrayData
      Overrides:
      associate in class GLArrayDataWrapper
      Parameters:
      obj - implementation and type dependent association
      enable - pass true to enable the association and false to disable it.
    • isVBOWritten

      public final boolean isVBOWritten()
      Description copied from interface: GLArrayDataEditable
      Is the buffer written to the VBO ?
      Specified by:
      isVBOWritten in interface GLArrayDataEditable
    • sealed

      public final boolean sealed()
      Specified by:
      sealed in interface GLArrayDataEditable
    • enabled

      public final boolean enabled()
      Specified by:
      enabled in interface GLArrayDataEditable
    • setVBOWritten

      public final void setVBOWritten(boolean written)
      Description copied from interface: GLArrayDataEditable
      Marks the buffer written to the VBO
      Specified by:
      setVBOWritten in interface GLArrayDataEditable
    • destroy

      public void destroy(GL gl)
      Specified by:
      destroy in interface GLArrayData
      Specified by:
      destroy in interface GLArrayDataEditable
      Overrides:
      destroy in class GLArrayDataWrapper
    • reset

      public void reset(GL gl)
      Specified by:
      reset in interface GLArrayDataEditable
    • seal

      public void seal(GL gl, boolean seal)
      Description copied from interface: GLArrayDataEditable
      Specified by:
      seal in interface GLArrayDataEditable
      See Also:
    • enableBuffer

      public void enableBuffer(GL gl, boolean enable)
      Description copied from interface: GLArrayDataEditable
      Enables the buffer if enable is true, and transfers the data if required. In case VBO is used, it is bound accordingly for the data transfer and association, i.e. it issued GLArrayDataEditable.bindBuffer(GL, boolean). The VBO buffer is unbound when the method returns.

      Disables the buffer if enable is false.

      The action will only be executed, if the internal enable state differs, or 'setEnableAlways' was called with 'true'.

      It is up to the user to enable/disable the array properly, ie in case of multiple data sets for the same vertex attribute (VA). Meaning in such case usage of one set while expecting another one to be used for the same VA implies decorating each usage with enable/disable.

      Specified by:
      enableBuffer in interface GLArrayDataEditable
      See Also:
    • bindBuffer

      public boolean bindBuffer(GL gl, boolean bind)
      Description copied from interface: GLArrayDataEditable
      if bind is true and the data uses VBO, the latter will be bound and data written to the GPU if required.

      If bind is false and the data uses VBO, the latter will be unbound.

      This method is exposed to allow data VBO arrays, i.e. GL.GL_ELEMENT_ARRAY_BUFFER, to be bounded and written while keeping the VBO bound. The latter is in contrast to GLArrayDataEditable.enableBuffer(GL, boolean), which leaves the VBO unbound, since it's not required for vertex attributes or pointers.

      Specified by:
      bindBuffer in interface GLArrayDataEditable
      Parameters:
      gl - current GL object
      bind - true if VBO shall be bound and data written, otherwise clear VBO binding.
      Returns:
      true if data uses VBO and action was performed, otherwise false
    • setEnableAlways

      public void setEnableAlways(boolean always)
      Description copied from interface: GLArrayDataEditable
      Affects the behavior of 'enableBuffer'. The default is 'false' This is useful when you mix up GLArrayData usage with conventional GL array calls or in case of a buggy GL VBO implementation.
      Specified by:
      setEnableAlways in interface GLArrayDataEditable
      See Also:
    • reset

      public void reset()
      Specified by:
      reset in interface GLArrayDataEditable
    • seal

      public void seal(boolean seal)
      Description copied from interface: GLArrayDataEditable

      If seal is true, it disables write operations to the buffer. Calls flip, ie limit:=position and position:=0.

      If seal is false, it enable write operations continuing at the buffer position, where you left off at seal(true), ie position:=limit and limit:=capacity.

      Specified by:
      seal in interface GLArrayDataEditable
      See Also:
    • rewind

      public void rewind()
      Specified by:
      rewind in interface GLArrayDataEditable
    • padding

      public void padding(int doneInByteSize)
      Specified by:
      padding in interface GLArrayDataEditable
    • put

      public void put(Buffer v)
      Generic buffer relative put method. This class buffer Class must match the arguments buffer class. The arguments remaining elements must be a multiple of this arrays element stride.
      Specified by:
      put in interface GLArrayDataEditable
    • putb

      public void putb(byte v)
      Specified by:
      putb in interface GLArrayDataEditable
    • puts

      public void puts(short v)
      Specified by:
      puts in interface GLArrayDataEditable
    • puti

      public void puti(int v)
      Specified by:
      puti in interface GLArrayDataEditable
    • putx

      public void putx(int v)
      Specified by:
      putx in interface GLArrayDataEditable
    • putf

      public void putf(float v)
      Specified by:
      putf in interface GLArrayDataEditable
    • toString

      public String toString()
      Specified by:
      toString in interface GLArrayData
      Overrides:
      toString in class GLArrayDataWrapper