aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/games/jogl/impl/x11/X11GLContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/java/games/jogl/impl/x11/X11GLContext.java')
-rw-r--r--src/net/java/games/jogl/impl/x11/X11GLContext.java49
1 files changed, 35 insertions, 14 deletions
diff --git a/src/net/java/games/jogl/impl/x11/X11GLContext.java b/src/net/java/games/jogl/impl/x11/X11GLContext.java
index 451997a73..112f8a709 100644
--- a/src/net/java/games/jogl/impl/x11/X11GLContext.java
+++ b/src/net/java/games/jogl/impl/x11/X11GLContext.java
@@ -39,7 +39,7 @@
package net.java.games.jogl.impl.x11;
-import java.awt.Component;
+import java.nio.*;
import java.util.*;
import net.java.games.jogl.*;
import net.java.games.jogl.impl.*;
@@ -50,9 +50,10 @@ public abstract class X11GLContext extends GLContextImpl {
private boolean glXQueryExtensionsStringInitialized;
private boolean glXQueryExtensionsStringAvailable;
private static final Map/*<String, String>*/ functionNameMap;
+ private GLXExt glXExt;
// Table that holds the addresses of the native C-language entry points for
- // OpenGL functions.
- private GLProcAddressTable glProcAddressTable;
+ // GLX extension functions.
+ private GLXExtProcAddressTable glXExtProcAddressTable;
// Cache the most recent value of the "display" variable (which we
// only guarantee to be valid in between makeCurrent / free pairs)
// so that we can implement displayImpl() (which must be done when
@@ -71,11 +72,17 @@ public abstract class X11GLContext extends GLContextImpl {
this.drawable = drawable;
}
- protected GL createGL()
- {
- return new X11GLImpl(this);
+ public Object getPlatformGLExtensions() {
+ return getGLXExt();
}
-
+
+ public GLXExt getGLXExt() {
+ if (glXExt == null) {
+ glXExt = new GLXExtImpl(this);
+ }
+ return glXExt;
+ }
+
public GLDrawable getGLDrawable() {
return drawable;
}
@@ -175,20 +182,20 @@ public abstract class X11GLContext extends GLContextImpl {
protected void resetGLFunctionAvailability() {
super.resetGLFunctionAvailability();
if (DEBUG) {
- System.err.println("!!! Initializing OpenGL extension address table");
+ System.err.println(getThreadName() + ": !!! Initializing GLX extension address table");
}
- resetProcAddressTable(getGLProcAddressTable());
+ resetProcAddressTable(getGLXExtProcAddressTable());
}
- public GLProcAddressTable getGLProcAddressTable() {
- if (glProcAddressTable == null) {
+ public GLXExtProcAddressTable getGLXExtProcAddressTable() {
+ if (glXExtProcAddressTable == null) {
// FIXME: cache ProcAddressTables by capability bits so we can
// share them among contexts with the same capabilities
- glProcAddressTable = new GLProcAddressTable();
+ glXExtProcAddressTable = new GLXExtProcAddressTable();
}
- return glProcAddressTable;
+ return glXExtProcAddressTable;
}
-
+
public synchronized String getPlatformExtensionsString() {
if (drawable.getDisplay() == 0) {
throw new GLException("Context not current");
@@ -238,6 +245,20 @@ public abstract class X11GLContext extends GLContextImpl {
return super.isExtensionAvailable(glExtensionName);
}
+
+ public void setSwapInterval(int interval) {
+ // FIXME: make the context current first? Currently assumes that
+ // will not be necessary. Make the caller do this?
+ GLXExt glXExt = getGLXExt();
+ if (glXExt.isExtensionAvailable("GLX_SGI_swap_control")) {
+ glXExt.glXSwapIntervalSGI(interval);
+ }
+ }
+
+ public ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
+ return getGLXExt().glXAllocateMemoryNV(arg0, arg1, arg2, arg3);
+ }
+
public int getOffscreenContextPixelDataType() {
throw new GLException("Should not call this");
}