QGraphicsView での QML ShaderEffectItem

この記事は Qt Blog の "QML ShaderEffectItem on QGraphicsView” を翻訳したものです。
執筆: Kim Gronholm 2011年5月3日

ShaderEffectItem をご存じない方は「万能な QML Scene Graph」をご覧ください。

QML Scene Graph 上で動作する QML 2 では GL/GLES シェーダコードと QML を組み合わせるための素晴らしい API を提供します。この API は2つの新しい QML 要素 ShaderEffectItem と ShaderEffectSource になります。この API では、QML 1 の標準要素を使用する限りは実現できなかったエフェクトとアニメーションを簡単に作成することができます。これによりエフェクトの重い処理を GPU で行うことができるようになるため、パフォーマンスも向上し、ハードウェアアクセラレーション無しでは十分なパフォーマンスで動作しなかったようなことも実現できます。

ShaderEffectItem の実装は基本的には QML Scene Graph に依存していないため、我々は QGraphicsView ベースの Qt Quick 1.x 向けに、同じような API を提供する QML の拡張プラグインを実装しました。以下の動画では Qt Quick 1.0 のアプリケーションが N8 上で動作しており、このシェーダプラグインを使用したいくつかのエフェクトを紹介しています。また、同じアプリケーションが Symbian^3、Maemo 5、Mac OS X、Windows 7、Ubuntu の5つの異なるプラットフォームで動作しています。


このプラグインとデモアプリケーションのソースコードは  https://qt.gitorious.org/qt-labs/qml1-shadersplugin から入手可能です。ShaderEffectItem と ShaderEffectSource 要素の API の詳細な情報は doc ディレクトリ以下のドキュメントにあります。このプラグインと QML 2 の違いは README ファイルを参照してください。

シェーダプラグインの使用方法はシンプルです。

  1. このプラグインをコンパイルしてください。詳細な手順はソースディレクトリにある README に記述してあります。
  2. アプリケーションの C++ のコードで QDeclarativeView の viewport に QGLWidget を設定してください。viewport の更新モードを FullViewportUpdate に設定するのをお忘れなく。
  3. QML コードで Qt.labs.shaders 1.0 モジュールをインポートしてください。

このプラグインは完全に機能し、既に利用されていますが、まだ「開発中」のため API が変更になる可能性があります。QML 2 の API に追従し、プラグインをできる限り前方互換にするのがゴールになります。

この機能は OpenGL もしくは OpenGL ES 2.0 を必要とし、QtOpenGL モジュールに依存します。このため、Qt 4.7.x 以上が動作し、QtOpenGL をサポートする Windows、Linux、Mac、Symbian^3(4.7.4 までは実験段階)、Maemo 5 などのプラットフォームで Qt が 4.7.x にアップデートされている場合にのみ動作します。Maemo 5 では PR1.3 ファームウェアであれば大丈夫です。

現在の Qt の OpenGL ES 2.0 バックエンドの Symbian でのリソース管理は不完全な状態ですが、Qt 4.7.4 で改善しようと思っています。それまでは Symbian のアプリケーション開発のためにこの機能を使用することは推奨しません。しかし、試用していただいて、フィードバックをいただければと思います ;)

この機能を試していただき、これに対する意見やフィードバックをいただければと思います。


Blog Topics:

Comments