diff options
Diffstat (limited to 'src/net/java/games/jogl')
-rw-r--r-- | src/net/java/games/jogl/impl/GLContext.java | 10 | ||||
-rw-r--r-- | src/net/java/games/jogl/util/BufferUtils.java | 27 |
2 files changed, 31 insertions, 6 deletions
diff --git a/src/net/java/games/jogl/impl/GLContext.java b/src/net/java/games/jogl/impl/GLContext.java index 443d009dc..2aa8e9640 100644 --- a/src/net/java/games/jogl/impl/GLContext.java +++ b/src/net/java/games/jogl/impl/GLContext.java @@ -67,13 +67,9 @@ public abstract class GLContext { protected GLCapabilities capabilities; protected GLCapabilitiesChooser chooser; protected GL gl; - // All GLU interfaces eventually route calls down to gluRoot. It can be - // static because GLU it doesn't actually need to own context, it just makes - // GL calls and assumes some context is active. protected static final GLUProcAddressTable gluProcAddressTable = new GLUProcAddressTable(); - protected static final GLU gluRoot = new GLUImpl(gluProcAddressTable); protected static boolean haveResetGLUProcAddressTable; - protected GLU glu = gluRoot; // this is the context's GLU interface + protected GLU glu = new GLUImpl(gluProcAddressTable); protected Thread renderingThread; protected Runnable deferredReshapeAction; // Support for OpenGL context destruction and recreation in the face @@ -155,7 +151,7 @@ public abstract class GLContext { throw new GLException(e); } this.chooser = chooser; - gl = createGL(); + setGL(createGL()); functionAvailability = new FunctionAvailabilityCache(this); if (shareWith != null) { GLContextShareSet.registerSharing(this, shareWith); @@ -374,6 +370,8 @@ public abstract class GLContext { public void setGL(GL gl) { this.gl = gl; + // Also reset the GL object for the pure-Java GLU implementation + ((GLUImpl) glu).setGL(gl); } public GLU getGLU() { diff --git a/src/net/java/games/jogl/util/BufferUtils.java b/src/net/java/games/jogl/util/BufferUtils.java index 88afa1c8f..1572b749b 100644 --- a/src/net/java/games/jogl/util/BufferUtils.java +++ b/src/net/java/games/jogl/util/BufferUtils.java @@ -45,9 +45,15 @@ import java.util.*; /** Utility routines for dealing with direct buffers. */ public class BufferUtils { + public static final int SIZEOF_DOUBLE = 8; public static final int SIZEOF_FLOAT = 4; public static final int SIZEOF_INT = 4; + public static DoubleBuffer newDoubleBuffer(int numElements) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_DOUBLE); + return bb.asDoubleBuffer(); + } + public static FloatBuffer newFloatBuffer(int numElements) { ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT); return bb.asFloatBuffer(); @@ -64,6 +70,13 @@ public class BufferUtils { return bb; } + public static DoubleBuffer copyDoubleBuffer(DoubleBuffer orig) { + DoubleBuffer dest = newDoubleBuffer(orig.capacity()); + orig.rewind(); + dest.put(orig); + return dest; + } + public static FloatBuffer copyFloatBuffer(FloatBuffer orig) { FloatBuffer dest = newFloatBuffer(orig.capacity()); orig.rewind(); @@ -71,6 +84,20 @@ public class BufferUtils { return dest; } + public static IntBuffer copyIntBuffer(IntBuffer orig) { + IntBuffer dest = newIntBuffer(orig.capacity()); + orig.rewind(); + dest.put(orig); + return dest; + } + + public static ByteBuffer copyByteBuffer(ByteBuffer orig) { + ByteBuffer dest = newByteBuffer(orig.capacity()); + orig.rewind(); + dest.put(orig); + return dest; + } + private static Map bufferOffsetCache = Collections.synchronizedMap(new HashMap()); /** Creates an "offset buffer" for use with the |