問題タブ [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.

0 投票する
1 に答える
1327 参照

c++ - opengl で GLX_EXT_texture_from_pixmap を使用して、ウィンドウ ピックスマップをテクスチャにバインドします。

GLX_EXT_texture_from_pixmap 拡張機能を使用してウィンドウ ピックスマップを OpenGL テクスチャにバインドする方法を知りたいのですが、うまくいきません。これが私のコードです:

これは私にXエラーをスローします:

これは の行で発生しglXBindTexImageEXT(display, glxpixmap, GLX_FRONT_EXT, NULL);ます。空のピックスマップを使用してテストして動作しましたが、XCompositeNameWindowPixmapこれを使用するとエラーが発生し、コードで何が問題になる可能性がありますか?

編集:

XCompositeNameWindowPixmap を使用すると常に黒い画像が返される別のコードを使用していることがわかりました。これは、VMware プレーヤーで ubuntu を使用しているために発生する可能性がありますか? 私はこのエントリのコードを使用します:

Qt と XComposite の問題

0 投票する
1 に答える
433 参照

c++ - グラフィックコンテンツをロードするためのスレッド

ゲームエンジンを作っています。Windows では、(wglShareLists を使用して) 共有された 2 つのコンテキストを持つ 2 つのスレッドがありました。うまくいきました。1 つのスレッドがリソースをロードしている間、もう 1 つのスレッドは単純なロード画面をレンダリングしていました。Linux には WGL はなく、glX のみです。正しい使い方がわかりません。現在、私のスレッドコードは次のようになっています。

次のようなエラー メッセージでクラッシュします。

私が間違っていることは何ですか?

0 投票する
2 に答える
1139 参照

c# - glXMakeCurrent は私に悪い一致を与えます

Windows プラットフォームと Linux プラットフォームの両方でレンダリング システムを動作させるのに問題があります。

Windows プラットフォームでは sharm のように動作しますが、Linux ではアプリケーションが次の例外で終了します。

System.InvalidOperationException: コンテキストを最新にすることはできません ---> System.ComponentModel.Win32Exception: BadMatch (無効なパラメーター属性) X エラーの詳細: X イベント名: '' (0) 表示: 0x8f17328 リソース ID: 4000011 エラー コード: 8 メジャー コード: '' (135) マイナー コード: 5

Derm.Render.RenderContext.MakeCurrent (IDeviceContext deviceContext、ブール値フラグ) で Derm.Render.RenderContext.CreateRenderContext (IDeviceContext deviceContext、Derm.Render.RenderContext hSharedContext、GLVersion バージョン) スタックトレース:

at (ラッパー管理からネイティブ) System.Windows.Forms.XplatUIX11.XFlush (intptr) at System.Windows.Forms.XplatUIX11.PostQuitMessage (int)

...

System.Windows.Forms.Control.CreateHandle () で System.Windows.Forms.Control.CreateControl() で

次のルーチンを使用して、「単純な」レンダリング コンテキストを作成できます。

私が直面している問題は、上記のコンテキストが OpenGL 情報 (拡張機能、レンダラーなど) をフェッチするために使用され、その後破棄されることです。続いて、属性を使用してコンテキストを作成します。

コンテキストが作成されますが、次にglXMakeCurrentX サーバーから問題のエラー (BadMatch) が送信されます。

私はCreateContextAttribsARB引数について疑った:x11DeviceContext.Displayx11DeviceContext.FBConfig. 実際、私が使用している「ドローアブル」は、実際にはMono実装System.Windows.Formsによって提供されるコントロールです。

これらの変数を初期化する方法を示すいくつかのスニペットを次に示します。

どうすれば初期化できますx11DeviceContext.Displayか?

どうすれば初期化できますx11DeviceContext.FBConfigか?

短いサンプル プログラムを提供できなくて申し訳ありませんが、コード ベースは非常に大きく複雑です。

何が起こっているのか分かりますか?


編集:

さらなる調査により、特定のビジュアルを使用して正しくレンダリングできることが明らかになりましたBadMatch。理由はわかりませんが、線と三角形が表示されます (ただし、ビジュアルがダブル バッファリングされていなくてもスワップする必要があります...)。

以前はBadMatch、「適合していない」ビジュアルを認識していなかったため、エラーが発生しました。実際、それらのいずれかを選択しました。ただし、ほとんどのビジュアルでエラーが発生します。

Mono 実装のクラスを確認しXplatUIX11、実際に でディスプレイを開きますXOpenDisplay

0 投票する
1 に答える
290 参照

opengl - glwMDrawingAreaWidgetClass は X11 転送経由で表示されますか?

TeleUSE を使用して Linux マシンで開発しています。私は自分の仕事をするためにマシンに PuTTY します。X11 転送をオンにして、Xming を実行しています。リモートで実行している場合、ウィンドウの OpenGL 部分が見えないように見えますが、優れたデモ「glxgears」はうまく機能し、表示されます。私が考えることができる唯一のことは、glwMDrawingAreaWidgetClass を介して OpenGL を実行しようとしていることですが、glxgears は新しいウィンドウですか?

コードの一部 (OpenGL 部分) を次に示します。

make_my_widget は、作成された XmFrame ウィジェットによって呼び出されます。

0 投票する
7 に答える
134571 参照

linux - glxgears の垂直同期を無効にする

場合によっては、Linux 3D アクセラレーションが実際に機能しているかどうか (glxinfo出力以外にも) を確認する必要があります。glxgearsこれは、ツールによって迅速に行うことができます。ただし、多くの場合、FPS はディスプレイの垂直リフレッシュ レート (つまり 60 fps) に制限されます。そのため、最新の CPU ではソフトウェア レンダリングでも 60FPS の glxgear を簡単に生成できるため、このツールは多かれ少なかれ役に立たなくなります。

これをすばやく簡単に解決するのはかなり難しいと思いました。私は自分の質問に答えます。うまくいけば、それはあなたの時間を節約します。

0 投票する
1 に答える
1670 参照

multithreading - いつ XInitThreads を呼び出す必要がありますか?

単一の X ディスプレイ接続を共有する 2 つ以上のスレッドがある場合、XInitThreads他の Xlib 呼び出しの前に呼び出す必要があることを理解しています。

しかし、すべてのスレッドがディスプレイへの独自の接続を持ち、その接続でのみ動作する場合はどうなるでしょうか? XInitThreadsそれでも必要ですか?また、GLX エクステンションを使用すると違いはありますか?

0 投票する
1 に答える
1371 参照

opengl - EC2 GPU インスタンスでのマルチプロセス ヘッドレス OpenGL 処理

私の中心的な問題は、EC2 GPU インスタンスで複数の OpenGL 実行可能ファイルを同時に実行する必要があることです。これを行おうとすると、非決定論的なセグメンテーション違反を観察しています。私の Macbook Pro では、同じプログラムが (並行して) 正常に実行されます。

アプリケーションは次のように機能します。

  • Python スクリプトは、複数のワーカー実行可能ファイルを起動します (つまり、スレッドプールsubprocess.call()からの同時呼び出し)。multiprocessing.pool.ThreadPoolPython スクリプトはワーカー入力として JSON ファイルを提供し、ワーカーは JSON をファイルに書き込みます。
  • 各ワーカーは、フラグメント シェーダーとレンダリングからテクスチャへのパイプラインを使用して、OpenGL でヘッドレス イメージ レンダリングを行う C++ プログラムです。Glut と GLX の両方のレンダリング コンテキストを使用してみました。

次の場合、アプリケーション全体が正常に動作するため、Python スクリプトにも C++ ワーカーにも重大なバグはないと確信しています。

  • EC2 GPU インスタンスで単一のワーカーを実行する
  • Macbook (OSX 10.7.4) で 1 つ以上のワーカーを実行しています

私が観察した特定のエラーは、数分の実行後に1 つ以上のワーカーが OpenGL 呼び出し (例: など) 内でセグメンテーション違反を起こすglTexSubImage2Dことです。glDrawElementsときどき、GLX コンテキストのセットアップ段階で失敗するのを見てきました (例:glXCreateNewContextglXChooseFBConfig)。より多くのワーカーを開始すると (つまり、並行性が高くなると)、エラーがすぐに表示されます。より少ない数のワーカーを開始すると、クラッシュするまでに 15 ~ 30 分かかることがあります。

ある種の OpenGL コンテキストまたはドライバーの問題があると思います。GLUT と GLX の両方を使用してコンテキストを設定しようとしましたが、どちらも役に立たないようです。

EC2 インスタンスを作成する手順は、http: //hpc.nomad-labs.com/archives/139に記載されている手順に非常に近いものです。私がインストールする特定のパッケージは次のとおりです。

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libegl1-mesa libglu1-mesa-dev mesa-utils mesa-utils-extra llvm-dev imagemagick libboost-all-dev python2.6 python-imaging python-matplotlib python-numpy python-scipy firefox clang python-setuptools python-scipy libatlas-dev ccache libpng12-dev libmagick++-dev glew-utils xvfb x11-utils qiv xinit

OSX と Linux の両方で、C++ ワーカー リンク: GL GLU glut pthread m X11.

以下を使用して xorg.conf を生成しました。

$ nvidia-xconfig -a --use-display-device=None --virtual=1280x1024

プログラムを実行する前に、次を実行します。

$ startx &; export DISPLAY=:0

nvidia 以外のドライバーをいくつか試しましたが、どちらも役に立たないようです。

OpenGL での並列処理に関する FAQ も参照しまし た。 :)しかし、マルチプロセスGLXは実現可能で安定しているようです。

誰にもアイデアはありますか

  • OpenGL/GLX 呼び出しが失敗するのはなぜですか? 本当にドライバーの問題が発生していますか? Mac GPU ドライバーには、OpenGL の同時使用を支援するある種の「魔法の機能」があるようです。同じ機能を持つ Ubuntu/Linux ドライバーはありますか?
  • EC2 GPU インスタンス (またはヘッドレス Ubuntu/Linux マシン) で複数の OpenGL 実行可能ファイルを同時に実行するためのベスト プラクティスはありますか? これを行うオープンソースソフトウェアを教えてくれる人はいますか?