{"id":19340371,"url":"https://github.com/epi5131/aex","last_synced_at":"2025-04-23T02:31:23.049Z","repository":{"id":104109138,"uuid":"481412456","full_name":"ePi5131/aex","owner":"ePi5131","description":"AfterEffectsSDKの代替を目指すSDK","archived":false,"fork":false,"pushed_at":"2022-04-17T22:16:07.000Z","size":28,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T06:51:14.458Z","etag":null,"topics":["after-effects"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ePi5131.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-14T00:16:20.000Z","updated_at":"2024-04-10T04:57:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"cea2d122-890d-4d81-9d53-4c70cc5319fa","html_url":"https://github.com/ePi5131/aex","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ePi5131%2Faex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ePi5131%2Faex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ePi5131%2Faex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ePi5131%2Faex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ePi5131","download_url":"https://codeload.github.com/ePi5131/aex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250357625,"owners_count":21417317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["after-effects"],"created_at":"2024-11-10T03:26:14.421Z","updated_at":"2025-04-23T02:31:23.038Z","avatar_url":"https://github.com/ePi5131.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# これはなに\naexはAfterEffectsSDKの代替を目指すSDKです\nまだまだ不完全です\n\n# つかいかた\n`PiPLTool`だけはどうしようもなかったので本家SDKは準備してください\n\n- `aex.zip`を好きなフォルダに展開する\n- `aex`以下に本家SDKの`Resources`フォルダをコピー\n\nここからはプロジェクトの作り方 (VS)\n- インクルードパスに`aex.zipを展開したフォルダ`を追加する\n- プロジェクトに`pipl.r`，`pipl.rc`ファイルを追加する\n- `pipl.r`のプロパティを変更していく\n  -  項目の種類を`カスタム ビルド ツール`にする \n  - コマンドラインを↓にする\n```\ncl /I \"\u003caex\u003e\" /EP \"%(Filename).r\" \u003e \"$(IntDir)%(Filename).rr\" \u0026 \"\u003caex\u003e\\aex\\Resources\\PiPLTool\" \"$(SolutionDir)$(IntDir)%(Filename).rr\" \"$(SolutionDir)$(IntDir)%(Filename).rrc\" \u0026 cl /D \"MSWindows\" /EP \"$(IntDir)%(Filename).rrc\" \u003e \"%(Filename).rc\"\n```\n    - `\u003caex\u003e`の部分は`aex.zipを展開したフォルダ`のパスにしてください\n  - 出力ファイルを↓にする\n```\n$(ProjectDir)%(Filename).rc;%(Outputs)\n```\n\n- `pipl.rc`のプロパティを変更していく\n  - 項目の種類が`リソース コンパイラ`になっているのを確認\n  - 構成`Debug`で`リソース \u003e プリプロセッサの定義`に`_DEBUG`を追加\n\nで、コードは\n```cpp\n#include \u003caex_effect.hpp\u003e\nclass MyEffect : public Effect {\npublic:\n\ttemplate\u003cclass... T\u003e\n\tMyEffect(T... args) : Effect(args...) {}\n} effect(\"name\", \"match_name\", \"category\", \"EffectMain\");\n\nextern \"C\" PF_Err __declspec(dllexport) EffectMain(PF_Cmd cmd, PF_InData* in_data, PF_OutData* out_data, PF_ParamDef* params[], PF_LayerDef* output) {\n\treturn effect.Main(cmd, in_data, out_data, params, output);\n}\n\nextern \"C\" __declspec(dllexport) PF_Err PluginDataEntryFunction(PF_PluginDataPtr inPtr,PF_PluginDataCB inPluginDataCallBackPtr,SPBasicSuite* inSPBasicSuitePtr,const char* inHostName,const char* inHostVersion) {\n\treturn effect.Entry(inPtr, inPluginDataCallBackPtr);\n}\n```\nみたいに書く想定です 不完全なのでこれじゃだめかも\n\n例(Skeleton)\n```cpp\n#define NOMINMAX\n#include \u003cWindows.h\u003e\n\n#define AEX_USE_CPPEXCEPTION\n\n#include \u003caex_effect.hpp\u003e\n\nusing namespace aex;\n\nclass MyEffect : public Effect {\npublic:\n\ttemplate\u003cclass... T\u003e MyEffect(T... args) : Effect(args...) {}\n\n\tPF_Err GlobalSetUp() noexcept override {\n\t\tout_data-\u003emy_version = PF_Version(1, 0, 0, 0, 1);\n\t\tout_data-\u003eout_flags = PF_OutFlags::DeepColorAware;\n\t\treturn PF_Err::None;\n\t}\n\n\tPF_Err ParamsSetUp() noexcept override try {\n\t\tint id = 1;\n\t\tAddFloatSliderX(\"gain\", 0, 100, 0, 100, 10, PF_Precision::Hundredths, 0, PF_ParamFlags::None, id++);\n\t\tAddColor(\"color\", 128, 255, 255, id++);\n\t\tout_data-\u003enum_params = id;\n\t\treturn PF_Err::None;\n\t}\n\tcatch (const pf_exception\u0026 e) {\n\t\treturn e.code();\n\t}\n\n\tstruct GainInfo {\n\t\tPF_FpLong gainF;\n\t};\n\n\ttemplate\u003cclass Pixel\u003e\n\tstatic PF_Err Iterateor(void* refcon, A_long xL, A_long yL, Pixel* inP, Pixel* outP) {\n\t\tauto giP = reinterpret_cast\u003cGainInfo*\u003e(refcon);\n\t\tif (giP) {\n\t\t\tPF_FpLong tempF = std::min\u003cPF_FpLong\u003e(giP-\u003egainF * std::numeric_limits\u003cdecltype(outP-\u003ered)\u003e::max(), std::numeric_limits\u003cdecltype(outP-\u003ered)\u003e::max());\n\t\t\toutP-\u003ealpha = inP-\u003ealpha;\n\t\t\toutP-\u003ered   = std::min\u003cdecltype(outP-\u003ered)\u003e(inP-\u003ered   + tempF, std::numeric_limits\u003cdecltype(outP-\u003ered)\u003e::max());\n\t\t\toutP-\u003egreen = std::min\u003cdecltype(outP-\u003ered)\u003e(inP-\u003egreen + tempF, std::numeric_limits\u003cdecltype(outP-\u003ered)\u003e::max());\n\t\t\toutP-\u003eblue  = std::min\u003cdecltype(outP-\u003ered)\u003e(inP-\u003eblue  + tempF, std::numeric_limits\u003cdecltype(outP-\u003ered)\u003e::max());\n\t\t}\n\t\treturn PF_Err::None;\n\t}\n\t\n\n\tPF_Err Render() noexcept override try {\n\t\tAEGP_SuiteHandler suites(in_data-\u003epica_basicP);\n\t\tGainInfo giP{};\n\t\tA_long linesL = output-\u003eextent_hint.bottom - output-\u003eextent_hint.top;\n\t\tgiP.gainF = params[1]-\u003eu.fs_d.value * .01;\n\t\tif (has_flag(output-\u003eworld_flags, PF_WorldFlags::Deep)) {\n\t\t\tAEX_PF_ERR_CHECK(suites.Iterate16Suite1()-\u003eiterate(in_data, 0, linesL, \u0026params[0]-\u003eu.ld, NULL, \u0026giP, \u0026Iterateor\u003cPF_Pixel16\u003e, output));\n\t\t}\n\t\telse {\n\t\t\tAEX_PF_ERR_CHECK(suites.Iterate8Suite1()-\u003eiterate(in_data, 0, linesL, \u0026params[0]-\u003eu.ld, NULL, \u0026giP, \u0026Iterateor\u003cPF_Pixel\u003e, output));\n\t\t};\n\t\treturn PF_Err::None;\n\t}\n\tcatch (const pf_exception\u0026 e) {\n\t\treturn e.code();\n\t}\n};\n\nMyEffect effect(\"Skeleton\", \"ePi Skeleton\", \"ePi\", \"EffectMain\");\n\nextern \"C\" PF_Err __declspec(dllexport) EffectMain(PF_Cmd cmd, PF_InData* in_data, PF_OutData* out_data, PF_ParamDef* params[], PF_LayerDef* output) {\n\treturn effect.Main(cmd, in_data, out_data, params, output);\n}\n\nextern \"C\" __declspec(dllexport) PF_Err PluginDataEntryFunction(PF_PluginDataPtr inPtr, PF_PluginDataCB inPluginDataCallBackPtr, SPBasicSuite * inSPBasicSuitePtr, const char* inHostName, const char* inHostVersion) {\n\treturn effect.Entry(inPtr, inPluginDataCallBackPtr);\n}\n```\n\n## ライセンス\n1条項BSD\n詳細は LICENSE を見ること\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepi5131%2Faex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepi5131%2Faex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepi5131%2Faex/lists"}