問題タブ [openglcontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 非メイン スレッドからロードされた VAO でクラッシュする
私のコードでは、2 つのバッファー オブジェクトと頂点配列オブジェクトによってサポートされるオブジェクトのラッパー クラスがあります。コンストラクターでこれを使用してそれらを生成します (少し簡略化されています)。
printf は、メイン スレッドの最初のいくつかの作成でこれを提供します。
その間に、VAO #2 とバッファ #3 を使用する 1 つのインデックスのないものがあります。これは私には問題ないように見えます。各配列オブジェクトには、2 つの固有のバッファーがアタッチされています。
このコードは、後でバックグラウンド リソースを読み込む (むしろ生成する) ためにも使用します。このそれぞれのスレッドには、glfwCreateContext を使用して作成され、メイン ウィンドウとリソースを共有する独自のコンテキストがあります。これらのリソースが最初に作成されると、次の出力が表示されます。
この直後に、VAO #1 を使用して、さまざまな量の頂点を使用して 9 回描画し、必然的に何らかのセグメンテーション違反が発生します。
私の質問は、これはバグですか、それとも明らかに間違ったことをしていますか? Nvidiaカードを搭載したDellラップトップを実行しているLinux Ubuntuでこれをテストしています。
opengl - QTMovie のテクスチャを OpenGL で 2 回描画する
現在、OpenGL を使用して QTMovie のフレームを NSOpenGLView に表示しています。そのために、次のコードでテクスチャ コンテキストを作成しています。
次に、ビジュアル コンテキストをムービーに割り当てて、フレームをそのコンテキストに描画します。私はこのビットで実際のフレームを取得しています:
は_currentFrameTex
CVOpenGLTextureRef です。
1 つのビューではすべて正常に動作しますが、同じフレームを 2 番目のビューに描画したいのですが、その方法が想像できません。
それを行う最も簡単な方法は何ですか?もちろん、1 秒あたり 60 回 (少なくとも) 呼び出されるため、パフォーマンスも優れている必要があります。
c++ - SDL2 - OpenGL コンテキストが作成されているかどうかを確認する
SDL2 と OpenGL を使用してアプリケーションを作成していますが、3 台の異なるコンピューターで正常に動作しました。しかし、別のコンピューター (更新された arch Linux) ではそうではなく、次のエラーでクラッシュします:
だから私の質問は: OpenGL コンテキストが既に作成されているかどうかを確認するにはどうすればよいですか? そして、それがすでに作成されている場合、どうすればハンドルを取得できますか?
これができない場合、どうすればこの問題を回避できますか?
android - Android ライブラリ プロジェクト: コンテキストなしでリソースを取得する必要があります
最初にいくつかの背景(質問をする人がそれを提供するのが好きです):私は図書館プロジェクトを書いています。これは、単純な OpenGL の「グラフィックの歪み」ライブラリです。ユーザーは、単純な呼び出しで「リージョン」と呼ばれる特定のオブジェクトを作成できるはずです
次に、それらにさまざまな歪みを定義して描画します。
それだけです。ライブラリは、OpenGL を使用して、さまざまなユーザー定義の方法で歪んだリージョン (実際には長方形のビットマップ) を描画します。
ここで、問題: ライブラリは、その頂点シェーダーとフラグメント シェーダーにアクセスする必要があります。これらは、リソースと共に「raw」フォルダーに格納されている .glsl ファイルです。そのためには Resources オブジェクトにアクセスする必要があり、そのためには Context オブジェクトが必要です。したがって、現在のところ、ライブラリは最初に呼び出しで初期化する必要があります
これは私にとって大きな問題です。なぜなら、この IMHO は API 全体をぎこちなくするからです。このいまいましいコンテキストがなければ、何も初期化する必要はなく、ユーザーは必要なときにいつでもすぐに新しいオブジェクトを作成できます。これは、ドキュメントで説明するのがエレガントで簡単です。別の init() 呼び出しは、Context オブジェクトをライブラリに渡すためにのみ必要であり、Resources オブジェクトを取得するためにのみ必要であり、シェーダー コードを含む 2 つのファイルを開くためにのみ必要であり、これらすべてが非常に扱いにくいものになっています。 .
代わりに、シェーダー コードをライブラリ内の静的に初期化された文字列に単純に移動することを考えていましたが、これは開発にとって面倒です (シェーダーは数百行の長さの非常に複雑なコードであり、それらを別の .glsl ファイルに保持すると、とりわけシンタックスハイライトを持つことができます)
何かアドバイス?