Зависит от того, что клиенты подразумевают под «не работает». Это может быть одно из:
- он вообще не устанавливается / не запускается из-за отсутствия поддержки 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, вы должны разобраться и обойти их. Много работы.