The behavioral difference most likely comes from the fact that I used my own capabilitieschooser in the old wurm version.
I tried to get a hold of the guy who had the problems, but it was very difficult to run proper tests. :-\
Anyway, does the GLCapabilitiesChooser try to use exacty 16 bits if you specify that, and not just 16 bits and upwards? If so, how does one say that “I require at least 8 bits stencil buffer”, for example?
It’s pretty dangerous/bug prone to have a default glcapabilities that reverts to the software implementation if there are better hardware accelerated ones than what you’ve specified available…
Ah, well, I’ll roll my own chooser again. I’ll attach the code for your pleasure (it’s kinda wurm specific, but could probably be reused by others with some tweaks:
package com.wurmonline.client;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLCapabilitiesChooser;
public class WurmCapabilitiesChooser implements GLCapabilitiesChooser
{
public int chooseCapabilities(GLCapabilities desired, GLCapabilities[] available, int systemChoice)
{
int chosen = systemChoice;
for (int i = 0; i < available.length; i++)
{
if (isBetter(available[chosen], available[i])) chosen = i;
}
return chosen;
}
private boolean isBetter(GLCapabilities oldCaps, GLCapabilities newCaps)
{
if (newCaps==null) return false;
if (oldCaps==null) return true;
// ALWAYS trade to hardware acceleration and double buffering if possible
if (!oldCaps.getHardwareAccelerated() && newCaps.getHardwareAccelerated()) return true;
if (!oldCaps.getDoubleBuffered() && newCaps.getDoubleBuffered()) return true;
// NEVER trade from hardware acceleration and double buffering if possible
if (oldCaps.getHardwareAccelerated() && !newCaps.getHardwareAccelerated()) return false;
if (oldCaps.getDoubleBuffered() && !newCaps.getDoubleBuffered()) return false;
if (newCaps.getDepthBits()>oldCaps.getDepthBits()) return true;
if (newCaps.getRedBits()>oldCaps.getRedBits()) return true;
if (newCaps.getGreenBits()>oldCaps.getGreenBits()) return true;
if (newCaps.getBlueBits()>oldCaps.getBlueBits()) return true;
if (newCaps.getAlphaBits()>oldCaps.getAlphaBits()) return true;
if (newCaps.getStencilBits()>oldCaps.getStencilBits()) return true;
return false;
}
}