6

OpenGL を使用する 3D ビューアがありますが、クライアントから「機能しない」という苦情が時々寄せられます。これらの問題のほとんどは、事実上最新の 3D リアルタイム ゲームをビジネス用ラップトップ コンピューターで使用しようとしたことに起因すると思われます。

使用している Windows msi インストーラーで、openGL のサポートを確認するにはどうすればよいですか?

補足として、「OpenGL でサポートされているグラフィック カードのリストはありますか?」という質問に答えていただければ幸いです。Googleがここで役に立たないのは奇妙です..

4

3 に答える 3

9

お客様が「働いていない」とはどういう意味かによります。次のいずれかになります。

  1. 一部の OpenGL サポートがないため、まったくインストール/起動しません。
  2. 起動しますが、さらにクラッシュします。
  3. 起動し、クラッシュしませんが、レンダリングが破損しています。
  4. すべてを正しく起動してレンダリングしますが、パフォーマンスはひどいものです。

すべての 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 ドライバーのバグを回避するには、それらを把握して回避する必要があります。多くの作業。

于 2008-09-24T11:17:37.070 に答える
1

OpenGLは、WindowsNTまたはWin95以降のWindowsの一部です。OpenGLがプリインストールされていないWindowsシステム(Windows 3.1など)が見つかる可能性はほとんどありません。

ただし、アプリケーションには、非常に古いバージョンのWindowsに付属しているデフォルトのOpenGL1.1よりも新しいバージョンのOpenGLが必要な場合があります。あなたはあなたのプログラムからそれをチェックすることができます。msiからそれを見つける方法がわかりません。

OpenGLは、サービスパックなどをインストールするのではなく、グラフィックドライバを介して更新されることに注意してください。

OpenGL対応のグラフィックカードについて:すべてにOpenGLがあります。顧客が石器時代のISAET4000グラフィックカードを使用している場合でも、少なくともソフトウェアレンダリングを介してOpenGL1.1を使用しています。

于 2008-09-24T08:49:39.063 に答える
1

Windows は OpenGL 1.1 をサポートして出荷されます (他の人がここで指摘しているように)。したがって、ユーザーが直面している問題は、1.1 以降に OpenGL に追加された拡張機能が原因です。GLEW ライブラリを使用している場合、プログラムで使用しているすべての拡張機能のサポートを確認するのは非常に簡単です。オクルージョン クエリのサポートを確認する方法は次のとおりです。

if (GLEW_OK != glewInit())
{
    // GLEW failed!
    exit(1);
}

// Check if required extensions are supported
if (!GLEW_ARB_occlusion_query)
    cout << "Occlusion query not supported" << endl;

GLEW の使用の詳細については、こちらを参照してください。

于 2008-09-26T05:52:44.057 に答える