From 2b954ff1fe88f35b59da6c6f6b82fde70274a6ef Mon Sep 17 00:00:00 2001
From: Michael Bien <mbien@fh-landshut.de>
Date: Sat, 27 Mar 2010 23:24:13 +0100
Subject: refactoring: renamed com.sun.opengl -> com.jogamp.opengl.

---
 .../jogamp/opengl/util/glsl/GLSLArrayHandler.java  | 60 ++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 src/jogl/classes/com/jogamp/opengl/util/glsl/GLSLArrayHandler.java

(limited to 'src/jogl/classes/com/jogamp/opengl/util/glsl/GLSLArrayHandler.java')

diff --git a/src/jogl/classes/com/jogamp/opengl/util/glsl/GLSLArrayHandler.java b/src/jogl/classes/com/jogamp/opengl/util/glsl/GLSLArrayHandler.java
new file mode 100644
index 000000000..1119aa5ab
--- /dev/null
+++ b/src/jogl/classes/com/jogamp/opengl/util/glsl/GLSLArrayHandler.java
@@ -0,0 +1,60 @@
+
+package com.jogamp.opengl.util.glsl;
+
+import javax.media.opengl.*;
+import javax.media.opengl.fixedfunc.*;
+import com.jogamp.opengl.util.*;
+import com.jogamp.opengl.util.glsl.ShaderState;
+import java.nio.*;
+
+public class GLSLArrayHandler implements GLArrayHandler {
+  private GLArrayDataEditable ad;
+
+  public GLSLArrayHandler(GLArrayDataEditable ad) {
+    this.ad = ad;
+  }
+
+  protected final void passVertexAttribPointer(GL2ES2 gl, ShaderState st) {
+    st.glVertexAttribPointer(gl, ad);
+  }
+
+  public void enableBuffer(GL gl, boolean enable) {
+    if(!gl.isGL2ES2()) {
+        throw new GLException("GLSLArrayHandler expects a GL2ES2 implementation");
+    }
+    GL2ES2 glsl = gl.getGL2ES2();
+    ShaderState st = ShaderState.getCurrent();
+    if(null==st) {
+        throw new GLException("No ShaderState current");
+    }
+
+    if(enable) {
+        st.glEnableVertexAttribArray(glsl, ad.getName());
+
+        Buffer buffer = ad.getBuffer();
+
+        if(ad.isVBO()) {
+            // always bind and refresh the VBO mgr,
+            // in case more than one gl*Pointer objects are in use
+            glsl.glBindBuffer(GL.GL_ARRAY_BUFFER, ad.getVBOName());
+            if(!ad.isBufferWritten()) {
+                if(null!=buffer) {
+                    glsl.glBufferData(GL.GL_ARRAY_BUFFER, buffer.limit() * ad.getComponentSize(), buffer, ad.getBufferUsage());
+                }
+                ad.setBufferWritten(true);
+            }
+            passVertexAttribPointer(glsl, st);
+        } else if(null!=buffer) {
+            passVertexAttribPointer(glsl, st);
+            ad.setBufferWritten(true);
+        }
+    } else {
+        if(ad.isVBO()) {
+            glsl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
+        }
+        st.glDisableVertexAttribArray(glsl, ad.getName());
+    }
+  }
+
+}
+
-- 
cgit v1.2.3