From 78abc89be7f3935f26802cc0db33f61fc2c65de0 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Wed, 17 Jul 2013 00:59:45 +0200
Subject: Fix OSX GL-core lack of pbuffer:
 GLDrawableFactory.canCreateGLPbuffer(..) add GLProfile argument, similar to
 canCreateFBO(..)

In case a compatible non-core profile is requests, canCreateGLPbuffer(..) returns false on OSX.
---
 src/jogl/classes/jogamp/opengl/GLContextImpl.java              |  2 +-
 src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java      |  4 ++--
 .../classes/jogamp/opengl/GLGraphicsConfigurationUtil.java     |  5 +++--
 src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java     |  2 +-
 .../classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java     | 10 ----------
 .../jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java     |  9 +++++++--
 .../jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java   |  2 +-
 .../classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java   |  4 ++--
 8 files changed, 17 insertions(+), 21 deletions(-)

(limited to 'src/jogl/classes/jogamp')

diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
index 6f4f6f271..996a47590 100644
--- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java
+++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
@@ -1851,7 +1851,7 @@ public abstract class GLContextImpl extends GLContext {
   }
 
   @Override
-  public boolean isExtensionAvailable(String glExtensionName) {
+  public final boolean isExtensionAvailable(String glExtensionName) {
       if(null!=extensionAvailability) {
         return extensionAvailability.isExtensionAvailable(mapToRealGLExtensionName(glExtensionName));
       }
diff --git a/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java b/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
index 4ac413545..41ea06deb 100644
--- a/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
+++ b/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
@@ -247,7 +247,7 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
   //
   
   @Override
-  public abstract boolean canCreateGLPbuffer(AbstractGraphicsDevice device);
+  public abstract boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp);
 
   @Override
   public GLPbuffer createGLPbuffer(AbstractGraphicsDevice deviceReq,
@@ -263,7 +263,7 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
     if(null == device) {
         throw new GLException("No shared device for requested: "+deviceReq);
     }
-    if ( !canCreateGLPbuffer(device) ) {
+    if ( !canCreateGLPbuffer(device, capsRequested.getGLProfile()) ) {
         throw new GLException("Pbuffer not available with device: "+device);
     }
 
diff --git a/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java b/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
index 48b509263..d54da4d28 100644
--- a/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
+++ b/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
@@ -200,8 +200,9 @@ public class GLGraphicsConfigurationUtil {
         if(null == device) {
             device = factory.getDefaultDevice();
         }
-        final boolean fboAvailable = GLContext.isFBOAvailable(device, capsRequested.getGLProfile());
-        final boolean pbufferAvailable = factory.canCreateGLPbuffer(device);
+        final GLProfile glp = capsRequested.getGLProfile();
+        final boolean fboAvailable = GLContext.isFBOAvailable(device, glp);
+        final boolean pbufferAvailable = factory.canCreateGLPbuffer(device, glp);
         
         final GLRendererQuirks glrq = factory.getRendererQuirks(device);
         final boolean bitmapAvailable;
diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
index 465c8fa80..9c1cc7fc4 100644
--- a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
@@ -703,7 +703,7 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl {
     }
 
     @Override
-    public boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
+    public boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
         // SharedResource sr = getOrCreateEGLSharedResource(device);
         // return sr.hasES1PBuffer() || sr.hasES2PBuffer();
         return true;
diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
index 9b163ae5b..6787ef500 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
@@ -74,7 +74,6 @@ import com.jogamp.common.util.VersionNumber;
 import com.jogamp.common.util.locks.RecursiveLock;
 import com.jogamp.gluegen.runtime.ProcAddressTable;
 import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver;
-import com.jogamp.opengl.GLExtensions;
 import com.jogamp.opengl.GLRendererQuirks;
 import com.jogamp.opengl.util.PMVMatrix;
 import com.jogamp.opengl.util.glsl.ShaderCode;
@@ -465,15 +464,6 @@ public class MacOSXCGLContext extends GLContextImpl
     return new StringBuilder();
   }
 
-  @Override
-  public boolean isExtensionAvailable(String glExtensionName) {
-    if (glExtensionName.equals(GLExtensions.ARB_pbuffer) ||
-        glExtensionName.equals(GLExtensions.ARB_pixel_format)) {
-      return true;
-    }
-    return super.isExtensionAvailable(glExtensionName);
-  }
-
   // Support for "mode switching" as described in MacOSXCGLDrawable
   public void setOpenGLMode(GLBackendType mode) {
       if (mode == openGLMode) {
diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
index c9402b33d..83d656475 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
@@ -332,8 +332,13 @@ public class MacOSXCGLDrawableFactory extends GLDrawableFactoryImpl {
   }
 
   @Override
-  public boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
-    return true;
+  public boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
+    if( glp.isGL2() ) {
+        // OSX only supports pbuffer w/ compatible, non-core, context.
+        return true;
+    } else {
+        return false;
+    }
   }
 
   @Override
diff --git a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
index 45edda516..338a351cb 100644
--- a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
@@ -470,7 +470,7 @@ public class WindowsWGLDrawableFactory extends GLDrawableFactoryImpl {
   }
 
   @Override
-  public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
+  public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
     SharedResource sr = getOrCreateSharedResourceImpl( ( null != device ) ? device : defaultDevice );
     if(null!=sr) {
         return sr.hasARBPBuffer();
diff --git a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
index b3b02e23f..52069b88f 100644
--- a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
@@ -490,7 +490,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl {
   }
 
   @Override
-  public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
+  public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
       if(null == device) {
         SharedResourceRunner.Resource sr = sharedResourceRunner.getOrCreateShared(defaultDevice);
         if(null!=sr) {
@@ -551,7 +551,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl {
 
   @Override
   public final boolean canCreateExternalGLDrawable(AbstractGraphicsDevice device) {
-    return canCreateGLPbuffer(device);
+    return canCreateGLPbuffer(device, null /* GLProfile not used for query on X11 */);
   }
 
   @Override
-- 
cgit v1.2.3