1

わかりました。オンラインではOpenGLとは何かについて何百万もの答えがあることを知っていますが、コンピューター上のファイルの観点からそれが何であるかを理解しようとしています。調査したところ、OpenGLはさまざまなコンピュータグラフィックカードのマルチプラットフォームトランスレータとして機能することがわかりました。それで、それはdllですか?
それがdllの場合、dllのバージョン(できれば最新のもの)をダウンロードして、それが何であるかを知って使用することはできませんでしたか?

編集:わかりました。それがWindows dllであり、新しいバージョンを使用するOpenGLゲームを作成した場合、以前のバージョンの誰かのコンピューターでサポートされていない場合はどうなりますか?他のWindowsコンピューターでサポートされるように、ゲームでdllを実行することはできますか?または、特定のコンピューターで厳密にグラフィックカードと通信するようにdllが設定されていますか?

OpenGLは常に更新されています(それが何であれ)。グラフィックカードが組み込まれているため更新されないさまざまなコンピュータのグラフィックカードと通信するだけの場合、これをどのように行うことができますか?

4

3 に答える 3

4

OpenGLには2つの「パーツ」があります。クロノスグループによって数か月に1回更新される仕様と、グラフィックカードの製造元によってグラフィックカードモデル専用に作成されたドライバーです。

OpenGL仕様は、基本的に、OpenGL APIに関するすべてがどのように機能するか、つまり、予期される動作、予期しない動作と見なされる場合、どのエラーをスローするかなどを詳しく説明しています。アプリケーション作成者に、ドライバーに何を期待するかを知らせます。これがOpenGLが実際に「ある」ものであり、アプリケーションとドライバーを一緒に保持する接着剤です。各バージョンのすべての仕様をここで読むことができます。

次に、OpenGL APIを実装し、仕様に準拠していると見なされるドライバーがあります。ドライバーは、グラフィックカードのメモリとの間でデータをコピーし、グラフィックカードのレジスタにデータを書き込み、状態を追跡し、頂点を処理し、シェーダーをコンパイルし、何百ものストリームプロセッサに頂点を同時に変換するように指示します。 OpenGLがない場合、各グラフィックカードモデルには個別のわずかに高速なAP​​Iがあり、その構造上、その1つのグラフィックカードでのみ機能します。OpenGLを使用すると、ドライバーはすべて同じAPIに対して記述され、アプリケーションのコードはすべてのグラフィックカードで実行されます。

OpenGL仕様への準拠は、ドライバーの更新によって変わりません。ほとんどのドライバーアップデートは、マイナーなバグを修正するか、内部最適化を行います。

ある時点で、ATIドライバーに小さなバグがあり、の可能な値として非推奨になっているにもかかわらずglEnable(GL_TEXTURE_2D);、ミップマップをOpenGL 3の方法()で生成する前に呼び出す必要があったことを知っています。現在修正されているかどうかはわかりませんが、ドライバーの作成者が見落としがちなタイプのエッジケースであることは確かです。glGenerateMipMaps()GL_TEXTURE_2DglEnable()

最適化に関しては、最適化することがたくさんあります。おそらく、コンパイル時にシェーダーを最適化する別の方法があるかもしれません。ストリームプロセッサ間で作業を分散するためのより効率的な方法があるかもしれませんが、私にはわかりません。

于 2012-05-13T08:39:21.630 に答える
3

OpenGLは、グラフィックプログラミング用のクロスプラットフォームAPIです。コンパイルされたコードに関しては、OS固有のライブラリとして利用できます。たとえば、WindowsではDLL(opengl32.dll)、LinuxではSOとして利用できます。

SDKとバイナリ再配布可能ファイルはOpenGL.orgから入手できます。

使用している言語によっては、OpenGLラッパーが利用できる場合があります。これらは、特にあなたの言語で動作するように設計されたクラスまたはAPIライブラリです。たとえば、C#/VB.NET開発者が利用できる.NETOpenGLラッパーがあります。このテーマをグーグルですばやく検索すると、いくつかの結果が得られるはずです。

于 2012-05-12T14:05:06.433 に答える
1

OpenGL APIには新しいバージョンがリリースされることがありますが、これらの更新は本質的に下位互換性があります。さらに、新機能は通常拡張機能として追加され、どの拡張機能が存在するかを検出し、ローカルで利用可能でサポートされているもののみを使用することができます...したがって、ソフトウェアを構築して、新しい機能が利用可能になったときにそれを利用できますが、実行されていないときでも実行できます。

APIは個々のドライバーとは関係ありません。ドライバーはAPIを変更せずに更新できるため、ドライバーが常に更新されるという事実は、ソフトウェアとの互換性の目的では重要ではありません。そのため、開発対象のAPIバージョンを選択できます。また、ターゲットオペレーティングシステムにそのAPIと互換性のあるバージョンのOpenGLライブラリが付属している限り、ドライバーの更新によってソフトウェアの機能が損なわれることを心配する必要はありません。ローカルで利用可能なライブラリに対して動的にリンクされます。

于 2012-05-12T14:52:07.193 に答える