В зависимости от того, что означают клиенты, «не работает». Он может быть одним из:
- он вообще не устанавливает/запускает из-за отсутствия некоторой поддержки OpenGL.
- он запускает, но падает дальше.
- он запускается, не падает, но рендеринг поврежден.
- запускает и отображает все правильно, но производительность ужасающая.
Все версии Windows (с 95) имеют встроенную поддержку OpenGL. Таким образом, это вряд ли вызовет ситуацию 1) выше, если вы не используете более высокую версию OpenGL.
Однако эта реализация OpenGL по умолчанию является OpenGL 1.1 с программным обеспечением .Если пользователь не установил вручную драйверы с поддержкой OpenGL (любой драйвер, загруженный с сайта NVIDIA/AMD/Intel, будет иметь OpenGL), они по умолчанию будут выполнять эту медленную и старую реализацию. Это, скорее всего, вызовет ситуации 3) и 4) выше.
Даже если OpenGL доступен, драйверы Windows OpenGL не очень надежны, мягко говоря. Различные ошибки в драйверах, скорее всего, вызовут ситуацию 2), где выполнение чего-то действительного вызывает сбой в драйвере.
Вот C++/WinAPI фрагмент код, который создает фиктивный контекст OpenGL и извлекает информацию (версию GL, название видеокарты, расширение и т.п.):
// 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);
Вы можете как-то подключить этот код в ваш установщик или приложение и, по крайней мере, проверить версию GL на 1.1; это обнаружит ситуацию «драйвер не установлен». Чтобы обойти фактические ошибки драйвера OpenGL, вам нужно разобраться с ними и обойти их. Много работы.