Qt Quick

Vulkan、Metal、Direct3D上で実行可能なQt Quick

Published Thursday October 17th, 2019 | Leave a comment
Posted in Dev Loop, macOS, Open GL, Qt Quick, Vulkan, Windows, グラフィックス, 組み込み

この投稿は英語ブログ記事「Qt Quick on Vulkan, Metal, and Direct3D」の和訳です。 Qt 5.14の最初のベータ版公開が近づいているので、主な新機能の一つについてお話したいと思います。この投稿内で、グラフィックスタックの改善点とQt 6に向けての詳細を全てご説明することは難しいので、パート1とパート2にて背景と5.14に関連するものについてお話し、技術的な部分の詳細と今後の方向性については、後に別の投稿でお話しようと思います。 5.14の新機能に関するページ概要:グラフィックスAPIに依存しないシーングラフレンダラーの、最初のプレビューがオプトイン機能として追加されました。これにより、OpenGLの代わりにVulkan、Metal、またはDirect3D 11上でほとんどのQt Quickアプリケーションを実行できます。 Qt 6テクニカルビジョンの投稿でご説明したように、Qt 6の主な目標の1つは、Qt上での直接的なOpenGLの使用をできるだけ避け、Vulkan、Metal、Direct3Dなどの幅広いグラフィックスAPIの利用を可能にすることです。 OpenGL(およびOpenGL ES)も選択肢として当然残ります。その背景にある主な動機は、パフォーマンスを発揮する事だけではなく、OpenGLが利用できないか、もしくは既に望ましくないプラットフォームやデバイス上であっても、Qt Everywhereが今後も確かなもので有り続けることを保証することにもあります。それと同時に、最新かつ低レベルなAPIをベースに構築できるため、パフォーマンスの改善(APIオーバーヘッドの減少によるCPU使用率の低下など)や、Qt Quickおよび最近発表されたQt Quick 3Dのようなモジュールの背後にあるレンダリングエンジンの可能性も広がります。 さらに、プラットフォームで最もサポートされているグラフィックスAPIでレンダリングできることは、Qtを使用してUIをレンダリングしながら独自のネイティブ2Dまたは3Dグラフィックレンダリングを実行するアプリケーションにとって嬉しいポイントです。 そのような場合、使用するグラフィックスAPIの決定に関しては、Qtに主導権が無いことも多々あります。たとえば、macOSのデスクトップアプリケーションが、2DのレンダリングをQt Quickに依存しながら独自の3DコンテンツにMetalを使用したい場合、Qt QuickもMetal経由でレンダリングすると非常に便利です。これは、Qt 5.xのグラフィックスの進化過程を見ていた人には馴染みがあるのでは無いでしょうか。概念的には、OpenGLコアプロファイルコンテキストでの操作のサポートがQt Quickレンダラーに導入されたときと変わりません。Qt Quick自体にはその必要性や関連はありませんが、コアプロファイル機能に関連付けられた外部レンダリングコードを統合できるようにするために、Qt Quick側でそれを認識し、対応できる必要がありました。つまり、これはQt 5で行われてきたことからの自然な流れであり、現在OpenGL以外のグラフィックスAPIをカバーするように拡張されています。 これにより、次の2つの疑問点が上がってくることと思います。 Qt 5.xにどのように関連しているのか?全てQt 6の要素ではないのか? なぜ<なんらかのグラフィックスAPI変換ソリューション>を使用して標準化しないのか? Qt 5.14には何が含まれているのか Qtのグラフィックスの完全なオーバーホールを行うことは、Qt 6のターゲットになっています。しかし、Qt 5.x上での作業や開発を止めて、一度に全てが上手くいくことを期待するのは現実的ではありません。Qt開発者がよく口にするように、APIの最初の試作は”最適”というには満たない傾向にあります。そのため、並行して開発を行う代わりに、QtのUIテクノロジーであるQt Quickに焦点をあてていきます。 Qt 5.14には、新しいQt Quickレンダリングパスのプレビュー版が付属される予定です。 デフォルトでは、非アクティブであるため、アプリケーションに対して目に見える変更は一切ありません。内部では、以前のバージョンと同じダイレクトOpenGLベースのコードパスを通過します。 ただし、新しいアプローチを試してみたい人は、環境変数を設定するか、main関数のC ++ APIを介して要求することでオプトインできます。 ここでは、フィードバックを早期に取得して、Qt 6.0のリリースを待たずに繰り返し、発展させていけることを期待しています。 Qt 5.14ドキュメントをみると、次のようなことがわかります。 QSG_RHIをセットして実行すると、すべてのアプリケーションがすぐに動作するわけではありません。ダイレクトOpenGL呼び出しを実行するシーングラフノード、またはカスタムマテリアルにGLSLシェーダーコードを含むカスタムQQuickItemは、RHIベースのレンダリングを有効にすると機能しなくなります。同じことが、GLSLソースコードを含むShaderEffectアイテムにも当てはまります。 カスタムマテリアルとエフェクトを最新の方法で実行するためのソリューションは、ほとんどがすでに存在しますが、必要に応じてアプリケーションを移行する必要があります。アーリーアダプターは、5.14および5.15のタイムフレームで試すことも出来ますが、Qt […]

Read More

Qt Quick 3D:簡単・高速な新しい3D API

Published Friday August 30th, 2019 | Leave a comment
Posted in Qt, Qt Quick, Uncategorized

Technical Vision for Qt 6 blog postの記事の中でCTOのLarsが述べたように、私たちはQt Quickの中で3D表現を実現するより良い方法の研究を続けてきました。その結果、Qt Quick 3Dという新しいプロジェクトを立ち上げるに至りました。Qt Quick 3Dは、Qt Quickの中でユーザーインターフェイス用の3Dコンテンツを作成するための、ハイレベルなAPIを提供します。 アニメーションの同期の不具合やソフトウェアの複雑化につながりうる外部エンジンを使うのではなく、Qt Quick シーングラフ自体の3Dコンテンツ向け拡張および拡張されたシーングラフノードの描画エンジンを提供しています。 これは、Qtにこれまでとは異なる新しい3Dソリューションを作ったということなのでしょうか? いいえ、実は必ずしもそういうわけではありません。コアとなる3D描画エンジンはQt 3D Studioの描画エンジンから派生したものだからです。この描画エンジンは、Qtのマルチプラットフォーム対応のために移植され、Qtプロジェクトのコーディングスタイルに合わせてリファクタリングされています。 Qt Quick 3Dで描画された”San Miguel”テストシーン 新しい3Dソリューションを提供する五つの理由 2D/3Dグラフィックスの一体化 究極の目標は2D/3Dにかかわらずシームレスな描画を実現することです。現在Qtでは、2Dおよび3Dのそれぞれにスムースなユーザーインターフェイスを作成するための異なるソリューションを提供しており、それぞれに対応するツールがあります。その一つが2D用のQt Quickで、もう一つが3D用のQt 3D Studioです。 このどちらか一方しか使用しないのであれば、全く問題はありません。しかし、これらを併用した場合、実行時のパフォーマンスや開発効率に問題があることがわかりました。 そのため、私達は一つの言語(Qt Quick)、一つの描画エンジン(Qt Quick Scenegraph)、一つのデザインツール(Qt Design Studio)というシンプルなソリューションを目標にすることにしました。これにより、機能やパフォーマンスや開発効率といった問題をすべて解決することができます。さらに私たちの開発リソースを集中することができるので、より多くの機能やより早いバグ修正も実現可能になります。 直感的で簡単なAPI Qt Quick 3Dのもう一つの目標は、コンピュータグラフィックスの細かな知識がなくても3Dコンテンツを定義できるAPIを提供することです。ほとんどの場合、アプリケーションごとに3D描画エンジンの細かな調整は必要はなく、どちらかというと2Dと並べてちょっとした3Dコンテンツを表示させたいだけであったりします。私たちは、このことを念頭に置いて、Qt Quick 3Dを開発してきました。 とはいえ、パワーユーザーの要望にも応えるべく、より高度なケースに使えるレンダリングAPIを更に公開していく予定でもあります。 現時点では、QML APIのみを提供していますが、将来的にはC++ APIを公開することを目標としています。 Qt Quick開発ツールの統合 Qt Quick 3DはQt 3D Studioの後継として企画されています。当面の間、Qt 3D […]

Read More

Qt 5 向けの新しい QML デモ

Published Thursday July 26th, 2012 | Leave a comment
Posted in Qt Quick | Tags: , ,

この記事は Qt Blog の “New QML demos for Qt 5” を翻訳したものです。 執筆: Alan Alpert, 2012年7月17日 ブリスベンの QML コアチームに、Qt 5 に向けて新しいメンバーが加わりました。やっとチームにデザイナーが加わったことで、QML を最もデザイナーにやさしい UI 言語にするという目標に近づくことができます。この記事ではチームで開発した最新のアプリやゲームのデモビデオを紹介したいと思います。ただ、ビデオで見せることがデモの一番の目的ではありません。これらのデモのソースコードが qt-project.org で BSD ライセンスで公開されています。新しいエキサイティングな機能の裏側にある実装を見て頂くために、ソースコードへのリンクも随所に入れていこうと思います。

Read More

Qt 5 向けデスクトップ用コンポーネント

Published Monday June 11th, 2012 | Leave a comment
Posted in Qt Quick | Tags: , , , ,

この記事は Qt Blog の “Desktop Components for Qt 5” を翻訳したものです。 執筆: Morten Johan Sørvig, 2012年6月6日 先日行われた 投票 によると、デスクトップ向けコンポーネントは Qt Quick 2 に最も期待されているアドオンの一つです。その実現を支援するために、Desktop Component プロジェクトを codereview.qt-project.org へと移行させ、Qt Quick 1 & 2 の双方についての貢献の受付を始めました。いくつもの素晴らしい貢献が既に行われています。また同時に、Qt 5 へより早くコンポーネントをもたらすために Nokia からも数名がプロジェクトに携わり始めました。 このコンポーネントは Qt Playground プロジェクトとしてホストされており、5.0 のリリースには含まれないでしょう。Qt 5 のリリースとある程度同期した形で、個別にリリースを行う予定です。いずれかの時点で、コンポーネントが Qt 5 の一部となるようにしたいと思います。 プロジェクトの詳細を wiki に用意しました。以下のスクリプトで試してみてください。 git clone https://git.gitorious.org/qtplayground/qtdesktopcomponents.git qtdesktopcomponents git checkout qt5 […]

Read More

動画であそぼう: シェーダーエフェクトとマルチメディア

Published Tuesday March 6th, 2012 | Leave a comment
Posted in Qt Quick | Tags: , ,

この記事は Qt Blog の “Pimp my video: shader effects and multimedia” を翻訳したものです。 執筆: Gareth Stockwell, 2012年2月29日 はじめに Qt Quick のアプリケーションでのシェーダー言語によるエフェクトが注目を集めてきています。シェーダー言語の基本さえ分かってしまえば、Qt Quick のアプリケーションにシェーダーを埋め込むのは本当に簡単で、素晴らしいビジュアルエフェクトが驚くほど少ないソースコードで実現できます。 今までブログでは取り上げてきませんでしたが、(動画再生やカメラの映像などの)マルチメディアのコンテンツへのシェーダーエフェクトの適用も、他の QML 要素と同様に簡単にできます。この記事は QtMultimedia とシェーダーの組み合わせについて紹介したいと思います。 どのようなエフェクトが使用できるかは、デモを見てもらうのが一番です。ということでこの動画からはじめましょう。 qmlvideofx デモ: デスクトップ Linux 上の Qt 5 この動画は Qt Quick 2 のデモアプリで、デスクトップの Linux で動いています。(フレームレートを計算するためにシーングラフのシグナルを監視したり、ファイルからシェーダーを読み込むための)補助的な C++ のコードを除くと、このアプリはすべて QML で書かれています。

Read More

Qt Quick Components 1.1 for Symbian のリリース

Published Monday November 14th, 2011 | Leave a comment
Posted in Qt Quick, ニュース | Tags: , ,

この記事は Qt Blog の “Qt Quick Components 1.1 for Symbian – Update” を翻訳したものです。 執筆: Sami Lehtonen, 2011年11月8日 4ヶ月程前の2011年7月に Qt Quick Components が Symbian 3 および Symbian Anna 端末に登場しました。その後に販売を開始した Nokia N9 には Qt Quick Components for MeeGo 1.2 Harmattan がプリインストールされていました。 その後も開発は続いていて、とうとう Qt Quick Components 1.1 for Symbian のリリースに至りました。 新しくリリースされた Symbian Anna および Symbian Belle には、Qt 4.7.4、Qt […]

Read More

Qt Quick でのトップレベルウィンドウとメニュー

Published Tuesday August 30th, 2011 | Leave a comment
Posted in Qt Quick | Tags: , ,

この記事は Qt Blog の “Toplevel Windows and Menus with Qt Quick” を翻訳したものです。 執筆: Zeno Albisser, 8月26日 素晴らしい Qt Quick アプリケーションがこれまでもたくさん書かれてきましたが、デスクトップ用 QML Components の開発も進んでおり、Qt Quick はもはやモバイルプラットフォームだけのものではなくなってきています。 これまで未対応だった重要な機能の1つが QML アプリケーションの中から直接トップレベルのウィンドウを作成することでしたが、Qt Quick デスクトップ Components の新機能を使用することで C++ のコードを書かずにこの機能が実現できるようになりました。 今回は以下の機能が利用できるようになりました。 QML から直接トップレベルウィンドウの生成が可能に モーダルの設定やウィンドウ装飾の設定が可能に トップレベルウィンドウのリサイズや最小化、最大化のための QML のバインディング QML の要素でトップレベルウィンドウへショートカット付きのメニューの追加に対応 スクリーンのジオメトリに関する情報の取得 ウィンドウ間でのプロパティバインディング それでは簡単にこれらの機能を見てみましょう。

Read More

提案: Qt Quick デザイナのワークフロー

Published Tuesday August 9th, 2011 | Leave a comment
Posted in Qt Quick | Tags:

この記事は Qt Blog の “Proposal: Qt Quick Designer Workflow” を翻訳したものです。 執筆: Marco Bubke, 2011年8月3日 従来のウィジェットベースの Qt デザイナは宣言型のフォームと命令型のロジックを明確に区別するように作られています。デザインされた宣言型のフォームは .ui ファイルに格納されます。 QML では宣言型のコードと命令型のコードが簡単に混ざります。(視覚的効果をもたらす)命令型のコードを QML ファイルに追加すると、もうそれは純粋な宣言型ではありませんし、ビジュアルエディタでの見た目とは異なるものになるでしょう。ビジュアルエディタではテキストでの記述を視覚的な記述に翻訳する方法が必要です。通常、命令型のコードではそれは不可能ですし、Qt Quick デザイナでは試みようともしていません。 以下のコードはビジュアルエディタでは扱いにくい例です。 Item { width: 800 height: 600 Rectangle { id: rectangle width: 100 height: 100 } Component.onCompleted: center(rectangle) } Component.onCompleted は一度しか呼ばれないのに対して、Qt Quick デザイナでは幅や高さが何度も変わることがあります。どうやってそれに対応すれば良いのでしょうか。ビジュアルエディタで変更があるたびに Component.onCompleted を呼ぶべきでしょうか。center 関数の場合には問題ないでしょうが、オブジェクトの生成が含まれている場合にはどうでしょうか。変更のたびに全体を再構成するという手はありますが、それでは編集の反応が遅くなって生産性のある仕事は行えないでしょう。 center 関数は座標の変換を行います。どうすればビジュアルエディタは center 関数が座標の変換を行うことを知ることができるでしょうか。それにはコードの意図を理解する必要がありますが、通常ビジュアルエディタにはそれはできません。そのため、Qt […]

Read More

Qt SDK 1.1 ベータ版で、ほんの1日で出来ること

Published Tuesday June 14th, 2011 | Leave a comment
Posted in Qt Quick, SDK | Tags: ,

この記事は The Qt Blog の “From Qt SDK 1.1 Beta to an app in just a day” を翻訳したものです。 執筆: Carol Røsland 2011年3月9日 前週に出会った tweet はすぐに私の好奇心を刺激しました。それは、病気になった息子さんと一緒に家で過ごした1日についてのある父親の tweet でした。その日、彼らは一緒に Qt Quick ゲームアプリ “DoodleDrive” をデザイン・開発をしたのです。私はすぐに受話器をとり、その方に新しい Qt SDK 1.1 ベータ版の感想を尋ねたところ、私の予想通り簡単に使えることにとても驚かれたそうです。 (訳注: Qt SDK 1.1 正式版は リリース済み です。) Tommi Laukkanen さんは、これまで Qt を使ったことは無く C++ プログラマでもありません。フィンランド人ではありますが、現在も過去も Nokia で働いたことは全くありません。彼はソフトウェアエンジニアで、主にエンタープライズ向けソフトウェアの開発を仕事としています。自分の (C++以外の) プログラミングスキルを Qt で試すことのできる […]

Read More

Qt Quick での Mac のツールバー

Published Tuesday April 12th, 2011 | Leave a comment
Posted in Qt Quick, リサーチプロジェクト | Tags: , , ,

この記事は Qt Blog の “Mac Toolbars for Qt Quick” を翻訳したものです。 執筆: Morten Johan Sørvig 2011年4月8日 以前に Jens が書いたとおり、デスクトップでも Qt Quick を使用できるように作業をしています。彼がその記事のコメントの中で明かしたように、私は Mac 向けのプロジェクトを進めています。今日はこれについて書きたいと思います。 ツールバーの動作: メニューのカスタマイズは Qt では新しい機能ですが、Mac としては特に目新しいものはありません。 では、今までの Qt でのやり方とは何が違うのでしょう?まず始めに、QToolBar の変わりに NSToolBar が使われています。これにより、(念願のメニューのカスタマイズ機能を含む)ネイティブのルック&フィールが実現されています。次に、このツールバーは以下のように普通の QML の要素と同じように作成することが可能になりました。 MacToolBar { MacToolButton { text : “Button 1” iconSource : “images/qtlogo.png” toolTip : “This is button number 1” onActivated […]

Read More
Get started today with Qt Download now