From db24615ebaebcda88ffb7275d3a60e6400226099 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Thu, 18 Apr 2013 08:39:57 +0200
Subject: Bug 718: Further restriction of Windows BITMAP PFD's - RGB888 and
 !alpha only

On Windows Vista machines, using alpha, i.e. RGB8888 failed to SetPixelFormat(..),
hence only allow RGB888.
---
 src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java       | 4 ++--
 .../classes/jogamp/opengl/windows/wgl/WindowsBitmapWGLDrawable.java   | 3 ++-
 .../jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java    | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

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

diff --git a/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java b/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
index d69b02bb9..654d286d3 100644
--- a/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
+++ b/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
@@ -287,7 +287,7 @@ public class GLGraphicsConfigurationUtil {
         return capsRequested;
     }
     
-    public static GLCapabilitiesImmutable clipRGBAGLCapabilities(GLCapabilitiesImmutable caps, boolean allowRGB555)
+    public static GLCapabilitiesImmutable clipRGBAGLCapabilities(GLCapabilitiesImmutable caps, boolean allowRGB555, boolean allowAlpha)
     {
         final int iR = caps.getRedBits();
         final int iG = caps.getGreenBits();
@@ -296,7 +296,7 @@ public class GLGraphicsConfigurationUtil {
         final int oR = clipColor(iR, allowRGB555);
         final int oG = clipColor(iG, allowRGB555);
         final int oB = clipColor(iB, allowRGB555);
-        final int oA = 0 < iA ? oR : 0 ; // align alpha to red if requested 
+        final int oA = ( allowAlpha && 0 < iA ) ? oR : 0 ; // align alpha to red if requested and allowed
         if( iR != oR || iG != oG || iB != oB || iA != oA ) {
             final GLCapabilities caps2 = (GLCapabilities) caps.cloneMutable();
             caps2.setRedBits(oR);
diff --git a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsBitmapWGLDrawable.java b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsBitmapWGLDrawable.java
index a7f62fccf..3c326e93e 100644
--- a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsBitmapWGLDrawable.java
+++ b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsBitmapWGLDrawable.java
@@ -91,7 +91,8 @@ public class WindowsBitmapWGLDrawable extends WindowsWGLDrawable {
     final GLCapabilitiesImmutable capsChosen;
     {
         final GLCapabilitiesImmutable capsChosen0 = (GLCapabilitiesImmutable)config.getChosenCapabilities();
-        capsChosen = GLGraphicsConfigurationUtil.clipRGBAGLCapabilities(capsChosen0, false /* allowRGB555 */);
+        // RGB555 and also alpha channel is experienced to fail on some Windows machines
+        capsChosen = GLGraphicsConfigurationUtil.clipRGBAGLCapabilities(capsChosen0, false /* allowRGB555 */, false /* allowAlpha */);
         if( capsChosen0 != capsChosen ) {
             config.setChosenCapabilities(capsChosen);
             if(DEBUG) {
diff --git a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java
index 3b71c4462..017f8c40b 100644
--- a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java
+++ b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLGraphicsConfiguration.java
@@ -610,7 +610,7 @@ public class WindowsWGLGraphicsConfiguration extends MutableGraphicsConfiguratio
         if( GLGraphicsConfigurationUtil.BITMAP_BIT == drawableTypeBits ) {
             // BITMAP exclusive PFD SafeGuard: Only accept BITMAP compatible color formats!
             final int pfdColorBits = pfd.getCColorBits(); 
-            if ( pfdColorBits != 24 || pfd.getCRedBits() < pfd.getCAlphaBits() ) { // Allowed: RGB888 && alpha <= red
+            if ( pfdColorBits != 24 || 0 < pfd.getCAlphaBits() ) { // Allowed: RGB888 && !alpha
                 if(DEBUG) {
                     System.err.println("Drop [color bits excl BITMAP]: " + WGLGLCapabilities.PFD2String(pfd, pfdID));
                 }
-- 
cgit v1.2.3