2019/11/18(月) [n年前の日記]
#1 [gimp][prog] gimp-texturizeのループ高速化をある程度は果たせた
gimp-texturizeプラグインのループ高速化を試していたけど、ある程度は速くなった。
1024 x 1024 の画像を生成した場合、Core i5-2500 で、2分30秒かかっていたのが、50秒で生成できるようになった。2倍以上は速くなったかな…。まあ、元画像の内容によって、処理時間も変わってくるのかもしれないけれど。
1024 x 1024 の画像を生成した場合、Core i5-2500 で、2分30秒かかっていたのが、50秒で生成できるようになった。2倍以上は速くなったかな…。まあ、元画像の内容によって、処理時間も変わってくるのかもしれないけれど。
◎ patchはどこを参照すべきなのか。 :
difference() 内では、patch_ptr が元画像バッファ内を、image_ptr が生成中の画像バッファ内を指し示しているはずだけど。
もしかすると、patch_ptr は、元画像ではなく、生成中の画像を見るべきなのだろうか…。元々のソースでは、patch関連のポインタを求める際、生成画像のための変数を使って計算していたし…。
仮に、patch_ptr が元画像を参照するのが正しいとして。画像サイズを超える場所から値を読もうとした場合、元画像のx方向、y方向でループしながら読んだほうがいいのか、それとも問答無用で最大値の差を返したほうがいいのか、そのあたりも分からない…。
結局、どういう処理をしたかったのかがそもそも分かってないので、クラッシュしないように修正はできたけど、間違った修正をしている可能性が…。うーん。
もしかすると、patch_ptr は、元画像ではなく、生成中の画像を見るべきなのだろうか…。元々のソースでは、patch関連のポインタを求める際、生成画像のための変数を使って計算していたし…。
仮に、patch_ptr が元画像を参照するのが正しいとして。画像サイズを超える場所から値を読もうとした場合、元画像のx方向、y方向でループしながら読んだほうがいいのか、それとも問答無用で最大値の差を返したほうがいいのか、そのあたりも分からない…。
結局、どういう処理をしたかったのかがそもそも分かってないので、クラッシュしないように修正はできたけど、間違った修正をしている可能性が…。うーん。
◎ githubのissueに書いておいた。 :
一応、github の issue で報告しておいた。
_Issues - lmanul/gimp-texturize
ただ、自分は英語赤点野郎なので、Google翻訳にひたすら頼るしかなく…。かなり頓珍漢な英語を書いちゃってる可能性を否定できない…。
まあ、プログラマーならソースコードを見れば大体分かるはずだよね。たぶん。
_Issues - lmanul/gimp-texturize
ただ、自分は英語赤点野郎なので、Google翻訳にひたすら頼るしかなく…。かなり頓珍漢な英語を書いちゃってる可能性を否定できない…。
まあ、プログラマーならソースコードを見れば大体分かるはずだよね。たぶん。
◎ 一応ココにも置いておく。 :
一応ココにも修正したソレを置いておく。
_gimp-texturize.patch.txt
_compter.c
_main.c
_offset.c
_render.c
Windows用のバイナリは以下。
_texturize_2.1a_windows_32bit.zip
GIMP 2.10.14 32bit Portable samjビルド版上で動くことは確認したけれど、公式インストーラ版では動くかどうかわからない。
_samj Creations: GIMP 2.10.14 Portable 32 bits et 64 bits Win
samj版は msys2 を使ってビルドしている、と見かけた記憶があるけれど、公式版は何を使ってビルドしているか分からなくて…。そのあたりが分かれば、公式版でも動くバイナリを作れるのかもしれない。あるいは、公式版も msys2 を使ってビルドしているなら、このバイナリがそのまま動く可能性もあるのかも。
と思ったけれど、公式版の GIMP って 64bit版だったか…。今回作ったバイナリは 32bit版なので、そのままじゃおそらく動かないよな…。32bit版のプラグインまで動かせる仕組みじゃ無いよな。たぶん。
ちなみに、起動するとDOS窓が開く件は、解決策が分からなかった。不正終了した時に、DOS窓に一瞬エラーメッセージが出てくるから、むしろ開くほうがいいのかもしれない、とも思ってるけど…。
_gimp-texturize.patch.txt
_compter.c
_main.c
_offset.c
_render.c
Windows用のバイナリは以下。
_texturize_2.1a_windows_32bit.zip
GIMP 2.10.14 32bit Portable samjビルド版上で動くことは確認したけれど、公式インストーラ版では動くかどうかわからない。
_samj Creations: GIMP 2.10.14 Portable 32 bits et 64 bits Win
samj版は msys2 を使ってビルドしている、と見かけた記憶があるけれど、公式版は何を使ってビルドしているか分からなくて…。そのあたりが分かれば、公式版でも動くバイナリを作れるのかもしれない。あるいは、公式版も msys2 を使ってビルドしているなら、このバイナリがそのまま動く可能性もあるのかも。
と思ったけれど、公式版の GIMP って 64bit版だったか…。今回作ったバイナリは 32bit版なので、そのままじゃおそらく動かないよな…。32bit版のプラグインまで動かせる仕組みじゃ無いよな。たぶん。
ちなみに、起動するとDOS窓が開く件は、解決策が分からなかった。不正終了した時に、DOS窓に一瞬エラーメッセージが出てくるから、むしろ開くほうがいいのかもしれない、とも思ってるけど…。
◎ 2019/11/20追記。 :
上記のバイナリを、GIMP 2.8.22 Portable で使おうとしたけれど、そもそもフィルターメニューの中に登録すらされなかった。--verbose オプションをつけて GIMP Portable を起動してみたら、texturize.exe を登録する際に gimp-wire-read (): error と表示されていた。
ということで、今回作ったバイナリは、GIMP 2.10.x 32bit samjビルド版専用ってことで。
ということで、今回作ったバイナリは、GIMP 2.10.x 32bit samjビルド版専用ってことで。
[ ツッコむ ]
以上です。