Current VBO version only uses STATIC_DRAW.
My suggestion is specifying access pattern at VBOInfo.
Method name and enum type name may be weird.
Then please suggest another names.
Index: src/com/jme/renderer/lwjgl/LWJGLRenderer.java
===================================================================
--- src/com/jme/renderer/lwjgl/LWJGLRenderer.java (revision 4105)
+++ src/com/jme/renderer/lwjgl/LWJGLRenderer.java (working copy)
@@ -1069,7 +1069,7 @@
ARBBufferObject.glBufferDataARB(
ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, g
.getVertexBuffer(),
- ARBBufferObject.GL_STATIC_DRAW_ARB);
+ vbo.getAccessPattern());
}
}
}
@@ -1094,7 +1094,7 @@
.glBufferDataARB(
ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB,
tb.getIndexBuffer(),
- ARBBufferObject.GL_STATIC_DRAW_ARB);
+ vbo.getAccessPattern());
}
}
@@ -1118,7 +1118,7 @@
ARBBufferObject.glBufferDataARB(
ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, g
.getNormalBuffer(),
- ARBBufferObject.GL_STATIC_DRAW_ARB);
+ vbo.getAccessPattern());
}
}
}
@@ -1138,7 +1138,7 @@
ARBBufferObject.glBufferDataARB(
ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, g
.getColorBuffer(),
- ARBBufferObject.GL_STATIC_DRAW_ARB);
+ vbo.getAccessPattern());
}
}
}
@@ -1158,7 +1158,7 @@
ARBBufferObject.glBufferDataARB(
ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, g
.getFogBuffer(),
- ARBBufferObject.GL_STATIC_DRAW_ARB);
+ vbo.getAccessPattern());
}
}
}
@@ -1181,7 +1181,7 @@
rendRecord.setBoundVBO(vbo.getVBOTextureID(i));
ARBBufferObject.glBufferDataARB(
ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, texC.coords,
- ARBBufferObject.GL_STATIC_DRAW_ARB);
+ vbo.getAccessPattern());
}
}
}
Index: src/com/jme/scene/VBOInfo.java
===================================================================
--- src/com/jme/scene/VBOInfo.java (revision 4105)
+++ src/com/jme/scene/VBOInfo.java (working copy)
@@ -35,6 +35,8 @@
import java.io.IOException;
import java.io.Serializable;
+import org.lwjgl.opengl.ARBBufferObject;
+
import com.jme.util.export.InputCapsule;
import com.jme.util.export.JMEExporter;
import com.jme.util.export.JMEImporter;
@@ -63,6 +65,16 @@
private int vboFogCoordsID = -1;
private int[] vboTextureIDs = null;
private int vboIndexID = -1;
+ private ModificationType modificationType = ModificationType.Static;
+ private AccessType accessType = AccessType.DRAW;
+
+ public enum ModificationType {
+ Static, Stream, Dynamic
+ }
+
+ public enum AccessType {
+ DRAW, COPY, READ
+ }
public VBOInfo() {
this(false);
@@ -293,6 +305,47 @@
public void setVBOIndexID(int id) {
this.vboIndexID = id;
}
+
+ public void setAccessPattern(ModificationType mod, AccessType access) {
+ this.modificationType = mod;
+ this.accessType = access;
+ }
+
+ public int getAccessPattern() {
+ switch (this.modificationType) {
+ case Static:
+ switch (this.accessType) {
+ case DRAW:
+ return ARBBufferObject.GL_STATIC_DRAW_ARB;
+ case COPY:
+ return ARBBufferObject.GL_STATIC_COPY_ARB;
+ case READ:
+ return ARBBufferObject.GL_STATIC_READ_ARB;
+ }
+ break;
+ case Stream:
+ switch (this.accessType) {
+ case DRAW:
+ return ARBBufferObject.GL_STREAM_DRAW_ARB;
+ case COPY:
+ return ARBBufferObject.GL_STREAM_COPY_ARB;
+ case READ:
+ return ARBBufferObject.GL_STREAM_READ_ARB;
+ }
+ break;
+ case Dynamic:
+ switch (this.accessType) {
+ case DRAW:
+ return ARBBufferObject.GL_DYNAMIC_DRAW_ARB;
+ case COPY:
+ return ARBBufferObject.GL_DYNAMIC_COPY_ARB;
+ case READ:
+ return ARBBufferObject.GL_DYNAMIC_READ_ARB;
+ }
+ break;
+ }
+ return ARBBufferObject.GL_STATIC_DRAW_ARB;
+ }
public void write(JMEExporter e) throws IOException {
OutputCapsule capsule = e.getCapsule(this);