OpenGLでの GPU プログラミングのために、これらの多くに出くわしました。彼らはどのように機能しますか。ハイパーリンク (OpenGL レジストリ) の実際の例が役立ちます。そのような拡張機能をどのように書くことができますか?
5 に答える
それらはどのように機能しますか。
OpenGL拡張機能は、拡張機能の仕様を読み、新しい関数/列挙子/GLSLの追加が何をするかを理解することで「機能」します。次に、適切なOpenGLロードライブラリを使用して、拡張機能が使用可能かどうかを確認します。そうである場合は、そのOpenGL実装のプログラムでこれらの関数/列挙子/GLSLの追加を使用できます。
GLSLと相互作用する拡張機能の場合は、もう少し作業を行う必要があります。シェーダーは、拡張機能を要求するように作成する必要があります(したがって、拡張機能が利用できない場合、コンパイルに失敗します)。使用する拡張機能を明示的に指定する必要があります。
ハイパーリンク(OpenGLレジストリ)からの実用的な例が役立ちます。
いいえ。利用可能な拡張機能をロードし、列挙子などを提供するOpenGLロードライブラリはたくさんあります。それらの1つを使用してください。
どうすればそのような拡張機能を書くことができますか?
あなたはそうしない。少なくとも、機能しているものではありません。
OpenGLは仕様に過ぎず、読むことができるPDFファイルです。OpenGLの実装は、ハードウェアでOpenGLを使用してほしいときに誰かが書くものです。
OpenGL拡張機能は、OpenGL自体によく似ています。ドキュメントのセットにすぎません。実装は拡張機能のセットを公開する場合がありますが、公開するかどうかはその実装の作成者次第です。それのユーザーではありません。
使用可能な形式を使用して、OpenGL拡張機能を作成できます。しかし、それは単なる別の文書になります。しかし、オッズは非常に高く、誰もそれを実装しません。したがって、インターネット上のテキストファイルになります。
独自の GPU ハードウェアを作成したり、ソフトウェア OpenGL 実装を作成したりしない限り、独自の OpenGL 拡張機能を作成することはありません。拡張機能は、実際には、ハードウェア ベンダーが自由に実装できる仕様にすぎません。
OpenGL 拡張機能は、OpenGL のコアが提供しない新しい機能または拡張された機能を OpenGL 実装が提供するための手段です。拡張機能の使用を避けるべきものと見なすべきではありません。これは、OpenGL ユーザーの標準的な慣行として受け入れられるべきです。
一部の拡張機能は、1 つの特定のハードウェア ベンダーのみが公開する機能を公開しますが、多くの拡張機能は複数の実装によって実装されます。特定の実装からどの拡張機能を使用できるかを判別するメカニズムがあります。
彼らはどのように機能しますか。
最近のオペレーティング システムで見られる OpenGL ライブラリは、OpenGL の非常に基本的なバージョンのみをカバーしています。通常、OpenGL-1.1 から OpenGL-1.5 の間の範囲の何か。OpenGL ドライバーがユーザー アプリケーションに公開する最新機能はすべて、拡張メカニズムを通じて提供されます。
拡張メカニズムは、標準システムの OpenGL インターフェイス ライブラリが提供するものよりも新しい、またはより高度な機能を GPU のドライバーが公開するための方法です。
(Nicol Bolas のコメントによる更新):拡張機能と拡張メカニズムには違いがあることを理解することが重要です。拡張メカニズムは、拡張機能{glX,wgl,…}GetProcAddress
を公開するために最初の OpenGL バージョンとともに最初に導入された関数です (これらの関数は OpenGL の一部ではありませんが、OpenGL コンテキストをセットアップするために必要な OS サポート インフラストラクチャです)。その後、それらは完全な機能を備えた API アクセスにアップグレードされましたが、名前が固定されていました (たとえば、ライブラリ GLEW、つまり GL Extension Wrangler は、拡張機能をロードするために名前が付けられていますが、それ自体は拡張機能ではない、通常の、しかしそれ以降の OpenGL バージョンの機能をロードします)。 、 同じように)。
拡張機能は、特定のOpenGL 仕様の一部ではありませんが、OpenGL 仕様の実装で使用できる機能です。それ以降の OpenGL バージョンでは、拡張機能がそのまま仕様に含まれる可能性があります。しかし、OpenGL の新しいバージョンでは、機能の基になっている拡張機能に特定の変更が加えられることもよくあります。
GL_TEXTURE_3D や GL_TEXTURE_CUBE_MAP などのテクスチャ タイプは、変更されずに後の OpenGL バージョンの一部になった拡張機能の良い例です。
ハイパーリンク (OpenGL レジストリ) の実際の例が役立ちます。
そのような拡張機能を使用する方法を意味しますか?
そのような拡張機能をどのように書くことができますか?
ここで何かを混乱させたと思います。そのような拡張機能を作成するのは、OpenGL ユーザーの仕事ではありません。OpenGL 拡張機能は、特定の OpenGL 実装に新しい機能を追加する方法ではありません。
まったく逆です。システム ライブラリや OpenGL 仕様に含まれているものよりも多くのことができる OpenGL 実装は、拡張機能によって高度な機能を提供します。
独自の拡張機能を作成したい場合、OpenGL ドライバーの開発者であり、最新世代の GPU の非常に新しい機能をユーザーが利用できるようにすることが任務でした。
OpenGL 拡張機能は基本的に、特定の GPU の機能を示すフラグです。この知識により、その機能を活用できる場合がありますが、質問に基づいて、特定のことをしたい場合にのみ役立つため、今のところ無視します。また、特定の拡張機能に依存すると、アプリを問題なく実行できる GPU の大部分が除外される可能性があることにも注意してください。