***互換ホストの怪しい挙動 [#pffd7ab0]
-FireworksでgStuff->foreground, gStuff->backgroundで取得できるカラーが8bit。本来ならRGBColor型は8/16bitモードに関わらず16bitのデータ(0~65535)で格納されているはずなのに0から255までの8bitでの値が入ってる。

-FireworksでホストがfilterSelectorFinishの後で、もう一度filterSelectorContinueからコールバックが呼ばれてる。今の構造だと結局同じのを2度フィルターかけることになるので遅い。Fireworksでは一回目のコールバックで設定ダイアログを出してパラメータをセットし、フィルターをかけずに終了し、もう一度呼ばれるコールバックで本番のフィルターをかけるべきなのかも?

-AfterEffectsのANIMリソースで追加する動的パラメータは同じ型が連続していなければならない。例えば、
 ANIM_DT_SHORT
 ANIM_DT_SHORT
 ANIM_DT_SHORT 
 ANIM_DT_FLOAT_32
 ANIM_DT_SHORT
これはNG。これは
 ANIM_DT_SHORT
 ANIM_DT_SHORT
 ANIM_DT_SHORT 
 ANIM_DT_SHORT
 ANIM_DT_FLOAT_32
このような順序にしなければならない。

-ANIMリソースのANIM_UI_POINTのデータ型は(h,v)の順だけど、PS5.0SDKのPoint型は(v,h)と逆に並んでいる。

-Premiereの動的パラメータのUIは整数型しか表示できない。ただし、UIが整数しか扱えなくとも、キーフレームでは実数を扱うことが可能。またUIにバリエーションが無く、%%SliderしかUIの種類が無い。%%と思ってたら何かのスクリーンショットで角度のやつも見た気がする・・・。バージョン互換不明

-GIMPのpspiでプレビュー窓の表示が変。%%謎。ソースは入手したがcygwin上にGTKライブラリを整えるのがめんどくさそう&ネイティブのGTKライブラリをインストールしてるのでディスク容量の無駄な気がしてやる気がでない。。。%%他のプラグインは知らないけど、自分のに限ればgStuff->inColumnBytesに値がセットされていないのが原因のようだ。カラーモードから自分で計算して値を入れて回避。

-GIMPのpspiでColorServicesのコールバックが使えない。カラーピッカーのダイアログを表示できない。PhotoshopのカラーピッカーはADM(今はADAM?)で作ってるので、まあ互換性が無いのはわかってますよ・・・ええ。でもNULLを入れといてくれればああ使えないんだな、と納得してOS標準のを使えるのに・・・。↓GIMPのカラーピッカーを出すつもりで放置中なんだろうか・・・(v1.0.3)。errPlugInHostInsufficientを拾って回避。
 static OSErr
 color_services_proc (ColorServicesInfo *info)
 {
 
  PSPI_DEBUG (COLOR_SERVICES_SUITE, PING ());
 
  if (info->infoSize < sizeof (ColorServicesInfo))
    return errPlugInHostInsufficient;
 
  switch (info->selector)
    {
    case plugIncolorServicesChooseColor: break;
    case plugIncolorServicesConvertColor: break;
    case plugIncolorServicesSamplePoint: break;
    case plugIncolorServicesGetSpecialColor: break;
    default: g_assert_not_reached ();
    }
 
  PSPI_DEBUG (COLOR_SERVICES_SUITE, PING ());
 
  return errPlugInHostInsufficient;
 }

-Pixiaの8BFPXA.DLLで、filterSelectorStartの次にfilterSelectorContinueを飛ばしてfilterSelectorFinishが来る。フィルター処理本体はfilterSelectorContinueでやってるので何も出来ず。何かのフラグで判別してキャンセルされたと判別しているのかよくわからない。謎。対応策考え中。

-PaintShopProのUpdateProgressは手抜きなのかいらん気をまわしてるのか知らんけど、全てのメッセージをディスパッチしてしまう。

***Photoshopの怪しい挙動(SDKではまってる罠とか) [#u1d0aa29]
-選択範囲。~
Photoshopの場合、ある領域を選択したままフィルターを呼び出すと、その領域がfilterRectに入り、なおかつmaskDataやmaskRowData、haveMask、autoMaskといったマスク関連のパラメータがセットされる。ある領域を選択したままフィルターを呼び出すのは大抵の場合、その領域だけにフィルターをかけたい場合で、autoMaskがTRUEだと自動的に選択領域と非選択領域の境界の色を混ぜてくれ、filterRectにも必要な最小限の領域がセットされるので、この領域だけにフィルターをかければいい。これはPiPLリソースのdontWriteOutsideSelectionフラグのデフォルトの挙動で多くの場合、これで事足りる。~
問題なのは、選択範囲があった場合、autoMaskのTRUEをプログラマがFALSEにして、自動マスクを切ることができると書いてあるのに、期待したとおりに挙動しない点かも。autoMaskをFALSEにすると、確かにブレンディングはOFFになるのだが、filterRectの領域の外をコントロールすることができない。PiPLリソースをwriteOutsideSelectionフラグの場合は、filterRectが全域になるのでそのような事は無いのが、どのパラメータをどのタイミングで切り替えれば、選択領域外に書き込めるのか謎

-選択範囲その2~
PhotoshopElements1ではautoMaskがTRUEの場合、円形のような選択範囲の非選択領域もただしくブレンドしてくれるが、5.0では矩形のままになってしまう。autoMaskが効かない?

-GUIの描画をマルチスレッドにしたらクラッシュ。ドキュメントには何も書いていないけど、スレッドセーフでないようだ。ゴニョゴニョとマルチスレッド化を試みるが、Globalsを上手くスレッドローカルにまとめられない。むずい・・・。いずれは実現させたい・・・。

-この辺で起きるクラッシュの壁を越えられません・・・PS5.02。             
 007B1010  push        ebx  
 007B1011  push        esi  
 007B1012  push        edi  
 007B1013  mov         edi,dword ptr [esp+10h] 
 007B1017  push        edi  
 007B1018  call        007B0D20 
 007B101D  add         esp,4 
 007B1020  test        al,al 
 007B1022  je          007B1078 
 007B1024  mov         eax,dword ptr ds:[00952CBCh] 
 007B1029  xor         edx,edx 
 007B102B  test        eax,eax 
 007B102D  je          007B1078 
 007B102F  mov         esi,7B0FE0h 
 007B1034  mov         ebx,dword ptr [eax+4] 
あとPhotoshop側のスレッドで無限ループに嵌るところもある。待機?

-もともとフィルター処理のスレッドと、Photoshop全体を描画するスレッドは別なようだ。ダイアログの表示はフィルター処理のスレッドで行われる。どの部分にアクセスしたときにエラーになるのかよくわからないが、本体とフィルター処理がもともと別スレッドに分離されて同期されていたと仮定するなら、フィルター処理から新しく描画用のスレッドを起すと、このスレッドと本体のスレッドは同期が取れなくなるのでエラーが起きるのでは?ということは、怪しげなところで描画スレッドを一時停止させておけば問題なし?(←適当)~
Adobe謹製の(Plugin.dllを使う)プラグインはダイアログのProxy描画はフィルター処理本体のスレッドで行い、スライダーコントロールが別のスレッドになっているように見える。例えばProxy描画中にダイアログをドラッグできないのは、描画処理中にメッセージを処理できていないからではないか。

-WindowsのPhotoshop5.0だとリソースのバージョン情報が変。
 1 VERSIONINFO
 FILEVERSION 5,0,128,0
 PRODUCTVERSION 5,2,6,0
 FILEOS 0x4
 FILETYPE 0x1
 {
 BLOCK "StringFileInfo"
 {
 	BLOCK "040904E4"
 	{
 		VALUE "CompanyName", "Adobe Systems, Incorporated"
 		VALUE "FileDescription", "Adobe Photoshop"
 		VALUE "FileVersion", "5.0.2"
 		VALUE "InternalName", "Photoshp"
 		VALUE "LegalCopyright", "(c) 1989-1998 Adobe Systems Inc."
 		VALUE "OriginalFilename", "Photoshp.exe"
 		VALUE "ProductName", "Adobe Photoshop"
 		VALUE "ProductVersion", "5.0.2"
 	}
 }
 
 BLOCK "VarFileInfo"
 {
 	VALUE "Translation", 0x8000 0x04B0
 }
 }
\VarFileInfo\Translationと、\StringFileInfo以下の言語コードが違う・・・。これではアクセスできない・・・。


***SDK関連[#k6e7470c]
-[[How to Write a Photoshop Plug-In, Part 1 :http://www.mactech.com/articles/mactech/Vol.15/15.04/PhotoshopPlug-InsPart1/]]
-[[How to Write a Photoshop Plug-In, Part 2:http://www.mactech.com/articles/mactech/Vol.15/15.05/PhotoshopPlug-InsPart2/]]
-[[How to Write Plug-Ins for Adobe After Effects:http://www.mactech.com/articles/mactech/Vol.15/15.09/AfterEffectsPlugins/]]
-[[How to Use MPW with the Photoshop SDK 6.0:http://www.tonton-pixel.org/photoshop/sdk/mpwps6sdk-en.html]]
-[[PhotoShopSDK4.0(PDF):http://www.xach.com/psd/pshop.pdf]]
-[[Photoshop SDK for Delphi(謎):http://www.centaurix.com/pssdk.html]]
//-[[PhotoshopSDK.exe(本物?):http://www.hta-bi.bfh.ch/Resources/Computing/SunGroup/cgi/cvsweb.cgi/c450/2003/p06/other/PhotoshopSDK/?sortby=log]]
-[[GPU Filter for Photoshop(tm):http://download.developer.nvidia.com/developer/SDK/Individual_Samples/samples.html#GPUFilter]]

***コメントをどーぞ [#cab5cf30]
#comment

----
[[CategoryPSPlugin]]
[[CategoryPhotoshopPlugin]]

|New|Edit|Diff|History|Attach|Copy|Rename|
HTML convert time: 0.002 sec.