OpenGL

Qt 5.11 の圧縮テクスチャ

Published Wednesday September 5th, 2018 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は The Qt Blog の Compressed Textures in Qt 5.11 を翻訳したものです。 執筆: Eirik Aavitsland, 2018年05月07日 最近のユーザーインターフェースはグラフィックスがどんどん派手になっていて、グラフィックメモリに収めたいテクスチャの数もどんどん増えています。リソースが比較的高価な組み込みシステムでは特にこの傾向が強く、パフォーマンスとの格闘にも成り得ます。1つの解として、グラフィックのアセットのメモリの使用量を減らすということがあげられます。 OpenGL テクスチャの圧縮には、起動時間と実行時のパフォーマンスを大きく改善する可能性があります: 起動時:jpeg や png のような圧縮形式の解凍の手間がありません 起動時:テクスチャは比較的小さいので、GPU メモリに転送する時間も短縮されます 実行時:メモリのバンド幅の利用が削減されます 解凍作業は単純でハードウェアで行われるため、パフォーマンスの大きな低下は起こりません Qt Quick 2 での圧縮テクスチャ Qt Quick 2 のソースコードには長い間 textureprovider というサンプルが含まれていました。これは ETC1 圧縮のテクスチャを pkm 形式のコンテナファイルから読み込んで画像として提供するようなものを実現する際に有用なサンプルでした。 Qt 5.10 で、この機能は Qt Quick 自体に密かにインポートされていました。と言うわけで特になにもしなくても、ローカルやリソース内の pkm ファイルを Image の source に指定することで実現が可能です。また、ETC2 圧縮スキームの対応も行われました。 Qt 5.11 […]

Read More

QPainter の OpenGL Core Profile Context のサポート

Published Tuesday April 25th, 2017 | Leave a comment
Posted in Qt | Tags: , ,

この記事は The Qt Blog の OpenGL Core Profile Context support in QPainter を翻訳したものです。 執筆: Laszlo Agocs, 2017年1月27日 みなさんご存知のとおり、QPainter は複数のバックエンドに対応していて、Qt 5 では主に2つの実装が利用されています。一つは ラスターペイントエンジン で、もう一つは OpenGL ES 2.0 向けの OpenGL2 ペイントエンジンです。 GL ペイントエンジンについて 様々な側面からラスターペイントエンジンが Qt では主役となっていますが、今回は脇役の方についてお話ししたいと思います。GL ペイントエンジンは QPainter が以下に対しての描画の際に使われます。 QOpenGLWindow QOpenGLWidget 現在のコンテキストと描画対象をラップすることができ、主に FBO 向けで使われる QOpenGLPaintDevice 既存の問題点 最近の OpenGL の状況はどうでしょう? 問題の元がなにかというと、Qt 5.0 当時、core profile context を使用して特殊な OpenGL の描画をする必要に迫られている人たちは様々な障害にぶちあたってきました。非推奨や削除された機能(例えば、クライアント側のポインター)に依存していたり、Vertex […]

Read More

Qt 5.9 でのシェーダーバイナリのキャッシュによるパフォーマンスの改善

Published Wednesday April 5th, 2017 | Leave a comment
Posted in Qt | Tags: , , ,

この記事は The Qt Blog の Boosting performance with shader binary caching in Qt 5.9 を翻訳したものです。 執筆: Laszlo Agocs, 2017年3月23日 Qt 5.9 のリリースが近づいてきました。というわけで、Qt Quick (および OpenGL を利用した QPainter の描画)のベースとなっている OpenGL の重要な部分に関して行った、わずかですが非常に便利な改善について紹介したいと思います。 Qt 5.9 のドキュメントのスナップショットを見た方の中には 由緒正しい QOpenGLShaderProgram に追加されたいくつかの機能 に気づいた方もいるかもしれません。これは Qt の内部で利用していた API がこの新しい API になりました。これは実際どういうものでしょうか? ここで説明しているように、これらのシェーダープログラムのバイナリが GL_ARB_get_program_binary もしくは OpenGL ES 3.0 の同様の標準機能を用いてディスクに保存されるようになります。ドライバがこの機能を提供していない場合には、キャッシュがない場合と同様の動作になります。キャッシュファイルは書き込み可能な キャッシュ用の場所 に、グローバルもしくはプロセスごとに生成されます。これにより、2回目以降に同じシェーダーのプログラムが使われる場合のパフォーマンスが大幅に改善されます。 実際にどの程度の改善になるでしょう?これは一概にはなんとも言えません。ここ数年、このようなキャッシュを行うようになったドライバもありますし、パイプラインに似たような機能が実装されているドライバも世の中には存在しますが、現時点で市場に出回っているデバイスでは非常に大きな効果がありました。 ここで実際の数値は気にしないでください。重要なポイントは Qt […]

Read More

Qt 4.8 での OpenGL のスレッド利用

Published Friday June 10th, 2011 | Leave a comment
Posted in Qt | Tags: ,

この記事は Qt Blog の “Threaded OpenGL in 4.8” を翻訳したものです。 執筆: Jason Barron 2011年6月3日 Qt の OpenGL モジュールを使用したことのある方ならば、OpenGL を別スレッドで動かしたいと考えたことがあるかもしれません。OpenGL の実装自体は(ほとんどが)リエントラントなので、それに対する障害はありません。実際、古めの記事ですが Qt Quarterly の [qt “第6回” l=qq06-glimpsing m=#writingmultithreadedglapplications v=qq] でその方法を説明しました。普段から OpenGL のコードを直接書いているような人々にとっては役に立つ記事ですが、Qt の有用なクラス群も別スレッドで使いたい場合にはどうでしょう。残念ながらそれらの Qt のクラスがスレッドセーフではなかったため、それは不可能でした。Qt 4.8 ではその修正を行い、多くの共通するシナリオのいくつかをサポートしました。X11 でこの新機能を使うには [qt “Qt::AA_X11InitThreads” l=qt m=#ApplicationAttribute-enum v=master-snapshot] アプリケーション属性を有効にして、GLX の呼び出しがスレッドセーフになるようにする必要があります。Windows と Mac OS X ではこの操作を行わなくても動くはずです。 バッファ交換スレッド GPU やそのドライバにもよりますが、swapBuffers() の呼び出しコストは(特に組み込みプロセッサでは)高くつくことがあります。多くの場合、この関数は GPU に全ての描画コマンドを現在のフレームに対して実行するように命じます。これが同期動作する場合、GPU が動いている間メインスレッドがブロックされます。スレッドには他にやるべき事がたくさんあるので、GPU の動作が終了するのをただ待っているのは無意味です。例えばその時間で、イベントループに戻ってネットワークやユーザからの入力を処理したり、次のアニメーションを準備したりできます。4.8 […]

Read More

Qt 5 に関する回答

Published Wednesday May 18th, 2011 | Leave a comment
Posted in Qt | Tags: ,

この記事は Qt Blog の “Responses to Qt 5” を翻訳したものです。 執筆: Lars Knoll 2011年5月11日 うれしいことに、先日の Qt 5 のブログ記事 (日本語訳) に対して本当に多くのフィードバックを頂きました。 全てのコメントを読んで対応してきましたが、疑問や質問に回答するにはコメントに返答していくのではなく記事の形でフォローした方が良いと思います。 Qt 5 について議論する メーリングリスト を作成しました。興味がある方は購読をご検討ください。ブログ記事に返答するよりも Qt 5 に関するより良い、より構造化された議論ができると思います。 コメントで見られた関心のほとんどはいくつかのカテゴリーにグループ化できると思います。それらに対して、私の視点から回答します。 QML/JavaScript vs C++ アプリケーション開発の主流を JavaScript にしたいという点に関して、数多くの反応がありました。ここで述べていることは新たなオプションの追加についてであり、C++ の削除ではありません。Qt は C++ フレークワークを核にしており、それが変わることはありません。むしろ、C++ は非常に重要な役割を果たし続けます。ネイティブコードを書く必要のあるユースケースはたくさんあります。 そこで、ネイティブフレームワークに期待される全てのパワーとオプションを提供するために、新しい C++ API の追加や既存の C++ API の改善を続けていきます。グラフィック関連以外では(たとえば、QtCore, Network, Database 等)、特に何も変わりません。そして、グラフィック関連においてはもう一つのオプションを追加するだけなのです。 おわかりのように、我々は Qt Quick がユーザーインターフェースを作成するためのより良い技術であると強く信じています。現状ではまだ、開発者に必要なものが(特にデスクトップにおいて)不足しています。しかし、たとえば Jens […]

Read More
Get started today with Qt Download now