「 OpenGL 」一覧



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 をまたいで、リソースを使えるという点で非常に興味深いですね。
続きを読む


Android 6.0 での GLextension


先日 GalaxyS2 を Marshmallow 化したこともあって、 OpenGL ES の Extension が気になりました。公式版の環境ではありませんが、取得してみたものを晒したいと思います。

そろそろ開発環境も Eclipse から Android Studio へ更新していかなきゃいけないのですが、それはまた後ほどと言うことで。
続きを読む


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


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

続きを読む


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


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 ドライバでは動作しないと思われます・・・)


Vulkan の情報


2015年に Vulkan がAPI公開、ベータドライバ公開という大きな変更がくるかなと思っていましたが、それは起こらず静かに終わりました。
しかし、最近になって Vulkan の情報が徐々に増えてきているのを感じています。

その中でも、 NVIDIA のドキュメントがすごく理解しやすい感じにまとめられていたので紹介します。

https://developer.nvidia.com/engaging-voyage-vulkan

DirectX12 を既に理解して触られている方は、 Vulkan ではこうなっているんだね、という程度で難しいところはないと思います。
ただ逆に DirectX12 を触ってみたけど、何やっているかよくわからない、という人にとってはこの情報はその理解を助けるものになるんじゃないかとも感じました。少なくとも自分は、 Allocation Management の図が非常に良い図に仕上がっていると思います。


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 によるコード貼り付けで以下を説明していきます。 続きを読む


Ubuntu 15.10 に更新(on Proxmox)


先日インストールした Ubuntu ですが 15.10 (本家?)のアップデートのダイアログが出てきたのでそのまま更新してみました。

Ubuntu 15.10

気になる点を確認してみたのでそれらについてメモしておきます。

Mesa3D

無事に Ubuntu 15.10 になったようです。このときいろいろなパッケージが更新されたようで Mesa 3D もまた変わっていました。
あいかわらず Proxmox 上なのでグラフィックスボードが使えないため、llvmpipe をつかったソフトウェアラスタライザですが、Mesa のバージョンが 11.0.2 へと更新されていました。実行時のパフォーマンスについては数字上はやや低下していましたが、気にするほどの変化ではないかと思います。

es2info の結果を以下に載せておきますが、変化なしでした。

GCC

バージョンは 5.2.1 になっていました。

ついでにクロスコンパイラのパッケージも確認だけしてみました。

クロスコンパイラの方もまた gcc5 となるようです!