aboutsummaryrefslogtreecommitdiffstats
path: root/src/classes/com/sun/opengl/impl/GLContextShareSet.java
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2006-11-26 06:02:27 +0000
committerKenneth Russel <[email protected]>2006-11-26 06:02:27 +0000
commit3d445e164c242fb050dc6ecc8ca736731f7bcc67 (patch)
tree70b7ad77ca6090583fb6bc8a016c6b8ffaad1b40 /src/classes/com/sun/opengl/impl/GLContextShareSet.java
parent643849d65648411b55281ea5c87878e148dda97b (diff)
Fixed another performance problem related to buffer objects pointed
out by John Burkey. glGetBufferParameterivARB call in glMapBuffer was too expensive at least with Apple's multithreaded OpenGL implementation. Now track both bound buffer state (refactored into GLBufferStateTracker) as well as cache created buffers' sizes (expressed in GLBufferSizeTracker) and query the cache instead of OpenGL directly. Verified with VertexBufferObject demo that now no glGet queries are made at run-time. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@1003 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/classes/com/sun/opengl/impl/GLContextShareSet.java')
-rw-r--r--src/classes/com/sun/opengl/impl/GLContextShareSet.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/classes/com/sun/opengl/impl/GLContextShareSet.java b/src/classes/com/sun/opengl/impl/GLContextShareSet.java
index f2c015762..e02ef1fb5 100644
--- a/src/classes/com/sun/opengl/impl/GLContextShareSet.java
+++ b/src/classes/com/sun/opengl/impl/GLContextShareSet.java
@@ -240,6 +240,31 @@ public class GLContextShareSet {
}
}
+ /** In order to avoid glGet calls for buffer object checks related
+ to glVertexPointer, etc. calls as well as glMapBuffer calls, we
+ need to share the same GLBufferSizeTracker object between
+ contexts sharing textures and display lists. For now we keep
+ this mechanism orthogonal to the GLObjectTracker to hopefully
+ keep things easier to understand. (The GLObjectTracker is
+ currently only needed in a fairly esoteric case, when the
+ Java2D/JOGL bridge is active, but the GLBufferSizeTracker
+ mechanism is now always required.) */
+ public static void registerForBufferObjectSharing(GLContext olderContextOrNull, GLContext newContext) {
+ // FIXME: downcasts to GLContextImpl undesirable
+ GLContextImpl older = (GLContextImpl) olderContextOrNull;
+ GLContextImpl newer = (GLContextImpl) newContext;
+ GLBufferSizeTracker tracker = null;
+ if (older != null) {
+ tracker = older.getBufferSizeTracker();
+ assert (tracker != null)
+ : "registerForBufferObjectSharing was not called properly for the older context, or has a bug in it";
+ }
+ if (tracker == null) {
+ tracker = new GLBufferSizeTracker();
+ }
+ newer.setBufferSizeTracker(tracker);
+ }
+
//----------------------------------------------------------------------
// Internals only below this point
//