aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataWrapper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/util/GLArrayDataWrapper.java')
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/GLArrayDataWrapper.java154
1 files changed, 83 insertions, 71 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataWrapper.java b/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataWrapper.java
index 3f759c6d8..ae19d788f 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataWrapper.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataWrapper.java
@@ -28,6 +28,7 @@
package com.jogamp.opengl.util;
+import java.io.PrintStream;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
@@ -35,7 +36,6 @@ import java.nio.IntBuffer;
import java.nio.ShortBuffer;
import com.jogamp.opengl.GL;
-import com.jogamp.opengl.GL2ES1;
import com.jogamp.opengl.GL2ES2;
import com.jogamp.opengl.GLArrayData;
import com.jogamp.opengl.GLException;
@@ -70,10 +70,8 @@ public class GLArrayDataWrapper implements GLArrayData {
final Buffer buffer, final int vboName, final long vboOffset, final int vboUsage, final int vboTarget)
throws GLException
{
- final GLArrayDataWrapper adc = new GLArrayDataWrapper();
- adc.init(null, index, comps, dataType, normalized, stride, buffer, 0 /* mappedElementCount */,
- false, vboName, vboOffset, vboUsage, vboTarget);
- return adc;
+ return new GLArrayDataWrapper(null, index, comps, dataType, normalized, stride, buffer, 0 /* mappedElementCount */,
+ false, vboName, vboOffset, vboUsage, vboTarget);
}
/**
@@ -97,10 +95,8 @@ public class GLArrayDataWrapper implements GLArrayData {
final int mappedElementCount, final int vboName, final long vboOffset, final int vboUsage, final int vboTarget)
throws GLException
{
- final GLArrayDataWrapper adc = new GLArrayDataWrapper();
- adc.init(null, index, comps, dataType, normalized, stride, null, mappedElementCount,
- false, vboName, vboOffset, vboUsage, vboTarget);
- return adc;
+ return new GLArrayDataWrapper(null, index, comps, dataType, normalized, stride, null, mappedElementCount,
+ false, vboName, vboOffset, vboUsage, vboTarget);
}
/**
@@ -123,10 +119,8 @@ public class GLArrayDataWrapper implements GLArrayData {
final Buffer buffer, final int vboName, final long vboOffset, final int vboUsage, final int vboTarget)
throws GLException
{
- final GLArrayDataWrapper adc = new GLArrayDataWrapper();
- adc.init(name, -1, comps, dataType, normalized, stride, buffer, 0 /* mappedElementCount */,
- true, vboName, vboOffset, vboUsage, vboTarget);
- return adc;
+ return new GLArrayDataWrapper(name, -1, comps, dataType, normalized, stride, buffer, 0 /* mappedElementCount */,
+ true, vboName, vboOffset, vboUsage, vboTarget);
}
/**
@@ -149,10 +143,8 @@ public class GLArrayDataWrapper implements GLArrayData {
final int mappedElementCount, final int vboName, final long vboOffset, final int vboUsage, final int vboTarget)
throws GLException
{
- final GLArrayDataWrapper adc = new GLArrayDataWrapper();
- adc.init(name, -1, comps, dataType, normalized, stride, null, mappedElementCount,
- true, vboName, vboOffset, vboUsage, vboTarget);
- return adc;
+ return new GLArrayDataWrapper(name, -1, comps, dataType, normalized, stride, null, mappedElementCount,
+ true, vboName, vboOffset, vboUsage, vboTarget);
}
/**
@@ -176,7 +168,7 @@ public class GLArrayDataWrapper implements GLArrayData {
}
return false;
}
- return glp.isValidArrayDataType(getIndex(), getComponentCount(), getComponentType(), isVertexAttribute(), throwException);
+ return glp.isValidArrayDataType(getIndex(), getCompsPerElem(), getCompType(), isVertexAttribute(), throwException);
}
@Override
@@ -235,21 +227,21 @@ public class GLArrayDataWrapper implements GLArrayData {
public Buffer getBuffer() { return buffer; }
@Override
- public final int getComponentCount() { return componentsPerElement; }
+ public final int getCompsPerElem() { return componentsPerElement; }
@Override
- public final int getComponentType() { return componentType; }
+ public final int getCompType() { return componentType; }
@Override
- public final int getComponentSizeInBytes() { return componentByteSize; }
+ public final int getBytesPerComp() { return bytesPerComponent; }
@Override
- public final int getElementCount() {
+ public final int getElemCount() {
if( 0 != mappedElementCount ) {
return mappedElementCount;
} else if( null != buffer ) {
final int remainingComponents = ( 0 == buffer.position() ) ? buffer.limit() : buffer.position();
- return ( remainingComponents * componentByteSize ) / strideB ;
+ return ( remainingComponents * bytesPerComponent ) / strideB ;
} else {
return 0;
}
@@ -258,15 +250,29 @@ public class GLArrayDataWrapper implements GLArrayData {
@Override
public final int getSizeInBytes() {
if( 0 != mappedElementCount ) {
- return mappedElementCount * componentsPerElement * componentByteSize ;
+ return mappedElementCount * componentsPerElement * bytesPerComponent ;
} else if( null != buffer ) {
- return ( buffer.position()==0 ) ? ( buffer.limit() * componentByteSize ) : ( buffer.position() * componentByteSize ) ;
+ return ( buffer.position()==0 ) ? ( buffer.limit() * bytesPerComponent ) : ( buffer.position() * bytesPerComponent ) ;
} else {
return 0;
}
}
@Override
+ public int getCapacityInBytes() {
+ if( null != buffer ) {
+ return buffer.capacity() * bytesPerComponent;
+ } else {
+ return 0;
+ }
+ }
+
+ @Override
+ public void printStats(final PrintStream out) {
+ out.printf("elements %,d, bytes %,d / %,d", getElemCount(), getSizeInBytes(), getCapacityInBytes());
+ }
+
+ @Override
public final boolean getNormalized() { return normalized; }
@Override
@@ -291,7 +297,7 @@ public class GLArrayDataWrapper implements GLArrayData {
", isVertexAttribute "+isVertexAttribute+
", dataType 0x"+Integer.toHexString(componentType)+
", bufferClazz "+componentClazz+
- ", elements "+getElementCount()+
+ ", elements "+getElemCount()+
", components "+componentsPerElement+
", stride "+strideB+"b "+strideL+"c"+
", mappedElementCount "+mappedElementCount+
@@ -364,17 +370,14 @@ public class GLArrayDataWrapper implements GLArrayData {
this.vboTarget = vboTarget;
}
- protected void init(final String name, final int index, final int componentsPerElement, final int componentType,
- final boolean normalized, final int stride, final Buffer data, final int mappedElementCount,
- final boolean isVertexAttribute, final int vboName, final long vboOffset, final int vboUsage, final int vboTarget)
+ protected GLArrayDataWrapper(final String name, final int index, final int componentsPerElement, final int componentType,
+ final boolean normalized, final int stride, final Buffer data, final int mappedElementCount,
+ final boolean isVertexAttribute, final int vboName, final long vboOffset, final int vboUsage, final int vboTarget)
throws GLException
{
if( 0<mappedElementCount && null != data ) {
throw new IllegalArgumentException("mappedElementCount:="+mappedElementCount+" specified, but passing non null buffer");
}
- this.isVertexAttribute = isVertexAttribute;
- this.index = index;
- this.location = -1;
// We can't have any dependence on the FixedFuncUtil class here for build bootstrapping reasons
if( GL.GL_ELEMENT_ARRAY_BUFFER == vboTarget ) {
@@ -389,15 +392,11 @@ public class GLArrayDataWrapper implements GLArrayData {
throw new GLException("Invalid GPUBuffer target: 0x"+Integer.toHexString(vboTarget));
}
+ // immutable types
this.componentType = componentType;
componentClazz = getBufferClass(componentType);
- if( GLBuffers.isGLTypeFixedPoint(componentType) ) {
- this.normalized = normalized;
- } else {
- this.normalized = false;
- }
- componentByteSize = GLBuffers.sizeOfGLType(componentType);
- if(0 > componentByteSize) {
+ bytesPerComponent = GLBuffers.sizeOfGLType(componentType);
+ if(0 > bytesPerComponent) {
throw new GLException("Given componentType not supported: "+componentType+":\n\t"+this);
}
if(0 >= componentsPerElement) {
@@ -405,19 +404,30 @@ public class GLArrayDataWrapper implements GLArrayData {
}
this.componentsPerElement = componentsPerElement;
- if(0<stride && stride<componentsPerElement*componentByteSize) {
- throw new GLException("stride ("+stride+") lower than component bytes, "+componentsPerElement+" * "+componentByteSize);
+ if(0<stride && stride<componentsPerElement*bytesPerComponent) {
+ throw new GLException("stride ("+stride+") lower than component bytes, "+componentsPerElement+" * "+bytesPerComponent);
}
- if(0<stride && stride%componentByteSize!=0) {
- throw new GLException("stride ("+stride+") not a multiple of bpc "+componentByteSize);
+ if(0<stride && stride%bytesPerComponent!=0) {
+ throw new GLException("stride ("+stride+") not a multiple of bpc "+bytesPerComponent);
+ }
+ this.strideB=(0==stride)?componentsPerElement*bytesPerComponent:stride;
+ this.strideL=strideB/bytesPerComponent;
+
+ if( GLBuffers.isGLTypeFixedPoint(componentType) ) {
+ this.normalized = normalized;
+ } else {
+ this.normalized = false;
}
- this.buffer = data;
this.mappedElementCount = mappedElementCount;
- this.strideB=(0==stride)?componentsPerElement*componentByteSize:stride;
- this.strideL=strideB/componentByteSize;
+ this.isVertexAttribute = isVertexAttribute;
+
+ // mutable types
+ this.index = index;
+ this.location = -1;
+ this.buffer = data;
this.vboName= vboName;
- this.vboEnabled= 0 != vboName ;
this.vboOffset=vboOffset;
+ this.vboEnabled= 0 != vboName ;
switch(vboUsage) {
case 0: // nop
@@ -441,8 +451,6 @@ public class GLArrayDataWrapper implements GLArrayData {
this.alive=true;
}
- protected GLArrayDataWrapper() { }
-
/**
* Copy Constructor
* <p>
@@ -453,17 +461,22 @@ public class GLArrayDataWrapper implements GLArrayData {
* </p>
*/
public GLArrayDataWrapper(final GLArrayDataWrapper src) {
- this.alive = src.alive;
- this.index = src.index;
- this.location = src.location;
- this.name = src.name;
- this.componentsPerElement = src.componentsPerElement;
+ // immutable types
this.componentType = src.componentType;
this.componentClazz = src.componentClazz;
- this.componentByteSize = src.componentByteSize;
- this.normalized = src.normalized;
+ this.bytesPerComponent = src.bytesPerComponent;
+ this.componentsPerElement = src.componentsPerElement;
this.strideB = src.strideB;
this.strideL = src.strideL;
+ this.normalized = src.normalized;
+ this.mappedElementCount = src.mappedElementCount;
+ this.isVertexAttribute = src.isVertexAttribute;
+
+ // mutable types
+ this.alive = src.alive;
+ this.index = src.index;
+ this.location = src.location;
+ this.name = src.name;
if( null != src.buffer ) {
if( src.buffer.position() == 0 ) {
this.buffer = Buffers.slice(src.buffer);
@@ -473,33 +486,32 @@ public class GLArrayDataWrapper implements GLArrayData {
} else {
this.buffer = null;
}
- this.mappedElementCount = src.mappedElementCount;
- this.isVertexAttribute = src.isVertexAttribute;
- this.vboOffset = src.vboOffset;
this.vboName = src.vboName;
+ this.vboOffset = src.vboOffset;
this.vboEnabled = src.vboEnabled;
this.vboUsage = src.vboUsage;
this.vboTarget = src.vboTarget;
}
+ protected final int componentType;
+ protected final Class<?> componentClazz;
+ protected final int bytesPerComponent;
+ protected final int componentsPerElement;
+ /** stride in bytes; strideB >= componentsPerElement * componentByteSize */
+ protected final int strideB;
+ /** stride in logical components */
+ protected final int strideL;
+ protected final boolean normalized;
+ protected final int mappedElementCount;
+ protected final boolean isVertexAttribute;
+
protected boolean alive;
protected int index;
protected int location;
protected String name;
- protected int componentsPerElement;
- protected int componentType;
- protected Class<?> componentClazz;
- protected int componentByteSize;
- protected boolean normalized;
- /** stride in bytes; strideB >= componentsPerElement * componentByteSize */
- protected int strideB;
- /** stride in logical components */
- protected int strideL;
protected Buffer buffer;
- protected int mappedElementCount;
- protected boolean isVertexAttribute;
- protected long vboOffset;
protected int vboName;
+ protected long vboOffset;
protected boolean vboEnabled;
protected int vboUsage;
protected int vboTarget;