問題タブ [glx]
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++ - GLコンテキストを設定するときの「フレームバッファ」の目的は何ですか?
このサンプル コードでは、コンテキストを設定する前にフレーム バッファを処理します。
関数の man ページを読みましたが、何が起こっているのか正確にはわかりません。
だから私の質問は、GLXのフレームバッファとは正確には何ですか?それを構成することはどれほど重要ですか?
xorg - IntelSandyBridge (Intel HD Graphics 3000) での「X エラー」BadAlloc GLX BadContext
GraphicsModi に必要なdebian stable3 つのパッケージを含む ThinkPad X1 (1294-3QG) を実行しています。squeeze-backports
そのカーネルの実行中に、たとえば起動すると、paraview次のエラーが発生します。
ネットのどこかに、でメモリ設定を提供するためのヒントを見つけましたがxorg.conf、それでも問題は解決しませんでした。
現在の安定したカーネル内で起動すると問題なく動作します。
実行glxgears結果は同様です:
xserver-xorg-video-intelさらに、 (およびすべての依存関係libdrm-intel1 libxfont1, xserver-common, xserver-xorg, xserver-xorg-core, xserver-xorg-input-evdev, xserver-xorg-video-fbdevと) をバックポートに更新することで問題を解決しようとしましxserver-xorg-video-vesaたが、うまくいきませんでした。
追加、エントリを見つけました
の出力でdmesg。
opengl - glXCreateContextを使用したメモリリーク
Xlibとglxを適切に初期化してクリアするためのクラスを作成しました。
残念ながら、valgrindはメモリリークを報告します。
私はVirtualGL(librrfaker.soを説明しています)を使用していることに注意してください。私が間違ったことはありますか?または、これはVirtualGL側のバグであると想定する必要がありますか?
c++ - VISUAL_ID と screen->root_visual が等しくない場合、glXCreateWindow が機能しない
私はこれに非常によく似たコードに取り組んでいます:
http://xcb.freedesktop.org/opengl/
デフォルトのフレームバッファ構成を使用すると問題なく動作しますが、特定の構成を照会しようとすると失敗します。私は、 VISUAL_ID(visualIDコード例では)いつでも失敗し、screen->root_visual異なる値であると判断しました。
エラーメッセージは次のとおりです。
これを修正するにはどうすればよいですか?
c++ - マルチスレッド環境での XSetWMProtocols と glXCreateContext の呼び出し順序
編集:レンダラーの分離問題全体に対する優れた解決策を以下に投稿しました。
私は最近、マルチスレッド X11 環境で OpenGL をいじっています。次のチュートリアルを見つけました。これは、コンパイル、リンク、および正常に実行されます。
その後、自分のニーズに合わせてコードを調整しようとした後、奇妙な問題に遭遇しました。
チュートリアルでは、XCreateWindow、glXCreateContext、XSelectInput、および XSetWMProtocols の呼び出し順序は次のとおりです。
XCreateWindow と XSelectInput/XSetWMProtocols は異なるディスプレイ接続を使用することに注意してください。
ただし、呼び出しの順序を変更すると、
プログラムは失敗します
失敗した要求の X エラー: BadWindow (無効なウィンドウ パラメータ)
失敗した要求のメジャー オペコード: 2 (X_ChangeWindowAttributes)
失敗した要求のリソース ID: 0x5000002 失敗した要求のシリアル番号: 17 出力ストリームの現在のシリアル番号: 18
XSetWMProtocols が原因のようです。
異なるディスプレイ接続が使用されていたので、そもそも全体が機能しなくても驚かないでしょう。しかし、どういうわけか、glXCreateContext を呼び出した後は、すべてが魔法のようにうまくいっているように見えます。
私は X11/GLX プログラミングに比較的慣れていません。glXCreateContext はどのような魔法を実行しますか? それとも何か他のことが起こったのですか?または、OpenGL とマルチスレッドは常に問題を引き起こすように見えるため、単に先に進む必要があるかもしれません。
私の解決策:
私は怠け者で、チュートリアルのアプローチを使用していました。私のプロジェクトにfreetypeを追加するまではうまくいきましたが、突然BadWindowが再びクラッシュしました。そのため、たとえすべてがうまくいっているように見えても、別のスレッドで作業している場合、X11 は、あなたがいない間にメモリをいじくり回しています。(私ではありませんでした。valgrind で確認しました)
私の現在の解決策は nm がコメントしたとおりです。私はすべてを GUI スレッド (X11 および GL/GLX 呼び出し) に入れました。そのリソースは他のスレッドでは決して利用できません。ただし、レンダリング ループが遅くなる可能性があるため、次の 2 つの点に注意する必要があります。
- メッセージ処理が遅いとレンダリングが遅れます(以下のilmaleが述べているように)
- 遅いレンダリングはメッセージ処理を遅らせます (私の懸念事項)
最初の問題は簡単に修正できます。アプリ ロジックに関連する XEvents をキューに入れ、別のスレッドからそれらを取得する stl デキューまたはリスト、または任意のコンテナーを作成します。STL がスレッドセーフであることを確認し、疑わしい場合は独自のキューを実装してください。コンテナーのサイズに待機条件を設定すると、XNextEvent などのブロッキング呼び出しをシミュレートすることもできます。
2 つ目の問題は厄介です。レンダラーが 1 fps 以下の場合、ゲームやアプリケーションは役に立たないと主張するかもしれません。それは本当です。しかし、たとえ 0.1 fps であっても、いくつかの kill シグナル (ウィンドウの破棄アトムなど) を処理できれば素晴らしいことです。私が考えることができる唯一の解決策は、約1000個のスプライトごとにレンダリングした後に新しいメッセージをチェックすることです. それらをコンテナに送信し、レンダリングを続行します。もちろん、その場合、レンダリング スレッドにユーザー スクリプトやその他の未知のコードを実行させることはできません。しかし、それでは、レンダリングを他のスレッドから分離するという考えは無意味になると思います。
お役に立てれば。
:
opengl - OpenGLをサポートする仮想マシン
仮想マシンでコンパイル、自動ビルド、自動テストを行うアプリケーションがあります。仮想マシンの「プロバイダー」は、この操作をWindowsと複数のLinuxディストリビューションの両方で同時に実行する必要があるため、クロスプラットフォームである必要があります。私たちのアプリケーションはOpenGLに依存しており、正しく動作するためにはかなり新しいバージョンのOpenGLが必要です。
ホストマシンを介してハードウェアアクセラレーションを実行できるため、Oracles Virtual Boxで適切な経験があり、ある程度の努力で上記のアクションを実行できます。ただし、ホストマシンに非常に要求が厳しいため、多少制限があり、同時に実行される多くの仮想ボックスにはあまり適していません。
理想的には、Amazon EC2クラウドコンピューティングが解決策になる可能性がありますが、ここでは「通常の」問題に遭遇します。これにより、Linuxディストリビューション(Ubuntuなど)を簡単に起動して実行できる可能性がありますが、非常に困難な壁にぶつかります。アプリケーションをコンパイルしてテストできるようにするために、いくつかのOpenGLドライバーのインストールを開始したい場合。mesa-driversでさえ、glxinfoまたはglxgearsを実行できる程度まで起動して実行することは不可能です。
この問題に直面しているのは私たちだけではありません。他の人はどうしますか?
c++ - Ubuntu で GLX ライブラリを正しくリンクする
これらの X11 + OpenGL の組み合わせの 1 つをコンパイルしようとしていますが、コンパイラがうまくいきません。特に、私は得る:
私が試してみました
リンカーへの引数として、およびそれらのいくつかの順列として、これまでのところ運がありません。
私はUbuntu 12.04を実行しています.openglに関連するすべての開発パッケージをインストールしましたが、あいまいな考えが関連している可能性があります。私はC++でも開発しています.openglヘッダーが準備されていないと問題を引き起こす可能性があります.しかし、それらは正しいですか?
/usr/lib/x86_64-linux-gnu/ で fgrep を使用してシンボルを明示的に探しましたが、そこにはありません。さらに、「nm」はシンボルがないと言っています。
では、glx とリンクする正しい方法は何ですか?
編集: リンクの問題です。Python がコンパイルされた (そして正しくリンクされていない) モジュールをロードしようとすると、エラーが発生します。コンパイル時ではありません。
編集:これがコンパイルログです
関数の呼び出し方法は次のとおりです。
c++ - OpenGL 4.3 コンテキストを作成すると GLX がクラッシュする
私は SDL2 と C++11 を使用してゲーム エンジンを構築しています (個人的なプロジェクトとして、楽しみと練習のために)。私がやりたいことの 1 つは、サポートされている最新バージョンをグラフィックス ドライバーで使用することです。バージョンに基づいて、エンジンのグラフィックス部分のレンダリング方法が異なります。このようにして、関連性があり便利な OpenGL の最新機能を使用できるだけでなく、古いハードウェアもサポートできます。私が考えることができる2つの方法があります:
サポートされている最新バージョンの OpenGL を検出して使用していますが、それを行う方法が思いつきません。はい、Google を試しました。
試行錯誤を使用して、最新バージョン (4.3、ただし、ドライバーを更新したにもかかわらず、私の GTX 460 は 4.2 までしかサポートしていません) から開始し、それが失敗した場合 (SDL をチェックして NULL コンテキストを返すことで検出します) )、バージョン番号を下げて再試行します。
私が使用する方法 (#2) は、4.3 コンテキストの作成直後に失敗します。現在、グラフィックス ドライバーが 4.2 しかサポートしていないことはわかっていますが、GLX はエラーをスローし、NULL コンテキストを与え、プログラムを続行させるように設計されていると思っていましたが、代わりにコンテキストの作成の失敗を乗り越えることはできません。 . GLX がどのように動作するかについての私の仮定は間違っていますか? コンテキストを作成せずに、サポートされている最新のバージョンを検出する方法はありますか?
一部の人々がエラーを示す完全で最小限のソースを見たいと思っていることを知っているので、ここに示します:
また、そのコードを 4.3 ではなく 4.2 コンテキストで開始するように変更すると、問題なく動作します。したがって、具体的には 4.3 コンテキストを作成する際にエラーが発生します。
osx-lion - OS X Lion で NV-GLX の拡張子が見つからない
「ssh -X machine」を使用してリモートの Linux マシンに接続し、グラフィカル アプリケーションを実行すると、そのウィンドウが X Window を使用してローカルの OS X Lion マシンに表示されます。エラーが発生します
「Xlib: 拡張機能「NV-GLX」がディスプレイ「localhost:11.0」にありません。」
アプリケーションの動きが非常に遅い。OS X で NV-GLX を使用する方法や、この問題を回避する方法はありますか?