* Fixed issue 550

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9985 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
Sha..rd 12 years ago
parent fead899369
commit be59bd91fb
  1. 37
      engine/src/lwjgl/com/jme3/system/lwjgl/LwjglContext.java

@ -112,12 +112,30 @@ public abstract class LwjglContext implements JmeContext {
} }
protected int determineMaxSamples(int requestedSamples) { protected int determineMaxSamples(int requestedSamples) {
boolean displayWasCurrent = false;
try {
// If we already have a valid context, determine samples using current
// context.
if (Display.isCreated() && Display.isCurrent()) {
if (GLContext.getCapabilities().GL_ARB_framebuffer_object) {
return GL11.glGetInteger(ARBFramebufferObject.GL_MAX_SAMPLES);
} else if (GLContext.getCapabilities().GL_EXT_framebuffer_multisample) {
return GL11.glGetInteger(EXTFramebufferMultisample.GL_MAX_SAMPLES_EXT);
}
// Doesn't support any of the needed extensions .. continue down.
displayWasCurrent = true;
}
} catch (LWJGLException ex) {
listener.handleError("Failed to check if display is current", ex);
}
if ((Pbuffer.getCapabilities() & Pbuffer.PBUFFER_SUPPORTED) == 0) { if ((Pbuffer.getCapabilities() & Pbuffer.PBUFFER_SUPPORTED) == 0) {
// No pbuffer, assume everything is supported. // No pbuffer, assume everything is supported.
return Integer.MAX_VALUE; return Integer.MAX_VALUE;
} else { } else {
Pbuffer pb = null; Pbuffer pb = null;
if (!displayWasCurrent) {
// OpenGL2 method: Create pbuffer and query samples // OpenGL2 method: Create pbuffer and query samples
// from GL_ARB_framebuffer_object or GL_EXT_framebuffer_multisample. // from GL_ARB_framebuffer_object or GL_EXT_framebuffer_multisample.
try { try {
@ -140,16 +158,20 @@ public abstract class LwjglContext implements JmeContext {
pb = null; pb = null;
} }
} }
}
// OpenGL1 method // OpenGL1 method (DOESNT WORK RIGHT NOW ..)
requestedSamples = FastMath.nearestPowerOfTwo(requestedSamples); requestedSamples = FastMath.nearestPowerOfTwo(requestedSamples);
try {
requestedSamples = Integer.MAX_VALUE;
/*
while (requestedSamples > 1) { while (requestedSamples > 1) {
try { try {
pb = new Pbuffer(1, 1, new PixelFormat(0, 0, 0, requestedSamples), null); pb = new Pbuffer(1, 1, new PixelFormat(16, 0, 8, 0, requestedSamples), null);
} catch (LWJGLException ex) { } catch (LWJGLException ex) {
if (ex.getMessage().startsWith("Failed to find ARB pixel format")) { if (ex.getMessage().startsWith("Failed to find ARB pixel format")) {
// Unsupported format, so continue. // Unsupported format, so continue.
requestedSamples /= 2; requestedSamples = FastMath.nearestPowerOfTwo(requestedSamples / 2);
} else { } else {
// Something else went wrong .. // Something else went wrong ..
return Integer.MAX_VALUE; return Integer.MAX_VALUE;
@ -160,6 +182,15 @@ public abstract class LwjglContext implements JmeContext {
pb = null; pb = null;
} }
} }
}*/
} finally {
if (displayWasCurrent) {
try {
Display.makeCurrent();
} catch (LWJGLException ex) {
listener.handleError("Failed to make display current after checking samples", ex);
}
}
} }
return requestedSamples; return requestedSamples;

Loading…
Cancel
Save