2012-05-12 9 views
1

私はオンラインではOpenGLと何百万という答えがありますが、私はコンピュータ上のファイルの意味を理解しようとしています。私は研究して、OpenGLが異なるコンピュータグラフィックスカードのマルチプラットフォームトランスレータとして機能することを発見しました。だから、それはDLLですか?
dllの場合は、dllのバージョンをダウンロードして(できれば最新版)、それを使って、それが何であるかを知ることができませんでしたか?OpenGLとは何ですか?

EDIT:Windows dllの場合、古いバージョンを使用するOpenGLゲームを作成します。以前のバージョンの他のコンピュータではサポートされていない場合はどうなりますか?私は他のWindowsコンピュータでサポートされるように、私のゲームでdllを運ぶことを許可されましたか?または、dllはグラフィックスカードと厳密に特定のコンピュータで通信するように設定されていますか?

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

答えて

4

OpenGLには2つの「パーツ」があります。これはKhronos Groupによって数ヶ月に一度更新される仕様で、グラフィックスカードメーカー専用のグラフィックスカードメーカーが作成したドライバです。

OpenGL APIについての基本的なことは、OpenGL APIがどのように動作すべきか、予想される動作、予期しない動作と見なされるタイミング、エラーの発生タイミングなどを記述しています。ドライバの作者は、アプリケーションの作成者は、ドライバから何を期待するかを知ることができます。これは、OpenGLが本当に "ある" - アプリケーションとドライバを一緒に保持する接着剤です。 You can read all the specifications for each version here.

OpenGL APIを実装し、仕様に準拠しているドライバがあります。グラフィックスカードのメモリとの間でデータのコピー、グラフィックスカードのレジスタへのデータの書き込み、状態の追跡、頂点の処理、シェーダのコンパイル、数百のストリームプロセッサに同時に頂点の変換を指示するOpenGLなしでは、各グラフィックスカードモデルは、それが構造化された方法のために、そのグラフィックスカードに対してのみ機能する、わずかに速い別個のAPIを持つことになります。 OpenGLでは、ドライバはすべて同じAPIに対して書かれ、アプリケーションのコードはすべてのグラフィックカードで実行されます。

OpenGL仕様への準拠は、ドライバのアップデートでは変更されません。ほとんどのドライバアップデートはマイナーなバグを修正するか、内部的な最適化を行うでしょう。

私は、ある時点で、あなたはGL_TEXTURE_2DglEnable()の可能な値として、廃止予定されているにもかかわらずミップマップにOpenGLの3ウェイ(glGenerateMipMaps())を生成することができる前にglEnable(GL_TEXTURE_2D);を呼び出す必要があったATIドライバの小さなバグがありましたね。私はそれが今修正されているかどうかは分かりませんが、それはドライバーの作家が間違いなく見落としている可能性があるエッジケースのタイプです。

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

+0

「ドライバ」という言葉の使い方に注意してください。オペレーティングシステムの面では、実際にはライブラリについて話しています。ドライバーはまったく違う獣です。 – Polynomial

+0

OpenGLの現在のバージョンは4.2です。さて、私が知る限り、バージョン4.2はかなり異なるセットの関数を持っているので、バージョン2.1または3.0のコードをバージョン4.2でコンパイルすることは期待できません。したがって、基本的に、これらの機能は追加され、以前のバージョンより効率的に動作するように変更されていますか? – Codesmith

+0

@AUTOバージョン2.1から3.0までのコードは、バージョン4.2でコンパイルすることができます。これは、仕様が根本から前方互換性を備えているためです。 –

3

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

は、あなたは、OpenGLのラッパーが利用可能があるかもしれません使用しているどの言語に応じて、OpenGL.org

からSDKとバイナリ再配布可能を得ることができます。これらは、あなたの言語で特別に動作するように設計されたクラスまたはAPIライブラリです。たとえば、C#/ VB.NET開発者が利用できる.NET OpenGLラッパーがあります。件名に関するすばらしいGoogle検索では、いくつかの結果が得られるはずです。

1

OpenGL APIには新しいバージョンがリリースされることがありますが、これらのアップデートは事実上下位互換性があります。さらに、新機能は一般に拡張機能として追加されており、拡張機能を検出してローカルで使用可能でサポートされている拡張機能のみを使用することができるため、新しい機能を利用できるようにソフトウェアを構築できます彼らがいないときでも実行することができます。

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

+0

したがって、変化し続けるOpenGLの部分は「ドライバ」部分ですか? APIの部分は定数ですか?それでは、この「ドライバー」は何をしていますか? – Codesmith

+2

OpenGLのドライバ部分はありません。彼は、OpenGLライブラリが話しているグラフィックカードドライバについて語っています。すべてのグラフィックスカードドライバは特定の標準を実装しているため、異なるグラフィックスAPI(DirectX、OpenGLなど)と話すことができ、OSはそれらとも話す方法を知っています。 – Polynomial

関連する問題