私は新しいOpenGLベースのレンダリングエンジンに取り組んできましたが、次の問題に遭遇しました。glClear(); glUniformxx, ...
のようなOpenGL機能を公開したいのですが、呼び出し前にOpenGLコンテキストを作成する必要がありますそれらの機能のいずれか。問題は、OpenGL はコンテキストを管理していないので、gl関数を呼び出す前に定義されていない動作(ほとんどの場合segfault)が発生するという問題があります。ですから、私の質問はです。OpenGL関数が呼び出される前に、どのようにコンテキストを作成する必要がありますか?OpenGL - APIデザイン
- 私の最初のアイデアは、すべてのOpenGLの機能を公開し、それが有効なコンテキストを渡された場合のみ、それらを呼び出すだろうと、シングルトンクラスと呼ばれるGLFeaturesを作成することでした。
ほとんどの実装では、アクティブなコンテキストを管理するためにスレッドローカルストレージが使用されます。あなたはこれの上に独自のソリューションをレイヤーすることができます。アクティブなコンテキストを管理するウィンドウシステム関数をラップすると、呼び出し元のスレッドにアクティブなコンテキストがあるかどうかが常にわかり、必要な警告/エラーを生成したり発行したりすることができます。 –