diff options
author | Sven Gothel <[email protected]> | 2012-10-10 17:37:38 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-10-10 17:37:38 +0200 |
commit | 8582ece7dc7f65271b3184261697a542766d9864 (patch) | |
tree | ceac339e2c0282419aa2bbc9c4ec222eca9d084e /src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerInterleaved.java | |
parent | fb3795504f7b05000651a9ea558dbb1b2a3b16f5 (diff) |
Simplify GLArrayHandler and reduce VBO sideffects
VBO: Always unbind VBO ASAP after data transfer (glBufferData())
and assignment (glVertexPointer(..), glVertexAttribPointer()).
It's a bug to leave it bound .. due to redundancy
and other calls which could have change the VBO binding.
Removed syncData(..), now it's only issued at enable
and hence migrated into the enable method.
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerInterleaved.java')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerInterleaved.java | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerInterleaved.java b/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerInterleaved.java index f50429623..6c80e31fa 100644 --- a/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerInterleaved.java +++ b/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerInterleaved.java @@ -61,18 +61,18 @@ public class GLSLArrayHandlerInterleaved implements GLArrayHandler { subArrays.add(handler); } - private final void syncSubData(GL gl, boolean enable, boolean force, Object ext) { + private final void syncSubData(GL gl, Object ext) { for(int i=0; i<subArrays.size(); i++) { - subArrays.get(i).syncData(gl, enable, force, ext); + subArrays.get(i).syncData(gl, ext); } } - public final void syncData(GL gl, boolean enable, Object ext) { - if(!ad.isVBO()) { - throw new InternalError("Interleaved handle is not VBO: "+ad); - } - + public final void enableState(GL gl, boolean enable, Object ext) { if(enable) { + if(!ad.isVBO()) { + throw new InternalError("Interleaved handle is not VBO: "+ad); + } + final Buffer buffer = ad.getBuffer(); final boolean vboWritten = ad.isVBOWritten(); @@ -86,14 +86,9 @@ public class GLSLArrayHandlerInterleaved implements GLArrayHandler { ad.setVBOWritten(true); } // sub data will decide weather to update the vertex attrib pointer - syncSubData(gl, true, !vboWritten, ext); - } else { - // NOP on GLSL: syncSubData(gl, false, ext); - gl.glBindBuffer(ad.getVBOTarget(), 0); + syncSubData(gl, ext); + gl.glBindBuffer(ad.getVBOTarget(), 0); } - } - - public final void enableState(GL gl, boolean enable, Object ext) { for(int i=0; i<subArrays.size(); i++) { subArrays.get(i).enableState(gl, enable, ext); } |