Kritaの2018年Google Summer of Code
今年もKritaは3人の学生とGoogle Summer of Codeに参加しました。今年の参加者はIvan、Andrey、 Michaelです。この3人の素晴らしい学生によるコードの一部は既に4.1.1に含まれています。残りのコードも既にマージされているので、WindowsやLinuxのナイトリービルドでは利用可能です。では今年の成果を見てみましょう!
Ivanのプロジェクトはベクトル化によるブラシの高速化でした。技術的な感じがしますね。実際そうです。CPUは別の数字を使う同じ計算の場合、同時に非常に多くの計算を行うことができます。200個の数字をCPUに渡して、全部掛け算するように命令すると、1つの数字の掛け算と同じくらいの速度で完了します。ブラシでの計算も、そうした種類の計算に近いのです。もちろん、実際はもっと複雑です。Ivanはまだ同じロジックを定義済みブラシに適用する方法を探しています。何はともあれIvanのブログからの素敵な画像です。
上が以前の、下が今のパフォーマンスです。
Ivanのプロジェクトはパフォーマンスについてでしたが、Andreyのプロジェクトもそうです。Andreyも同じくらい技術的で頭が痛くなる問題に取り組んでいます。最近のCPUには多くのコアがあります。4個や8個、10個や20個やそれ以上の場合もあります。そして使用されないシリコンは砂の無駄使いになってしまいます!Kritaは昔からマルチコアを活用してきました。2009年のDmitry Kazakovによるsummer of codeプロジェクト、タイルエンジンについての開発からです。9年が経ち、Dmitryは今回Andreyのタイルエンジンの開発のメンタリングを行いました。タイルエンジンは画像を複数の小さなタイルに分割し、それぞれを独立して処理することを可能にします。
去年、DmitryはKritaがより多くのコアを使用できるようにする開発の中で、Kritaがコアが相互に処理を待ってしまう箇所があることを発見しました。何かをする必要がありました。これはロックと呼ばれるものです。このロックを取り除くことが解決策です。
そしてAndreyのプロジェクトはロックなしのタイル機能を作成することでした。この開発は完了しました。まだいくつかバグはあります。こうしたものは非常に複雑で、真剣にテストする必要があります。成果はKrita 4.2に含まれることになります。今年の終わりまでにリリースされる予定です。作業の一部はKrita 4.1.1にもマージされています。パフォーマンス改善が実現しています。
Michaelはまったく違う開発を行いました。Kritaのパレットサポートです。パレット、カラーセットは色の集まりです。これはリソースです。かつてパレット編集はCalligra、KOfficeと共通したものでした。コードは複雑でこんがらがって散らばっていました。Michaelの最初のタスクはこの混沌を整理することで、それは既にKrita 4.1.1にマージされました。
次はパレットドッキングパネルです。詳細はPhabricatorを参照してください。まだ開発中のものもありますが、Summer of Codeプロジェクトとして予定されていたものはすべて完了しました!
そしてこれがエディタです: