diff options
author | Sven Gothel <[email protected]> | 2011-10-07 19:59:29 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2011-10-07 19:59:29 +0200 |
commit | 274df7766467ca79dbd593d59aa1e4908d40cfa5 (patch) | |
tree | c3770d2b6d96101b5c5eaa13b86fbaae26177f6d /src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerFlat.java | |
parent | c8eab433735f5da0779843b227e2f0f5057df776 (diff) |
GLArrayData<VBO>: Add GLArrayHandlerFlat ; Update VBO name to interleaved subarrays
- Add GLArrayHandlerFlat gives better distinction of semantics
- update sub-array VBO name, if parent's interleaved array initializes it.
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerFlat.java')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerFlat.java | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerFlat.java b/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerFlat.java index 0d6da7ba4..c4b761b13 100644 --- a/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerFlat.java +++ b/src/jogl/classes/jogamp/opengl/util/glsl/GLSLArrayHandlerFlat.java @@ -30,31 +30,48 @@ package jogamp.opengl.util.glsl; import javax.media.opengl.GL; import javax.media.opengl.GL2ES2; -import javax.media.opengl.GLArrayData; -import jogamp.opengl.util.GLArrayHandler; +import jogamp.opengl.util.GLArrayHandlerFlat; +import com.jogamp.opengl.util.GLArrayDataWrapper; import com.jogamp.opengl.util.glsl.ShaderState; /** * Used for interleaved GLSL arrays, i.e. where the buffer data itself is handled * separately and interleaves many arrays. */ -public class GLSLArrayHandlerFlat implements GLArrayHandler { - private GLArrayData ad; +public class GLSLArrayHandlerFlat implements GLArrayHandlerFlat { + private GLArrayDataWrapper ad; - public GLSLArrayHandlerFlat(GLArrayData ad) { + public GLSLArrayHandlerFlat(GLArrayDataWrapper ad) { this.ad = ad; } - public final void addSubHandler(GLArrayHandler handler) { - throw new UnsupportedOperationException(); + public GLArrayDataWrapper getData() { + return ad; } - - public final void syncData(GL gl, boolean enable, Object ext) { - final ShaderState st = (ShaderState) ext; + + public final void syncData(GL gl, boolean enable, boolean force, Object ext) { if(enable) { - st.vertexAttribPointer(gl.getGL2ES2(), ad); + final GL2ES2 glsl = gl.getGL2ES2(); + final ShaderState st = (ShaderState) ext; + + st.vertexAttribPointer(glsl, ad); + /** + * Due to probable application VBO switching, this might not make any sense .. + * + if(force) { + st.vertexAttribPointer(glsl, ad); + } else if(st.getAttribLocation(glsl, ad) >= 0) { + final int[] qi = new int[1]; + glsl.glGetVertexAttribiv(ad.getLocation(), GL2ES2.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, qi, 0); + if(ad.getVBOName() != qi[0]) { + System.err.println("XXX1: "+ad.getName()+", vbo ad "+ad.getVBOName()+", gl "+qi[0]+", "+ad); + st.vertexAttribPointer(glsl, ad); + } else { + System.err.println("XXX0: "+ad.getName()+", vbo ad "+ad.getVBOName()+", gl "+qi[0]+", "+ad); + } + }*/ } } |