2017-07-01 2 views
1

私のゲーム/レンダーエンジンを抽象化するとき、私は、私がどのコンテキストを操作しているかを確実に知る方法が必要であるという問題を打ち明けました。私が操作しているOpenGLコンテキストを識別する方法はありますか?

私はOpenGL仕様で動作するソリューションを探しています。これは標準のOpenGLで、ラッパーライブラリxyzによって提供されるものはありません。

+0

私はこの質問をよく理解していません。 OpenGLコンテキストを作成しました。だからどのような文脈がどのように分かっていないのですか?あるいは、複数のコンテキストを持っていて、どれが現在であるかを調べようとしていますか? –

+0

@NicolBolas私はおもしろい新しいおもちゃで遊んでいますか?私が持っている状況は、実際のウィンドウからrender-/ opengl-codeを分離しているため、ウィンドウ間でコンテキスト(コンテキストと多かれ少なかれ同義語です)を移動できます。私は、シェイダーとプログラムオブジェクトを持つフィールド・デイを持っています。オブジェクトIDとコンテキストIDの間のマッピングを適切に管理する方法が必要なところにあります。コンテキストを特定するには、いくつかの外部手段しかし、私はまだOpenGL仕様の中で何が利用できるのか不思議です。 –

+0

@NicolBolasまた、私はglGetPointerと美しい[glDebugMessageCallback](https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glDebugMessageCallback.xhtml)に遭遇しました。これは、 OpenGL 4.3以降のポインタ私は現在、その方法が堅牢かどうかを調べるために、もっと掘り下げて/読んでいます:) –

答えて

0

OpenGL 3.3コアプロファイル(最も一般的なバージョンiirc)で何も見つかりませんでしたが、バージョン4.3以降で利用できるものがあります。

glDebugMessageCallbackでカスタムユーザーポインタを設定でき、そのユーザーポインタをglGetPointervで取得できます。

したがって、コンテキストをマークするためにユーザポインタを悪用する可能性があります。

1

ショート:いいえ、

OpenGLの仕様は、コンテキストが作成および管理する方法を気にしない「OpenGLの仕様の範囲内で、」これを実行する方法はありません。 オペレーティングシステムおよび/またはプラットフォームがこれに責任を負います。

長時間:アプリケーションを制御すると、OpenGLコンテキストを切り替えるタイミングを検出できるはずです。しかし、これがあなたが使いたい方法でない場合、別の設定(OpenGLバージョンのような)で異なるコンテキストを設定したり、別々のスレッドで動作している場合を除き、他の方法はありません。ここでも、この第二の一つがちょうどトリック...「OpenGLの仕様」ではありません...

2

私は、OpenGL仕様の範囲内で機能するソリューション

いや、ダメを探しています層をステップアップOSのウィンドウシステムバインディングにwglGetCurrentContext()/glXGetCurrentContext()/aglGetCurrentContext()/etcなどを問い合わせてください。

関連する問題