Qt Developer Days 2011 in Munich Day2 セッション @task_jp さんまとめ
Qt 5 のリリースに備えて QML SceneGraph 向けのカスタムアイテムを実装する知識を得ようという感じかなw #qtdd11
2011-10-25 20:05:30Qt Quick 2 は OpenGL の上の SceneGraph という描画スタック上で動作する。以前の複雑な描画スタックよりもシンプルでとても早い #qtdd11
2011-10-25 20:06:59Qt Quick 2 への移行:qmlviewer -> qmlscene、QDeclarativeView -> QSGView(SG の部分は最近変わった)、Qt Quick 1.0 -> 2.0 #qtdd11
2011-10-25 20:10:38Qt Quick 1.0 のカスタムエレメント(QDeclarativeItem)を 2.0 化する #qtdd11
2011-10-25 20:11:21QDeclarativeView -> QSGPaintedItem に変更、paint 関数はシンプルで QPainter * だけを引数にとる、setFlag で ItemHasNoContents true -> ItemHasContents false #qtdd11
2011-10-25 20:14:23ノードは Transform、(Opacity)、(Clip)、Group(子要素のルートノード)、そして描画ノードがある #qtdd11
2011-10-25 20:17:04描画ノードのアップデートのデモ:QSGPaintItem -> QSGItem、QSGTexture クラスを仕様。paint() の変わりに updatePaintNode() メソッドを実装。 #qtdd11
2011-10-25 20:23:30updatePaintNode は与えられたパラメータで既存のノードを変更し、変更後のノードを買えす。texture は最初は QPainter で最初に作成する。更新は QSGSimpleTextureNode を使う。インスタンスが無ければ自分で作る。 #qtdd11
2011-10-25 20:25:53ここまでのところ、コードは QtQuick 1.0 から QtQuick 2.0 にどんどん変わっていくけど、できるものは同じままなので実行してみたときの驚きが全然ないのがすごいw #qtdd11
2011-10-25 20:27:08Rectanglar Geometry:矩形、Material は QSGMaterial のサブクラスでエレメントの描画内容を保持、QSGMaterialShader でマテリアルに適用するシェーダーを定義 #qtdd11
2011-10-25 20:33:02QSGSimpleMaterialShader クラスを派生して updateState() を再実装、vertex shader と fragmentShader (の文字列) も再実装 #qtdd11
2011-10-25 20:35:25updatePaintNode はノードが無ければ QSGGeometryNode を生成していくつかの設定をする。更新は... #qtdd11
2011-10-25 20:38:123D の場合は QSGSimpleMaterialShader の resolveUniforms() を実装 #qtdd11
2011-10-25 20:41:56program()->setUniformValue() で様々な値を設定、この例では Vertex は QVertex3D を3つ。初期化方法は分かりにくいのでサンプルを見てね。 #qtdd11
2011-10-25 20:44:55updatePaintNode() で、トランスフォームノードとジオメトリノードを変更する。最初は作る。テクスチャを画像から作りいくつかの設定をする。トランスフォーメーションノードに対して3Dの処理(Matrix)をする。 #qtdd11
2011-10-25 20:48:56