summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2012-10-12 14:56:20 +0200
committerSven Gothel <[email protected]>2012-10-12 14:56:20 +0200
commitf49f8e22953ed2426fd4264ee407e2dc3fc07cfc (patch)
treea1a646e638b02c6c0c7a3778d3bb2f8728c7f8e9
parent8582ece7dc7f65271b3184261697a542766d9864 (diff)
GLArrayData* VBO binding: Adding explicit bindBuffer(..) method, since VBO is not more bound after enableBuffer(); Fix unit test (test VBO bound).
Explicit bindBuffer(..) is required now, since enableBuffer() doesn't leave it bound. See fixed VBORegion* patch for use case, i.e. using a VBO index buffer for glDrawElements(). Complets commit 8582ece7dc7f65271b3184261697a542766d9864.
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/GLArrayDataClient.java8
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/GLArrayDataEditable.java21
-rw-r--r--src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java8
-rw-r--r--src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java6
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java8
5 files changed, 39 insertions, 12 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataClient.java b/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataClient.java
index 5a1524d05..30fc0012b 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataClient.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataClient.java
@@ -171,7 +171,13 @@ public class GLArrayDataClient extends GLArrayDataWrapper implements GLArrayData
bufferEnabled = enable;
}
}
-
+
+ public void bindBuffer(GL gl, boolean bind) {
+ if(isVBO()) {
+ gl.glBindBuffer(getVBOTarget(), bind ? getVBOName() : 0);
+ }
+ }
+
public void setEnableAlways(boolean always) {
enableBufferAlways = always;
}
diff --git a/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataEditable.java b/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataEditable.java
index bb22a4b7e..588e90d1e 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataEditable.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/GLArrayDataEditable.java
@@ -45,9 +45,15 @@ public interface GLArrayDataEditable extends GLArrayData {
public void seal(GL gl, boolean seal);
/**
- * <p>Enables/disables the buffer,
- * sets the client state, binds the VBO if used
- * and transfers the data if necessary.</p>
+ * <p>
+ * Enables the buffer if <code>enable</code> is <code>true</code>,
+ * and transfers the data if required.
+ * In case {@link #isVBO() VBO is used}, it is bound accordingly for the data transfer and data association.
+ * The VBO buffer is unbound when the method returns.
+ * </p>
+ * <p>
+ * Disables the buffer if <code>enable</code> is <code>false</code>.
+ * </p>
*
* <p>The action will only be executed,
* if the internal enable state differs,
@@ -61,6 +67,15 @@ public interface GLArrayDataEditable extends GLArrayData {
* @see #setEnableAlways(boolean)
*/
public void enableBuffer(GL gl, boolean enable);
+
+ /**
+ * In case {@link #isVBO() VBO is used}, the buffer is bound
+ * if <code>bind</code> is <code>true</code>, otherwise the buffer is unbound.
+ *
+ * @param gl
+ * @param bind
+ */
+ public void bindBuffer(GL gl, boolean bind);
/**
* Affects the behavior of 'enableBuffer'.
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java
index aabef29b0..765b94855 100644
--- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java
@@ -223,7 +223,9 @@ public class VBORegion2PES2 extends GLRegion {
texCoordFboAttr.enableBuffer(gl, true);
indicesFbo.enableBuffer(gl, true);
- gl.glDrawElements(GL2ES2.GL_TRIANGLES, indicesFbo.getElementCount() * indicesFbo.getComponentCount(), GL2ES2.GL_UNSIGNED_SHORT, 0);
+ indicesFbo.bindBuffer(gl, true);
+ gl.glDrawElements(GL2ES2.GL_TRIANGLES, indicesFbo.getElementCount() * indicesFbo.getComponentCount(), GL2ES2.GL_UNSIGNED_SHORT, 0);
+ indicesFbo.bindBuffer(gl, false);
verticeFboAttr.enableBuffer(gl, false);
texCoordFboAttr.enableBuffer(gl, false);
@@ -289,7 +291,9 @@ public class VBORegion2PES2 extends GLRegion {
texCoordTxtAttr.enableBuffer(gl, true);
indicesTxt.enableBuffer(gl, true);
- gl.glDrawElements(GL2ES2.GL_TRIANGLES, indicesTxt.getElementCount() * indicesTxt.getComponentCount(), GL2ES2.GL_UNSIGNED_SHORT, 0);
+ indicesTxt.bindBuffer(gl, true);
+ gl.glDrawElements(GL2ES2.GL_TRIANGLES, indicesTxt.getElementCount() * indicesTxt.getComponentCount(), GL2ES2.GL_UNSIGNED_SHORT, 0);
+ indicesTxt.bindBuffer(gl, false);
verticeTxtAttr.enableBuffer(gl, false);
texCoordTxtAttr.enableBuffer(gl, false);
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
index 14ff0380f..7f3e937e1 100644
--- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
@@ -129,8 +129,10 @@ public class VBORegionSPES2 extends GLRegion {
verticeAttr.enableBuffer(gl, true);
texCoordAttr.enableBuffer(gl, true);
indices.enableBuffer(gl, true);
-
- gl.glDrawElements(GL2ES2.GL_TRIANGLES, indices.getElementCount() * indices.getComponentCount(), GL2ES2.GL_UNSIGNED_SHORT, 0);
+
+ indices.bindBuffer(gl, true);
+ gl.glDrawElements(GL2ES2.GL_TRIANGLES, indices.getElementCount() * indices.getComponentCount(), GL2ES2.GL_UNSIGNED_SHORT, 0);
+ indices.bindBuffer(gl, false);
verticeAttr.enableBuffer(gl, false);
texCoordAttr.enableBuffer(gl, false);
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java b/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java
index 297cbbb90..c2285ba25 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java
@@ -132,7 +132,7 @@ public class GLSLMiscHelper {
Assert.assertTrue(vertices0.sealed());
Assert.assertEquals(4, vertices0.getElementCount());
Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError());
- Assert.assertEquals(vertices0.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER));
+ Assert.assertEquals(0, gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); // should be cleared ASAP
validateGLArrayDataServerState(gl, vertices0);
return vertices0;
}
@@ -152,7 +152,7 @@ public class GLSLMiscHelper {
Assert.assertTrue(vertices1.sealed());
Assert.assertEquals(4, vertices1.getElementCount());
Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError());
- Assert.assertEquals(vertices1.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER));
+ Assert.assertEquals(0, gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); // should be cleared ASAP
validateGLArrayDataServerState(gl, vertices1);
return vertices1;
}
@@ -173,7 +173,7 @@ public class GLSLMiscHelper {
Assert.assertTrue(colors0.isVBOWritten());
Assert.assertTrue(colors0.sealed());
Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError());
- Assert.assertEquals(colors0.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER));
+ Assert.assertEquals(0, gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); // should be cleared ASAP
validateGLArrayDataServerState(gl, colors0);
return colors0;
}
@@ -191,7 +191,7 @@ public class GLSLMiscHelper {
Assert.assertTrue(colors1.isVBOWritten());
Assert.assertTrue(colors1.sealed());
Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError());
- Assert.assertEquals(colors1.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER));
+ Assert.assertEquals(0, gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); // should be cleared ASAP
validateGLArrayDataServerState(gl, colors1);
return colors1;
}