OpenGLバインディングとエンティティ間の関係


12

これは主にドキュメントに関する質問です。これが、プログラマやスタックオーバーフローなどではなく、尋ねるのに適切な場所であることを願っています。

私はOpenGL仕様を読みませんでしたが、書籍(Red Book)やさまざまなチュートリアルから、APIのさまざまなオブジェクトと部分がどのように相互作用し、関係するかを正しく把握できません。

たとえば、VAOがバインドされている場合、VBOをバインドして属性を設定すると、VBOがVAOにバインドされます。

しかし、多くのオブジェクトがあり、それらの関係は異なる場合があります。たとえば、VAOは現在のシェーディングプログラムとはまったく関係ありませんが、描画操作の結果は両方に依存する場合があります。

さまざまなOpenGLコンポーネントすべての中に、A-binds-to-BまたはA-and-B-are-used-by-Cのような関係があります。これらすべての関係は、コンテキストの状態を変更する方法、物事を変更する方法、物事を一緒に保存して最適化する方法を決定することに同意します。

これらの関係だけを説明するリソースを探しています。UMLダイアグラム、グラフ、さらにはテキストドキュメントのように、呼び出しに焦点を当てていませんが、さまざまなOpenGLコンポーネントが相互作用し、相互に関連付ける方法を簡潔に説明します。

そのようなリソースの場所を知っていますか?


3
いい質問ですね。その重要な質問に対する非常に明確な答えなしに、OpenGLライブラリ/エンジン全体を稼働させました。
デビッドヴァンブリンク

1
VBOをバインドしても、VAOにはバインドされません。これは代わりにで実現されglVertexAttribPointer()ます。OpenGLオブジェクトの図はかなり浅くシンプルです。実際には、OpenGLにはほんの一握りの異なるオブジェクトしかありません。VAOは属性にバッファーを使用します。バッファテクスチャはバッファによって支えられています。フレームバッファにはテクスチャが添付されています。描画コマンドは、現在のVAO、現在のプログラム、現在のフレームバッファー、現在のサンプラー設定、および現在のインデックスバッファー/間接バッファーを使用します。おそらく自分で図を描くことができます。
ディートリッヒEpp

1
申し訳ありませんが、私はあなたのために絵を描くつもりはありません。
ディートリッヒEpp

2
良い質問です。そして、私が立っているところから、かなりの賞金をかけずに包括的な答えを得ることができますように。
エンジニア

2
OpenGLの設計は、グローバル変数を使用しない理由に関する素晴らしい議論です;)(API全体がグローバルデータの1つの巨大な混乱です)
glampert

回答:


7

そこで、私は自分の図を描いてみました。包括的ではありません。主に私が今いくつかのことに興味がないからです、そしてそれを読みやすくしたかったからです(正式に指定されたグラフでなくても、簡単に読めるはずです)。

また、一部の人々にとって興味があるように思われるので、ここでそれを共有してフィードバックを得て、チェックしてもらいたいです。OpenGL wikiを参照として使用して正確性を確認しましたが、間違いがあった可能性があります。

また、提供された情報では不十分な場合、または図に含める価値のある重要な関係を省略した場合は、お気軽に提案してください。更新を維持するよう努めます。

OpenGLバインディング関係図

繰り返しますが、エラー、問題、提案をお気軽にご報告ください。大歓迎です。

編集

  1. 描画と属性の関係が欠落していました:レンダリング時に有効にするには属性を有効にする必要があります
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.