OpenGL一覧

GLSL の Interface Block を眺めて

比較的最近の OpenGL ではシェーダー変数の attribute, varying などが廃止されて、in, out を使って記述することになっています。
そんな中、テセレーションのシェーダーコードを眺めていてふと思ったことがありました。

続きを読む



OpenGL と DirectX9 で共有リソース

HDD の中の実験コードらを整理していたらずいぶん前に作っていた NV_DX_interop 拡張を利用したコードを発見しました。
OpenGL と DirectX9 を1つのアプリケーションの中で使い、リソースを共有して使えるという点が魅力的です。

WGL_NV_DX_interop

この WGL_NV_DX_interop 拡張は名前の通り NVIDIA のベンダー拡張として定義されています。
詳しい説明は OpenGL Registry の https://www.opengl.org/registry/specs/NV/DX_interop.txt を参照してください。

この拡張では OpenGL と DirectX9 のリソースを共有を実現します。以下のリソースが共有できるようです。

  • テクスチャ(2D, 3D,Cubemap)
  • 頂点・インデックスバッファ

API をまたいで、リソースを使えるという点で非常に興味深いですね。
続きを読む



libX11 未使用で linux で OpenGL アプリを作る?!

今やレガシー扱いとされている X11 ですが、wayland への移行もあまり進んでいないようです。期待していた Fedora 24 でも採用が見送られてしまいました。 今回はそんな X11アプリを libX11 を使わないで組んでみたいと思います。 OpenGL を使ってアプリケーションを作る場合には X11 のオブジェクト群はほとんど使用しないで済むので最初のウィンドウだけ作ればなんとかなるんじゃないでしょうか.

続きを読む


MobaXterm が便利

SSHのクライアントとしては Tera Term を愛用しているのですが、とあることから MobaXterm というソフトを知ったので試してみました。これが便利でしばらく使ってみようと思います。

なにが良いかといいますと、これ単体で Xサーバーが内蔵されており、 OpenGL のアプリケーションも動作させることができた点にあります。このときの様子を撮影してみたので貼ってみました。
mobaxterm_opengl

これは Windows10 上で別PCに Ubuntu 16.04 LTS をインストールしたターゲットに接続して、試してみたときのものとなります。OpenGL アプリとして定番のものを動かしてみました。また OpenGL ES2.0 のアプリも動かしてみました。
どちらも動いていることが確認できます。

1つ残念な点は OpenGL は LLVMpipe によるソフトウェア実装が動いている点ですが・・・動くだけマシといったところですね。

この MobaXterm で設定で OpenGL のハードウェアアクセラレート ON というのが見当たったのですが、有効にしてみたところ妙な挙動になってしまいました。以下のように一見動きそうな感じなのですが、実際に動かすとフリーズしたかのごとく重い動作になってしまい・・・使えませんでした。

mobaxterm-opengl_2

他にもこのMobaXtermのよいところは、ホームディレクトリがすでに sftp で見えているため、ドラッグアンドドロップでファイルをやりとりできるところがあります。今までは別ソフト使っていたりしたのでこの1つに集約することができそうです。


X-Window なしで OpenGL ES2 を使う その3

Ubuntu で NVIDIA のボード&ドライバを使って試してみました。

NVIDIA のプロプライエタリドライバをインストール

今回使用したのが NVIDIA の Geforce 750 Ti だったのですが、
Ubuntu 15.10 の標準インストールで使える nouveau ドライバでは通常の描画からして異常で使い物になりませんでした。
そこでプロプライエタリドライバをインストールするに至りました。

ドライバのインストールは以下のようにして行いました。

このドライバをインストールしてもうまく動かないようならば、
最初の描画不正の点も相まってボード故障も疑うところでした。
実際のところ、ドライバのインストール後の再起動したあとからは正常に描画できるようになりました。

コマンドでインストールしましたが、GUIからもインストールは可能だと思います。
(Additinal Drivers 関連かSoftwareセンターからできるかと思われます)

プログラムの実行

X-WindowなしでのOpenGLなプログラムを実行してみました。
そもそもこのドライバ使用でも /dev/dri/card0 が出現していたので、
KMS有効であると考えて、先日のプログラムは動くのではないかと思った次第です。

しかし結果は drmOpen で失敗してしまうようで、動作確認に至りませんでした。
NVIDIA のプロプライエタリドライバでも/dev/dri/card0 へのアクセス可能なようでしたが、 drmModeGetResources で失敗してしまうようでした。もう一歩でうまくいきそうな感じがするだけに、残念です。

追記

どうやら KMS サポートしているという見え方がダミーだったようです。
/dev/dri/card0 あたりがすでにダミーデバイスノードとの情報を見つけました。
そのせいもあって、 weston も動作しないという情報もあるようです。

http://wayland-bugs.freedesktop.narkive.com/4zE7PwYd/bug-90323-weston-launch-drmmodegetresources-failed


EGL_MESA_platform_gbm 拡張

今更かもしれませんが、 EGL_MESA_platform_gbm という拡張が出現しているようでした。
さらりと中身を見てみると、 Xorg 関連の初期化不要で、 EGL と GBM の初期化だけで OpenGL ES が使えるようになるものと思われます。

手元の環境では VMware Player 6 のドライバおよび Fedora23 では、この拡張が出現しませんでしたが、 Mesa の今後の Version アップにより使えるようになるといいなと思いつつ待つことにします。


X-Window なしで OpenGL ES2 を使う その2

前回 実装はしたので、これらがちゃんと各環境で動くのかを確認してみたいと思います。

VMPlayer 6

VMPlayer6上での Fedora23 での結果は以下の通りです。
OpenGL ES 3.0 のコンテキストが生成されています。ベンダ名やレンダラ名から一応完全ソフトウェアエミュレーションで動いているというわけではなさそうです。
動作速度的にもドライバがちゃんと機能していそうです。

Radeon

Debian8 で RADEON HD 7750 が刺さっている環境での結果は以下の通りです。
OpenGL ES 3.0 のコンテキストが生成されており、オープンソースドライバで動いているようです。

ここでは省略ですが、DisplayPort, HDMI, DVI の端子を保持するボードのため、
これらの情報も Connector として検知できているようでした。

Intel

Debian8 で オンボードの Intel チップ(G41)でも同じように試してみました。
古いチップではありますが OpenGL ES 2.0 で描画可能でした。

こちらは VGA 出力でしたがコネクタタイプも正しく検知できてました.

NVIDIA

Debian8 で NVIDIA Geforce 750Ti で試してみました。

見ての通りオープンソースドライバで動いているようです。
こちらについても接続端子の情報はうまく取得できていました。

まとめ

簡単ですが各環境での動作確認を行いました。試してみた範囲ではうまく動作できているようです。
Linux におけるメーカー公式ドライバではちょっとインストールに手間取り十分な確認ができていませんのでご注意ください
(おそらく NVIDIA 公式 Linux ドライバでは動作しないと思われます・・・)


X-Window なしで OpenGL ES2 を使う

今まで Linux で OpenGL を使うといえば、 X Window (X11, Xorg) が必須と考えていました。組み込みな何かならフレームバッファ直指定で OpenGL が使えると思いますが、デスクトップ環境においては使えないと思っていました。
 しかし、割と最近になって Linux 側のほうで KMS (KernelModeSetting), DRM が進化して、X Windowなしでも OpenGL(ES2) を初期化して使用することが可能になっていたようです。 kernel 3.x 以降で /dev/dri/card0 などが存在している環境で使えるようです。
もちろん従来の方法で、EGL+GLES2 を X11 上で使うことも可能です。(このEGL,GLES2 を X11 で動かした日記はこちらに)

必要なもの

Fedora や Ubuntu なら以下のパッケージらが必要です。

X-Window が起動している必要はありませんでしたが、ライブラリは必要なようです。詳しく確認出来ていませんが、EGL,GLESv2 らが要求してしまうのかもしれません。

結果

X-Window なしで動いているのですが、スクリーンショットではわからないですね。VMware の中で動作させています。
kms-gles2-cube

実装方法など

X関連のコードは不要になのですが、代わりに色々と必要になるものがあります。ひとつは DRM (Direct Rendering Manager), もうひとつが GBM (Graphics Buffer Manager) です。これらの初期化が必要になります。

今回試しに Gist によるコード貼り付けで以下を説明していきます。 続きを読む