お客様が「働いていない」とはどういう意味かによります。次のいずれかになります。
- 一部の OpenGL サポートがないため、まったくインストール/起動しません。
- 起動しますが、さらにクラッシュします。
- 起動し、クラッシュしませんが、レンダリングが破損しています。
- すべてを正しく起動してレンダリングしますが、パフォーマンスはひどいものです。
すべての Windows バージョン (95 以降) には、OpenGL サポートが組み込まれています。したがって、アプリケーションがより高い OpenGL バージョンを必要としない限り、上記の状況 1) が発生する可能性はほとんどありません。
ただし、そのデフォルトの OpenGL 実装は、ソフトウェア レンダリングを使用する OpenGL 1.1です。ユーザーが OpenGL をサポートするドライバーを手動でインストールしなかった場合 (NVIDIA/AMD/Intel のサイトからダウンロードしたドライバーには OpenGL が含まれます)、デフォルトでこの低速で古い実装が使用されます。これにより、上記の 3) および 4) の状況が発生する可能性が非常に高くなります。
OpenGL が利用可能であっても、Windows の OpenGL ドライバーは控えめに言っても、あまり堅牢ではありません。ドライバーのさまざまなバグは、状況 2) を引き起こす可能性が非常に高く、有効なことを行うとドライバーがクラッシュします。
ダミーの OpenGL コンテキストを作成し、情報 (GL バージョン、グラフィック カード名、拡張機能など) を取得する C++/WinAPI コード スニペットを次に示します。
// 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 ドライバーのバグを回避するには、それらを把握して回避する必要があります。多くの作業。