com.jogamp.opengl.util

## Class GLArrayDataClient

- java.lang.Object
- - com.jogamp.opengl.util.GLArrayDataWrapper
  - - com.jogamp.opengl.util.GLArrayDataClient

- All Implemented Interfaces:
    GLArrayDataEditable, GLArrayData
  Direct Known Subclasses:
    GLArrayDataServer

      public class GLArrayDataClient
      extends GLArrayDataWrapper
      implements GLArrayDataEditable

- - ### Field Summary

    - ### Fields inherited from class com.jogamp.opengl.util.GLArrayDataWrapper

      `DEBUG`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `GLArrayDataClient(GLArrayDataClient src)` Copy Constructor

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `associate(Object obj, boolean enable)` Implementation and type dependent object association.
    `boolean` | `bindBuffer(GL gl, boolean bind)` if `bind` is true and the data uses `VBO`, the latter will be bound and data written to the GPU if required.
    `static GLArrayDataClient` | `createFixed(int index, int comps, int dataType, boolean normalized, int initialElementCount)` 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.
    `static GLArrayDataClient` | `createFixed(int index, int comps, int dataType, boolean normalized, int stride, Buffer buffer)` 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.
    `static GLArrayDataClient` | `createGLSL(String name, int comps, int dataType, boolean normalized, int initialElementCount)` Create a client side buffer object, using a custom GLSL array attribute name and starting with a new created Buffer object with initialElementCount size
    `static GLArrayDataClient` | `createGLSL(String name, int comps, int dataType, boolean normalized, int stride, Buffer buffer)` Create a client side buffer object, using a custom GLSL array attribute name and starting with a given Buffer object incl it's stride
    `void` | `destroy(GL gl)`
    `void` | `enableBuffer(GL gl, boolean enable)` Enables the buffer if `enable` is `true`, and transfers the data if required.
    `boolean` | `enabled()`
    `boolean` | `isVBOWritten()` Is the buffer written to the VBO ?
    `void` | `padding(int doneInByteSize)`
    `void` | `put(Buffer v)` Generic buffer relative put method.
    `void` | `putb(byte v)`
    `void` | `putf(float v)`
    `void` | `puti(int v)`
    `void` | `puts(short v)`
    `void` | `putx(int v)`
    `void` | `reset()`
    `void` | `reset(GL gl)`
    `void` | `rewind()`
    `void` | `seal(boolean seal)` If seal is true, it disables write operations to the buffer.
    `void` | `seal(GL gl, boolean seal)` Convenience method calling `GLArrayDataEditable.seal(boolean)` and `GLArrayDataEditable.enableBuffer(GL, boolean)`.
    `boolean` | `sealed()`
    `void` | `setEnableAlways(boolean always)` Affects the behavior of 'enableBuffer'.
    `void` | `setVBOWritten(boolean written)` Marks the buffer written to the VBO
    `String` | `toString()`

    - ### Methods inherited from class com.jogamp.opengl.util.GLArrayDataWrapper

      `createFixed, createFixed, createGLSL, createGLSL, getBuffer, getBufferClass, getBufferClass, getComponentCount, getComponentSizeInBytes, getComponentType, getElementCount, getIndex, getLocation, getName, getNormalized, getSizeInBytes, getStride, getVBOName, getVBOOffset, getVBOTarget, getVBOUsage, isVBO, isVertexAttribute, setLocation, setLocation, setLocation, setName, setVBOEnabled, setVBOName, setVBOTarget, setVBOUsage, validate`

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface javax.media.opengl.GLArrayData

      `getBuffer, getComponentCount, getComponentSizeInBytes, getComponentType, getElementCount, getIndex, getLocation, getName, getNormalized, getSizeInBytes, getStride, getVBOName, getVBOOffset, getVBOTarget, getVBOUsage, isVBO, isVertexAttribute, setLocation, setLocation, setLocation, setName`

- - ### Constructor Detail

    - #### 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 Detail

    - #### 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:
        `javax.media.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:
        `javax.media.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 `GLArrayDataEditable`
      Specified by:
        `destroy` in interface `GLArrayData`
      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`
      Convenience method calling `GLArrayDataEditable.seal(boolean)` and `GLArrayDataEditable.enableBuffer(GL, boolean)`.
      Specified by:
        `seal` in interface `GLArrayDataEditable`
      See Also:
        `GLArrayDataEditable.seal(boolean)`, `GLArrayDataEditable.enableBuffer(GL, boolean)`

    - #### 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:
        `GLArrayDataEditable.setEnableAlways(boolean)`

    - #### 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:
        `GLArrayDataEditable.enableBuffer(GL, boolean)`

    - #### 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:
        `GLArrayDataEditable.seal(boolean)`

    - #### 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`

Copyright 2010 JogAmp Community.