Das hängt davon ab, was die Kunden mit "nicht funktionieren" meinen. Es könnte eines der folgenden sein:
- es lässt sich überhaupt nicht installieren/starten, weil einige OpenGL-Unterstützungen fehlen.
- startet er, stürzt aber im weiteren Verlauf ab.
- es wird gestartet, stürzt nicht ab, aber das Rendering ist fehlerhaft.
- er startet und rendert alles korrekt, aber die Leistung ist miserabel.
Alle Windows-Versionen (seit 95) haben OpenGL-Unterstützung eingebaut. Es ist also unwahrscheinlich, dass die obige Situation 1) auftritt, es sei denn, Sie wenden erfordert höhere OpenGL-Version.
Die Standard-OpenGL-Implementierung ist jedoch OpenGL 1.1 mit Software-Rendering . Wenn der Benutzer nicht manuell Treiber mit OpenGL-Unterstützung installiert hat (jeder von der NVIDIA/AMD/Intel-Website heruntergeladene Treiber verfügt über OpenGL), wird standardmäßig diese langsame und alte Implementierung verwendet. Dies ist sehr wahrscheinlich, um Situationen 3) und 4) oben verursachen.
Selbst wenn OpenGL verfügbar ist, sind die OpenGL-Treiber unter Windows nicht sehr robust, um es milde auszudrücken. Verschiedene Fehler in den Treibern sind sehr wahrscheinlich, um Situation 2), wo etwas gültig zu tun, verursacht einen Absturz in den Treiber.
Hier ist ein C++/WinAPI-Codefragment, das einen Dummy-OpenGL-Kontext erstellt und Informationen abruft (GL-Version, Grafikkartenname, Erweiterungen usw.):
// setup minimal required GL
HWND wnd = CreateWindow(
"STATIC",
"GL",
WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
0, 0, 16, 16,
NULL, NULL,
AfxGetInstanceHandle(), NULL );
HDC dc = GetDC( wnd );
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), 1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL,
PFD_TYPE_RGBA, 32,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
16, 0,
0, PFD_MAIN_PLANE, 0, 0, 0, 0
};
int fmt = ChoosePixelFormat( dc, &pfd );
SetPixelFormat( dc, fmt, &pfd );
HGLRC rc = wglCreateContext( dc );
wglMakeCurrent( dc, rc );
// get information
const char* vendor = (const char*)glGetString(GL_VENDOR);
const char* renderer = (const char*)glGetString(GL_RENDERER);
const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
const char* version = (const char*)glGetString(GL_VERSION);
// DO SOMETHING WITH THOSE STRINGS HERE!
// cleanup
wglDeleteContext( rc );
ReleaseDC( wnd, dc );
DestroyWindow( wnd );
Sie könnten diesen Code irgendwie in Ihr Installationsprogramm oder Ihre Anwendung einfügen und zumindest die GL-Version auf 1.1 überprüfen; dies wird die Situation "Treiber ist nicht installiert" erkennen. Um tatsächliche OpenGL-Treiber-Bugs zu umgehen, müssen Sie sie herausfinden und umgehen. Eine Menge Arbeit.