アルファチャンネルが不要な拡張編集フィルタ処理
patch.aulにて対象フィルタを増やしています。patch.aulが軽量化するフィルタ
元々は入力フィルタ(図形など)と出力フィルタ(標準描画など)のみが対象でExEdit::Filter::Flagは0x40
そのようなフィルタ処理にするメリット
透明度計算を省略することで高速化した処理を実装することが出来る
同じオブジェクトに付与している他フィルタが高速化する
条件
透明度が不要な画像データ・画像処理
オブジェクトのサイズがシステムの設定側の最大画像サイズ以内
オブジェクトに付与されている全てのフィルタがアルファチャンネルが不要な拡張編集フィルタ処理の対象である
実装方法・注意点
sdkのExEdit::Filterリンク https://github.com/nazonoSAUNA/aviutl_exedit_sdk/blob/efpip/exedit/Filter.hpp
sdkのExEdit::FilterProcInfoリンク https://github.com/nazonoSAUNA/aviutl_exedit_sdk/blob/efpip/exedit/FilterProcInfo.hpp
ExEdit::Filter.flagに0x40が含まれていればアルファチャンネルが不要な拡張編集フィルタ処理に対応している判定になる。プラグイン開発者は必要に応じてこのフラグをたてる
クロマキーのようなフィルタなどは絶対的に透明度を扱うはずのためフラグは付けない
ExEdit::FilterProcInfo.no_alphaがtrue判定であればExEdit::FilterProcInfo.obj_editは透明度の無いデータ(ExEdit::PixelYC*)である
画像のストライドはExEdit::FilterProcInfo.scene_lineに変わる
入力フィルタの開発者向け
条件オブジェクトに付与されている全てのフィルタがアルファチャンネルが不要な拡張編集フィルタ処理の対象であるを満たしている場合、ExEdit::FilterProcInfo::Flag::alpha_omittable(0x40)フラグがたっている
透明度が不要な画像データとオブジェクトのサイズがシステムの設定側の最大画像サイズ以内は入力フィルタの役割として調べる必要がある。例として図形では四角か背景であれば透明度が不要な画像データ、トラックバーのサイズがシステムの設定側の最大画像サイズ以下であるかという判定を行っている
条件をすべて満たしている場合はExEdit::FilterProcInfo.no_alpha=1、そうでない場合も念のためExEdit::FilterProcInfo.no_alpha=0は明記しておくべき
フィルタ効果・出力フィルタの開発者向け
座標や回転のようなフィルタ効果は画像データに対する処理を行わないため、フラグをたてるだけで良い
画像データに対する処理を行うフィルタの場合、ExEdit::FilterProcInfo.no_alphaがtrue判定であればそれ用の処理に切り替える必要がある
処理中に条件を満たさなくなる場合にはExEdit::FilterProcInfo.no_alpha=0を書き、アルファチャンネルを付ける処理を行えば正常に動作させることは可能(サイズ拡張の処理によってシステムの設定の最大画像サイズを超えてしまうなど)
但しアルファチャンネルを付ける処理が行われる頻度が多い場合、逆に遅くなる可能性があるため注意
アドバイス
最大画像サイズを システムの設定 < 拡張編集の環境設定 に変えて正常に動くことは確認する必要がある
サイズ拡張を行うフィルタの場合、func_initなどで最大画像サイズが システムの設定と拡張編集の環境設定とで同じかを判定(アドレスはこの辺)して、違う場合はExEdit::Filter.flagに0x40を付けないという風にする方が良いかもしれない
同じ効果のフィルタオブジェクトも実装している場合、次のような処理にて切り替えが可能(xf4==no_alpha) https://github.com/nazonoSAUNA/patch.aul/blob/r43_59/patch/patch_fast_directionalblur.cpp#L35
#eef