Depende de lo que los clientes quieren decir con "no funciona". Podría ser uno de los siguientes:
- no se instala/inicia en absoluto, debido a la falta de soporte OpenGL.
- se inicia, pero se bloquea más adelante.
- se inicia, no falla, pero la representación está dañada.
- se inicia y procesa todo correctamente, pero el rendimiento es abismal.
Todas las versiones de Windows (desde 95) tienen soporte para OpenGL incorporado. Por lo tanto, es poco probable que cause la situación 1) anterior, a menos que la aplicación requiera versión OpenGL más alta.
Sin embargo, esa implementación de OpenGL predeterminada es OpenGL 1.1 con software que representa.Si el usuario no instaló manualmente los controladores que tienen soporte para OpenGL (cualquier controlador descargado del sitio NVIDIA/AMD/Intel tendrá OpenGL), se aplicará de manera predeterminada a esta implementación lenta y antigua. Es muy probable que esto cause las situaciones 3) y 4) anteriores.
Incluso si OpenGL está disponible, en Windows los controladores OpenGL no son muy robustos, por decirlo suavemente. Varios errores en los controladores son muy propensos a causar la situación 2), donde hacer algo válido causa un bloqueo en el controlador.
Aquí hay un C++/WinAPI fragmento de código que crea un contexto OpenGL maniquí y recupera información (versión GL, el nombre de la tarjeta gráfica, extensiones, etc.):
// 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);
de alguna manera podría conectar ese código en su instalador o aplicación y al menos comprobar la versión GL para ser 1.1; esto detectará la situación de "controlador no instalado". Para solucionar los errores reales del controlador de OpenGL, debe resolverlos y solucionarlos. Mucho trabajo.