summaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/opengl
diff options
context:
space:
mode:
authorSven Gothel <sgothel@jausoft.com>2011-02-05 04:03:51 +0100
committerSven Gothel <sgothel@jausoft.com>2011-02-05 04:03:51 +0100
commite2040ada5a94b466ba95e84a497290c069d377bb (patch)
tree684a5f9e61af9f6951dfae8e12d7d45adfe36ca4 /src/jogl/classes/com/jogamp/opengl
parent5d18d6b57f7d9d92a9f568e20beb64a6d44de25a (diff)
Fix bug #459 NV/Win7 PDF/caps selection
Scenario - NV / Win7 driver version 266.58's - Caps: on-scr, rgba 8/8/8/0, accum-rgba 0/0/0/0, dp/st/ms: 16/8/0, dbl, mono The above 'wglChoosePixelFormatARB' impl returns an array of pixelformats, where the 1st entry is not hardware accelerated! This should be considered a bug in NV's driver, since the array should return a list ordered from 'best' to 'worst'. Workaround trying explicit hw acceleration 1st, then generic, then software.
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl')
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfiguration.java18
-rw-r--r--src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfigurationFactory.java14
2 files changed, 24 insertions, 8 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfiguration.java b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfiguration.java
index 31a559ce8..f844bad76 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfiguration.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfiguration.java
@@ -268,7 +268,7 @@ public class WindowsWGLGraphicsConfiguration extends DefaultGraphicsConfiguratio
iattributes, sharedContext, accelerationMode, null))
{
if (DEBUG) {
- System.err.println("wglChoosePixelFormatARB1: GLCapabilities2AttribList failed: " + GDI.GetLastError());
+ System.err.println("wglChoosePixelFormatARB: GLCapabilities2AttribList failed: " + GDI.GetLastError());
Thread.dumpStack();
}
return null;
@@ -282,7 +282,7 @@ public class WindowsWGLGraphicsConfiguration extends DefaultGraphicsConfiguratio
pformatsTmp, 0, numFormatsTmp, 0))
{
if (DEBUG) {
- System.err.println("wglChoosePixelFormatARB1: wglChoosePixelFormatARB failed: " + GDI.GetLastError());
+ System.err.println("wglChoosePixelFormatARB: wglChoosePixelFormatARB failed: " + GDI.GetLastError());
Thread.dumpStack();
}
return null;
@@ -294,8 +294,14 @@ public class WindowsWGLGraphicsConfiguration extends DefaultGraphicsConfiguratio
System.arraycopy(pformatsTmp, 0, pformats, 0, numFormats);
}
if (DEBUG) {
- System.err.println("wglChoosePixelFormatARB1: NumFormats (wglChoosePixelFormatARB) accelMode 0x"
+ System.err.println("wglChoosePixelFormatARB: NumFormats (wglChoosePixelFormatARB) accelMode 0x"
+ Integer.toHexString(accelerationMode) + ": " + numFormats);
+ for (int i = 0; i < numFormats; i++) {
+ WGLGLCapabilities dbgCaps0 = WindowsWGLGraphicsConfiguration.wglARBPFID2GLCapabilities(
+ sharedContext, hdc, pformats[i],
+ capabilities.getGLProfile(), capabilities.isOnscreen(), capabilities.isPBuffer());
+ System.err.println("pixel format " + pformats[i] + " (index " + i + "): " + dbgCaps0);
+ }
}
return pformats;
}
@@ -342,7 +348,7 @@ public class WindowsWGLGraphicsConfiguration extends DefaultGraphicsConfiguratio
static boolean GLCapabilities2AttribList(GLCapabilitiesImmutable caps,
int[] iattributes,
GLContextImpl sharedCtx,
- int accellerationValue,
+ int accelerationValue,
int[] floatMode) throws GLException {
boolean haveWGLChoosePixelFormatARB = sharedCtx.isExtensionAvailable(WGL_ARB_pixel_format);
boolean haveWGLARBMultisample = sharedCtx.isExtensionAvailable(WGL_ARB_multisample);
@@ -362,9 +368,9 @@ public class WindowsWGLGraphicsConfiguration extends DefaultGraphicsConfiguratio
iattributes[niattribs++] = WGLExt.WGL_SUPPORT_OPENGL_ARB;
iattributes[niattribs++] = GL.GL_TRUE;
- if(accellerationValue>0) {
+ if(accelerationValue>0) {
iattributes[niattribs++] = WGLExt.WGL_ACCELERATION_ARB;
- iattributes[niattribs++] = accellerationValue;
+ iattributes[niattribs++] = accelerationValue;
}
if (onscreen) {
iattributes[niattribs++] = WGLExt.WGL_DRAW_TO_WINDOW_ARB;
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfigurationFactory.java b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfigurationFactory.java
index e543c10ef..a66d62485 100644
--- a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfigurationFactory.java
+++ b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLGraphicsConfigurationFactory.java
@@ -304,9 +304,19 @@ public class WindowsWGLGraphicsConfigurationFactory extends GLGraphicsConfigurat
// 1st choice: get GLCapabilities based on users GLCapabilities setting recommendedIndex as preferred choice
int[] iattributes = new int[2 * WindowsWGLGraphicsConfiguration.MAX_ATTRIBS];
float[] fattributes = new float[1];
+ int accelerationMode = WGLExt.WGL_FULL_ACCELERATION_ARB;
pformats = WindowsWGLGraphicsConfiguration.wglChoosePixelFormatARB(hdc, sharedContext, capsChosen,
- iattributes, -1, fattributes);
-
+ iattributes, accelerationMode, fattributes);
+ if (null == pformats) {
+ accelerationMode = WGLExt.WGL_GENERIC_ACCELERATION_ARB;
+ pformats = WindowsWGLGraphicsConfiguration.wglChoosePixelFormatARB(hdc, sharedContext, capsChosen,
+ iattributes, accelerationMode, fattributes);
+ }
+ if (null == pformats) {
+ accelerationMode = -1; // use what we are offered ..
+ pformats = WindowsWGLGraphicsConfiguration.wglChoosePixelFormatARB(hdc, sharedContext, capsChosen,
+ iattributes, accelerationMode, fattributes);
+ }
if (null != pformats) {
recommendedIndex = 0;
} else {