From d9ae0c9244c9a0f3556dd21c87c711f69b4f852e Mon Sep 17 00:00:00 2001 From: PopcornFX Bot Date: Mon, 8 Apr 2024 13:14:28 +0200 Subject: [PATCH] PopcornFX Plugin v2.19.0 --- .github/workflows/draft-release.yml | 30 + AE.code-workspace | 65 + .../Include/AEAttribute_Main.h | 39 + .../Include/AEAttribute_ParamDefine.h | 58 + .../Include/AEAttribute_PluginInterface.h | 99 + .../Include/AEAttribute_SequenceData.h | 52 + AE_Effect_Attribute/PkgInfo | 1 + .../Precompiled/ae_precompiled.cpp | 1 + .../Precompiled/ae_precompiled.h | 13 + .../Sources/AEAttribute_Main.cpp | 172 + .../Sources/AEAttribute_ParamDefine.cpp | 66 + .../Sources/AEAttribute_PluginInterface.cpp | 928 ++ .../Sources/AEAttribute_SequenceData.cpp | 59 + .../AE_Effect_Attribute.plugin-Info.plist | 24 + .../Sources/AE_Effect_Attribute_PiPL.r | 73 + .../Include/AEAttributeSampler_Main.h | 39 + .../Include/AEAttributeSampler_ParamDefine.h | 105 + .../AEAttributeSampler_PluginInterface.h | 107 + .../Include/AEAttributeSampler_SequenceData.h | 52 + AE_Effect_AttributeSampler/PkgInfo | 1 + .../Precompiled/ae_precompiled.cpp | 1 + .../Precompiled/ae_precompiled.h | 8 + .../Sources/AEAttributeSampler_Main.cpp | 170 + .../AEAttributeSampler_ParamDefine.cpp | 169 + .../AEAttributeSampler_PluginInterface.cpp | 780 ++ .../AEAttributeSampler_SequenceData.cpp | 59 + ..._Effect_AttributeSampler.plugin-Info.plist | 24 + .../Sources/AE_Effect_AttributeSampler_PiPL.r | 73 + AE_Effect_Emitter/Include/AEEffect_Main.h | 39 + .../Include/AEEffect_ParamDefine.h | 149 + .../Include/AEEffect_PluginInterface.h | 98 + .../Include/AEEffect_SequenceData.h | 65 + AE_Effect_Emitter/PkgInfo | 1 + .../Precompiled/ae_precompiled.cpp | 1 + .../Precompiled/ae_precompiled.h | 8 + AE_Effect_Emitter/Sources/AEEffect_Main.cpp | 169 + .../Sources/AEEffect_ParamDefine.cpp | 155 + .../Sources/AEEffect_PluginInterface.cpp | 1304 +++ .../Sources/AEEffect_SequenceData.cpp | 88 + .../AE_Effect_Emitter.plugin-Info.plist | 24 + .../Sources/AE_Effect_Emitter_PiPL.r | 73 + AE_GeneralPlugin/GeneralPlugin.manifest | 15 + .../Include/AEGP_AEPKConversion.h | 77 + AE_GeneralPlugin/Include/AEGP_AssetBaker.h | 222 + AE_GeneralPlugin/Include/AEGP_Attribute.h | 216 + AE_GeneralPlugin/Include/AEGP_Define.h | 41 + AE_GeneralPlugin/Include/AEGP_FileDialog.h | 82 + AE_GeneralPlugin/Include/AEGP_FileDialogMac.h | 23 + AE_GeneralPlugin/Include/AEGP_FileWatcher.h | 43 + .../Include/AEGP_FrameCollector.h | 46 + AE_GeneralPlugin/Include/AEGP_LayerHolder.h | 152 + AE_GeneralPlugin/Include/AEGP_Log.h | 51 + AE_GeneralPlugin/Include/AEGP_Main.h | 30 + AE_GeneralPlugin/Include/AEGP_PackExplorer.h | 61 + AE_GeneralPlugin/Include/AEGP_ParticleScene.h | 54 + .../Include/AEGP_PopcornFXPlugins.h | 55 + AE_GeneralPlugin/Include/AEGP_RenderContext.h | 120 + AE_GeneralPlugin/Include/AEGP_Scene.h | 316 + AE_GeneralPlugin/Include/AEGP_SkinnedMesh.h | 122 + .../Include/AEGP_SkinnedMeshInstance.h | 82 + AE_GeneralPlugin/Include/AEGP_System.h | 60 + AE_GeneralPlugin/Include/AEGP_UpdateAEState.h | 90 + AE_GeneralPlugin/Include/AEGP_VaultHandler.h | 99 + AE_GeneralPlugin/Include/AEGP_WinFileDialog.h | 111 + AE_GeneralPlugin/Include/AEGP_WinSystem.h | 34 + AE_GeneralPlugin/Include/AEGP_World.h | 322 + .../Panels/AEGP_GraphicalResourcesTreeModel.h | 163 + .../Include/Panels/AEGP_PanelQT.h | 201 + .../Include/RenderApi/AEGP_BaseContext.h | 68 + .../Include/RenderApi/AEGP_CopyPixels.h | 45 + .../Include/RenderApi/AEGP_CopyTask.h | 70 + .../Include/RenderApi/AEGP_D3D11Context.h | 77 + .../Include/RenderApi/AEGP_D3D12Context.h | 105 + .../Include/RenderApi/AEGP_MetalContext.h | 90 + AE_GeneralPlugin/PkgInfo | 1 + .../Precompiled/ae_precompiled.cpp | 1 + AE_GeneralPlugin/Precompiled/ae_precompiled.h | 28 + .../Sources/AEGP_AEPKConversion.cpp | 492 + AE_GeneralPlugin/Sources/AEGP_AssetBaker.cpp | 799 ++ AE_GeneralPlugin/Sources/AEGP_Attribute.cpp | 758 ++ AE_GeneralPlugin/Sources/AEGP_FileDialog.cpp | 107 + .../Sources/AEGP_FileDialogMac.mm | 66 + AE_GeneralPlugin/Sources/AEGP_FileWatcher.cpp | 113 + .../Sources/AEGP_FrameCollector.cpp | 45 + AE_GeneralPlugin/Sources/AEGP_LayerHolder.cpp | 155 + AE_GeneralPlugin/Sources/AEGP_Log.cpp | 108 + AE_GeneralPlugin/Sources/AEGP_Main.cpp | 475 + .../Sources/AEGP_PackExplorer.cpp | 124 + .../Sources/AEGP_ParticleScene.cpp | 134 + .../Sources/AEGP_PopcornFXPlugins.cpp | 282 + .../Sources/AEGP_RenderContext.cpp | 703 ++ AE_GeneralPlugin/Sources/AEGP_Scene.cpp | 2057 ++++ AE_GeneralPlugin/Sources/AEGP_SkinnedMesh.cpp | 451 + .../Sources/AEGP_SkinnedMeshInstance.cpp | 261 + AE_GeneralPlugin/Sources/AEGP_System.cpp | 276 + .../Sources/AEGP_UpdateAEState.cpp | 1233 +++ .../Sources/AEGP_VaultHandler.cpp | 492 + .../Sources/AEGP_WinFileDialog.cpp | 183 + AE_GeneralPlugin/Sources/AEGP_WinSystem.cpp | 216 + AE_GeneralPlugin/Sources/AEGP_World.cpp | 2674 +++++ .../AE_GeneralPlugin.plugin-Info.plist | 24 + .../Sources/AE_GeneralPlugin_PiPL.r | 41 + .../AEGP_GraphicalResourcesTreeModel.cpp | 931 ++ .../Sources/Panels/AEGP_PanelQT.cpp | 736 ++ .../Sources/RenderApi/AEGP_BaseContext.cpp | 54 + .../Sources/RenderApi/AEGP_CopyPixels.cpp | 193 + .../Sources/RenderApi/AEGP_D3D11Context.cpp | 506 + .../Sources/RenderApi/AEGP_D3D12Context.cpp | 712 ++ .../Sources/RenderApi/AEGP_MetalContext.mm | 188 + AE_Suites/PopcornFX_BasePluginInterface.h | 293 + AE_Suites/PopcornFX_Define.h | 90 + AE_Suites/PopcornFX_Define_Version.h | 9 + AE_Suites/PopcornFX_Suite.h | 1407 +++ AE_Suites/PopcornFX_UID.h | 67 + CopyQTDllsForAE.py | 105 + External/AE SDK/Headers/A.h | 196 + External/AE SDK/Headers/AEConfig.h | 102 + External/AE SDK/Headers/AEFX_ArbParseHelper.c | 171 + External/AE SDK/Headers/AEFX_ArbParseHelper.h | 75 + .../AE SDK/Headers/AEFX_ChannelDepthTpl.h | 59 + .../Headers/AEFX_SuiteHandlerTemplate.h | 63 + External/AE SDK/Headers/AEFX_SuiteHelper.c | 139 + External/AE SDK/Headers/AEFX_SuiteHelper.h | 157 + External/AE SDK/Headers/AEGP_SuiteHandler.cpp | 66 + External/AE SDK/Headers/AEGP_SuiteHandler.h | 601 ++ External/AE SDK/Headers/AEGP_Utils.cpp | 37 + External/AE SDK/Headers/AEGP_Utils.h | 9 + External/AE SDK/Headers/AE_AdvEffectSuites.h | 343 + External/AE SDK/Headers/AE_CacheOnLoadSuite.h | 39 + External/AE SDK/Headers/AE_ChannelSuites.h | 509 + .../AE SDK/Headers/AE_ComputeCacheSuite.h | 175 + External/AE SDK/Headers/AE_CreatorInfo.h | 1 + External/AE SDK/Headers/AE_Effect.h | 3049 ++++++ External/AE SDK/Headers/AE_EffectCB.h | 1223 +++ External/AE SDK/Headers/AE_EffectCBSuites.h | 914 ++ External/AE SDK/Headers/AE_EffectGPUSuites.h | 221 + .../AE SDK/Headers/AE_EffectPixelFormat.h | 110 + External/AE SDK/Headers/AE_EffectSuites.h | 728 ++ .../AE SDK/Headers/AE_EffectSuitesHelper.h | 152 + External/AE SDK/Headers/AE_EffectSuitesOld.h | 283 + External/AE SDK/Headers/AE_EffectUI.h | 580 ++ External/AE SDK/Headers/AE_EffectVers.h | 17 + External/AE SDK/Headers/AE_GeneralPlug.h | 5779 +++++++++++ External/AE SDK/Headers/AE_GeneralPlugOld.h | 9125 +++++++++++++++++ .../AE SDK/Headers/AE_GeneralPlugPanels.h | 134 + External/AE SDK/Headers/AE_GeneralPlugPost.h | 16 + External/AE SDK/Headers/AE_GeneralPlugPre.h | 15 + External/AE SDK/Headers/AE_HashSuite.h | 52 + External/AE SDK/Headers/AE_Hook.h | 155 + External/AE SDK/Headers/AE_IO.h | 789 ++ External/AE SDK/Headers/AE_IO_FileExt.h | 32 + External/AE SDK/Headers/AE_Macros.h | 102 + External/AE SDK/Headers/AE_PluginData.h | 84 + External/AE SDK/Headers/DuckSuite.h | 13 + External/AE SDK/Headers/FIEL_Public.h | 81 + External/AE SDK/Headers/Mach-O_prefix.h | 1 + External/AE SDK/Headers/MissingSuiteError.cpp | 43 + External/AE SDK/Headers/PF_Masks.h | 49 + External/AE SDK/Headers/PR_Public.h | 424 + External/AE SDK/Headers/PT_Public.h | 120 + External/AE SDK/Headers/Param_Utils.h | 343 + External/AE SDK/Headers/PrSDKAESupport.h | 547 + External/AE SDK/Headers/PrSDKPixelFormat.h | 160 + External/AE SDK/Headers/SP/PSIntTypes.h | 79 + External/AE SDK/Headers/SP/SPAccess.h | 387 + External/AE SDK/Headers/SP/SPAdapts.h | 406 + External/AE SDK/Headers/SP/SPBasic.h | 184 + External/AE SDK/Headers/SP/SPBckDbg.h | 118 + External/AE SDK/Headers/SP/SPBlocks.h | 118 + External/AE SDK/Headers/SP/SPCOM.h | 9 + External/AE SDK/Headers/SP/SPCaches.h | 128 + External/AE SDK/Headers/SP/SPConfig.h | 76 + External/AE SDK/Headers/SP/SPEDebug.c | 2 + External/AE SDK/Headers/SP/SPErrorCodes.h | 172 + External/AE SDK/Headers/SP/SPErrors.h | 34 + External/AE SDK/Headers/SP/SPFiles.h | 511 + External/AE SDK/Headers/SP/SPHost.h | 176 + External/AE SDK/Headers/SP/SPInterf.h | 180 + External/AE SDK/Headers/SP/SPMData.h | 66 + External/AE SDK/Headers/SP/SPObject.h | 15 + External/AE SDK/Headers/SP/SPPiPL.h | 302 + External/AE SDK/Headers/SP/SPPlugs.h | 631 ++ External/AE SDK/Headers/SP/SPProps.h | 316 + External/AE SDK/Headers/SP/SPRuntme.h | 500 + External/AE SDK/Headers/SP/SPSTSPrp.h | 52 + External/AE SDK/Headers/SP/SPStrngs.h | 132 + External/AE SDK/Headers/SP/SPSuites.h | 284 + External/AE SDK/Headers/SP/SPTypes.h | 175 + .../Headers/SP/artemis/config/platform.hpp | 114 + .../Headers/SP/photoshop/config/platform.hpp | 95 + External/AE SDK/Headers/Smart_Utils.cpp | 62 + External/AE SDK/Headers/Smart_Utils.h | 34 + External/AE SDK/Headers/String_Utils.c | 6 + External/AE SDK/Headers/String_Utils.h | 48 + External/AE SDK/Headers/SuiteHelper.h | 97 + .../AE SDK/Headers/adobesdk/DrawbotSuite.h | 660 ++ .../Headers/adobesdk/config/AdobesdkTypes.h | 54 + .../Headers/adobesdk/config/PostConfig.h | 2 + .../Headers/adobesdk/config/PreConfig.h | 23 + .../adobesdk/drawbotsuite/DrawbotSuiteTypes.h | 148 + External/AE SDK/Headers/entry.h | 53 + External/AE SDK/Resources/AE_General.r | 548 + External/AE SDK/Resources/Mach-O_prefix.h | 1 + External/AE SDK/Resources/PiPLtool.exe | 3 + External/AE SDK/Util/AEFX_ArbParseHelper.c | 174 + External/AE SDK/Util/AEFX_ArbParseHelper.h | 75 + External/AE SDK/Util/AEFX_ChannelDepthTpl.h | 59 + External/AE SDK/Util/AEFX_SuiteHelper.c | 139 + External/AE SDK/Util/AEFX_SuiteHelper.h | 157 + External/AE SDK/Util/AEGP_SuiteHandler.cpp | 66 + External/AE SDK/Util/AEGP_SuiteHandler.h | 601 ++ External/AE SDK/Util/AEGP_Utils.cpp | 38 + External/AE SDK/Util/AEGP_Utils.h | 9 + External/AE SDK/Util/DuckSuite.h | 13 + External/AE SDK/Util/MissingSuiteError.cpp | 43 + External/AE SDK/Util/Param_Utils.h | 343 + External/AE SDK/Util/Smart_Utils.cpp | 62 + External/AE SDK/Util/Smart_Utils.h | 34 + External/AE SDK/Util/String_Utils.h | 48 + External/AE SDK/Util/entry.h | 53 + External/popcornfx.qt/Qt5Core.dll | 3 + External/popcornfx.qt/Qt5Gui.dll | 3 + External/popcornfx.qt/Qt5Widgets.dll | 3 + External/popcornfx.qt/popcornfx.qt.manifest | 9 + External/popcornfx.qt/qwindows.dll | 3 + Native/debugger/PopcornFX.natvis | 409 + Native/debugger/qt5.natvis | 683 ++ PopcornFX/CHANGELOG.md | 3 + PopcornFX/LICENSE.md | 14 + PopcornFX/PK-ShaderTool_r.exe | 3 + .../PopcornFXInternals/Meshes/default.pkmm | 3 + ....0C443080A9914F8E3821857B39F3B3F6.metallib | Bin 0 -> 69574 bytes ....comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso | Bin 0 -> 32052 bytes ...p.3C55D2DBBDE67D3B05E91E33AA424D4A.cso.pdb | 3 + ....frag.3777E0C4C3850AF4730B699288C64A32.cso | Bin 0 -> 20372 bytes ...g.3777E0C4C3850AF4730B699288C64A32.cso.pdb | 3 + ....DBCFC7E098405CD8ABAFBFE666F38717.metallib | Bin 0 -> 68478 bytes ....frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso | Bin 0 -> 24300 bytes ...g.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso.pdb | 3 + ....C5813AF3B0DA61049FC61318A52A0039.metallib | Bin 0 -> 67730 bytes ....08B780C3B4A4A9B95239BE4725C155E3.metallib | Bin 0 -> 68274 bytes ....2BF4FFEBF18FD2317E7196CCB179BBD1.metallib | Bin 0 -> 68114 bytes ....comp.ACF5EA8A26A387527C94AE3CADBEEFE0.cso | Bin 0 -> 17656 bytes ...p.ACF5EA8A26A387527C94AE3CADBEEFE0.cso.pdb | 3 + ....comp.FADA9FB998752BB17F58A80A5F9E1569.cso | Bin 0 -> 20892 bytes ...p.FADA9FB998752BB17F58A80A5F9E1569.cso.pdb | 3 + ....12DC1B81F40BCA0B86B8977219474DA2.metallib | Bin 0 -> 67818 bytes ....comp.227B4305DA369E84D660CF7D0F95A7B1.cso | Bin 0 -> 19552 bytes ...p.227B4305DA369E84D660CF7D0F95A7B1.cso.pdb | 3 + ....comp.3041E5075421B7BEDB64891F34806B09.cso | Bin 0 -> 20104 bytes ...p.3041E5075421B7BEDB64891F34806B09.cso.pdb | 3 + ....3F9F670175C1E9A2721D86BF200E8992.metallib | Bin 0 -> 68042 bytes ....47AFC4B8F363592BAB2CB2B7450DC6CB.metallib | Bin 0 -> 66746 bytes ....comp.68D7368ADF463DA7672D728718850C05.cso | Bin 0 -> 19704 bytes ...p.68D7368ADF463DA7672D728718850C05.cso.pdb | 3 + ....comp.ADF077D22B698F0058CD269AB3B307F6.cso | Bin 0 -> 17168 bytes ...p.ADF077D22B698F0058CD269AB3B307F6.cso.pdb | 3 + ....E6559EF41DF4A3259DE7762E070648DE.metallib | Bin 0 -> 67050 bytes ....4FB8AAE1AE744B6A08826A79EB921BC5.metallib | Bin 0 -> 68134 bytes ....comp.B71DE41E8684A6AE211AB8D5CC66868D.cso | Bin 0 -> 22496 bytes ...p.B71DE41E8684A6AE211AB8D5CC66868D.cso.pdb | 3 + ....comp.77033778233ABE1F8DF4DC10896A9D54.cso | Bin 0 -> 16960 bytes ...p.77033778233ABE1F8DF4DC10896A9D54.cso.pdb | 3 + ....C9C782D1BBE13E453755EC081421DED8.metallib | Bin 0 -> 66942 bytes ....comp.369D88A577A88042FF66C8A4DB9A4FFF.cso | Bin 0 -> 17428 bytes ...p.369D88A577A88042FF66C8A4DB9A4FFF.cso.pdb | 3 + ....comp.392E08DB2C8E05308B151D1DA50C5FD0.cso | Bin 0 -> 20016 bytes ...p.392E08DB2C8E05308B151D1DA50C5FD0.cso.pdb | 3 + ....5105918DD8BE389C150428D89E1DC2A5.metallib | Bin 0 -> 67702 bytes ....comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso | Bin 0 -> 17568 bytes ...p.51CA73B06455A1B1FE3E7645C1E97A2C.cso.pdb | 3 + ....87A39CD991750E4B6AA82597D1D6999F.metallib | Bin 0 -> 66742 bytes ....AE073ACCCC101E16160223DC2E63E101.metallib | Bin 0 -> 67942 bytes ....comp.C8248FD11EC1733B4966D0AD2A176353.cso | Bin 0 -> 19880 bytes ...p.C8248FD11EC1733B4966D0AD2A176353.cso.pdb | 3 + ....DF3F5EC676EAEE69B51393B80926E694.metallib | Bin 0 -> 67766 bytes ....2616FB8E13640920939266A5AB69B20D.metallib | Bin 0 -> 66830 bytes ....comp.5193D9B98F2643DCDDD49DEB24A0B7BF.cso | Bin 0 -> 19656 bytes ...p.5193D9B98F2643DCDDD49DEB24A0B7BF.cso.pdb | 3 + ....1176896EBBA00E7091A5D3AB0E2EBB79.metallib | Bin 0 -> 66454 bytes ....comp.22E56629C521714CE47CDCC8E03CCD62.cso | Bin 0 -> 20560 bytes ...p.22E56629C521714CE47CDCC8E03CCD62.cso.pdb | 3 + ....comp.3048D89D90DE3FE53B72E0B170415B00.cso | Bin 0 -> 20300 bytes ...p.3048D89D90DE3FE53B72E0B170415B00.cso.pdb | 3 + ....52AF64226113D111C7C55923680D03E7.metallib | Bin 0 -> 66662 bytes ....6D4F2B8F547360DC2A71F660E3706939.metallib | Bin 0 -> 67494 bytes ....comp.82765548E48F470AE2C324FD1DD1DF19.cso | Bin 0 -> 17248 bytes ...p.82765548E48F470AE2C324FD1DD1DF19.cso.pdb | 3 + ....comp.BF85DD78B470A799944AD5A0F0323B0C.cso | Bin 0 -> 19584 bytes ...p.BF85DD78B470A799944AD5A0F0323B0C.cso.pdb | 3 + ....EEC67DE904429E8E712062FB728CA7E7.metallib | Bin 0 -> 67286 bytes ....frag.002AC7D0B7F236B81143408D73D581F8.cso | Bin 0 -> 14900 bytes ...g.002AC7D0B7F236B81143408D73D581F8.cso.pdb | 3 + ....frag.008D18448C772DC164148A23DB8594EA.cso | Bin 0 -> 14940 bytes ...g.008D18448C772DC164148A23DB8594EA.cso.pdb | 3 + ....0AD45649F32641AAA69A3A9C079BDDBC.metallib | Bin 0 -> 69306 bytes ....frag.18BB2ED0068256FAC47DC4810295F65B.cso | Bin 0 -> 14620 bytes ...g.18BB2ED0068256FAC47DC4810295F65B.cso.pdb | 3 + ....3AEC42EAC916E5302A5879B5E0480E46.metallib | Bin 0 -> 66298 bytes ....42142CB169269EB33A0A31A418C939A6.metallib | Bin 0 -> 66314 bytes ....frag.48B033222FD1BD594675302F045A38A7.cso | Bin 0 -> 20092 bytes ...g.48B033222FD1BD594675302F045A38A7.cso.pdb | 3 + ....frag.4B0896B385CFE32F521EF3625ECD7CE6.cso | Bin 0 -> 14588 bytes ...g.4B0896B385CFE32F521EF3625ECD7CE6.cso.pdb | 3 + ....570374695D2EDE03975F3ACEEF142B8A.metallib | Bin 0 -> 66522 bytes ....5BCF450E7AAEB04EFE81950BC64E3F24.metallib | Bin 0 -> 66266 bytes ....6B6958101DFBCC2D44E480C8108B4531.metallib | Bin 0 -> 66314 bytes ....724B5E7F9D5F2C642BBADBF98BCE6122.metallib | Bin 0 -> 66666 bytes ....frag.7D3D408F4D90CC373A284D34F9B71F98.cso | Bin 0 -> 14708 bytes ...g.7D3D408F4D90CC373A284D34F9B71F98.cso.pdb | 3 + ....frag.842841B5F4FFDF9CF56BEF4C0A6C5C2D.cso | Bin 0 -> 14628 bytes ...g.842841B5F4FFDF9CF56BEF4C0A6C5C2D.cso.pdb | 3 + ....frag.87D14E5B2AF4072ABF40B5A743B01133.cso | Bin 0 -> 14588 bytes ...g.87D14E5B2AF4072ABF40B5A743B01133.cso.pdb | 3 + ....8EB0F8ED9C71D976C3914CE541D3AFC7.metallib | Bin 0 -> 67418 bytes ....9868960EE5BAA4542CE68A32E3F82EAB.metallib | Bin 0 -> 66618 bytes ....BD068B89B4F2CBB0E292F53BC3714F9D.metallib | Bin 0 -> 66314 bytes ....frag.CBB6451884404E44D465B01DF5A806BE.cso | Bin 0 -> 27776 bytes ...g.CBB6451884404E44D465B01DF5A806BE.cso.pdb | 3 + ....frag.F0E2F0F689387705D12CB9970013F51D.cso | Bin 0 -> 14560 bytes ...g.F0E2F0F689387705D12CB9970013F51D.cso.pdb | 3 + ....vert.01D890EA6B89BCCBE76EB1FEC30F851E.cso | Bin 0 -> 14600 bytes ...t.01D890EA6B89BCCBE76EB1FEC30F851E.cso.pdb | 3 + ....01D890EA6B89BCCBE76EB1FEC30F851E.metallib | Bin 0 -> 65539 bytes ....vert.140F4C3CE57F202DE2DE8B945704F1F0.cso | Bin 0 -> 18096 bytes ...t.140F4C3CE57F202DE2DE8B945704F1F0.cso.pdb | 3 + ....vert.1DCA9D50DC853C86C4F97DC839A9325E.cso | Bin 0 -> 17916 bytes ...t.1DCA9D50DC853C86C4F97DC839A9325E.cso.pdb | 3 + ....vert.2FF984AB185BE7E8637187AC34C0981A.cso | Bin 0 -> 17816 bytes ...t.2FF984AB185BE7E8637187AC34C0981A.cso.pdb | 3 + ....3348F0F53DE2A58A3FAD84C6699E871C.metallib | Bin 0 -> 65898 bytes ....vert.58AAEEAE9F43BBE34D312BD53914D01A.cso | Bin 0 -> 14744 bytes ...t.58AAEEAE9F43BBE34D312BD53914D01A.cso.pdb | 3 + ....5AE82EFD5FB29F367E0D45BA786D928A.metallib | Bin 0 -> 66579 bytes ....7DDABF541F1046F394F9BD2476CB5992.metallib | Bin 0 -> 66991 bytes ....E77F6D2C2CCEA5FD8F910DA990E10013.metallib | Bin 0 -> 66698 bytes ....frag.4DD1C89DF8002B409E089089CE8F24E7.cso | Bin 0 -> 14416 bytes ...g.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb | 3 + ....4DD1C89DF8002B409E089089CE8F24E7.metallib | Bin 0 -> 65394 bytes ....5DF351B082B2DAEB6EA8D2B69FF8CE75.metallib | Bin 0 -> 66226 bytes ....frag.7CF9397E238069F29B5AD306936DC2E1.cso | Bin 0 -> 14416 bytes ...g.7CF9397E238069F29B5AD306936DC2E1.cso.pdb | 3 + ....7F37BB3F141BE207B89B42BD7E923FBA.metallib | Bin 0 -> 66226 bytes ....9E055DD95BFFEC03321947DE0EB82637.metallib | Bin 0 -> 66226 bytes ....DAB1785A8432D17D3A9633C69AC4C0BF.metallib | Bin 0 -> 66226 bytes ....EF723B81A7A0BF6787FDDD555588FDAA.metallib | Bin 0 -> 66226 bytes ....frag.7CF9397E238069F29B5AD306936DC2E1.cso | Bin 0 -> 14416 bytes ...g.7CF9397E238069F29B5AD306936DC2E1.cso.pdb | 3 + ....EF723B81A7A0BF6787FDDD555588FDAA.metallib | Bin 0 -> 66222 bytes ....vert.2FF984AB185BE7E8637187AC34C0981A.cso | Bin 0 -> 17816 bytes ...t.2FF984AB185BE7E8637187AC34C0981A.cso.pdb | 3 + ....5AE82EFD5FB29F367E0D45BA786D928A.metallib | Bin 0 -> 66595 bytes ....8DBEE0AA3D769A49703B7DD05C82CFA3.metallib | Bin 0 -> 69602 bytes ....frag.C1B07717CD6E335BA0719719B22FAFE3.cso | Bin 0 -> 31676 bytes ...g.C1B07717CD6E335BA0719719B22FAFE3.cso.pdb | 3 + ....29EB9B0EAE29F9736E833F3E1F035C27.metallib | Bin 0 -> 70111 bytes ....vert.75A6F16850E5D3B8E8B7368097463B42.cso | Bin 0 -> 34608 bytes ...t.75A6F16850E5D3B8E8B7368097463B42.cso.pdb | 3 + ....vert.03430199D846164B6B0612A9B2AB28EA.cso | Bin 0 -> 25100 bytes ...t.03430199D846164B6B0612A9B2AB28EA.cso.pdb | 3 + ....40C070F9811750AE211F3378926ED3B0.metallib | Bin 0 -> 69034 bytes ....9D7F4A290A88D708B9D8641A2177BBE3.metallib | Bin 0 -> 69386 bytes ....vert.AA13DF163AA5F83DF77B65270B739A08.cso | Bin 0 -> 25376 bytes ...t.AA13DF163AA5F83DF77B65270B739A08.cso.pdb | 3 + ....ABB1D1D062F10893CD085B71E73BA1FB.metallib | Bin 0 -> 69075 bytes ....vert.BB070F836ADD72A3E65E350E4F68AAFE.cso | Bin 0 -> 25100 bytes ...t.BB070F836ADD72A3E65E350E4F68AAFE.cso.pdb | 3 + ....vert.BB420670B55EEABBBB80947E171765E6.cso | Bin 0 -> 25124 bytes ...t.BB420670B55EEABBBB80947E171765E6.cso.pdb | 3 + ....vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso | Bin 0 -> 25264 bytes ...t.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso.pdb | 3 + ....F6238D8991D40344B66C2ABAF21B2B5A.metallib | Bin 0 -> 69194 bytes ....FE53A6036CA4635A540C1FEA2D189F45.metallib | Bin 0 -> 69034 bytes ....vert.05E05A32B897F2006A110EB2D80A4548.cso | Bin 0 -> 18096 bytes ...t.05E05A32B897F2006A110EB2D80A4548.cso.pdb | 3 + ....vert.0E8B137E61B073CBAAAB0C24A2C4CEF9.cso | Bin 0 -> 17792 bytes ...t.0E8B137E61B073CBAAAB0C24A2C4CEF9.cso.pdb | 3 + ....vert.266E4511F0C4068B851B075051BA543B.cso | Bin 0 -> 17900 bytes ...t.266E4511F0C4068B851B075051BA543B.cso.pdb | 3 + ....vert.2FF984AB185BE7E8637187AC34C0981A.cso | Bin 0 -> 17816 bytes ...t.2FF984AB185BE7E8637187AC34C0981A.cso.pdb | 3 + ....35C1E2A66FBFA2887558AC3636CCA6EB.metallib | Bin 0 -> 66854 bytes ....vert.38A9BD92AA3A1500ADA3082B18F935F4.cso | Bin 0 -> 18072 bytes ...t.38A9BD92AA3A1500ADA3082B18F935F4.cso.pdb | 3 + ....3DC0E88754F11D4478F7B7D881ADF28E.metallib | Bin 0 -> 66586 bytes ....473011F7B55118D4409E7A91C4CA0C06.metallib | Bin 0 -> 66720 bytes ....53C5FFB4F1F65014E9D8CE139E165C06.metallib | Bin 0 -> 66837 bytes ....vert.5A4DDE443DFF866A0B6F7E709735D7AB.cso | Bin 0 -> 20328 bytes ...t.5A4DDE443DFF866A0B6F7E709735D7AB.cso.pdb | 3 + ....5AE82EFD5FB29F367E0D45BA786D928A.metallib | Bin 0 -> 66595 bytes ....vert.5C6447565A432691A52405F2D1A50012.cso | Bin 0 -> 18000 bytes ...t.5C6447565A432691A52405F2D1A50012.cso.pdb | 3 + ....620373BC462CC9D98E9DAE33EC0EF03D.metallib | Bin 0 -> 66586 bytes ....vert.65E266EB404652FA1212BBD1F985A6AC.cso | Bin 0 -> 17900 bytes ...t.65E266EB404652FA1212BBD1F985A6AC.cso.pdb | 3 + ....66F6E1229EB0784EFA3F715B73E43D2B.metallib | Bin 0 -> 66695 bytes ....6CE9330E31EBBC32AE8E316A8C0EE277.metallib | Bin 0 -> 66996 bytes ....vert.8BD5661BC011A36608F82548C23FB052.cso | Bin 0 -> 18072 bytes ...t.8BD5661BC011A36608F82548C23FB052.cso.pdb | 3 + ....8D18B0A6A0838F6914203A391288C860.metallib | Bin 0 -> 66695 bytes ....A7855B18F4958E7E1B7D9B72701C3720.metallib | Bin 0 -> 66728 bytes ....vert.ADDF91CE486A3BFBC7564616DE170ABA.cso | Bin 0 -> 17924 bytes ...t.ADDF91CE486A3BFBC7564616DE170ABA.cso.pdb | 3 + ....B745EB05721137F2AE8C910D1BE17F25.metallib | Bin 0 -> 66854 bytes ....vert.C7EED909597A865FF430CA2885C69439.cso | Bin 0 -> 17792 bytes ...t.C7EED909597A865FF430CA2885C69439.cso.pdb | 3 + ....vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso | Bin 0 -> 20156 bytes ...t.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso.pdb | 3 + ....FDDCD4D907DA9A03ACCD42C140A776A4.metallib | Bin 0 -> 66863 bytes ....geom.11A3F59B29869268E24243BE4EABD116.cso | Bin 0 -> 41928 bytes ...m.11A3F59B29869268E24243BE4EABD116.cso.pdb | 3 + ....geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso | Bin 0 -> 41956 bytes ...m.125C4FCD6DC29A9F6B47ACC988C0162F.cso.pdb | 3 + ....geom.1873B621D321CE82AA536C28DCE3C58D.cso | Bin 0 -> 49712 bytes ...m.1873B621D321CE82AA536C28DCE3C58D.cso.pdb | 3 + ....geom.1A146F33833BE9EEA65C6C0C0CBE799D.cso | Bin 0 -> 42016 bytes ...m.1A146F33833BE9EEA65C6C0C0CBE799D.cso.pdb | 3 + ....geom.1B816B245295CA5D5327E96BFE6301F6.cso | Bin 0 -> 36624 bytes ...m.1B816B245295CA5D5327E96BFE6301F6.cso.pdb | 3 + ....geom.1C0F0C96333B91901C06D1175A16E1DE.cso | Bin 0 -> 40836 bytes ...m.1C0F0C96333B91901C06D1175A16E1DE.cso.pdb | 3 + ....geom.2ACA21574A23B0D0074098285F176749.cso | Bin 0 -> 49712 bytes ...m.2ACA21574A23B0D0074098285F176749.cso.pdb | 3 + ....geom.2C8009173B59A839A8E4FF2BC5B85094.cso | Bin 0 -> 49740 bytes ...m.2C8009173B59A839A8E4FF2BC5B85094.cso.pdb | 3 + ....geom.2CEEC2A138B6BB946C7E5836CC5E37E0.cso | Bin 0 -> 40924 bytes ...m.2CEEC2A138B6BB946C7E5836CC5E37E0.cso.pdb | 3 + ....geom.377370747DA9B2908354049AAC2D30FA.cso | Bin 0 -> 40924 bytes ...m.377370747DA9B2908354049AAC2D30FA.cso.pdb | 3 + ....geom.38E2D27FF7046D8A00290708435B3AC5.cso | Bin 0 -> 42016 bytes ...m.38E2D27FF7046D8A00290708435B3AC5.cso.pdb | 3 + ....geom.40452A858BDF0DD351CAAC7CAD4D75AC.cso | Bin 0 -> 40956 bytes ...m.40452A858BDF0DD351CAAC7CAD4D75AC.cso.pdb | 3 + ....geom.455299EAF18CA9285CFB885E58CDC6D0.cso | Bin 0 -> 36712 bytes ...m.455299EAF18CA9285CFB885E58CDC6D0.cso.pdb | 3 + ....geom.494F248863E815B635F86B4C4A2B9878.cso | Bin 0 -> 41956 bytes ...m.494F248863E815B635F86B4C4A2B9878.cso.pdb | 3 + ....geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso | Bin 0 -> 42044 bytes ...m.4A6E9FDAA1CE421286BA2A3A30A6658A.cso.pdb | 3 + ....geom.566A5829015B608CF29A39550DEF77DC.cso | Bin 0 -> 49624 bytes ...m.566A5829015B608CF29A39550DEF77DC.cso.pdb | 3 + ....geom.5E305102DF74F937A763A780239EC2AB.cso | Bin 0 -> 49652 bytes ...m.5E305102DF74F937A763A780239EC2AB.cso.pdb | 3 + ....geom.5F5DF159396A6B8FE4C4A0F97D78924B.cso | Bin 0 -> 36624 bytes ...m.5F5DF159396A6B8FE4C4A0F97D78924B.cso.pdb | 3 + ....geom.7B8359347B0DEF37AA39A05B62E5CBC1.cso | Bin 0 -> 36740 bytes ...m.7B8359347B0DEF37AA39A05B62E5CBC1.cso.pdb | 3 + ....geom.7EEA6AF74A7E1398CE4B70E260147AF0.cso | Bin 0 -> 36652 bytes ...m.7EEA6AF74A7E1398CE4B70E260147AF0.cso.pdb | 3 + ....geom.7F33C027EBB191F2059BE1A8839D31F5.cso | Bin 0 -> 40868 bytes ...m.7F33C027EBB191F2059BE1A8839D31F5.cso.pdb | 3 + ....geom.893C3B31AEB4B56E07A0C0112A35B626.cso | Bin 0 -> 49740 bytes ...m.893C3B31AEB4B56E07A0C0112A35B626.cso.pdb | 3 + ....geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso | Bin 0 -> 40868 bytes ...m.8DDF66C3535F05343B6E0711A2F5EDE9.cso.pdb | 3 + ....geom.9EBF63F0CECB121FB08C73258F424154.cso | Bin 0 -> 49624 bytes ...m.9EBF63F0CECB121FB08C73258F424154.cso.pdb | 3 + ....geom.9F151426D3A5187075EB122B45099E95.cso | Bin 0 -> 49652 bytes ...m.9F151426D3A5187075EB122B45099E95.cso.pdb | 3 + ....geom.C1D8B1B3F659E4754B02859930024C34.cso | Bin 0 -> 41928 bytes ...m.C1D8B1B3F659E4754B02859930024C34.cso.pdb | 3 + ....geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso | Bin 0 -> 40956 bytes ...m.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso.pdb | 3 + ....geom.DBAB50AF656C0B77BE3EACFA872A4107.cso | Bin 0 -> 36712 bytes ...m.DBAB50AF656C0B77BE3EACFA872A4107.cso.pdb | 3 + ....geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso | Bin 0 -> 36740 bytes ...m.E46C7BF11C16009DAD26F2E52BCA71ED.cso.pdb | 3 + ....geom.EDC05431FEB536B2137D9C70A18E0E85.cso | Bin 0 -> 40836 bytes ...m.EDC05431FEB536B2137D9C70A18E0E85.cso.pdb | 3 + ....geom.F43E932D41866B4751D2AAAA122C0DF8.cso | Bin 0 -> 36652 bytes ...m.F43E932D41866B4751D2AAAA122C0DF8.cso.pdb | 3 + ....geom.FD048825BBE1F9EEFF9AF105929E49F9.cso | Bin 0 -> 42044 bytes ...m.FD048825BBE1F9EEFF9AF105929E49F9.cso.pdb | 3 + ....vert.0491B9E5DB4146F6039DB5A1028E068F.cso | Bin 0 -> 19056 bytes ...t.0491B9E5DB4146F6039DB5A1028E068F.cso.pdb | 3 + ....vert.089C1A93F75623C5625465ADC48162D9.cso | Bin 0 -> 19080 bytes ...t.089C1A93F75623C5625465ADC48162D9.cso.pdb | 3 + ....vert.2CBCDD973DD8785D8ED96E438B732020.cso | Bin 0 -> 19088 bytes ...t.2CBCDD973DD8785D8ED96E438B732020.cso.pdb | 3 + ....vert.2EBB1E214294B7250FB31039A38D6AC5.cso | Bin 0 -> 16848 bytes ...t.2EBB1E214294B7250FB31039A38D6AC5.cso.pdb | 3 + ....vert.38E30D094B028C691653A728362634B2.cso | Bin 0 -> 16824 bytes ...t.38E30D094B028C691653A728362634B2.cso.pdb | 3 + ....vert.45152D6B551F36103EA55B435AD0C462.cso | Bin 0 -> 16824 bytes ...t.45152D6B551F36103EA55B435AD0C462.cso.pdb | 3 + ....vert.57701C60E841F468867561F9335BDAB3.cso | Bin 0 -> 19056 bytes ...t.57701C60E841F468867561F9335BDAB3.cso.pdb | 3 + ....vert.630652A3268DE6E9BDE38BC918841E62.cso | Bin 0 -> 19088 bytes ...t.630652A3268DE6E9BDE38BC918841E62.cso.pdb | 3 + ....vert.77B31999700322078CF970FEB7407F9C.cso | Bin 0 -> 16824 bytes ...t.77B31999700322078CF970FEB7407F9C.cso.pdb | 3 + ....vert.7D65653E05F3CFD999E0CFE63FA6E06D.cso | Bin 0 -> 16848 bytes ...t.7D65653E05F3CFD999E0CFE63FA6E06D.cso.pdb | 3 + ....vert.AA7A6E402DA45EA1877F3864059BB328.cso | Bin 0 -> 19056 bytes ...t.AA7A6E402DA45EA1877F3864059BB328.cso.pdb | 3 + ....vert.ABC8329C82EFC7A175A670CD89AFCF15.cso | Bin 0 -> 19088 bytes ...t.ABC8329C82EFC7A175A670CD89AFCF15.cso.pdb | 3 + ....vert.AF299C4F5A88FF41BB134DEBBD221243.cso | Bin 0 -> 16824 bytes ...t.AF299C4F5A88FF41BB134DEBBD221243.cso.pdb | 3 + ....vert.B73B1CA9CB013890A989873EBD811678.cso | Bin 0 -> 16824 bytes ...t.B73B1CA9CB013890A989873EBD811678.cso.pdb | 3 + ....vert.BB1894D2E83C03A44A1F4C0ACFAC5941.cso | Bin 0 -> 16848 bytes ...t.BB1894D2E83C03A44A1F4C0ACFAC5941.cso.pdb | 3 + ....vert.CF3846F9E7636FD9485E620D0B85EA7A.cso | Bin 0 -> 19272 bytes ...t.CF3846F9E7636FD9485E620D0B85EA7A.cso.pdb | 3 + ....vert.CFDCA74BBAE47557D9554F9C6994FFF5.cso | Bin 0 -> 16824 bytes ...t.CFDCA74BBAE47557D9554F9C6994FFF5.cso.pdb | 3 + ....vert.D1027BFD27F09759DCE21D6C3D0007E6.cso | Bin 0 -> 19056 bytes ...t.D1027BFD27F09759DCE21D6C3D0007E6.cso.pdb | 3 + ....vert.D11F440AEF887A61EE9AF025D5E23AB9.cso | Bin 0 -> 19088 bytes ...t.D11F440AEF887A61EE9AF025D5E23AB9.cso.pdb | 3 + ....vert.DF9214C22288F9B9A48D38F5B74524DE.cso | Bin 0 -> 16824 bytes ...t.DF9214C22288F9B9A48D38F5B74524DE.cso.pdb | 3 + ....vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso | Bin 0 -> 19272 bytes ...t.E085F93BEC7DF3EBA14A46B44E57CA65.cso.pdb | 3 + ....vert.E439E2679AC92876BE93DB6F63E71BA4.cso | Bin 0 -> 16848 bytes ...t.E439E2679AC92876BE93DB6F63E71BA4.cso.pdb | 3 + ....vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso | Bin 0 -> 16824 bytes ...t.FD3064546B01E2F76BFF1BFDEB54CC81.cso.pdb | 3 + ....vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso | Bin 0 -> 19080 bytes ...t.FF385EE49D348C3D94E3E75DDEC43EF1.cso.pdb | 3 + ....vert.03A9039DF625A5CE430A52161825FB2E.cso | Bin 0 -> 16876 bytes ...t.03A9039DF625A5CE430A52161825FB2E.cso.pdb | 3 + ....vert.125702F176A5DC7DE52D9A2D09ACB336.cso | Bin 0 -> 16864 bytes ...t.125702F176A5DC7DE52D9A2D09ACB336.cso.pdb | 3 + ....vert.1ADEC6D7AA8D6B5FA2623A3803561740.cso | Bin 0 -> 16840 bytes ...t.1ADEC6D7AA8D6B5FA2623A3803561740.cso.pdb | 3 + ....vert.1B4EF1D1BFD046CEA6303A75D5A090DD.cso | Bin 0 -> 19084 bytes ...t.1B4EF1D1BFD046CEA6303A75D5A090DD.cso.pdb | 3 + ....vert.215E7FA2E1D915E575BF0D051FF57DAC.cso | Bin 0 -> 16864 bytes ...t.215E7FA2E1D915E575BF0D051FF57DAC.cso.pdb | 3 + ....vert.2CF9EB30E57EC06C260F1C994273BBB9.cso | Bin 0 -> 19300 bytes ...t.2CF9EB30E57EC06C260F1C994273BBB9.cso.pdb | 3 + ....vert.3830050E054524D9FB4B97B3C5795D74.cso | Bin 0 -> 16840 bytes ...t.3830050E054524D9FB4B97B3C5795D74.cso.pdb | 3 + ....vert.3FC5681EEA9466868BDE6277412A1602.cso | Bin 0 -> 19084 bytes ...t.3FC5681EEA9466868BDE6277412A1602.cso.pdb | 3 + ....vert.54CE329F05A57498A425EEE7FFB92A53.cso | Bin 0 -> 16840 bytes ...t.54CE329F05A57498A425EEE7FFB92A53.cso.pdb | 3 + ....vert.63E4E8675470AA49793AE6B8F2EFB412.cso | Bin 0 -> 16876 bytes ...t.63E4E8675470AA49793AE6B8F2EFB412.cso.pdb | 3 + ....vert.6EDA9FA1D0CE763321BA160FE1F69436.cso | Bin 0 -> 16852 bytes ...t.6EDA9FA1D0CE763321BA160FE1F69436.cso.pdb | 3 + ....vert.7B6CA6E5E319B7DCD804E51483B1560B.cso | Bin 0 -> 19288 bytes ...t.7B6CA6E5E319B7DCD804E51483B1560B.cso.pdb | 3 + ....vert.8041C676881D61780106102C13F8133C.cso | Bin 0 -> 19116 bytes ...t.8041C676881D61780106102C13F8133C.cso.pdb | 3 + ....vert.96BCBFB5543D4357E250741BD758D684.cso | Bin 0 -> 19104 bytes ...t.96BCBFB5543D4357E250741BD758D684.cso.pdb | 3 + ....vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso | Bin 0 -> 19096 bytes ...t.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso.pdb | 3 + ....vert.B7B90948D23B69401E4275BBBA5F6021.cso | Bin 0 -> 19072 bytes ...t.B7B90948D23B69401E4275BBBA5F6021.cso.pdb | 3 + ....vert.B959A091D6A562E3BB2A4A86D8938E3B.cso | Bin 0 -> 19116 bytes ...t.B959A091D6A562E3BB2A4A86D8938E3B.cso.pdb | 3 + ....vert.C631C6F1C848D8407BB4550427BFAFE5.cso | Bin 0 -> 19104 bytes ...t.C631C6F1C848D8407BB4550427BFAFE5.cso.pdb | 3 + ....vert.C7D9E2F6ACF45D7DCA8F8EB92111BCBC.cso | Bin 0 -> 19072 bytes ...t.C7D9E2F6ACF45D7DCA8F8EB92111BCBC.cso.pdb | 3 + ....vert.E757CD08237F5B4A4C260EE943E6A7BC.cso | Bin 0 -> 16852 bytes ...t.E757CD08237F5B4A4C260EE943E6A7BC.cso.pdb | 3 + ....vert.F0F89BC5650EEE995AA9D7357378D280.cso | Bin 0 -> 16840 bytes ...t.F0F89BC5650EEE995AA9D7357378D280.cso.pdb | 3 + ....vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso | Bin 0 -> 16852 bytes ...t.F2AC0D1822C5C821BF888C0AB7491E5E.cso.pdb | 3 + ....vert.FA071B919FA56A0FB70F4ED2F802D474.cso | Bin 0 -> 16852 bytes ...t.FA071B919FA56A0FB70F4ED2F802D474.cso.pdb | 3 + ....vert.FEE5E6A661D8F4453A0120A78702157A.cso | Bin 0 -> 19108 bytes ...t.FEE5E6A661D8F4453A0120A78702157A.cso.pdb | 3 + ....vert.0323DA1D4D66DFFC422FD195212F40AC.cso | Bin 0 -> 40848 bytes ...t.0323DA1D4D66DFFC422FD195212F40AC.cso.pdb | 3 + ....08792B0244607751B94495BF11FEA6C3.metallib | Bin 0 -> 71979 bytes ....vert.0A7FA5C512F5E63FC77778DAD58C1444.cso | Bin 0 -> 38128 bytes ...t.0A7FA5C512F5E63FC77778DAD58C1444.cso.pdb | 3 + ....vert.0BD3C6312B7670505B943262A89C9294.cso | Bin 0 -> 40900 bytes ...t.0BD3C6312B7670505B943262A89C9294.cso.pdb | 3 + ....0C752CA2B0AA5C4F58A28B4FB4DBC067.metallib | Bin 0 -> 71131 bytes ....vert.0D2906E0F0B901297CEC98725443F6B8.cso | Bin 0 -> 32756 bytes ...t.0D2906E0F0B901297CEC98725443F6B8.cso.pdb | 3 + ....vert.0DC89CC6EF2BB651C434A448D67109E9.cso | Bin 0 -> 35536 bytes ...t.0DC89CC6EF2BB651C434A448D67109E9.cso.pdb | 3 + ....vert.1244F96A9F041AA77E0829FE15A81781.cso | Bin 0 -> 32588 bytes ...t.1244F96A9F041AA77E0829FE15A81781.cso.pdb | 3 + ....15BA3C3CB8B8717F4D80F5FEC204370F.metallib | Bin 0 -> 71979 bytes ....180EA62B9D1202547139A36A2D1C9FCC.metallib | Bin 0 -> 71003 bytes ....vert.1925F8BB8C5C6BD69F02FA2CD1B6D8F0.cso | Bin 0 -> 43448 bytes ...t.1925F8BB8C5C6BD69F02FA2CD1B6D8F0.cso.pdb | 3 + ....vert.19E6B3D25951E1F2F91F02467D1FB30F.cso | Bin 0 -> 32744 bytes ...t.19E6B3D25951E1F2F91F02467D1FB30F.cso.pdb | 3 + ....1A0AF4135571475AB793369A890D45CA.metallib | Bin 0 -> 70219 bytes ....vert.1A894823438A140EA9E04BF73CD2EAA5.cso | Bin 0 -> 32156 bytes ...t.1A894823438A140EA9E04BF73CD2EAA5.cso.pdb | 3 + ....vert.1B961C28B1FDF4C1823DAA29CE009487.cso | Bin 0 -> 43316 bytes ...t.1B961C28B1FDF4C1823DAA29CE009487.cso.pdb | 3 + ....1E6971511258F0A69158B0C15A49CFC7.metallib | Bin 0 -> 72203 bytes ....vert.21E51D63F6FD0658E746CAE70039F290.cso | Bin 0 -> 45444 bytes ...t.21E51D63F6FD0658E746CAE70039F290.cso.pdb | 3 + ....vert.22F4863734AAC59D6C9C66C631B23B6E.cso | Bin 0 -> 35536 bytes ...t.22F4863734AAC59D6C9C66C631B23B6E.cso.pdb | 3 + ....2CD2DBBA33D183ACE6CD7F2A42321467.metallib | Bin 0 -> 70379 bytes ....vert.2E6BE8AF0F44BC5CC7DA119DDBB43E98.cso | Bin 0 -> 48208 bytes ...t.2E6BE8AF0F44BC5CC7DA119DDBB43E98.cso.pdb | 3 + ....vert.2F8A55777C2632894CF6DBCA38D259A8.cso | Bin 0 -> 32300 bytes ...t.2F8A55777C2632894CF6DBCA38D259A8.cso.pdb | 3 + ....31F564DDF64897CE8D0D8575BA11EA13.metallib | Bin 0 -> 72203 bytes ....vert.323B3616109D749EF6D2A3CF51050BE6.cso | Bin 0 -> 41008 bytes ...t.323B3616109D749EF6D2A3CF51050BE6.cso.pdb | 3 + ....vert.3340D8F8BFE958B965936432A77D2811.cso | Bin 0 -> 43464 bytes ...t.3340D8F8BFE958B965936432A77D2811.cso.pdb | 3 + ....vert.34AC697454E7671946541CA5BDED791A.cso | Bin 0 -> 46016 bytes ...t.34AC697454E7671946541CA5BDED791A.cso.pdb | 3 + ....vert.3A79EBFB229E33A9A80C49E5140236DE.cso | Bin 0 -> 45432 bytes ...t.3A79EBFB229E33A9A80C49E5140236DE.cso.pdb | 3 + ....vert.3B0D4E708AD83ECD8CB195DDCB463524.cso | Bin 0 -> 37984 bytes ...t.3B0D4E708AD83ECD8CB195DDCB463524.cso.pdb | 3 + ....3B4B9C3BB8420D61B0C14B7C673D4312.metallib | Bin 0 -> 69995 bytes ....vert.40FE6F3B1F908655080943E7970B5923.cso | Bin 0 -> 46000 bytes ...t.40FE6F3B1F908655080943E7970B5923.cso.pdb | 3 + ....41CC71331EA3F4DF19C62447C3B4957D.metallib | Bin 0 -> 71003 bytes ....441699570AB850AD3DB81564F52B0908.metallib | Bin 0 -> 72139 bytes ....476DA901FEFBD9A0A3C70B45C3313D67.metallib | Bin 0 -> 70971 bytes ....495C0A9F8FB4194D8EF08AE9C350B23E.metallib | Bin 0 -> 70043 bytes ....vert.4B8021430CC3C9971C8BC859E0C8989D.cso | Bin 0 -> 46016 bytes ...t.4B8021430CC3C9971C8BC859E0C8989D.cso.pdb | 3 + ....50D311BEF26C71B333D271C49B078772.metallib | Bin 0 -> 70427 bytes ....5166BF50736369CD4E22FFBFC064DE76.metallib | Bin 0 -> 72315 bytes ....vert.56DD6FF54063679C76D12691EA79ED95.cso | Bin 0 -> 43304 bytes ...t.56DD6FF54063679C76D12691EA79ED95.cso.pdb | 3 + ....vert.6421B04960935975A09996C65CF0A478.cso | Bin 0 -> 43456 bytes ...t.6421B04960935975A09996C65CF0A478.cso.pdb | 3 + ....vert.654D257A8942334F737B4CF3DBED0F48.cso | Bin 0 -> 32588 bytes ...t.654D257A8942334F737B4CF3DBED0F48.cso.pdb | 3 + ....67F490450BA69DEBD5593D019A7EC0B6.metallib | Bin 0 -> 71339 bytes ....vert.6ABEABA3444031DF1A478CE27CADC998.cso | Bin 0 -> 34784 bytes ...t.6ABEABA3444031DF1A478CE27CADC998.cso.pdb | 3 + ....vert.6AF760A6E9E643069DB35D5D06BD6BA9.cso | Bin 0 -> 38144 bytes ...t.6AF760A6E9E643069DB35D5D06BD6BA9.cso.pdb | 3 + ....vert.6D377C6B02680802CD74BA81C639ED28.cso | Bin 0 -> 43236 bytes ...t.6D377C6B02680802CD74BA81C639ED28.cso.pdb | 3 + ....vert.6E949D72552C7F34F1E09D89F1E1C952.cso | Bin 0 -> 43248 bytes ...t.6E949D72552C7F34F1E09D89F1E1C952.cso.pdb | 3 + ....71D4C26BBE212B4D2A9608C1E34D86E4.metallib | Bin 0 -> 70971 bytes ....vert.7204742FB331648ED83573329D86D073.cso | Bin 0 -> 32604 bytes ...t.7204742FB331648ED83573329D86D073.cso.pdb | 3 + ....73CFC84CF655AC999324D43BDB1E4EB6.metallib | Bin 0 -> 72155 bytes ....vert.74380FFB48164FF6B35623BE8701B7EB.cso | Bin 0 -> 32140 bytes ...t.74380FFB48164FF6B35623BE8701B7EB.cso.pdb | 3 + ....7521DA417DCEAD1B47E7D7BE0B95AFE5.metallib | Bin 0 -> 70043 bytes ....7B8E55E72E6CA6ACF6F1D3A81B3BC9D2.metallib | Bin 0 -> 72539 bytes ....vert.7E7C2EBE718EBA32FB6282BC269E323D.cso | Bin 0 -> 40832 bytes ...t.7E7C2EBE718EBA32FB6282BC269E323D.cso.pdb | 3 + ....vert.80EF261D1CC4A59FCF572E60A2F410EF.cso | Bin 0 -> 32604 bytes ...t.80EF261D1CC4A59FCF572E60A2F410EF.cso.pdb | 3 + ....8206568794DB63EDFB28346F08717693.metallib | Bin 0 -> 70171 bytes ....vert.86BBDE2865C753261D68E62FEF5F2901.cso | Bin 0 -> 43248 bytes ...t.86BBDE2865C753261D68E62FEF5F2901.cso.pdb | 3 + ....vert.8ADA3DCDE80CB10E83BA6B98332AB60B.cso | Bin 0 -> 35520 bytes ...t.8ADA3DCDE80CB10E83BA6B98332AB60B.cso.pdb | 3 + ....vert.8B6EC10AD63C117AADC967DFF1835F04.cso | Bin 0 -> 46156 bytes ...t.8B6EC10AD63C117AADC967DFF1835F04.cso.pdb | 3 + ....vert.8D5882C7F4BE916035D8A2A19C6DF78A.cso | Bin 0 -> 43292 bytes ...t.8D5882C7F4BE916035D8A2A19C6DF78A.cso.pdb | 3 + ....vert.90E1EDC296925F67098F2D916779539D.cso | Bin 0 -> 32196 bytes ...t.90E1EDC296925F67098F2D916779539D.cso.pdb | 3 + ....vert.91F8A2067B8EA071695FF41B8B76AE97.cso | Bin 0 -> 37984 bytes ...t.91F8A2067B8EA071695FF41B8B76AE97.cso.pdb | 3 + ....vert.93D943F5A9C29E618797431F40796C35.cso | Bin 0 -> 35576 bytes ...t.93D943F5A9C29E618797431F40796C35.cso.pdb | 3 + ....vert.96DAC364F30C96759E77B529B883C028.cso | Bin 0 -> 35520 bytes ...t.96DAC364F30C96759E77B529B883C028.cso.pdb | 3 + ....vert.979416BB843C6F05F3845FFCC3ECD7D6.cso | Bin 0 -> 40848 bytes ...t.979416BB843C6F05F3845FFCC3ECD7D6.cso.pdb | 3 + ....vert.984E39E04658AF07687F9C17D33781DA.cso | Bin 0 -> 37996 bytes ...t.984E39E04658AF07687F9C17D33781DA.cso.pdb | 3 + ....vert.9AE9452EB8270BB640EA28FE04E85D12.cso | Bin 0 -> 40888 bytes ...t.9AE9452EB8270BB640EA28FE04E85D12.cso.pdb | 3 + ....vert.9C59ECCAF416177DA2B674CC26C4C7C6.cso | Bin 0 -> 43304 bytes ...t.9C59ECCAF416177DA2B674CC26C4C7C6.cso.pdb | 3 + ....9C9DC497EE8CB2A3010B8F5BE870A4AD.metallib | Bin 0 -> 72363 bytes ....A14339AF9BA1D695A2231452C7C125B1.metallib | Bin 0 -> 72107 bytes ....A416CC957DBBA6BB89F520075E9ED987.metallib | Bin 0 -> 71947 bytes ....vert.A911A0900D6EB7FD73E64020B22DC54D.cso | Bin 0 -> 43316 bytes ...t.A911A0900D6EB7FD73E64020B22DC54D.cso.pdb | 3 + ....vert.B0C01FFF068BBB8EC7C84EC464A263C6.cso | Bin 0 -> 40992 bytes ...t.B0C01FFF068BBB8EC7C84EC464A263C6.cso.pdb | 3 + ....vert.B33BD37027E2C6E47FBC917C8D1AD34C.cso | Bin 0 -> 38136 bytes ...t.B33BD37027E2C6E47FBC917C8D1AD34C.cso.pdb | 3 + ....vert.B815C5761C479B16EDEFA49DD71F5BEF.cso | Bin 0 -> 43236 bytes ...t.B815C5761C479B16EDEFA49DD71F5BEF.cso.pdb | 3 + ....vert.B95B5D8436DC9065FA2624B17C3A8F4A.cso | Bin 0 -> 46168 bytes ...t.B95B5D8436DC9065FA2624B17C3A8F4A.cso.pdb | 3 + ....BB64A8E44AB8BAEEC81BE23ACF911CBC.metallib | Bin 0 -> 71179 bytes ....vert.BBDA720FBCB03878657725DCB4070478.cso | Bin 0 -> 38148 bytes ...t.BBDA720FBCB03878657725DCB4070478.cso.pdb | 3 + ....vert.C15B7A17F66E5D27A740A3A3C1979581.cso | Bin 0 -> 46000 bytes ...t.C15B7A17F66E5D27A740A3A3C1979581.cso.pdb | 3 + ....C7B2BB2F20BE157E180C159EFD14D8DE.metallib | Bin 0 -> 69995 bytes ....vert.C98B044AB7848AFC025DE95581642A05.cso | Bin 0 -> 37996 bytes ...t.C98B044AB7848AFC025DE95581642A05.cso.pdb | 3 + ....vert.CB92CEE22B94959EEA2E37687128679E.cso | Bin 0 -> 32140 bytes ...t.CB92CEE22B94959EEA2E37687128679E.cso.pdb | 3 + ....vert.CC0D866961E5688D9882D28BF15A2DD1.cso | Bin 0 -> 48196 bytes ...t.CC0D866961E5688D9882D28BF15A2DD1.cso.pdb | 3 + ....vert.CDA1E3C0E334532F508888E67D4074B0.cso | Bin 0 -> 37744 bytes ...t.CDA1E3C0E334532F508888E67D4074B0.cso.pdb | 3 + ....vert.D1972016D72D5B585C503DFDD9ABA548.cso | Bin 0 -> 43468 bytes ...t.D1972016D72D5B585C503DFDD9ABA548.cso.pdb | 3 + ....vert.D580014BB3F0D7F3FB392B6DE11130DF.cso | Bin 0 -> 32208 bytes ...t.D580014BB3F0D7F3FB392B6DE11130DF.cso.pdb | 3 + ....D8BEC1C4205A6483977E29A6E5C0A924.metallib | Bin 0 -> 72139 bytes ....vert.DB334DF1BF578B4A345D78EACFC48EFD.cso | Bin 0 -> 32156 bytes ...t.DB334DF1BF578B4A345D78EACFC48EFD.cso.pdb | 3 + ....vert.DBF0DC4E7C492B8443906BDABAB124D6.cso | Bin 0 -> 34796 bytes ...t.DBF0DC4E7C492B8443906BDABAB124D6.cso.pdb | 3 + ....vert.DC6974CAEE2A36877F6F6ECC13BBAD7E.cso | Bin 0 -> 32288 bytes ...t.DC6974CAEE2A36877F6F6ECC13BBAD7E.cso.pdb | 3 + ....vert.DDEB5E46AE2974A0BD8EEF904023D7ED.cso | Bin 0 -> 40832 bytes ...t.DDEB5E46AE2974A0BD8EEF904023D7ED.cso.pdb | 3 + ....E21668FA3F80C375943DB33466B664B7.metallib | Bin 0 -> 72379 bytes ....vert.E2A6EFBB662583C8B826AB85395FBE8B.cso | Bin 0 -> 35588 bytes ...t.E2A6EFBB662583C8B826AB85395FBE8B.cso.pdb | 3 + ....vert.E2B113ED936BDA4068FB8C5E849E995C.cso | Bin 0 -> 37728 bytes ...t.E2B113ED936BDA4068FB8C5E849E995C.cso.pdb | 3 + ....E7704C9D770808997358C137DF29684D.metallib | Bin 0 -> 71387 bytes ....E7F82C90DC6E05851419E96B05BE71AC.metallib | Bin 0 -> 72587 bytes ....EB837A0928B395784434A7A111B53B5A.metallib | Bin 0 -> 71947 bytes ....F57F07EF6B6ED1C1CCD0B43033944746.metallib | Bin 0 -> 72315 bytes ....vert.FE9156D85DC490262296F717A3729F04.cso | Bin 0 -> 43304 bytes ...t.FE9156D85DC490262296F717A3729F04.cso.pdb | 3 + ....vert.3AA9FB07C369A60580272C87CD195B48.cso | Bin 0 -> 23024 bytes ...t.3AA9FB07C369A60580272C87CD195B48.cso.pdb | 3 + ....54B0DD8802234A5C2D1599668B7B9206.metallib | Bin 0 -> 68818 bytes ....vert.55B9ABEC1E3A57FF5B4B48F003CA9752.cso | Bin 0 -> 22732 bytes ...t.55B9ABEC1E3A57FF5B4B48F003CA9752.cso.pdb | 3 + ....E0A95D2F1F3EE6F204B740E133E167F9.metallib | Bin 0 -> 69122 bytes ....vert.E4DE4FF3AC2C78D948169907E0A73083.cso | Bin 0 -> 22788 bytes ...t.E4DE4FF3AC2C78D948169907E0A73083.cso.pdb | 3 + ....E82AF2A7438928C99FB4380BF1D38EEA.metallib | Bin 0 -> 67698 bytes ....vert.F5A70F5EA17C5E1466A4461A319A10E1.cso | Bin 0 -> 22732 bytes ...t.F5A70F5EA17C5E1466A4461A319A10E1.cso.pdb | 3 + ....FC5D8F71F6D3DF19E20E42FF6618F7D3.metallib | Bin 0 -> 67714 bytes ....frag.7D4CDE3609CAABADC704CA9E51BB9F61.cso | Bin 0 -> 84236 bytes ...g.7D4CDE3609CAABADC704CA9E51BB9F61.cso.pdb | 3 + ....B5C43DC2134A05755ADB00CA12BAF5C9.metallib | Bin 0 -> 82802 bytes ....frag.AA6AB5EFB19FD706650DFAFAA01D7D90.cso | Bin 0 -> 17080 bytes ...g.AA6AB5EFB19FD706650DFAFAA01D7D90.cso.pdb | 3 + ....F9A4E1FF18B4D49D16DE912FD8A20B3E.metallib | Bin 0 -> 67094 bytes ....2BFF67C6D3C7441503662DA3FF5A8E57.metallib | Bin 0 -> 66914 bytes ....frag.AFFAB2D8D5F189DCDB557A256A2F8D08.cso | Bin 0 -> 17372 bytes ...g.AFFAB2D8D5F189DCDB557A256A2F8D08.cso.pdb | 3 + ....3A86B375B47444ED50B241CB31E4DE69.metallib | Bin 0 -> 69066 bytes ....frag.4E1DEB657074C0BC7622F2752888C406.cso | Bin 0 -> 58280 bytes ...g.4E1DEB657074C0BC7622F2752888C406.cso.pdb | 3 + ....6FF25215FE2377D1A9D44CB228A6FDCC.metallib | Bin 0 -> 69610 bytes ....frag.A565FBDBEDF828A39BE5F7DB10013507.cso | Bin 0 -> 50644 bytes ...g.A565FBDBEDF828A39BE5F7DB10013507.cso.pdb | 3 + ....comp.48F96F1C309D71E7B09A68D687BCAF2B.cso | Bin 0 -> 35276 bytes ...p.48F96F1C309D71E7B09A68D687BCAF2B.cso.pdb | 3 + ....7D008C2220573C54554F7ECF45C09AE1.metallib | Bin 0 -> 70846 bytes ....06F70F70BEE3A7F2C9007828EAC27793.metallib | Bin 0 -> 66350 bytes ....vert.23547C37D36CF6F9E3E4E1A5EFFDA5D7.cso | Bin 0 -> 16692 bytes ...t.23547C37D36CF6F9E3E4E1A5EFFDA5D7.cso.pdb | 3 + ....vert.5458F29FA4CB16046183E24079014F66.cso | Bin 0 -> 18740 bytes ...t.5458F29FA4CB16046183E24079014F66.cso.pdb | 3 + ....vert.6820B8E6207A3B72C4104BBEBA6362A7.cso | Bin 0 -> 16692 bytes ...t.6820B8E6207A3B72C4104BBEBA6362A7.cso.pdb | 3 + ....vert.84F2CED1305C36A788150F98225EDB8E.cso | Bin 0 -> 14644 bytes ...t.84F2CED1305C36A788150F98225EDB8E.cso.pdb | 3 + ....84F2CED1305C36A788150F98225EDB8E.metallib | Bin 0 -> 65550 bytes ....AB34E7F5715922651FCAC50613AD2C84.metallib | Bin 0 -> 67550 bytes ....E9BEA09E84D5D4F71D5B417CB9E33C2B.metallib | Bin 0 -> 66158 bytes ....20F6C676AA4429ECE221D06C3579FE6E.metallib | Bin 0 -> 68166 bytes ....frag.39AB76CAE213E76DBA545C88E8BDE602.cso | Bin 0 -> 22612 bytes ...g.39AB76CAE213E76DBA545C88E8BDE602.cso.pdb | 3 + ....frag.504D71546723AF7F0E946069BF0BBDC1.cso | Bin 0 -> 20372 bytes ...g.504D71546723AF7F0E946069BF0BBDC1.cso.pdb | 3 + ....frag.621E6F8AB62D0530723E6071DD1AECAE.cso | Bin 0 -> 20500 bytes ...g.621E6F8AB62D0530723E6071DD1AECAE.cso.pdb | 3 + ....frag.6B3AB535C56AF8AAA886CB915A7DE392.cso | Bin 0 -> 20348 bytes ...g.6B3AB535C56AF8AAA886CB915A7DE392.cso.pdb | 3 + ....frag.835D4B0EE4352DFABEFBE67F99F03581.cso | Bin 0 -> 22732 bytes ...g.835D4B0EE4352DFABEFBE67F99F03581.cso.pdb | 3 + ....A9E805B45F4C48DB5EC5940F2DBB49EF.metallib | Bin 0 -> 69734 bytes ....AD528D11B24C3E9547BBC2755B99AF0D.metallib | Bin 0 -> 68310 bytes ....AE86D100987DC55AC4CD67341D850BC9.metallib | Bin 0 -> 69798 bytes ....BBC3FA3E5A6A9C8BD17B04A4C3C3131F.metallib | Bin 0 -> 67526 bytes ....C26A349E4B498C28CA45FDF2B358356D.metallib | Bin 0 -> 67510 bytes ....frag.C7D82581B244FE8E3E7FAD38CA9B4C30.cso | Bin 0 -> 25560 bytes ...g.C7D82581B244FE8E3E7FAD38CA9B4C30.cso.pdb | 3 + ....D12FD3934A8AEA8B731F0FFDEE6E4203.metallib | Bin 0 -> 68118 bytes ....frag.F024867C34EF3686655F5D8B96BD85AD.cso | Bin 0 -> 25496 bytes ...g.F024867C34EF3686655F5D8B96BD85AD.cso.pdb | 3 + ....0A585A8EE1FAF289D0FA00431292E74D.metallib | Bin 0 -> 67562 bytes ....196033BDAFEE16C2947AC8D3CBD9E464.metallib | Bin 0 -> 67498 bytes ....frag.44119E8A23CB98B578519BD7A8DD2D3A.cso | Bin 0 -> 23796 bytes ...g.44119E8A23CB98B578519BD7A8DD2D3A.cso.pdb | 3 + ....frag.4D18DB2E6615B37CE61ADA69E7CF80B7.cso | Bin 0 -> 26252 bytes ...g.4D18DB2E6615B37CE61ADA69E7CF80B7.cso.pdb | 3 + ....frag.6B1E1A9B04F783E5EF5AF1FA2DD7A8F0.cso | Bin 0 -> 26464 bytes ...g.6B1E1A9B04F783E5EF5AF1FA2DD7A8F0.cso.pdb | 3 + ....776C8F8C4765207534C2B33EE67BA844.metallib | Bin 0 -> 67850 bytes ....frag.A85F6F848367C44C2139ED7946A2DD41.cso | Bin 0 -> 26060 bytes ...g.A85F6F848367C44C2139ED7946A2DD41.cso.pdb | 3 + ....frag.C7B3E6FB6A02D2891A0BFE850ABA2E05.cso | Bin 0 -> 23612 bytes ...g.C7B3E6FB6A02D2891A0BFE850ABA2E05.cso.pdb | 3 + ....D4B8B59DC084AF08261271DE31BD80FB.metallib | Bin 0 -> 67658 bytes ....D6F2FD832CE84459152427CA78D65D28.metallib | Bin 0 -> 67306 bytes ....frag.E0C7B3E835DB79196070A24486ABF763.cso | Bin 0 -> 23828 bytes ...g.E0C7B3E835DB79196070A24486ABF763.cso.pdb | 3 + ....E8745B044C2DFE8709E100D425FD7E22.metallib | Bin 0 -> 67210 bytes ....frag.4DD1C89DF8002B409E089089CE8F24E7.cso | Bin 0 -> 14436 bytes ...g.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb | 3 + ....4DD1C89DF8002B409E089089CE8F24E7.metallib | Bin 0 -> 65406 bytes ....vert.C992EAD4108528439F5ACC0580D33319.cso | Bin 0 -> 17244 bytes ...t.C992EAD4108528439F5ACC0580D33319.cso.pdb | 3 + ....EEDB02B1278B2566C0A24981ED8E295B.metallib | Bin 0 -> 66259 bytes ....9005CED6A719F4C5A6266F97BBFB476E.metallib | Bin 0 -> 66486 bytes ....frag.F811CE9BD360967E23FA73EFC790BF73.cso | Bin 0 -> 14772 bytes ...g.F811CE9BD360967E23FA73EFC790BF73.cso.pdb | 3 + ....87409A88665BA0A46F3F776DF2CA1206.metallib | Bin 0 -> 66366 bytes ....frag.F0E2F0F689387705D12CB9970013F51D.cso | Bin 0 -> 14632 bytes ...g.F0E2F0F689387705D12CB9970013F51D.cso.pdb | 3 + ....vert.13B53A2583576C2B028749CFE7A75DBA.cso | Bin 0 -> 17032 bytes ...t.13B53A2583576C2B028749CFE7A75DBA.cso.pdb | 3 + ....613A033E7F8C94916EEEB5D560FE454B.metallib | Bin 0 -> 66063 bytes ....comp.03B060E36BAC8979EBFFCD327F74AAF9.cso | Bin 0 -> 17052 bytes ...p.03B060E36BAC8979EBFFCD327F74AAF9.cso.pdb | 3 + ....0AE6A05A739437D201C8C1B2F93B8544.metallib | Bin 0 -> 66362 bytes ....comp.3C1C64A82544849508C4F7B5018CED35.cso | Bin 0 -> 17356 bytes ...p.3C1C64A82544849508C4F7B5018CED35.cso.pdb | 3 + ....712FE560E255C4424D1793FEF1498944.metallib | Bin 0 -> 66570 bytes ....95BBBD48996763573C91C6D61130ADC6.metallib | Bin 0 -> 66876 bytes ....vert.C69D1C8B63FD48E0C28A855BE4BC8C72.cso | Bin 0 -> 20180 bytes ...t.C69D1C8B63FD48E0C28A855BE4BC8C72.cso.pdb | 3 + ....01A367EBF8EF61BEB5BBD977C507AD5D.metallib | Bin 0 -> 69834 bytes ....comp.46FFC0AC778725D76C1B4B50B25D2820.cso | Bin 0 -> 40844 bytes ...p.46FFC0AC778725D76C1B4B50B25D2820.cso.pdb | 3 + ....01A367EBF8EF61BEB5BBD977C507AD5D.metallib | Bin 0 -> 67614 bytes ....comp.46FFC0AC778725D76C1B4B50B25D2820.cso | Bin 0 -> 22672 bytes ...p.46FFC0AC778725D76C1B4B50B25D2820.cso.pdb | 3 + ....40666DC8ABC0281162338BC37344400B.metallib | Bin 0 -> 69366 bytes ....frag.4AB7012A334144666A00F99BE4F8ABF5.cso | Bin 0 -> 30080 bytes ...g.4AB7012A334144666A00F99BE4F8ABF5.cso.pdb | 3 + ....frag.4DD1C89DF8002B409E089089CE8F24E7.cso | Bin 0 -> 14416 bytes ...g.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb | 3 + ....4DD1C89DF8002B409E089089CE8F24E7.metallib | Bin 0 -> 65370 bytes ....607F7C9197328C04A914D3DB28E91B70.metallib | Bin 0 -> 66047 bytes ....vert.7421279F2283857C300D16BA4AC862F9.cso | Bin 0 -> 16928 bytes ...t.7421279F2283857C300D16BA4AC862F9.cso.pdb | 3 + ....frag.3F8899175EDEBECFC90A9FCF4189D177.cso | Bin 0 -> 17288 bytes ...g.3F8899175EDEBECFC90A9FCF4189D177.cso.pdb | 3 + ....3F8899175EDEBECFC90A9FCF4189D177.metallib | Bin 0 -> 65978 bytes ....frag.4DD1C89DF8002B409E089089CE8F24E7.cso | Bin 0 -> 14416 bytes ...g.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb | 3 + ....4DD1C89DF8002B409E089089CE8F24E7.metallib | Bin 0 -> 65402 bytes ....vert.A0CB1C647BF9FDC5B765A1CD78BEA0C6.cso | Bin 0 -> 21708 bytes ...t.A0CB1C647BF9FDC5B765A1CD78BEA0C6.cso.pdb | 3 + ....vert.B1F47489E9CAD9F30B6E29EECDC49DC7.cso | Bin 0 -> 19380 bytes ...t.B1F47489E9CAD9F30B6E29EECDC49DC7.cso.pdb | 3 + ....C6E60C6043020672ADB3C28FE4231386.metallib | Bin 0 -> 66234 bytes ....E306BFB69B25E84A37254307D2194DE4.metallib | Bin 0 -> 66484 bytes ....comp.000E9EBE432F6B318E8869722FA96736.cso | Bin 0 -> 20188 bytes ...p.000E9EBE432F6B318E8869722FA96736.cso.pdb | 3 + ....6B0FF562C6B4E087E89ECFB854F4DF16.metallib | Bin 0 -> 68494 bytes ....00EEAD7565201E1D171906979186BFF4.metallib | Bin 0 -> 68473 bytes ....vert.194FBD4081C25D96A0D72764B5D2868C.cso | Bin 0 -> 21028 bytes ...t.194FBD4081C25D96A0D72764B5D2868C.cso.pdb | 3 + ....vert.5914DC24CB72BBC25D999BA4C1DB9B5A.cso | Bin 0 -> 23212 bytes ...t.5914DC24CB72BBC25D999BA4C1DB9B5A.cso.pdb | 3 + ....vert.A50757CC2A13C001045CDD9A011A0E78.cso | Bin 0 -> 23304 bytes ...t.A50757CC2A13C001045CDD9A011A0E78.cso.pdb | 3 + ....C771D47D0FD2493829F05C25BF23328F.metallib | Bin 0 -> 68548 bytes ....vert.C91A588C69123D5B74210A1169C0B7CB.cso | Bin 0 -> 23168 bytes ...t.C91A588C69123D5B74210A1169C0B7CB.cso.pdb | 3 + ....D2590CD60D4E66225883164A95636A82.metallib | Bin 0 -> 68443 bytes ....F1C2D218A3AFC30EF7F2C8297F4B8646.metallib | Bin 0 -> 68352 bytes ....frag.7CF9397E238069F29B5AD306936DC2E1.cso | Bin 0 -> 16528 bytes ...g.7CF9397E238069F29B5AD306936DC2E1.cso.pdb | 3 + ....9E055DD95BFFEC03321947DE0EB82637.metallib | Bin 0 -> 66278 bytes ....18162C7773971E53C43D7A0F15D8ECE4.metallib | Bin 0 -> 67890 bytes ....vert.6D34106F328960A07AB5DB0CBEBE05E5.cso | Bin 0 -> 18580 bytes ...t.6D34106F328960A07AB5DB0CBEBE05E5.cso.pdb | 3 + ....comp.36030C466ADE37AEB6B32358DC8DBAC7.cso | Bin 0 -> 109500 bytes ...p.36030C466ADE37AEB6B32358DC8DBAC7.cso.pdb | 3 + ....comp.5CFD62E25CEECDE84ED94155C845E9B2.cso | Bin 0 -> 124800 bytes ...p.5CFD62E25CEECDE84ED94155C845E9B2.cso.pdb | 3 + ....D224AE024F31A732967118BC1834D51D.metallib | Bin 0 -> 69022 bytes ....D53181CD829C7C2CC9A7D66D28AA2D06.metallib | Bin 0 -> 69230 bytes ....comp.001CEFA3E15B4064857DF52248F766BE.cso | Bin 0 -> 45760 bytes ...p.001CEFA3E15B4064857DF52248F766BE.cso.pdb | 3 + ....4C1B3D9DE2E2589090B928914DBDCA22.metallib | Bin 0 -> 69134 bytes ....comp.BC3EED1104C7A5A05486050D5E27A5CC.cso | Bin 0 -> 23052 bytes ...p.BC3EED1104C7A5A05486050D5E27A5CC.cso.pdb | 3 + ....E926B5F5F536A436919B0059B2A29EFC.metallib | Bin 0 -> 67334 bytes ....EDD9731E86E29E66F0807C2362C8B640.metallib | Bin 0 -> 67350 bytes ....comp.F3A85FB3B74B54E33EEF438D2BBA34A1.cso | Bin 0 -> 22940 bytes ...p.F3A85FB3B74B54E33EEF438D2BBA34A1.cso.pdb | 3 + .../Textures/DitheringPatterns.png | 3 + .../PopcornFXInternals/Textures/Overdraw.dds | 3 + .../PopcornFXInternals/Textures/TextAtlas.dds | 3 + .../Textures/TextAtlas.pkat | 98 + .../PopcornFXInternals/Textures/default.dds | 3 + PopcornFX/README.md | 31 + PopcornFX/Resources.rcc | Bin 0 -> 727957 bytes PopcornFX/Resources/Fonts/Consolas.ttf | 3 + PopcornFX/Resources/Fonts/Roboto-Bold.ttf | 3 + PopcornFX/Resources/Fonts/Roboto-Light.ttf | 3 + PopcornFX/Resources/Fonts/Roboto-Regular.ttf | 3 + .../Resources/Fonts/RobotoMono-Regular.ttf | 3 + PopcornFX/Resources/Icons/Reset.png | 3 + PopcornFX/Resources/Icons/branch-closed.png | 3 + PopcornFX/Resources/Icons/branch-open.png | 3 + PopcornFX/Stylesheet.qss | 146 + PopcornFX/WinPixEventRuntime.dll | 3 + .../documentation/debugger/PopcornFX.natvis | 409 + PopcornFX/fxc.exe | 3 + PopcornFX/popcornfx.qt/Qt5Core.dll | 3 + PopcornFX/popcornfx.qt/Qt5Gui.dll | 3 + PopcornFX/popcornfx.qt/Qt5Widgets.dll | 3 + PopcornFX/popcornfx.qt/popcornfx.qt.manifest | 9 + PopcornFX/popcornfx.qt/qwindows.dll | 3 + Samples/PK-MCPP/directive.cpp | 1713 ++++ Samples/PK-MCPP/eval.cpp | 1693 +++ Samples/PK-MCPP/expand.cpp | 2998 ++++++ Samples/PK-MCPP/internal.h | 478 + Samples/PK-MCPP/main.cpp | 903 ++ Samples/PK-MCPP/mbchar.cpp | 878 ++ Samples/PK-MCPP/mcpp_lib.h | 30 + Samples/PK-MCPP/mcpp_out.h | 13 + Samples/PK-MCPP/noconfig.h | 616 ++ Samples/PK-MCPP/pk_mcpp_bridge.cpp | 369 + Samples/PK-MCPP/pk_mcpp_bridge.h | 292 + Samples/PK-MCPP/pk_preprocessor.cpp | 257 + Samples/PK-MCPP/pk_preprocessor.h | 34 + Samples/PK-MCPP/precompiled.cpp | 1 + Samples/PK-MCPP/precompiled.h | 11 + Samples/PK-MCPP/support.cpp | 2831 +++++ Samples/PK-MCPP/system.cpp | 4783 +++++++++ Samples/PK-MCPP/system.h | 414 + .../ApiContext/D3D/D3D11Context.cpp | 550 + .../ApiContext/D3D/D3D11Context.h | 82 + .../ApiContext/D3D/D3D12Context.cpp | 899 ++ .../ApiContext/D3D/D3D12Context.h | 83 + Samples/PK-SampleLib/ApiContext/IApiContext.h | 46 + .../ApiContext/Metal/MetalContext.h | 103 + .../ApiContext/Metal/MetalContext.mm | 427 + .../ApiContext/Metal/MetalContextFactory.h | 21 + .../ApiContext/Metal/MetalContextFactory.mm | 35 + .../ApiContext/Metal/MetalFinalBlitShader.h | 587 ++ .../Metal/MetalFinalBlitShader.metal | 52 + .../ApiContext/OpenGL/EGLContext.cpp | 250 + .../ApiContext/OpenGL/EGLContext.h | 51 + .../ApiContext/OpenGL/GLContext.cpp | 321 + .../ApiContext/OpenGL/GLContext.h | 104 + .../ApiContext/OpenGL/GLXContext.cpp | 234 + .../ApiContext/OpenGL/GLXContext.h | 51 + .../ApiContext/OpenGL/NSGLContext.h | 51 + .../ApiContext/OpenGL/NSGLContext.mm | 135 + .../ApiContext/OpenGL/WGLContext.cpp | 246 + .../ApiContext/OpenGL/WGLContext.h | 52 + .../ApiContext/Vulkan/VulkanContext.cpp | 1506 +++ .../ApiContext/Vulkan/VulkanContext.h | 215 + Samples/PK-SampleLib/ApiContextConfig.h | 92 + .../PK-SampleLib/Assets/Meshes/default.fbx | 3 + .../Assets/ShaderIncludes/gen_shaders_header | 18 + .../ShaderIncludes/gen_shaders_header.cmd | 9 + .../ShaderIncludes/generated/Billboard.geom.h | 549 + .../ShaderIncludes/generated/Billboard.vert.h | 579 ++ ...SimInterface_GBuffer_ProjectToNormal.d3d.h | 58 + ...mInterface_GBuffer_ProjectToPosition.d3d.h | 48 + .../ShaderIncludes/generated/Ribbon.vert.h | 424 + .../ShaderIncludes/generated/Triangle.vert.h | 174 + .../ShaderIncludes/sources/Billboard.geom | 548 + .../ShaderIncludes/sources/Billboard.vert | 477 + ...PUSimInterface_GBuffer_ProjectToNormal.d3d | 40 + ...SimInterface_GBuffer_ProjectToPosition.d3d | 35 + .../Assets/ShaderIncludes/sources/Ribbon.vert | 341 + .../ShaderIncludes/sources/Triangle.vert | 137 + .../PK-SampleLib/Assets/Shaders/Gizmo.frag | 5 + .../PK-SampleLib/Assets/Shaders/Gizmo.vert | 14 + .../PK-SampleLib/Assets/Shaders/ImGui.frag | 5 + .../PK-SampleLib/Assets/Shaders/ImGui.vert | 7 + .../PK-SampleLib/Assets/Shaders/Profiler.frag | 5 + .../PK-SampleLib/Assets/Shaders/Profiler.vert | 6 + .../Assets/Shaders/ProfilerDrawNode.frag | 39 + .../Assets/Shaders/ProfilerDrawNode.vert | 56 + .../Assets/Textures/DitheringPatterns.png | 3 + .../PK-SampleLib/Assets/Textures/default.dds | 3 + Samples/PK-SampleLib/BRDFLUT.cpp | 210 + Samples/PK-SampleLib/BRDFLUT.h | 23 + Samples/PK-SampleLib/BlueNoise.cpp | 153 + Samples/PK-SampleLib/BlueNoise.h | 22 + Samples/PK-SampleLib/Camera.cpp | 297 + Samples/PK-SampleLib/Camera.h | 162 + Samples/PK-SampleLib/DebugHelper.cpp | 111 + Samples/PK-SampleLib/DebugHelper.h | 60 + Samples/PK-SampleLib/Gizmo.cpp | 1772 ++++ Samples/PK-SampleLib/Gizmo.h | 235 + Samples/PK-SampleLib/ImguiRhiImplem.cpp | 674 ++ Samples/PK-SampleLib/ImguiRhiImplem.h | 193 + Samples/PK-SampleLib/PKPix.cpp | 75 + Samples/PK-SampleLib/PKPix.h | 30 + Samples/PK-SampleLib/PKSample.h | 41 + Samples/PK-SampleLib/PKSampleInit.cpp | 101 + Samples/PK-SampleLib/PKSampleInit.h | 47 + Samples/PK-SampleLib/PipelineCacheHelper.cpp | 87 + Samples/PK-SampleLib/PipelineCacheHelper.h | 30 + .../PopcornStartup/PopcornStartup.cpp | 290 + .../PopcornStartup/PopcornStartup.h | 24 + Samples/PK-SampleLib/ProfilerRenderer.cpp | 998 ++ Samples/PK-SampleLib/ProfilerRenderer.h | 219 + .../RHIRenderParticleSceneHelpers.cpp | 3198 ++++++ .../RHIRenderParticleSceneHelpers.h | 664 ++ .../FeatureRenderingSettings.cpp | 191 + .../FeatureRenderingSettings.h | 129 + .../RenderIntegrationRHI/FrameCollector.cpp | 108 + .../RenderIntegrationRHI/FrameCollector.h | 50 + .../RenderIntegrationRHI/MaterialToRHI.cpp | 2319 +++++ .../RenderIntegrationRHI/MaterialToRHI.h | 266 + .../RHIBillboardingBatchPolicy.cpp | 3723 +++++++ .../RHIBillboardingBatchPolicy.h | 271 + .../RHIBillboardingBatchPolicy_Vertex.cpp | 2528 +++++ .../RHIBillboardingBatchPolicy_Vertex.h | 243 + .../RenderIntegrationRHI/RHICustomTasks.cpp | 717 ++ .../RenderIntegrationRHI/RHICustomTasks.h | 296 + .../RenderIntegrationRHI/RHIGPUSorter.cpp | 244 + .../RenderIntegrationRHI/RHIGPUSorter.h | 71 + .../RHIGraphicResources.cpp | 2298 +++++ .../RHIGraphicResources.h | 777 ++ .../RHIParticleRenderDataFactory.cpp | 314 + .../RHIParticleRenderDataFactory.h | 67 + .../RHIRenderIntegrationConfig.h | 21 + .../RenderIntegrationRHI/RHITypePolicy.h | 331 + .../RenderIntegrationRHI/RendererCache.cpp | 268 + .../RenderIntegrationRHI/RendererCache.h | 60 + .../RenderIntegrationRHI/SoundPoolCache.cpp | 201 + .../RenderIntegrationRHI/SoundPoolCache.h | 87 + .../RenderPasses/DirectionalShadows.cpp | 766 ++ .../RenderPasses/DirectionalShadows.h | 178 + .../RenderPasses/DownSampleTexture.cpp | 258 + .../RenderPasses/DownSampleTexture.h | 84 + Samples/PK-SampleLib/RenderPasses/GBuffer.cpp | 567 + Samples/PK-SampleLib/RenderPasses/GBuffer.h | 161 + .../PK-SampleLib/RenderPasses/PostFxBloom.cpp | 383 + .../PK-SampleLib/RenderPasses/PostFxBloom.h | 102 + .../RenderPasses/PostFxColorRemap.cpp | 231 + .../RenderPasses/PostFxColorRemap.h | 80 + .../RenderPasses/PostFxDistortion.cpp | 348 + .../RenderPasses/PostFxDistortion.h | 112 + .../PK-SampleLib/RenderPasses/PostFxFXAA.cpp | 196 + .../PK-SampleLib/RenderPasses/PostFxFXAA.h | 84 + .../RenderPasses/PostFxToneMapping.cpp | 231 + .../RenderPasses/PostFxToneMapping.h | 112 + .../SampleScene/AbstractGraphicScene.cpp | 501 + .../SampleScene/AbstractGraphicScene.h | 94 + .../SampleScene/DeferredScene.cpp | 1040 ++ .../PK-SampleLib/SampleScene/DeferredScene.h | 222 + .../Entities/EnvironmentMapEntity.cpp | 877 ++ .../Entities/EnvironmentMapEntity.h | 108 + .../SampleScene/Entities/LightEntity.cpp | 233 + .../SampleScene/Entities/LightEntity.h | 136 + .../SampleScene/Entities/MeshEntity.cpp | 453 + .../SampleScene/Entities/MeshEntity.h | 151 + Samples/PK-SampleLib/SampleUtils.cpp | 577 ++ Samples/PK-SampleLib/SampleUtils.h | 175 + .../BasicSceneShaderDefinitions.cpp | 377 + .../BasicSceneShaderDefinitions.h | 54 + .../EditorShaderDefinitions.cpp | 1159 +++ .../EditorShaderDefinitions.h | 97 + .../SampleLibShaderDefinitions.cpp | 1334 +++ .../SampleLibShaderDefinitions.h | 108 + .../ShaderDefinitions/ShaderDefinitions.cpp | 187 + .../ShaderDefinitions/ShaderDefinitions.h | 35 + .../UnitTestsShaderDefinitions.cpp | 1329 +++ .../UnitTestsShaderDefinitions.h | 210 + .../ShaderGenerator/GLSLShaderGenerator.cpp | 813 ++ .../ShaderGenerator/GLSLShaderGenerator.h | 80 + .../ShaderGenerator/HLSLShaderGenerator.cpp | 696 ++ .../ShaderGenerator/HLSLShaderGenerator.h | 63 + .../ShaderGenerator/MetalShaderGenerator.cpp | 803 ++ .../ShaderGenerator/MetalShaderGenerator.h | 72 + .../ParticleShaderGenerator.cpp | 568 + .../ShaderGenerator/ParticleShaderGenerator.h | 145 + .../ShaderGenerator/ShaderGenerator.cpp | 532 + .../ShaderGenerator/ShaderGenerator.h | 142 + .../ShaderGenerator/VulkanShaderGenerator.cpp | 749 ++ .../ShaderGenerator/VulkanShaderGenerator.h | 62 + Samples/PK-SampleLib/ShaderLoader.cpp | 348 + Samples/PK-SampleLib/ShaderLoader.h | 118 + .../SimInterface_GBufferSampling.cpp | 551 + .../SimInterfaces/SimInterfaces.h | 39 + .../WindowContext/AWindowContext.cpp | 64 + .../WindowContext/AWindowContext.h | 131 + .../OffscreenContext/OffscreenContext.cpp | 60 + .../OffscreenContext/OffscreenContext.h | 55 + .../WindowContext/SdlContext/SdlContext.cpp | 595 ++ .../WindowContext/SdlContext/SdlContext.h | 125 + Samples/PK-SampleLib/bin/mcpp.exe | 3 + Samples/precompiled/precompiled.cpp | 11 + Samples/precompiled/precompiled.h | 58 + download_3rd_party.bat | 40 + download_3rd_party.sh | 9 + .../AE_Effect_Attribute.make | 199 + .../AE_Effect_AttributeSampler.make | 199 + .../AE_Effect_Emitter.make | 199 + .../AfterEffects_macosx/AE_GeneralPlugin.make | 380 + .../AfterEffects_macosx/PK-AssetBaker.make | 192 + .../AfterEffects_macosx/PK-AssetBakerLib.make | 221 + .../PK-Discretizers_SDK1.make | 152 + projects/AfterEffects_macosx/PK-MCPP.make | 203 + .../AfterEffects_macosx/PK-MCPP_SDK1.make | 203 + .../PK-ParticlesToolbox_SDK1.make | 152 + projects/AfterEffects_macosx/PK-RHI.make | 768 ++ projects/AfterEffects_macosx/PK-RHI_SDK1.make | 162 + .../AfterEffects_macosx/PK-RenderHelpers.make | 436 + .../PK-RenderHelpers_SDK1.make | 152 + .../AfterEffects_macosx/PK-Runtime_SDK1.make | 151 + .../AfterEffects_macosx/PK-SampleLib.make | 492 + .../PK-Sample_01_BasicRendering.make | 200 + .../PK-Sample_01_BasicStartup.make | 175 + .../PK-Sample_02_BasicEvolve.make | 175 + .../PK-Sample_02_FullIntegration.make | 185 + .../PK-Sample_03_EngineHooks.make | 170 + .../PK-Sample_04_Baking.make | 177 + .../PK-Sample_04_EffectInterface.make | 230 + .../PK-Sample_05_Stats.make | 185 + .../PK-Sample_05_Upgrader.make | 172 + .../PK-Sample_06_SimInterface.make | 200 + .../PK-Sample_06_SimInterfaceGPU.make | 190 + .../AfterEffects_macosx/PK-Sample_07_LOD.make | 185 + .../PK-Sample_08_CustomCollision.make | 200 + .../PK-Sample_09_AsyncLoading.make | 190 + .../PK-Sample_10_AsyncRendering.make | 190 + .../PK-Sample_11_ThreadPool.make | 195 + .../PK-Sample_12_GBufferSampling.make | 185 + .../AfterEffects_macosx/PK-ShaderTool.make | 162 + projects/AfterEffects_macosx/PK-Upgrader.make | 172 + .../AfterEffects_macosx/PK-UpgraderLib.make | 1461 +++ .../PopcornFX_AfterEffectsPlugin.make | 168 + .../AfterEffects_macosx/PopcornFX_SDK1.make | 372 + .../moc_AEGP_GraphicalResourcesTreeModel.args | 53 + .../Qt/x64/Debug/moc_AEGP_PanelQT.args | 53 + .../moc_AEGP_GraphicalResourcesTreeModel.args | 54 + .../Qt/x64/Release/moc_AEGP_PanelQT.args | 54 + .../AE_Effect_Attribute.vcxproj | 199 + .../AE_Effect_Attribute.vcxproj.filters | 171 + .../AE_Effect_AttributeSampler.vcxproj | 199 + ...AE_Effect_AttributeSampler.vcxproj.filters | 171 + .../AE_Effect_Emitter.vcxproj | 199 + .../AE_Effect_Emitter.vcxproj.filters | 171 + .../AE_GeneralPlugin.vcxproj | 328 + .../AE_GeneralPlugin.vcxproj.filters | 473 + .../AE_GeneralPlugin.vcxproj.user | 11 + .../AfterEffects_vs2019/PK-AssetBaker.vcxproj | 179 + .../PK-AssetBaker.vcxproj.filters | 140 + .../PK-AssetBaker.vcxproj.user | 11 + .../PK-AssetBakerLib.vcxproj | 208 + .../PK-AssetBakerLib.vcxproj.filters | 98 + .../PK-Discretizers_SDK1.vcxproj | 180 + .../PK-Discretizers_SDK1.vcxproj.filters | 21 + projects/AfterEffects_vs2019/PK-MCPP.vcxproj | 196 + .../PK-MCPP.vcxproj.filters | 77 + .../AfterEffects_vs2019/PK-MCPP_SDK1.vcxproj | 196 + .../PK-MCPP_SDK1.vcxproj.filters | 77 + .../PK-ParticlesToolbox_SDK1.vcxproj | 196 + .../PK-ParticlesToolbox_SDK1.vcxproj.filters | 69 + projects/AfterEffects_vs2019/PK-RHI.vcxproj | 684 ++ .../PK-RHI.vcxproj.filters | 977 ++ .../AfterEffects_vs2019/PK-RHI_SDK1.vcxproj | 365 + .../PK-RHI_SDK1.vcxproj.filters | 650 ++ .../PK-RenderHelpers.vcxproj | 326 + .../PK-RenderHelpers.vcxproj.filters | 509 + .../PK-RenderHelpers_SDK1.vcxproj | 259 + .../PK-RenderHelpers_SDK1.vcxproj.filters | 285 + .../PK-Runtime_SDK1.vcxproj | 566 + .../PK-Runtime_SDK1.vcxproj.filters | 1335 +++ .../AfterEffects_vs2019/PK-SampleLib.vcxproj | 442 + .../PK-SampleLib.vcxproj.filters | 911 ++ .../PK-Sample_01_BasicRendering.vcxproj | 237 + ...K-Sample_01_BasicRendering.vcxproj.filters | 179 + .../PK-Sample_01_BasicRendering.vcxproj.user | 15 + .../PK-Sample_01_BasicStartup.vcxproj | 200 + .../PK-Sample_01_BasicStartup.vcxproj.filters | 50 + .../PK-Sample_01_BasicStartup.vcxproj.user | 15 + .../PK-Sample_02_BasicEvolve.vcxproj | 200 + .../PK-Sample_02_BasicEvolve.vcxproj.filters | 50 + .../PK-Sample_02_BasicEvolve.vcxproj.user | 15 + .../PK-Sample_02_FullIntegration.vcxproj | 306 + ...-Sample_02_FullIntegration.vcxproj.filters | 395 + .../PK-Sample_02_FullIntegration.vcxproj.user | 15 + .../PK-Sample_03_EngineHooks.vcxproj | 196 + .../PK-Sample_03_EngineHooks.vcxproj.filters | 44 + .../PK-Sample_03_EngineHooks.vcxproj.user | 15 + .../PK-Sample_04_Baking.vcxproj | 212 + .../PK-Sample_04_Baking.vcxproj.filters | 74 + .../PK-Sample_04_Baking.vcxproj.user | 15 + .../PK-Sample_04_EffectInterface.vcxproj | 322 + ...-Sample_04_EffectInterface.vcxproj.filters | 443 + .../PK-Sample_04_EffectInterface.vcxproj.user | 15 + .../PK-Sample_05_Stats.vcxproj | 306 + .../PK-Sample_05_Stats.vcxproj.filters | 395 + .../PK-Sample_05_Stats.vcxproj.user | 15 + .../PK-Sample_05_Upgrader.vcxproj | 211 + .../PK-Sample_05_Upgrader.vcxproj.filters | 77 + .../PK-Sample_05_Upgrader.vcxproj.user | 15 + .../PK-Sample_06_SimInterface.vcxproj | 312 + .../PK-Sample_06_SimInterface.vcxproj.filters | 413 + .../PK-Sample_06_SimInterface.vcxproj.user | 15 + .../PK-Sample_06_SimInterfaceGPU.vcxproj | 308 + ...-Sample_06_SimInterfaceGPU.vcxproj.filters | 401 + .../PK-Sample_06_SimInterfaceGPU.vcxproj.user | 15 + .../PK-Sample_07_LOD.vcxproj | 306 + .../PK-Sample_07_LOD.vcxproj.filters | 395 + .../PK-Sample_07_LOD.vcxproj.user | 15 + .../PK-Sample_08_CustomCollision.vcxproj | 312 + ...-Sample_08_CustomCollision.vcxproj.filters | 413 + .../PK-Sample_08_CustomCollision.vcxproj.user | 15 + .../PK-Sample_09_AsyncLoading.vcxproj | 307 + .../PK-Sample_09_AsyncLoading.vcxproj.filters | 398 + .../PK-Sample_09_AsyncLoading.vcxproj.user | 15 + .../PK-Sample_10_AsyncRendering.vcxproj | 307 + ...K-Sample_10_AsyncRendering.vcxproj.filters | 398 + .../PK-Sample_10_AsyncRendering.vcxproj.user | 15 + .../PK-Sample_11_ThreadPool.vcxproj | 308 + .../PK-Sample_11_ThreadPool.vcxproj.filters | 401 + .../PK-Sample_11_ThreadPool.vcxproj.user | 15 + .../PK-Sample_12_GBufferSampling.vcxproj | 306 + ...-Sample_12_GBufferSampling.vcxproj.filters | 395 + .../PK-Sample_12_GBufferSampling.vcxproj.user | 15 + .../AfterEffects_vs2019/PK-ShaderTool.vcxproj | 171 + .../PK-ShaderTool.vcxproj.filters | 137 + .../PK-ShaderTool.vcxproj.user | 11 + .../AfterEffects_vs2019/PK-Upgrader.vcxproj | 199 + .../PK-Upgrader.vcxproj.filters | 38 + .../PK-Upgrader.vcxproj.user | 18 + .../PK-UpgraderLib.vcxproj | 1312 +++ .../PK-UpgraderLib.vcxproj.filters | 3533 +++++++ .../PopcornFX_AfterEffectsPlugin.sln | 122 + .../AfterEffects_vs2019/PopcornFX_SDK1.sln | 293 + .../moc_AEGP_GraphicalResourcesTreeModel.args | 57 + .../Qt/x64/Debug/moc_AEGP_PanelQT.args | 57 + .../moc_AEGP_GraphicalResourcesTreeModel.args | 58 + .../Qt/x64/Release/moc_AEGP_PanelQT.args | 58 + qtoverride.dll.manifest | 15 + 1244 files changed, 176502 insertions(+) create mode 100644 .github/workflows/draft-release.yml create mode 100644 AE.code-workspace create mode 100644 AE_Effect_Attribute/Include/AEAttribute_Main.h create mode 100644 AE_Effect_Attribute/Include/AEAttribute_ParamDefine.h create mode 100644 AE_Effect_Attribute/Include/AEAttribute_PluginInterface.h create mode 100644 AE_Effect_Attribute/Include/AEAttribute_SequenceData.h create mode 100644 AE_Effect_Attribute/PkgInfo create mode 100644 AE_Effect_Attribute/Precompiled/ae_precompiled.cpp create mode 100644 AE_Effect_Attribute/Precompiled/ae_precompiled.h create mode 100644 AE_Effect_Attribute/Sources/AEAttribute_Main.cpp create mode 100644 AE_Effect_Attribute/Sources/AEAttribute_ParamDefine.cpp create mode 100644 AE_Effect_Attribute/Sources/AEAttribute_PluginInterface.cpp create mode 100644 AE_Effect_Attribute/Sources/AEAttribute_SequenceData.cpp create mode 100644 AE_Effect_Attribute/Sources/AE_Effect_Attribute.plugin-Info.plist create mode 100644 AE_Effect_Attribute/Sources/AE_Effect_Attribute_PiPL.r create mode 100644 AE_Effect_AttributeSampler/Include/AEAttributeSampler_Main.h create mode 100644 AE_Effect_AttributeSampler/Include/AEAttributeSampler_ParamDefine.h create mode 100644 AE_Effect_AttributeSampler/Include/AEAttributeSampler_PluginInterface.h create mode 100644 AE_Effect_AttributeSampler/Include/AEAttributeSampler_SequenceData.h create mode 100644 AE_Effect_AttributeSampler/PkgInfo create mode 100644 AE_Effect_AttributeSampler/Precompiled/ae_precompiled.cpp create mode 100644 AE_Effect_AttributeSampler/Precompiled/ae_precompiled.h create mode 100644 AE_Effect_AttributeSampler/Sources/AEAttributeSampler_Main.cpp create mode 100644 AE_Effect_AttributeSampler/Sources/AEAttributeSampler_ParamDefine.cpp create mode 100644 AE_Effect_AttributeSampler/Sources/AEAttributeSampler_PluginInterface.cpp create mode 100644 AE_Effect_AttributeSampler/Sources/AEAttributeSampler_SequenceData.cpp create mode 100644 AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler.plugin-Info.plist create mode 100644 AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler_PiPL.r create mode 100644 AE_Effect_Emitter/Include/AEEffect_Main.h create mode 100644 AE_Effect_Emitter/Include/AEEffect_ParamDefine.h create mode 100644 AE_Effect_Emitter/Include/AEEffect_PluginInterface.h create mode 100644 AE_Effect_Emitter/Include/AEEffect_SequenceData.h create mode 100644 AE_Effect_Emitter/PkgInfo create mode 100644 AE_Effect_Emitter/Precompiled/ae_precompiled.cpp create mode 100644 AE_Effect_Emitter/Precompiled/ae_precompiled.h create mode 100644 AE_Effect_Emitter/Sources/AEEffect_Main.cpp create mode 100644 AE_Effect_Emitter/Sources/AEEffect_ParamDefine.cpp create mode 100644 AE_Effect_Emitter/Sources/AEEffect_PluginInterface.cpp create mode 100644 AE_Effect_Emitter/Sources/AEEffect_SequenceData.cpp create mode 100644 AE_Effect_Emitter/Sources/AE_Effect_Emitter.plugin-Info.plist create mode 100644 AE_Effect_Emitter/Sources/AE_Effect_Emitter_PiPL.r create mode 100644 AE_GeneralPlugin/GeneralPlugin.manifest create mode 100644 AE_GeneralPlugin/Include/AEGP_AEPKConversion.h create mode 100644 AE_GeneralPlugin/Include/AEGP_AssetBaker.h create mode 100644 AE_GeneralPlugin/Include/AEGP_Attribute.h create mode 100644 AE_GeneralPlugin/Include/AEGP_Define.h create mode 100644 AE_GeneralPlugin/Include/AEGP_FileDialog.h create mode 100644 AE_GeneralPlugin/Include/AEGP_FileDialogMac.h create mode 100644 AE_GeneralPlugin/Include/AEGP_FileWatcher.h create mode 100644 AE_GeneralPlugin/Include/AEGP_FrameCollector.h create mode 100644 AE_GeneralPlugin/Include/AEGP_LayerHolder.h create mode 100644 AE_GeneralPlugin/Include/AEGP_Log.h create mode 100644 AE_GeneralPlugin/Include/AEGP_Main.h create mode 100644 AE_GeneralPlugin/Include/AEGP_PackExplorer.h create mode 100644 AE_GeneralPlugin/Include/AEGP_ParticleScene.h create mode 100644 AE_GeneralPlugin/Include/AEGP_PopcornFXPlugins.h create mode 100644 AE_GeneralPlugin/Include/AEGP_RenderContext.h create mode 100644 AE_GeneralPlugin/Include/AEGP_Scene.h create mode 100644 AE_GeneralPlugin/Include/AEGP_SkinnedMesh.h create mode 100644 AE_GeneralPlugin/Include/AEGP_SkinnedMeshInstance.h create mode 100644 AE_GeneralPlugin/Include/AEGP_System.h create mode 100644 AE_GeneralPlugin/Include/AEGP_UpdateAEState.h create mode 100644 AE_GeneralPlugin/Include/AEGP_VaultHandler.h create mode 100644 AE_GeneralPlugin/Include/AEGP_WinFileDialog.h create mode 100644 AE_GeneralPlugin/Include/AEGP_WinSystem.h create mode 100644 AE_GeneralPlugin/Include/AEGP_World.h create mode 100644 AE_GeneralPlugin/Include/Panels/AEGP_GraphicalResourcesTreeModel.h create mode 100644 AE_GeneralPlugin/Include/Panels/AEGP_PanelQT.h create mode 100644 AE_GeneralPlugin/Include/RenderApi/AEGP_BaseContext.h create mode 100644 AE_GeneralPlugin/Include/RenderApi/AEGP_CopyPixels.h create mode 100644 AE_GeneralPlugin/Include/RenderApi/AEGP_CopyTask.h create mode 100644 AE_GeneralPlugin/Include/RenderApi/AEGP_D3D11Context.h create mode 100644 AE_GeneralPlugin/Include/RenderApi/AEGP_D3D12Context.h create mode 100644 AE_GeneralPlugin/Include/RenderApi/AEGP_MetalContext.h create mode 100644 AE_GeneralPlugin/PkgInfo create mode 100644 AE_GeneralPlugin/Precompiled/ae_precompiled.cpp create mode 100644 AE_GeneralPlugin/Precompiled/ae_precompiled.h create mode 100644 AE_GeneralPlugin/Sources/AEGP_AEPKConversion.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_AssetBaker.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_Attribute.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_FileDialog.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_FileDialogMac.mm create mode 100644 AE_GeneralPlugin/Sources/AEGP_FileWatcher.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_FrameCollector.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_LayerHolder.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_Log.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_Main.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_PackExplorer.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_ParticleScene.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_PopcornFXPlugins.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_RenderContext.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_Scene.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_SkinnedMesh.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_SkinnedMeshInstance.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_System.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_UpdateAEState.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_VaultHandler.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_WinFileDialog.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_WinSystem.cpp create mode 100644 AE_GeneralPlugin/Sources/AEGP_World.cpp create mode 100644 AE_GeneralPlugin/Sources/AE_GeneralPlugin.plugin-Info.plist create mode 100644 AE_GeneralPlugin/Sources/AE_GeneralPlugin_PiPL.r create mode 100644 AE_GeneralPlugin/Sources/Panels/AEGP_GraphicalResourcesTreeModel.cpp create mode 100644 AE_GeneralPlugin/Sources/Panels/AEGP_PanelQT.cpp create mode 100644 AE_GeneralPlugin/Sources/RenderApi/AEGP_BaseContext.cpp create mode 100644 AE_GeneralPlugin/Sources/RenderApi/AEGP_CopyPixels.cpp create mode 100644 AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D11Context.cpp create mode 100644 AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D12Context.cpp create mode 100644 AE_GeneralPlugin/Sources/RenderApi/AEGP_MetalContext.mm create mode 100644 AE_Suites/PopcornFX_BasePluginInterface.h create mode 100644 AE_Suites/PopcornFX_Define.h create mode 100644 AE_Suites/PopcornFX_Define_Version.h create mode 100644 AE_Suites/PopcornFX_Suite.h create mode 100644 AE_Suites/PopcornFX_UID.h create mode 100644 CopyQTDllsForAE.py create mode 100644 External/AE SDK/Headers/A.h create mode 100644 External/AE SDK/Headers/AEConfig.h create mode 100644 External/AE SDK/Headers/AEFX_ArbParseHelper.c create mode 100644 External/AE SDK/Headers/AEFX_ArbParseHelper.h create mode 100644 External/AE SDK/Headers/AEFX_ChannelDepthTpl.h create mode 100644 External/AE SDK/Headers/AEFX_SuiteHandlerTemplate.h create mode 100644 External/AE SDK/Headers/AEFX_SuiteHelper.c create mode 100644 External/AE SDK/Headers/AEFX_SuiteHelper.h create mode 100644 External/AE SDK/Headers/AEGP_SuiteHandler.cpp create mode 100644 External/AE SDK/Headers/AEGP_SuiteHandler.h create mode 100644 External/AE SDK/Headers/AEGP_Utils.cpp create mode 100644 External/AE SDK/Headers/AEGP_Utils.h create mode 100644 External/AE SDK/Headers/AE_AdvEffectSuites.h create mode 100644 External/AE SDK/Headers/AE_CacheOnLoadSuite.h create mode 100644 External/AE SDK/Headers/AE_ChannelSuites.h create mode 100644 External/AE SDK/Headers/AE_ComputeCacheSuite.h create mode 100644 External/AE SDK/Headers/AE_CreatorInfo.h create mode 100644 External/AE SDK/Headers/AE_Effect.h create mode 100644 External/AE SDK/Headers/AE_EffectCB.h create mode 100644 External/AE SDK/Headers/AE_EffectCBSuites.h create mode 100644 External/AE SDK/Headers/AE_EffectGPUSuites.h create mode 100644 External/AE SDK/Headers/AE_EffectPixelFormat.h create mode 100644 External/AE SDK/Headers/AE_EffectSuites.h create mode 100644 External/AE SDK/Headers/AE_EffectSuitesHelper.h create mode 100644 External/AE SDK/Headers/AE_EffectSuitesOld.h create mode 100644 External/AE SDK/Headers/AE_EffectUI.h create mode 100644 External/AE SDK/Headers/AE_EffectVers.h create mode 100644 External/AE SDK/Headers/AE_GeneralPlug.h create mode 100644 External/AE SDK/Headers/AE_GeneralPlugOld.h create mode 100644 External/AE SDK/Headers/AE_GeneralPlugPanels.h create mode 100644 External/AE SDK/Headers/AE_GeneralPlugPost.h create mode 100644 External/AE SDK/Headers/AE_GeneralPlugPre.h create mode 100644 External/AE SDK/Headers/AE_HashSuite.h create mode 100644 External/AE SDK/Headers/AE_Hook.h create mode 100644 External/AE SDK/Headers/AE_IO.h create mode 100644 External/AE SDK/Headers/AE_IO_FileExt.h create mode 100644 External/AE SDK/Headers/AE_Macros.h create mode 100644 External/AE SDK/Headers/AE_PluginData.h create mode 100644 External/AE SDK/Headers/DuckSuite.h create mode 100644 External/AE SDK/Headers/FIEL_Public.h create mode 100644 External/AE SDK/Headers/Mach-O_prefix.h create mode 100644 External/AE SDK/Headers/MissingSuiteError.cpp create mode 100644 External/AE SDK/Headers/PF_Masks.h create mode 100644 External/AE SDK/Headers/PR_Public.h create mode 100644 External/AE SDK/Headers/PT_Public.h create mode 100644 External/AE SDK/Headers/Param_Utils.h create mode 100644 External/AE SDK/Headers/PrSDKAESupport.h create mode 100644 External/AE SDK/Headers/PrSDKPixelFormat.h create mode 100644 External/AE SDK/Headers/SP/PSIntTypes.h create mode 100644 External/AE SDK/Headers/SP/SPAccess.h create mode 100644 External/AE SDK/Headers/SP/SPAdapts.h create mode 100644 External/AE SDK/Headers/SP/SPBasic.h create mode 100644 External/AE SDK/Headers/SP/SPBckDbg.h create mode 100644 External/AE SDK/Headers/SP/SPBlocks.h create mode 100644 External/AE SDK/Headers/SP/SPCOM.h create mode 100644 External/AE SDK/Headers/SP/SPCaches.h create mode 100644 External/AE SDK/Headers/SP/SPConfig.h create mode 100644 External/AE SDK/Headers/SP/SPEDebug.c create mode 100644 External/AE SDK/Headers/SP/SPErrorCodes.h create mode 100644 External/AE SDK/Headers/SP/SPErrors.h create mode 100644 External/AE SDK/Headers/SP/SPFiles.h create mode 100644 External/AE SDK/Headers/SP/SPHost.h create mode 100644 External/AE SDK/Headers/SP/SPInterf.h create mode 100644 External/AE SDK/Headers/SP/SPMData.h create mode 100644 External/AE SDK/Headers/SP/SPObject.h create mode 100644 External/AE SDK/Headers/SP/SPPiPL.h create mode 100644 External/AE SDK/Headers/SP/SPPlugs.h create mode 100644 External/AE SDK/Headers/SP/SPProps.h create mode 100644 External/AE SDK/Headers/SP/SPRuntme.h create mode 100644 External/AE SDK/Headers/SP/SPSTSPrp.h create mode 100644 External/AE SDK/Headers/SP/SPStrngs.h create mode 100644 External/AE SDK/Headers/SP/SPSuites.h create mode 100644 External/AE SDK/Headers/SP/SPTypes.h create mode 100755 External/AE SDK/Headers/SP/artemis/config/platform.hpp create mode 100755 External/AE SDK/Headers/SP/photoshop/config/platform.hpp create mode 100644 External/AE SDK/Headers/Smart_Utils.cpp create mode 100644 External/AE SDK/Headers/Smart_Utils.h create mode 100644 External/AE SDK/Headers/String_Utils.c create mode 100644 External/AE SDK/Headers/String_Utils.h create mode 100644 External/AE SDK/Headers/SuiteHelper.h create mode 100644 External/AE SDK/Headers/adobesdk/DrawbotSuite.h create mode 100755 External/AE SDK/Headers/adobesdk/config/AdobesdkTypes.h create mode 100755 External/AE SDK/Headers/adobesdk/config/PostConfig.h create mode 100755 External/AE SDK/Headers/adobesdk/config/PreConfig.h create mode 100755 External/AE SDK/Headers/adobesdk/drawbotsuite/DrawbotSuiteTypes.h create mode 100644 External/AE SDK/Headers/entry.h create mode 100644 External/AE SDK/Resources/AE_General.r create mode 100644 External/AE SDK/Resources/Mach-O_prefix.h create mode 100755 External/AE SDK/Resources/PiPLtool.exe create mode 100644 External/AE SDK/Util/AEFX_ArbParseHelper.c create mode 100644 External/AE SDK/Util/AEFX_ArbParseHelper.h create mode 100644 External/AE SDK/Util/AEFX_ChannelDepthTpl.h create mode 100644 External/AE SDK/Util/AEFX_SuiteHelper.c create mode 100644 External/AE SDK/Util/AEFX_SuiteHelper.h create mode 100644 External/AE SDK/Util/AEGP_SuiteHandler.cpp create mode 100644 External/AE SDK/Util/AEGP_SuiteHandler.h create mode 100644 External/AE SDK/Util/AEGP_Utils.cpp create mode 100644 External/AE SDK/Util/AEGP_Utils.h create mode 100644 External/AE SDK/Util/DuckSuite.h create mode 100644 External/AE SDK/Util/MissingSuiteError.cpp create mode 100644 External/AE SDK/Util/Param_Utils.h create mode 100644 External/AE SDK/Util/Smart_Utils.cpp create mode 100644 External/AE SDK/Util/Smart_Utils.h create mode 100644 External/AE SDK/Util/String_Utils.h create mode 100644 External/AE SDK/Util/entry.h create mode 100644 External/popcornfx.qt/Qt5Core.dll create mode 100644 External/popcornfx.qt/Qt5Gui.dll create mode 100644 External/popcornfx.qt/Qt5Widgets.dll create mode 100644 External/popcornfx.qt/popcornfx.qt.manifest create mode 100644 External/popcornfx.qt/qwindows.dll create mode 100644 Native/debugger/PopcornFX.natvis create mode 100644 Native/debugger/qt5.natvis create mode 100644 PopcornFX/CHANGELOG.md create mode 100644 PopcornFX/LICENSE.md create mode 100755 PopcornFX/PK-ShaderTool_r.exe create mode 100644 PopcornFX/PopcornFXInternals/Meshes/default.pkmm create mode 100644 PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.0C443080A9914F8E3821857B39F3B3F6.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.3777E0C4C3850AF4730B699288C64A32.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.3777E0C4C3850AF4730B699288C64A32.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.DBCFC7E098405CD8ABAFBFE666F38717.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.C5813AF3B0DA61049FC61318A52A0039.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.08B780C3B4A4A9B95239BE4725C155E3.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.2BF4FFEBF18FD2317E7196CCB179BBD1.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.ACF5EA8A26A387527C94AE3CADBEEFE0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.ACF5EA8A26A387527C94AE3CADBEEFE0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.FADA9FB998752BB17F58A80A5F9E1569.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.FADA9FB998752BB17F58A80A5F9E1569.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.12DC1B81F40BCA0B86B8977219474DA2.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.227B4305DA369E84D660CF7D0F95A7B1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.227B4305DA369E84D660CF7D0F95A7B1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3041E5075421B7BEDB64891F34806B09.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3041E5075421B7BEDB64891F34806B09.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3F9F670175C1E9A2721D86BF200E8992.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.47AFC4B8F363592BAB2CB2B7450DC6CB.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.68D7368ADF463DA7672D728718850C05.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.68D7368ADF463DA7672D728718850C05.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.ADF077D22B698F0058CD269AB3B307F6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.ADF077D22B698F0058CD269AB3B307F6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.E6559EF41DF4A3259DE7762E070648DE.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.4FB8AAE1AE744B6A08826A79EB921BC5.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.B71DE41E8684A6AE211AB8D5CC66868D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.B71DE41E8684A6AE211AB8D5CC66868D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.77033778233ABE1F8DF4DC10896A9D54.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.77033778233ABE1F8DF4DC10896A9D54.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.C9C782D1BBE13E453755EC081421DED8.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.369D88A577A88042FF66C8A4DB9A4FFF.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.369D88A577A88042FF66C8A4DB9A4FFF.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.392E08DB2C8E05308B151D1DA50C5FD0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.392E08DB2C8E05308B151D1DA50C5FD0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.5105918DD8BE389C150428D89E1DC2A5.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.87A39CD991750E4B6AA82597D1D6999F.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.AE073ACCCC101E16160223DC2E63E101.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.C8248FD11EC1733B4966D0AD2A176353.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.C8248FD11EC1733B4966D0AD2A176353.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.DF3F5EC676EAEE69B51393B80926E694.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeRibbonSortKeys.comp.2616FB8E13640920939266A5AB69B20D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeRibbonSortKeys.comp.5193D9B98F2643DCDDD49DEB24A0B7BF.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeRibbonSortKeys.comp.5193D9B98F2643DCDDD49DEB24A0B7BF.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.1176896EBBA00E7091A5D3AB0E2EBB79.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.22E56629C521714CE47CDCC8E03CCD62.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.22E56629C521714CE47CDCC8E03CCD62.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.3048D89D90DE3FE53B72E0B170415B00.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.3048D89D90DE3FE53B72E0B170415B00.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.52AF64226113D111C7C55923680D03E7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.6D4F2B8F547360DC2A71F660E3706939.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.82765548E48F470AE2C324FD1DD1DF19.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.82765548E48F470AE2C324FD1DD1DF19.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.BF85DD78B470A799944AD5A0F0323B0C.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.BF85DD78B470A799944AD5A0F0323B0C.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.EEC67DE904429E8E712062FB728CA7E7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.002AC7D0B7F236B81143408D73D581F8.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.002AC7D0B7F236B81143408D73D581F8.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.008D18448C772DC164148A23DB8594EA.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.008D18448C772DC164148A23DB8594EA.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.0AD45649F32641AAA69A3A9C079BDDBC.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.18BB2ED0068256FAC47DC4810295F65B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.18BB2ED0068256FAC47DC4810295F65B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.3AEC42EAC916E5302A5879B5E0480E46.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.42142CB169269EB33A0A31A418C939A6.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.48B033222FD1BD594675302F045A38A7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.48B033222FD1BD594675302F045A38A7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.4B0896B385CFE32F521EF3625ECD7CE6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.4B0896B385CFE32F521EF3625ECD7CE6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.570374695D2EDE03975F3ACEEF142B8A.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.5BCF450E7AAEB04EFE81950BC64E3F24.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.6B6958101DFBCC2D44E480C8108B4531.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.724B5E7F9D5F2C642BBADBF98BCE6122.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.7D3D408F4D90CC373A284D34F9B71F98.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.7D3D408F4D90CC373A284D34F9B71F98.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.842841B5F4FFDF9CF56BEF4C0A6C5C2D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.842841B5F4FFDF9CF56BEF4C0A6C5C2D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.87D14E5B2AF4072ABF40B5A743B01133.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.87D14E5B2AF4072ABF40B5A743B01133.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.8EB0F8ED9C71D976C3914CE541D3AFC7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.9868960EE5BAA4542CE68A32E3F82EAB.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.BD068B89B4F2CBB0E292F53BC3714F9D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.CBB6451884404E44D465B01DF5A806BE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.CBB6451884404E44D465B01DF5A806BE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.F0E2F0F689387705D12CB9970013F51D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Copy.frag.F0E2F0F689387705D12CB9970013F51D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.01D890EA6B89BCCBE76EB1FEC30F851E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.01D890EA6B89BCCBE76EB1FEC30F851E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.01D890EA6B89BCCBE76EB1FEC30F851E.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.140F4C3CE57F202DE2DE8B945704F1F0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.140F4C3CE57F202DE2DE8B945704F1F0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.1DCA9D50DC853C86C4F97DC839A9325E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.1DCA9D50DC853C86C4F97DC839A9325E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.2FF984AB185BE7E8637187AC34C0981A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.2FF984AB185BE7E8637187AC34C0981A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.3348F0F53DE2A58A3FAD84C6699E871C.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.58AAEEAE9F43BBE34D312BD53914D01A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.58AAEEAE9F43BBE34D312BD53914D01A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.5AE82EFD5FB29F367E0D45BA786D928A.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.7DDABF541F1046F394F9BD2476CB5992.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.E77F6D2C2CCEA5FD8F910DA990E10013.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.4DD1C89DF8002B409E089089CE8F24E7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.4DD1C89DF8002B409E089089CE8F24E7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.5DF351B082B2DAEB6EA8D2B69FF8CE75.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7CF9397E238069F29B5AD306936DC2E1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7F37BB3F141BE207B89B42BD7E923FBA.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.9E055DD95BFFEC03321947DE0EB82637.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.DAB1785A8432D17D3A9633C69AC4C0BF.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.EF723B81A7A0BF6787FDDD555588FDAA.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.7CF9397E238069F29B5AD306936DC2E1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.EF723B81A7A0BF6787FDDD555588FDAA.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.vert.2FF984AB185BE7E8637187AC34C0981A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.vert.2FF984AB185BE7E8637187AC34C0981A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.vert.5AE82EFD5FB29F367E0D45BA786D928A.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.8DBEE0AA3D769A49703B7DD05C82CFA3.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.C1B07717CD6E335BA0719719B22FAFE3.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.C1B07717CD6E335BA0719719B22FAFE3.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.29EB9B0EAE29F9736E833F3E1F035C27.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.75A6F16850E5D3B8E8B7368097463B42.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.75A6F16850E5D3B8E8B7368097463B42.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.03430199D846164B6B0612A9B2AB28EA.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.03430199D846164B6B0612A9B2AB28EA.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.40C070F9811750AE211F3378926ED3B0.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.9D7F4A290A88D708B9D8641A2177BBE3.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.AA13DF163AA5F83DF77B65270B739A08.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.AA13DF163AA5F83DF77B65270B739A08.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.ABB1D1D062F10893CD085B71E73BA1FB.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB070F836ADD72A3E65E350E4F68AAFE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB070F836ADD72A3E65E350E4F68AAFE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB420670B55EEABBBB80947E171765E6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB420670B55EEABBBB80947E171765E6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.F6238D8991D40344B66C2ABAF21B2B5A.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.FE53A6036CA4635A540C1FEA2D189F45.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.05E05A32B897F2006A110EB2D80A4548.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.05E05A32B897F2006A110EB2D80A4548.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.0E8B137E61B073CBAAAB0C24A2C4CEF9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.0E8B137E61B073CBAAAB0C24A2C4CEF9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.266E4511F0C4068B851B075051BA543B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.266E4511F0C4068B851B075051BA543B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.2FF984AB185BE7E8637187AC34C0981A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.2FF984AB185BE7E8637187AC34C0981A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.35C1E2A66FBFA2887558AC3636CCA6EB.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.38A9BD92AA3A1500ADA3082B18F935F4.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.38A9BD92AA3A1500ADA3082B18F935F4.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.3DC0E88754F11D4478F7B7D881ADF28E.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.473011F7B55118D4409E7A91C4CA0C06.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.53C5FFB4F1F65014E9D8CE139E165C06.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5A4DDE443DFF866A0B6F7E709735D7AB.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5A4DDE443DFF866A0B6F7E709735D7AB.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5AE82EFD5FB29F367E0D45BA786D928A.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5C6447565A432691A52405F2D1A50012.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5C6447565A432691A52405F2D1A50012.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.620373BC462CC9D98E9DAE33EC0EF03D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.65E266EB404652FA1212BBD1F985A6AC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.65E266EB404652FA1212BBD1F985A6AC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.66F6E1229EB0784EFA3F715B73E43D2B.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.6CE9330E31EBBC32AE8E316A8C0EE277.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8BD5661BC011A36608F82548C23FB052.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8BD5661BC011A36608F82548C23FB052.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8D18B0A6A0838F6914203A391288C860.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.A7855B18F4958E7E1B7D9B72701C3720.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.ADDF91CE486A3BFBC7564616DE170ABA.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.ADDF91CE486A3BFBC7564616DE170ABA.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.B745EB05721137F2AE8C910D1BE17F25.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.C7EED909597A865FF430CA2885C69439.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.C7EED909597A865FF430CA2885C69439.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.FDDCD4D907DA9A03ACCD42C140A776A4.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.11A3F59B29869268E24243BE4EABD116.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.11A3F59B29869268E24243BE4EABD116.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1873B621D321CE82AA536C28DCE3C58D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1873B621D321CE82AA536C28DCE3C58D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1A146F33833BE9EEA65C6C0C0CBE799D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1A146F33833BE9EEA65C6C0C0CBE799D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1B816B245295CA5D5327E96BFE6301F6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1B816B245295CA5D5327E96BFE6301F6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1C0F0C96333B91901C06D1175A16E1DE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1C0F0C96333B91901C06D1175A16E1DE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2ACA21574A23B0D0074098285F176749.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2ACA21574A23B0D0074098285F176749.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2C8009173B59A839A8E4FF2BC5B85094.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2C8009173B59A839A8E4FF2BC5B85094.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2CEEC2A138B6BB946C7E5836CC5E37E0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2CEEC2A138B6BB946C7E5836CC5E37E0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.377370747DA9B2908354049AAC2D30FA.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.377370747DA9B2908354049AAC2D30FA.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.38E2D27FF7046D8A00290708435B3AC5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.38E2D27FF7046D8A00290708435B3AC5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.40452A858BDF0DD351CAAC7CAD4D75AC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.40452A858BDF0DD351CAAC7CAD4D75AC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.455299EAF18CA9285CFB885E58CDC6D0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.455299EAF18CA9285CFB885E58CDC6D0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.494F248863E815B635F86B4C4A2B9878.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.494F248863E815B635F86B4C4A2B9878.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.566A5829015B608CF29A39550DEF77DC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.566A5829015B608CF29A39550DEF77DC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5E305102DF74F937A763A780239EC2AB.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5E305102DF74F937A763A780239EC2AB.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5F5DF159396A6B8FE4C4A0F97D78924B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5F5DF159396A6B8FE4C4A0F97D78924B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7B8359347B0DEF37AA39A05B62E5CBC1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7B8359347B0DEF37AA39A05B62E5CBC1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7EEA6AF74A7E1398CE4B70E260147AF0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7EEA6AF74A7E1398CE4B70E260147AF0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7F33C027EBB191F2059BE1A8839D31F5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7F33C027EBB191F2059BE1A8839D31F5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.893C3B31AEB4B56E07A0C0112A35B626.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.893C3B31AEB4B56E07A0C0112A35B626.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9EBF63F0CECB121FB08C73258F424154.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9EBF63F0CECB121FB08C73258F424154.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9F151426D3A5187075EB122B45099E95.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9F151426D3A5187075EB122B45099E95.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.C1D8B1B3F659E4754B02859930024C34.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.C1D8B1B3F659E4754B02859930024C34.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.DBAB50AF656C0B77BE3EACFA872A4107.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.DBAB50AF656C0B77BE3EACFA872A4107.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.EDC05431FEB536B2137D9C70A18E0E85.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.EDC05431FEB536B2137D9C70A18E0E85.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.F43E932D41866B4751D2AAAA122C0DF8.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.F43E932D41866B4751D2AAAA122C0DF8.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.FD048825BBE1F9EEFF9AF105929E49F9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.FD048825BBE1F9EEFF9AF105929E49F9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.0491B9E5DB4146F6039DB5A1028E068F.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.0491B9E5DB4146F6039DB5A1028E068F.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.089C1A93F75623C5625465ADC48162D9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.089C1A93F75623C5625465ADC48162D9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2CBCDD973DD8785D8ED96E438B732020.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2CBCDD973DD8785D8ED96E438B732020.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2EBB1E214294B7250FB31039A38D6AC5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2EBB1E214294B7250FB31039A38D6AC5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.38E30D094B028C691653A728362634B2.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.38E30D094B028C691653A728362634B2.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.45152D6B551F36103EA55B435AD0C462.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.45152D6B551F36103EA55B435AD0C462.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.57701C60E841F468867561F9335BDAB3.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.57701C60E841F468867561F9335BDAB3.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.630652A3268DE6E9BDE38BC918841E62.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.630652A3268DE6E9BDE38BC918841E62.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.77B31999700322078CF970FEB7407F9C.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.77B31999700322078CF970FEB7407F9C.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.7D65653E05F3CFD999E0CFE63FA6E06D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.7D65653E05F3CFD999E0CFE63FA6E06D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AA7A6E402DA45EA1877F3864059BB328.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AA7A6E402DA45EA1877F3864059BB328.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.ABC8329C82EFC7A175A670CD89AFCF15.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.ABC8329C82EFC7A175A670CD89AFCF15.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AF299C4F5A88FF41BB134DEBBD221243.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AF299C4F5A88FF41BB134DEBBD221243.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.B73B1CA9CB013890A989873EBD811678.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.B73B1CA9CB013890A989873EBD811678.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.BB1894D2E83C03A44A1F4C0ACFAC5941.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.BB1894D2E83C03A44A1F4C0ACFAC5941.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.CF3846F9E7636FD9485E620D0B85EA7A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.CF3846F9E7636FD9485E620D0B85EA7A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.CFDCA74BBAE47557D9554F9C6994FFF5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.CFDCA74BBAE47557D9554F9C6994FFF5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D1027BFD27F09759DCE21D6C3D0007E6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D1027BFD27F09759DCE21D6C3D0007E6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D11F440AEF887A61EE9AF025D5E23AB9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D11F440AEF887A61EE9AF025D5E23AB9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.DF9214C22288F9B9A48D38F5B74524DE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.DF9214C22288F9B9A48D38F5B74524DE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E439E2679AC92876BE93DB6F63E71BA4.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E439E2679AC92876BE93DB6F63E71BA4.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.03A9039DF625A5CE430A52161825FB2E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.03A9039DF625A5CE430A52161825FB2E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.125702F176A5DC7DE52D9A2D09ACB336.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.125702F176A5DC7DE52D9A2D09ACB336.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1ADEC6D7AA8D6B5FA2623A3803561740.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1ADEC6D7AA8D6B5FA2623A3803561740.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1B4EF1D1BFD046CEA6303A75D5A090DD.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1B4EF1D1BFD046CEA6303A75D5A090DD.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.215E7FA2E1D915E575BF0D051FF57DAC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.215E7FA2E1D915E575BF0D051FF57DAC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.2CF9EB30E57EC06C260F1C994273BBB9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.2CF9EB30E57EC06C260F1C994273BBB9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3830050E054524D9FB4B97B3C5795D74.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3830050E054524D9FB4B97B3C5795D74.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3FC5681EEA9466868BDE6277412A1602.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3FC5681EEA9466868BDE6277412A1602.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.54CE329F05A57498A425EEE7FFB92A53.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.54CE329F05A57498A425EEE7FFB92A53.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.63E4E8675470AA49793AE6B8F2EFB412.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.63E4E8675470AA49793AE6B8F2EFB412.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.6EDA9FA1D0CE763321BA160FE1F69436.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.6EDA9FA1D0CE763321BA160FE1F69436.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.7B6CA6E5E319B7DCD804E51483B1560B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.7B6CA6E5E319B7DCD804E51483B1560B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.8041C676881D61780106102C13F8133C.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.8041C676881D61780106102C13F8133C.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.96BCBFB5543D4357E250741BD758D684.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.96BCBFB5543D4357E250741BD758D684.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B7B90948D23B69401E4275BBBA5F6021.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B7B90948D23B69401E4275BBBA5F6021.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B959A091D6A562E3BB2A4A86D8938E3B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B959A091D6A562E3BB2A4A86D8938E3B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C631C6F1C848D8407BB4550427BFAFE5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C631C6F1C848D8407BB4550427BFAFE5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C7D9E2F6ACF45D7DCA8F8EB92111BCBC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C7D9E2F6ACF45D7DCA8F8EB92111BCBC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.E757CD08237F5B4A4C260EE943E6A7BC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.E757CD08237F5B4A4C260EE943E6A7BC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F0F89BC5650EEE995AA9D7357378D280.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F0F89BC5650EEE995AA9D7357378D280.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FA071B919FA56A0FB70F4ED2F802D474.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FA071B919FA56A0FB70F4ED2F802D474.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FEE5E6A661D8F4453A0120A78702157A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FEE5E6A661D8F4453A0120A78702157A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0323DA1D4D66DFFC422FD195212F40AC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0323DA1D4D66DFFC422FD195212F40AC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.08792B0244607751B94495BF11FEA6C3.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0A7FA5C512F5E63FC77778DAD58C1444.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0A7FA5C512F5E63FC77778DAD58C1444.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0BD3C6312B7670505B943262A89C9294.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0BD3C6312B7670505B943262A89C9294.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0C752CA2B0AA5C4F58A28B4FB4DBC067.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0D2906E0F0B901297CEC98725443F6B8.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0D2906E0F0B901297CEC98725443F6B8.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0DC89CC6EF2BB651C434A448D67109E9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0DC89CC6EF2BB651C434A448D67109E9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1244F96A9F041AA77E0829FE15A81781.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1244F96A9F041AA77E0829FE15A81781.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.15BA3C3CB8B8717F4D80F5FEC204370F.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.180EA62B9D1202547139A36A2D1C9FCC.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1925F8BB8C5C6BD69F02FA2CD1B6D8F0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1925F8BB8C5C6BD69F02FA2CD1B6D8F0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.19E6B3D25951E1F2F91F02467D1FB30F.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.19E6B3D25951E1F2F91F02467D1FB30F.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1A0AF4135571475AB793369A890D45CA.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1A894823438A140EA9E04BF73CD2EAA5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1A894823438A140EA9E04BF73CD2EAA5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1B961C28B1FDF4C1823DAA29CE009487.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1B961C28B1FDF4C1823DAA29CE009487.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.1E6971511258F0A69158B0C15A49CFC7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.21E51D63F6FD0658E746CAE70039F290.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.21E51D63F6FD0658E746CAE70039F290.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.22F4863734AAC59D6C9C66C631B23B6E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.22F4863734AAC59D6C9C66C631B23B6E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.2CD2DBBA33D183ACE6CD7F2A42321467.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.2E6BE8AF0F44BC5CC7DA119DDBB43E98.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.2E6BE8AF0F44BC5CC7DA119DDBB43E98.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.2F8A55777C2632894CF6DBCA38D259A8.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.2F8A55777C2632894CF6DBCA38D259A8.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.31F564DDF64897CE8D0D8575BA11EA13.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.323B3616109D749EF6D2A3CF51050BE6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.323B3616109D749EF6D2A3CF51050BE6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.3340D8F8BFE958B965936432A77D2811.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.3340D8F8BFE958B965936432A77D2811.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.34AC697454E7671946541CA5BDED791A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.34AC697454E7671946541CA5BDED791A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.3A79EBFB229E33A9A80C49E5140236DE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.3A79EBFB229E33A9A80C49E5140236DE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.3B0D4E708AD83ECD8CB195DDCB463524.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.3B0D4E708AD83ECD8CB195DDCB463524.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.3B4B9C3BB8420D61B0C14B7C673D4312.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.40FE6F3B1F908655080943E7970B5923.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.40FE6F3B1F908655080943E7970B5923.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.41CC71331EA3F4DF19C62447C3B4957D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.441699570AB850AD3DB81564F52B0908.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.476DA901FEFBD9A0A3C70B45C3313D67.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.495C0A9F8FB4194D8EF08AE9C350B23E.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.4B8021430CC3C9971C8BC859E0C8989D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.4B8021430CC3C9971C8BC859E0C8989D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.50D311BEF26C71B333D271C49B078772.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.5166BF50736369CD4E22FFBFC064DE76.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.56DD6FF54063679C76D12691EA79ED95.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.56DD6FF54063679C76D12691EA79ED95.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6421B04960935975A09996C65CF0A478.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6421B04960935975A09996C65CF0A478.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.654D257A8942334F737B4CF3DBED0F48.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.654D257A8942334F737B4CF3DBED0F48.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.67F490450BA69DEBD5593D019A7EC0B6.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6ABEABA3444031DF1A478CE27CADC998.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6ABEABA3444031DF1A478CE27CADC998.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6AF760A6E9E643069DB35D5D06BD6BA9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6AF760A6E9E643069DB35D5D06BD6BA9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6D377C6B02680802CD74BA81C639ED28.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6D377C6B02680802CD74BA81C639ED28.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6E949D72552C7F34F1E09D89F1E1C952.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.6E949D72552C7F34F1E09D89F1E1C952.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.71D4C26BBE212B4D2A9608C1E34D86E4.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.7204742FB331648ED83573329D86D073.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.7204742FB331648ED83573329D86D073.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.73CFC84CF655AC999324D43BDB1E4EB6.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.74380FFB48164FF6B35623BE8701B7EB.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.74380FFB48164FF6B35623BE8701B7EB.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.7521DA417DCEAD1B47E7D7BE0B95AFE5.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.7B8E55E72E6CA6ACF6F1D3A81B3BC9D2.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.7E7C2EBE718EBA32FB6282BC269E323D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.7E7C2EBE718EBA32FB6282BC269E323D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.80EF261D1CC4A59FCF572E60A2F410EF.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.80EF261D1CC4A59FCF572E60A2F410EF.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.8206568794DB63EDFB28346F08717693.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.86BBDE2865C753261D68E62FEF5F2901.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.86BBDE2865C753261D68E62FEF5F2901.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.8ADA3DCDE80CB10E83BA6B98332AB60B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.8ADA3DCDE80CB10E83BA6B98332AB60B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.8B6EC10AD63C117AADC967DFF1835F04.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.8B6EC10AD63C117AADC967DFF1835F04.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.8D5882C7F4BE916035D8A2A19C6DF78A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.8D5882C7F4BE916035D8A2A19C6DF78A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.90E1EDC296925F67098F2D916779539D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.90E1EDC296925F67098F2D916779539D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.91F8A2067B8EA071695FF41B8B76AE97.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.91F8A2067B8EA071695FF41B8B76AE97.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.93D943F5A9C29E618797431F40796C35.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.93D943F5A9C29E618797431F40796C35.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.96DAC364F30C96759E77B529B883C028.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.96DAC364F30C96759E77B529B883C028.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.979416BB843C6F05F3845FFCC3ECD7D6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.979416BB843C6F05F3845FFCC3ECD7D6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.984E39E04658AF07687F9C17D33781DA.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.984E39E04658AF07687F9C17D33781DA.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.9AE9452EB8270BB640EA28FE04E85D12.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.9AE9452EB8270BB640EA28FE04E85D12.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.9C59ECCAF416177DA2B674CC26C4C7C6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.9C59ECCAF416177DA2B674CC26C4C7C6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.9C9DC497EE8CB2A3010B8F5BE870A4AD.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.A14339AF9BA1D695A2231452C7C125B1.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.A416CC957DBBA6BB89F520075E9ED987.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.A911A0900D6EB7FD73E64020B22DC54D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.A911A0900D6EB7FD73E64020B22DC54D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B0C01FFF068BBB8EC7C84EC464A263C6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B0C01FFF068BBB8EC7C84EC464A263C6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B33BD37027E2C6E47FBC917C8D1AD34C.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B33BD37027E2C6E47FBC917C8D1AD34C.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B815C5761C479B16EDEFA49DD71F5BEF.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B815C5761C479B16EDEFA49DD71F5BEF.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B95B5D8436DC9065FA2624B17C3A8F4A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.B95B5D8436DC9065FA2624B17C3A8F4A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.BB64A8E44AB8BAEEC81BE23ACF911CBC.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.BBDA720FBCB03878657725DCB4070478.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.BBDA720FBCB03878657725DCB4070478.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.C15B7A17F66E5D27A740A3A3C1979581.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.C15B7A17F66E5D27A740A3A3C1979581.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.C7B2BB2F20BE157E180C159EFD14D8DE.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.C98B044AB7848AFC025DE95581642A05.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.C98B044AB7848AFC025DE95581642A05.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.CB92CEE22B94959EEA2E37687128679E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.CB92CEE22B94959EEA2E37687128679E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.CC0D866961E5688D9882D28BF15A2DD1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.CC0D866961E5688D9882D28BF15A2DD1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.CDA1E3C0E334532F508888E67D4074B0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.CDA1E3C0E334532F508888E67D4074B0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.D1972016D72D5B585C503DFDD9ABA548.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.D1972016D72D5B585C503DFDD9ABA548.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.D580014BB3F0D7F3FB392B6DE11130DF.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.D580014BB3F0D7F3FB392B6DE11130DF.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.D8BEC1C4205A6483977E29A6E5C0A924.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DB334DF1BF578B4A345D78EACFC48EFD.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DB334DF1BF578B4A345D78EACFC48EFD.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DBF0DC4E7C492B8443906BDABAB124D6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DBF0DC4E7C492B8443906BDABAB124D6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DC6974CAEE2A36877F6F6ECC13BBAD7E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DC6974CAEE2A36877F6F6ECC13BBAD7E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DDEB5E46AE2974A0BD8EEF904023D7ED.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.DDEB5E46AE2974A0BD8EEF904023D7ED.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.E21668FA3F80C375943DB33466B664B7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.E2A6EFBB662583C8B826AB85395FBE8B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.E2A6EFBB662583C8B826AB85395FBE8B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.E2B113ED936BDA4068FB8C5E849E995C.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.E2B113ED936BDA4068FB8C5E849E995C.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.E7704C9D770808997358C137DF29684D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.E7F82C90DC6E05851419E96B05BE71AC.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.EB837A0928B395784434A7A111B53B5A.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.F57F07EF6B6ED1C1CCD0B43033944746.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.FE9156D85DC490262296F717A3729F04.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.FE9156D85DC490262296F717A3729F04.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.3AA9FB07C369A60580272C87CD195B48.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.3AA9FB07C369A60580272C87CD195B48.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.54B0DD8802234A5C2D1599668B7B9206.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.55B9ABEC1E3A57FF5B4B48F003CA9752.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.55B9ABEC1E3A57FF5B4B48F003CA9752.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.E0A95D2F1F3EE6F204B740E133E167F9.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.E4DE4FF3AC2C78D948169907E0A73083.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.E4DE4FF3AC2C78D948169907E0A73083.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.E82AF2A7438928C99FB4380BF1D38EEA.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.F5A70F5EA17C5E1466A4461A319A10E1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.F5A70F5EA17C5E1466A4461A319A10E1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexTri.vert.FC5D8F71F6D3DF19E20E42FF6618F7D3.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DeferredLights.frag.7D4CDE3609CAABADC704CA9E51BB9F61.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DeferredLights.frag.7D4CDE3609CAABADC704CA9E51BB9F61.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DeferredLights.frag.B5C43DC2134A05755ADB00CA12BAF5C9.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DeferredMerging.frag.AA6AB5EFB19FD706650DFAFAA01D7D90.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DeferredMerging.frag.AA6AB5EFB19FD706650DFAFAA01D7D90.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/DeferredMerging.frag.F9A4E1FF18B4D49D16DE912FD8A20B3E.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Distortion.frag.2BFF67C6D3C7441503662DA3FF5A8E57.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Distortion.frag.AFFAB2D8D5F189DCDB557A256A2F8D08.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Distortion.frag.AFFAB2D8D5F189DCDB557A256A2F8D08.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FXAA.frag.3A86B375B47444ED50B241CB31E4DE69.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FXAA.frag.4E1DEB657074C0BC7622F2752888C406.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FXAA.frag.4E1DEB657074C0BC7622F2752888C406.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FXAA.frag.6FF25215FE2377D1A9D44CB228A6FDCC.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FXAA.frag.A565FBDBEDF828A39BE5F7DB10013507.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FXAA.frag.A565FBDBEDF828A39BE5F7DB10013507.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FilterCubemap.comp.48F96F1C309D71E7B09A68D687BCAF2B.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FilterCubemap.comp.48F96F1C309D71E7B09A68D687BCAF2B.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FilterCubemap.comp.7D008C2220573C54554F7ECF45C09AE1.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.06F70F70BEE3A7F2C9007828EAC27793.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.23547C37D36CF6F9E3E4E1A5EFFDA5D7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.23547C37D36CF6F9E3E4E1A5EFFDA5D7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.5458F29FA4CB16046183E24079014F66.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.5458F29FA4CB16046183E24079014F66.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.6820B8E6207A3B72C4104BBEBA6362A7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.6820B8E6207A3B72C4104BBEBA6362A7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.84F2CED1305C36A788150F98225EDB8E.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.84F2CED1305C36A788150F98225EDB8E.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.84F2CED1305C36A788150F98225EDB8E.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.AB34E7F5715922651FCAC50613AD2C84.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/FullScreenQuad.vert.E9BEA09E84D5D4F71D5B417CB9E33C2B.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.20F6C676AA4429ECE221D06C3579FE6E.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.39AB76CAE213E76DBA545C88E8BDE602.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.39AB76CAE213E76DBA545C88E8BDE602.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.504D71546723AF7F0E946069BF0BBDC1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.504D71546723AF7F0E946069BF0BBDC1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.621E6F8AB62D0530723E6071DD1AECAE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.621E6F8AB62D0530723E6071DD1AECAE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.6B3AB535C56AF8AAA886CB915A7DE392.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.6B3AB535C56AF8AAA886CB915A7DE392.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.835D4B0EE4352DFABEFBE67F99F03581.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.835D4B0EE4352DFABEFBE67F99F03581.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.A9E805B45F4C48DB5EC5940F2DBB49EF.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.AD528D11B24C3E9547BBC2755B99AF0D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.AE86D100987DC55AC4CD67341D850BC9.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.BBC3FA3E5A6A9C8BD17B04A4C3C3131F.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.C26A349E4B498C28CA45FDF2B358356D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.C7D82581B244FE8E3E7FAD38CA9B4C30.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.C7D82581B244FE8E3E7FAD38CA9B4C30.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.D12FD3934A8AEA8B731F0FFDEE6E4203.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.F024867C34EF3686655F5D8B96BD85AD.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GBuffer.frag.F024867C34EF3686655F5D8B96BD85AD.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.0A585A8EE1FAF289D0FA00431292E74D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.196033BDAFEE16C2947AC8D3CBD9E464.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.44119E8A23CB98B578519BD7A8DD2D3A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.44119E8A23CB98B578519BD7A8DD2D3A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.4D18DB2E6615B37CE61ADA69E7CF80B7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.4D18DB2E6615B37CE61ADA69E7CF80B7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.6B1E1A9B04F783E5EF5AF1FA2DD7A8F0.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.6B1E1A9B04F783E5EF5AF1FA2DD7A8F0.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.776C8F8C4765207534C2B33EE67BA844.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.A85F6F848367C44C2139ED7946A2DD41.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.A85F6F848367C44C2139ED7946A2DD41.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.C7B3E6FB6A02D2891A0BFE850ABA2E05.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.C7B3E6FB6A02D2891A0BFE850ABA2E05.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.D4B8B59DC084AF08261271DE31BD80FB.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.D6F2FD832CE84459152427CA78D65D28.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.E0C7B3E835DB79196070A24486ABF763.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.E0C7B3E835DB79196070A24486ABF763.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/GaussianBlur.frag.E8745B044C2DFE8709E100D425FD7E22.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Gizmo.frag.4DD1C89DF8002B409E089089CE8F24E7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Gizmo.frag.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Gizmo.frag.4DD1C89DF8002B409E089089CE8F24E7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Gizmo.vert.C992EAD4108528439F5ACC0580D33319.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Gizmo.vert.C992EAD4108528439F5ACC0580D33319.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Gizmo.vert.EEDB02B1278B2566C0A24981ED8E295B.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Heatmap.frag.9005CED6A719F4C5A6266F97BBFB476E.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Heatmap.frag.F811CE9BD360967E23FA73EFC790BF73.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Heatmap.frag.F811CE9BD360967E23FA73EFC790BF73.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ImGui.frag.87409A88665BA0A46F3F776DF2CA1206.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ImGui.frag.F0E2F0F689387705D12CB9970013F51D.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ImGui.frag.F0E2F0F689387705D12CB9970013F51D.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ImGui.vert.13B53A2583576C2B028749CFE7A75DBA.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ImGui.vert.13B53A2583576C2B028749CFE7A75DBA.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ImGui.vert.613A033E7F8C94916EEEB5D560FE454B.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/InitIndirectionOffsetsBuffer.comp.03B060E36BAC8979EBFFCD327F74AAF9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/InitIndirectionOffsetsBuffer.comp.03B060E36BAC8979EBFFCD327F74AAF9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/InitIndirectionOffsetsBuffer.comp.0AE6A05A739437D201C8C1B2F93B8544.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/InitIndirectionOffsetsBuffer.comp.3C1C64A82544849508C4F7B5018CED35.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/InitIndirectionOffsetsBuffer.comp.3C1C64A82544849508C4F7B5018CED35.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/InitIndirectionOffsetsBuffer.comp.712FE560E255C4424D1793FEF1498944.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/LightInstanced.vert.95BBBD48996763573C91C6D61130ADC6.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/LightInstanced.vert.C69D1C8B63FD48E0C28A855BE4BC8C72.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/LightInstanced.vert.C69D1C8B63FD48E0C28A855BE4BC8C72.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ParticleSelector.comp.01A367EBF8EF61BEB5BBD977C507AD5D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ParticleSelector.comp.46FFC0AC778725D76C1B4B50B25D2820.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ParticleSelector.comp.46FFC0AC778725D76C1B4B50B25D2820.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ParticleSelectorCycle.comp.01A367EBF8EF61BEB5BBD977C507AD5D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ParticleSelectorCycle.comp.46FFC0AC778725D76C1B4B50B25D2820.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ParticleSelectorCycle.comp.46FFC0AC778725D76C1B4B50B25D2820.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/PointLightInstanced.frag.40666DC8ABC0281162338BC37344400B.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/PointLightInstanced.frag.4AB7012A334144666A00F99BE4F8ABF5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/PointLightInstanced.frag.4AB7012A334144666A00F99BE4F8ABF5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Profiler.frag.4DD1C89DF8002B409E089089CE8F24E7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Profiler.frag.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Profiler.frag.4DD1C89DF8002B409E089089CE8F24E7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Profiler.vert.607F7C9197328C04A914D3DB28E91B70.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Profiler.vert.7421279F2283857C300D16BA4AC862F9.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/Profiler.vert.7421279F2283857C300D16BA4AC862F9.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.frag.3F8899175EDEBECFC90A9FCF4189D177.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.frag.3F8899175EDEBECFC90A9FCF4189D177.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.frag.3F8899175EDEBECFC90A9FCF4189D177.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.frag.4DD1C89DF8002B409E089089CE8F24E7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.frag.4DD1C89DF8002B409E089089CE8F24E7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.frag.4DD1C89DF8002B409E089089CE8F24E7.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.vert.A0CB1C647BF9FDC5B765A1CD78BEA0C6.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.vert.A0CB1C647BF9FDC5B765A1CD78BEA0C6.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.vert.B1F47489E9CAD9F30B6E29EECDC49DC7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.vert.B1F47489E9CAD9F30B6E29EECDC49DC7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.vert.C6E60C6043020672ADB3C28FE4231386.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/ProfilerDrawNode.vert.E306BFB69B25E84A37254307D2194DE4.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/RenderCubemapFace.comp.000E9EBE432F6B318E8869722FA96736.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/RenderCubemapFace.comp.000E9EBE432F6B318E8869722FA96736.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/RenderCubemapFace.comp.6B0FF562C6B4E087E89ECFB854F4DF16.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.00EEAD7565201E1D171906979186BFF4.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.194FBD4081C25D96A0D72764B5D2868C.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.194FBD4081C25D96A0D72764B5D2868C.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.5914DC24CB72BBC25D999BA4C1DB9B5A.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.5914DC24CB72BBC25D999BA4C1DB9B5A.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.A50757CC2A13C001045CDD9A011A0E78.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.A50757CC2A13C001045CDD9A011A0E78.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.C771D47D0FD2493829F05C25BF23328F.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.C91A588C69123D5B74210A1169C0B7CB.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.C91A588C69123D5B74210A1169C0B7CB.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.D2590CD60D4E66225883164A95636A82.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMesh.vert.F1C2D218A3AFC30EF7F2C8297F4B8646.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMeshShadow.frag.7CF9397E238069F29B5AD306936DC2E1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMeshShadow.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMeshShadow.frag.9E055DD95BFFEC03321947DE0EB82637.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMeshShadow.vert.18162C7773971E53C43D7A0F15D8ECE4.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMeshShadow.vert.6D34106F328960A07AB5DB0CBEBE05E5.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SolidMeshShadow.vert.6D34106F328960A07AB5DB0CBEBE05E5.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortDownSweep.comp.36030C466ADE37AEB6B32358DC8DBAC7.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortDownSweep.comp.36030C466ADE37AEB6B32358DC8DBAC7.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortDownSweep.comp.5CFD62E25CEECDE84ED94155C845E9B2.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortDownSweep.comp.5CFD62E25CEECDE84ED94155C845E9B2.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortDownSweep.comp.D224AE024F31A732967118BC1834D51D.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortDownSweep.comp.D53181CD829C7C2CC9A7D66D28AA2D06.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortPrefixSum.comp.001CEFA3E15B4064857DF52248F766BE.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortPrefixSum.comp.001CEFA3E15B4064857DF52248F766BE.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortPrefixSum.comp.4C1B3D9DE2E2589090B928914DBDCA22.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortUpSweep.comp.BC3EED1104C7A5A05486050D5E27A5CC.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortUpSweep.comp.BC3EED1104C7A5A05486050D5E27A5CC.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortUpSweep.comp.E926B5F5F536A436919B0059B2A29EFC.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortUpSweep.comp.EDD9731E86E29E66F0807C2362C8B640.metallib create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortUpSweep.comp.F3A85FB3B74B54E33EEF438D2BBA34A1.cso create mode 100644 PopcornFX/PopcornFXInternals/Shaders/SortUpSweep.comp.F3A85FB3B74B54E33EEF438D2BBA34A1.cso.pdb create mode 100644 PopcornFX/PopcornFXInternals/Textures/DitheringPatterns.png create mode 100644 PopcornFX/PopcornFXInternals/Textures/Overdraw.dds create mode 100644 PopcornFX/PopcornFXInternals/Textures/TextAtlas.dds create mode 100644 PopcornFX/PopcornFXInternals/Textures/TextAtlas.pkat create mode 100644 PopcornFX/PopcornFXInternals/Textures/default.dds create mode 100644 PopcornFX/README.md create mode 100644 PopcornFX/Resources.rcc create mode 100644 PopcornFX/Resources/Fonts/Consolas.ttf create mode 100644 PopcornFX/Resources/Fonts/Roboto-Bold.ttf create mode 100644 PopcornFX/Resources/Fonts/Roboto-Light.ttf create mode 100644 PopcornFX/Resources/Fonts/Roboto-Regular.ttf create mode 100644 PopcornFX/Resources/Fonts/RobotoMono-Regular.ttf create mode 100644 PopcornFX/Resources/Icons/Reset.png create mode 100644 PopcornFX/Resources/Icons/branch-closed.png create mode 100644 PopcornFX/Resources/Icons/branch-open.png create mode 100644 PopcornFX/Stylesheet.qss create mode 100644 PopcornFX/WinPixEventRuntime.dll create mode 100644 PopcornFX/documentation/debugger/PopcornFX.natvis create mode 100644 PopcornFX/fxc.exe create mode 100644 PopcornFX/popcornfx.qt/Qt5Core.dll create mode 100644 PopcornFX/popcornfx.qt/Qt5Gui.dll create mode 100644 PopcornFX/popcornfx.qt/Qt5Widgets.dll create mode 100644 PopcornFX/popcornfx.qt/popcornfx.qt.manifest create mode 100644 PopcornFX/popcornfx.qt/qwindows.dll create mode 100644 Samples/PK-MCPP/directive.cpp create mode 100644 Samples/PK-MCPP/eval.cpp create mode 100644 Samples/PK-MCPP/expand.cpp create mode 100644 Samples/PK-MCPP/internal.h create mode 100644 Samples/PK-MCPP/main.cpp create mode 100644 Samples/PK-MCPP/mbchar.cpp create mode 100644 Samples/PK-MCPP/mcpp_lib.h create mode 100644 Samples/PK-MCPP/mcpp_out.h create mode 100644 Samples/PK-MCPP/noconfig.h create mode 100644 Samples/PK-MCPP/pk_mcpp_bridge.cpp create mode 100644 Samples/PK-MCPP/pk_mcpp_bridge.h create mode 100644 Samples/PK-MCPP/pk_preprocessor.cpp create mode 100644 Samples/PK-MCPP/pk_preprocessor.h create mode 100644 Samples/PK-MCPP/precompiled.cpp create mode 100644 Samples/PK-MCPP/precompiled.h create mode 100644 Samples/PK-MCPP/support.cpp create mode 100644 Samples/PK-MCPP/system.cpp create mode 100644 Samples/PK-MCPP/system.h create mode 100644 Samples/PK-SampleLib/ApiContext/D3D/D3D11Context.cpp create mode 100644 Samples/PK-SampleLib/ApiContext/D3D/D3D11Context.h create mode 100644 Samples/PK-SampleLib/ApiContext/D3D/D3D12Context.cpp create mode 100644 Samples/PK-SampleLib/ApiContext/D3D/D3D12Context.h create mode 100644 Samples/PK-SampleLib/ApiContext/IApiContext.h create mode 100644 Samples/PK-SampleLib/ApiContext/Metal/MetalContext.h create mode 100644 Samples/PK-SampleLib/ApiContext/Metal/MetalContext.mm create mode 100644 Samples/PK-SampleLib/ApiContext/Metal/MetalContextFactory.h create mode 100644 Samples/PK-SampleLib/ApiContext/Metal/MetalContextFactory.mm create mode 100644 Samples/PK-SampleLib/ApiContext/Metal/MetalFinalBlitShader.h create mode 100644 Samples/PK-SampleLib/ApiContext/Metal/MetalFinalBlitShader.metal create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/EGLContext.cpp create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/EGLContext.h create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/GLContext.cpp create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/GLContext.h create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/GLXContext.cpp create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/GLXContext.h create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/NSGLContext.h create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/NSGLContext.mm create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/WGLContext.cpp create mode 100644 Samples/PK-SampleLib/ApiContext/OpenGL/WGLContext.h create mode 100644 Samples/PK-SampleLib/ApiContext/Vulkan/VulkanContext.cpp create mode 100644 Samples/PK-SampleLib/ApiContext/Vulkan/VulkanContext.h create mode 100644 Samples/PK-SampleLib/ApiContextConfig.h create mode 100644 Samples/PK-SampleLib/Assets/Meshes/default.fbx create mode 100755 Samples/PK-SampleLib/Assets/ShaderIncludes/gen_shaders_header create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/gen_shaders_header.cmd create mode 100755 Samples/PK-SampleLib/Assets/ShaderIncludes/generated/Billboard.geom.h create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/generated/Billboard.vert.h create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/generated/GPUSimInterface_GBuffer_ProjectToNormal.d3d.h create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/generated/GPUSimInterface_GBuffer_ProjectToPosition.d3d.h create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/generated/Ribbon.vert.h create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/generated/Triangle.vert.h create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/sources/Billboard.geom create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/sources/Billboard.vert create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/sources/GPUSimInterfaces/GPUSimInterface_GBuffer_ProjectToNormal.d3d create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/sources/GPUSimInterfaces/GPUSimInterface_GBuffer_ProjectToPosition.d3d create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/sources/Ribbon.vert create mode 100644 Samples/PK-SampleLib/Assets/ShaderIncludes/sources/Triangle.vert create mode 100644 Samples/PK-SampleLib/Assets/Shaders/Gizmo.frag create mode 100644 Samples/PK-SampleLib/Assets/Shaders/Gizmo.vert create mode 100644 Samples/PK-SampleLib/Assets/Shaders/ImGui.frag create mode 100644 Samples/PK-SampleLib/Assets/Shaders/ImGui.vert create mode 100644 Samples/PK-SampleLib/Assets/Shaders/Profiler.frag create mode 100644 Samples/PK-SampleLib/Assets/Shaders/Profiler.vert create mode 100644 Samples/PK-SampleLib/Assets/Shaders/ProfilerDrawNode.frag create mode 100644 Samples/PK-SampleLib/Assets/Shaders/ProfilerDrawNode.vert create mode 100644 Samples/PK-SampleLib/Assets/Textures/DitheringPatterns.png create mode 100644 Samples/PK-SampleLib/Assets/Textures/default.dds create mode 100644 Samples/PK-SampleLib/BRDFLUT.cpp create mode 100644 Samples/PK-SampleLib/BRDFLUT.h create mode 100644 Samples/PK-SampleLib/BlueNoise.cpp create mode 100644 Samples/PK-SampleLib/BlueNoise.h create mode 100644 Samples/PK-SampleLib/Camera.cpp create mode 100644 Samples/PK-SampleLib/Camera.h create mode 100644 Samples/PK-SampleLib/DebugHelper.cpp create mode 100644 Samples/PK-SampleLib/DebugHelper.h create mode 100644 Samples/PK-SampleLib/Gizmo.cpp create mode 100644 Samples/PK-SampleLib/Gizmo.h create mode 100644 Samples/PK-SampleLib/ImguiRhiImplem.cpp create mode 100644 Samples/PK-SampleLib/ImguiRhiImplem.h create mode 100644 Samples/PK-SampleLib/PKPix.cpp create mode 100644 Samples/PK-SampleLib/PKPix.h create mode 100644 Samples/PK-SampleLib/PKSample.h create mode 100644 Samples/PK-SampleLib/PKSampleInit.cpp create mode 100644 Samples/PK-SampleLib/PKSampleInit.h create mode 100644 Samples/PK-SampleLib/PipelineCacheHelper.cpp create mode 100644 Samples/PK-SampleLib/PipelineCacheHelper.h create mode 100644 Samples/PK-SampleLib/PopcornStartup/PopcornStartup.cpp create mode 100644 Samples/PK-SampleLib/PopcornStartup/PopcornStartup.h create mode 100644 Samples/PK-SampleLib/ProfilerRenderer.cpp create mode 100644 Samples/PK-SampleLib/ProfilerRenderer.h create mode 100644 Samples/PK-SampleLib/RHIRenderParticleSceneHelpers.cpp create mode 100644 Samples/PK-SampleLib/RHIRenderParticleSceneHelpers.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/FeatureRenderingSettings.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/FeatureRenderingSettings.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/FrameCollector.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/FrameCollector.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/MaterialToRHI.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/MaterialToRHI.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIBillboardingBatchPolicy.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIBillboardingBatchPolicy.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIBillboardingBatchPolicy_Vertex.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIBillboardingBatchPolicy_Vertex.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHICustomTasks.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHICustomTasks.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIGPUSorter.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIGPUSorter.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIGraphicResources.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIGraphicResources.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIParticleRenderDataFactory.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIParticleRenderDataFactory.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHIRenderIntegrationConfig.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RHITypePolicy.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RendererCache.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/RendererCache.h create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/SoundPoolCache.cpp create mode 100644 Samples/PK-SampleLib/RenderIntegrationRHI/SoundPoolCache.h create mode 100644 Samples/PK-SampleLib/RenderPasses/DirectionalShadows.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/DirectionalShadows.h create mode 100644 Samples/PK-SampleLib/RenderPasses/DownSampleTexture.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/DownSampleTexture.h create mode 100644 Samples/PK-SampleLib/RenderPasses/GBuffer.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/GBuffer.h create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxBloom.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxBloom.h create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxColorRemap.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxColorRemap.h create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxDistortion.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxDistortion.h create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxFXAA.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxFXAA.h create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxToneMapping.cpp create mode 100644 Samples/PK-SampleLib/RenderPasses/PostFxToneMapping.h create mode 100644 Samples/PK-SampleLib/SampleScene/AbstractGraphicScene.cpp create mode 100644 Samples/PK-SampleLib/SampleScene/AbstractGraphicScene.h create mode 100644 Samples/PK-SampleLib/SampleScene/DeferredScene.cpp create mode 100644 Samples/PK-SampleLib/SampleScene/DeferredScene.h create mode 100644 Samples/PK-SampleLib/SampleScene/Entities/EnvironmentMapEntity.cpp create mode 100644 Samples/PK-SampleLib/SampleScene/Entities/EnvironmentMapEntity.h create mode 100644 Samples/PK-SampleLib/SampleScene/Entities/LightEntity.cpp create mode 100644 Samples/PK-SampleLib/SampleScene/Entities/LightEntity.h create mode 100644 Samples/PK-SampleLib/SampleScene/Entities/MeshEntity.cpp create mode 100644 Samples/PK-SampleLib/SampleScene/Entities/MeshEntity.h create mode 100644 Samples/PK-SampleLib/SampleUtils.cpp create mode 100644 Samples/PK-SampleLib/SampleUtils.h create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/BasicSceneShaderDefinitions.cpp create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/BasicSceneShaderDefinitions.h create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/EditorShaderDefinitions.cpp create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/EditorShaderDefinitions.h create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/SampleLibShaderDefinitions.cpp create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/SampleLibShaderDefinitions.h create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/ShaderDefinitions.cpp create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/ShaderDefinitions.h create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/UnitTestsShaderDefinitions.cpp create mode 100644 Samples/PK-SampleLib/ShaderDefinitions/UnitTestsShaderDefinitions.h create mode 100644 Samples/PK-SampleLib/ShaderGenerator/GLSLShaderGenerator.cpp create mode 100644 Samples/PK-SampleLib/ShaderGenerator/GLSLShaderGenerator.h create mode 100644 Samples/PK-SampleLib/ShaderGenerator/HLSLShaderGenerator.cpp create mode 100644 Samples/PK-SampleLib/ShaderGenerator/HLSLShaderGenerator.h create mode 100644 Samples/PK-SampleLib/ShaderGenerator/MetalShaderGenerator.cpp create mode 100644 Samples/PK-SampleLib/ShaderGenerator/MetalShaderGenerator.h create mode 100644 Samples/PK-SampleLib/ShaderGenerator/ParticleShaderGenerator.cpp create mode 100644 Samples/PK-SampleLib/ShaderGenerator/ParticleShaderGenerator.h create mode 100644 Samples/PK-SampleLib/ShaderGenerator/ShaderGenerator.cpp create mode 100644 Samples/PK-SampleLib/ShaderGenerator/ShaderGenerator.h create mode 100644 Samples/PK-SampleLib/ShaderGenerator/VulkanShaderGenerator.cpp create mode 100644 Samples/PK-SampleLib/ShaderGenerator/VulkanShaderGenerator.h create mode 100644 Samples/PK-SampleLib/ShaderLoader.cpp create mode 100644 Samples/PK-SampleLib/ShaderLoader.h create mode 100644 Samples/PK-SampleLib/SimInterfaces/SimInterface_GBufferSampling.cpp create mode 100644 Samples/PK-SampleLib/SimInterfaces/SimInterfaces.h create mode 100644 Samples/PK-SampleLib/WindowContext/AWindowContext.cpp create mode 100644 Samples/PK-SampleLib/WindowContext/AWindowContext.h create mode 100644 Samples/PK-SampleLib/WindowContext/OffscreenContext/OffscreenContext.cpp create mode 100644 Samples/PK-SampleLib/WindowContext/OffscreenContext/OffscreenContext.h create mode 100644 Samples/PK-SampleLib/WindowContext/SdlContext/SdlContext.cpp create mode 100644 Samples/PK-SampleLib/WindowContext/SdlContext/SdlContext.h create mode 100644 Samples/PK-SampleLib/bin/mcpp.exe create mode 100644 Samples/precompiled/precompiled.cpp create mode 100644 Samples/precompiled/precompiled.h create mode 100644 download_3rd_party.bat create mode 100644 download_3rd_party.sh create mode 100644 projects/AfterEffects_macosx/AE_Effect_Attribute.make create mode 100644 projects/AfterEffects_macosx/AE_Effect_AttributeSampler.make create mode 100644 projects/AfterEffects_macosx/AE_Effect_Emitter.make create mode 100644 projects/AfterEffects_macosx/AE_GeneralPlugin.make create mode 100644 projects/AfterEffects_macosx/PK-AssetBaker.make create mode 100644 projects/AfterEffects_macosx/PK-AssetBakerLib.make create mode 100644 projects/AfterEffects_macosx/PK-Discretizers_SDK1.make create mode 100644 projects/AfterEffects_macosx/PK-MCPP.make create mode 100644 projects/AfterEffects_macosx/PK-MCPP_SDK1.make create mode 100644 projects/AfterEffects_macosx/PK-ParticlesToolbox_SDK1.make create mode 100644 projects/AfterEffects_macosx/PK-RHI.make create mode 100644 projects/AfterEffects_macosx/PK-RHI_SDK1.make create mode 100644 projects/AfterEffects_macosx/PK-RenderHelpers.make create mode 100644 projects/AfterEffects_macosx/PK-RenderHelpers_SDK1.make create mode 100644 projects/AfterEffects_macosx/PK-Runtime_SDK1.make create mode 100644 projects/AfterEffects_macosx/PK-SampleLib.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_01_BasicRendering.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_01_BasicStartup.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_02_BasicEvolve.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_02_FullIntegration.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_03_EngineHooks.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_04_Baking.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_04_EffectInterface.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_05_Stats.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_05_Upgrader.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_06_SimInterface.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_06_SimInterfaceGPU.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_07_LOD.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_08_CustomCollision.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_09_AsyncLoading.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_10_AsyncRendering.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_11_ThreadPool.make create mode 100644 projects/AfterEffects_macosx/PK-Sample_12_GBufferSampling.make create mode 100644 projects/AfterEffects_macosx/PK-ShaderTool.make create mode 100644 projects/AfterEffects_macosx/PK-Upgrader.make create mode 100644 projects/AfterEffects_macosx/PK-UpgraderLib.make create mode 100644 projects/AfterEffects_macosx/PopcornFX_AfterEffectsPlugin.make create mode 100644 projects/AfterEffects_macosx/PopcornFX_SDK1.make create mode 100644 projects/AfterEffects_macosx/Qt/x64/Debug/moc_AEGP_GraphicalResourcesTreeModel.args create mode 100644 projects/AfterEffects_macosx/Qt/x64/Debug/moc_AEGP_PanelQT.args create mode 100644 projects/AfterEffects_macosx/Qt/x64/Release/moc_AEGP_GraphicalResourcesTreeModel.args create mode 100644 projects/AfterEffects_macosx/Qt/x64/Release/moc_AEGP_PanelQT.args create mode 100644 projects/AfterEffects_vs2019/AE_Effect_Attribute.vcxproj create mode 100644 projects/AfterEffects_vs2019/AE_Effect_Attribute.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/AE_Effect_AttributeSampler.vcxproj create mode 100644 projects/AfterEffects_vs2019/AE_Effect_AttributeSampler.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/AE_Effect_Emitter.vcxproj create mode 100644 projects/AfterEffects_vs2019/AE_Effect_Emitter.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/AE_GeneralPlugin.vcxproj create mode 100644 projects/AfterEffects_vs2019/AE_GeneralPlugin.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/AE_GeneralPlugin.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-AssetBaker.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-AssetBaker.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-AssetBaker.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-AssetBakerLib.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-AssetBakerLib.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Discretizers_SDK1.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Discretizers_SDK1.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-MCPP.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-MCPP.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-MCPP_SDK1.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-MCPP_SDK1.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-ParticlesToolbox_SDK1.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-ParticlesToolbox_SDK1.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-RHI.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-RHI.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-RHI_SDK1.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-RHI_SDK1.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-RenderHelpers.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-RenderHelpers.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-RenderHelpers_SDK1.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-RenderHelpers_SDK1.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Runtime_SDK1.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Runtime_SDK1.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-SampleLib.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-SampleLib.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_01_BasicRendering.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_01_BasicRendering.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_01_BasicRendering.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_01_BasicStartup.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_01_BasicStartup.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_01_BasicStartup.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_02_BasicEvolve.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_02_BasicEvolve.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_02_BasicEvolve.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_02_FullIntegration.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_02_FullIntegration.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_02_FullIntegration.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_03_EngineHooks.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_03_EngineHooks.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_03_EngineHooks.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_04_Baking.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_04_Baking.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_04_Baking.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_04_EffectInterface.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_04_EffectInterface.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_04_EffectInterface.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_05_Stats.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_05_Stats.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_05_Stats.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_05_Upgrader.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_05_Upgrader.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_05_Upgrader.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_06_SimInterface.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_06_SimInterface.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_06_SimInterface.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_06_SimInterfaceGPU.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_06_SimInterfaceGPU.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_06_SimInterfaceGPU.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_07_LOD.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_07_LOD.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_07_LOD.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_08_CustomCollision.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_08_CustomCollision.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_08_CustomCollision.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_09_AsyncLoading.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_09_AsyncLoading.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_09_AsyncLoading.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_10_AsyncRendering.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_10_AsyncRendering.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_10_AsyncRendering.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_11_ThreadPool.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_11_ThreadPool.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_11_ThreadPool.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Sample_12_GBufferSampling.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Sample_12_GBufferSampling.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Sample_12_GBufferSampling.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-ShaderTool.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-ShaderTool.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-ShaderTool.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-Upgrader.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-Upgrader.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PK-Upgrader.vcxproj.user create mode 100644 projects/AfterEffects_vs2019/PK-UpgraderLib.vcxproj create mode 100644 projects/AfterEffects_vs2019/PK-UpgraderLib.vcxproj.filters create mode 100644 projects/AfterEffects_vs2019/PopcornFX_AfterEffectsPlugin.sln create mode 100644 projects/AfterEffects_vs2019/PopcornFX_SDK1.sln create mode 100644 projects/AfterEffects_vs2019/Qt/x64/Debug/moc_AEGP_GraphicalResourcesTreeModel.args create mode 100644 projects/AfterEffects_vs2019/Qt/x64/Debug/moc_AEGP_PanelQT.args create mode 100644 projects/AfterEffects_vs2019/Qt/x64/Release/moc_AEGP_GraphicalResourcesTreeModel.args create mode 100644 projects/AfterEffects_vs2019/Qt/x64/Release/moc_AEGP_PanelQT.args create mode 100644 qtoverride.dll.manifest diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml new file mode 100644 index 00000000..2afd7e80 --- /dev/null +++ b/.github/workflows/draft-release.yml @@ -0,0 +1,30 @@ +on: + push: + tags: + - v*.*.* + +jobs: + release-on-tag: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v3 + + - uses: jungwinter/split@master + id: split + with: + msg: ${{ github.ref_name }} + separator: "." + + - name: Set environment + run: echo "VERSION=$(echo "${GITHUB_REF_NAME#v}" | sed 's/-LTS//g')" >> $GITHUB_ENV && echo "MINOR_VERSION=${{ steps.split.outputs._0 }}.${{ steps.split.outputs._1 }}" >> $GITHUB_ENV + + - uses: ncipollo/release-action@v1 + with: + draft: true + name: "After Effects Plugin: ${{ github.ref_name }}" + body: "PopcornFX Plugin ${{ github.ref_name }} for After Effects\n\n + You can download the PopcornFX Editor and find the full changelog here:\n + https://wiki.popcornfx.com/index.php?title=PK-Editor_${{ env.MINOR_VERSION }}#Changelog_${{ env.VERSION }}" \ No newline at end of file diff --git a/AE.code-workspace b/AE.code-workspace new file mode 100644 index 00000000..f439dfde --- /dev/null +++ b/AE.code-workspace @@ -0,0 +1,65 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "C_Cpp.default.defines": [ "PK_BUILD_WITH_METAL_SUPPORT=1" ], + "C_Cpp.default.includePath": [ + "../../Runtime", + "../../Runtime/include", + "../../Runtime/include/license/AfterEffects", + "../../Integrations/AfterEffects/PK-AfterEffects__Main/Sources", + "../../Integrations/AfterEffects/PK-AfterEffects__Main/Include", + "../../Integrations/AfterEffects/PK-AfterEffects__Main/Precompiled", + "../../Integrations/AfterEffects/AE_Suites", + "../../Integrations/AfterEffects/External/AE SDK/Util", + "../../Integrations/AfterEffects/External/AE SDK/Resources", + "../../Integrations/AfterEffects/External/AE SDK/Headers", + "../../Integrations/AfterEffects/External/AE SDK/Headers/SP", + "../../Integrations/AfterEffects/External/AE SDK/Headers/adobesdk", + "../../Integrations/AfterEffects/External/AE SDK/Headers/adobesdk/config", + "../../Integrations/AfterEffects/External/AE SDK/Headers/adobesdk/drawbotsuite", + "../../SDK/Samples/PK-Samples", + "../../SDK/Samples/External/imgui", + "../../SDK/Samples/External/GL/include", + "/usr/local/include/SDL2", + ], + "lldb.launch.env": { + "AEBin": "\"/Applications/Adobe After Effects 2022/Adobe After Effects 2022.app/Contents/MacOS/After Effects\"" + }, + "terminal.integrated.env.osx": { + "AEBin": "\"/Applications/Adobe After Effects 2022/Adobe After Effects 2022.app/Contents/MacOS/After Effects\"" + }, + "files.associations": { + "array": "cpp", + "iterator": "cpp", + "string": "cpp", + "string_view": "cpp", + "vector": "cpp", + "__locale": "cpp" + }, + }, + "launch": { + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "(lldb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "/Applications/Adobe After Effects 2022/Adobe After Effects 2022.app/Contents/MacOS/After Effects", + "args": ["--debug"], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "lldb", + "visualizerFile": "${workspaceRoot}/../../../configurations/visual studio/debugger/PopcornFX.natvis", + } + ] + } +} diff --git a/AE_Effect_Attribute/Include/AEAttribute_Main.h b/AE_Effect_Attribute/Include/AEAttribute_Main.h new file mode 100644 index 00000000..e44dc60c --- /dev/null +++ b/AE_Effect_Attribute/Include/AEAttribute_Main.h @@ -0,0 +1,39 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEATTRIBUTE_MAIN_H__ +#define __FX_AEATTRIBUTE_MAIN_H__ + +#include + +#ifdef AE_OS_WIN + typedef unsigned short PixelType; + #include +#endif + +#include +#include + +#include "PopcornFX_Define.h" + +//---------------------------------------------------------------------------- + +extern "C" { + DllExport + PF_Err + EffectMain( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); + +} + +//---------------------------------------------------------------------------- + +#endif + diff --git a/AE_Effect_Attribute/Include/AEAttribute_ParamDefine.h b/AE_Effect_Attribute/Include/AEAttribute_ParamDefine.h new file mode 100644 index 00000000..780622ba --- /dev/null +++ b/AE_Effect_Attribute/Include/AEAttribute_ParamDefine.h @@ -0,0 +1,58 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#include +#include + +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +enum EPKParams +{ + ATTRIBUTE_INPUT = 0, + ATTRIBUTE_PARAM, + ATTRIBUTE_NUM_PARAMS +}; + +//---------------------------------------------------------------------------- + +enum EStrIDType +{ + StrID_NONE = 0, + StrID_Name, + StrID_Description, + StrID_Generic_Bool1, + StrID_Generic_Bool2, + StrID_Generic_Bool3, + StrID_Generic_Bool4, + StrID_Generic_Int1, + StrID_Generic_Int2, + StrID_Generic_Int3, + StrID_Generic_Int4, + StrID_Generic_Float1, + StrID_Generic_Float2, + StrID_Generic_Float3, + StrID_Generic_Float4, + StrID_Generic_Quaternion, + + StrID_Generic_Infernal_Uuid, + StrID_Scale_Checkbox, + StrID_Generic_Infernal_Name, + + StrID_Generic_Color_RGB, + StrID_Generic_Color_A, + + StrID_Parameters_Reset, + StrID_Parameters_Reset_Button, + + StrID_NUMTYPES +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END diff --git a/AE_Effect_Attribute/Include/AEAttribute_PluginInterface.h b/AE_Effect_Attribute/Include/AEAttribute_PluginInterface.h new file mode 100644 index 00000000..6adef44b --- /dev/null +++ b/AE_Effect_Attribute/Include/AEAttribute_PluginInterface.h @@ -0,0 +1,99 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_CPluginInterface_H__ +#define __FX_CPluginInterface_H__ + +#include "PopcornFX_Define.h" +#include "PopcornFX_BasePluginInterface.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +__AAEPK_BEGIN + +struct SAAEIOData; +struct SAttributeDesc; +struct SAttributeSequenceDataFlat; + +//---------------------------------------------------------------------------- + +class CPluginInterface : public CBasePluginInterface +{ + struct SAttributeData + { + //Memory Owned by effect + SAttributeDesc *m_DescAttribute; + + bool m_UIVisibility[__Attribute_Parameters_Count]; + bool m_IsDefault; + + SAttributeData() + : m_DescAttribute(nullptr) + , m_IsDefault(true) + { + } + ~SAttributeData() + { + m_DescAttribute = nullptr; + } + }; +public: + ~CPluginInterface(); + static CPluginInterface &Instance(); + + PF_Err About(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err GlobalSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err ParamsSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err GlobalSetdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + + PF_Err SequenceSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceReSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceFlatten(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceShutdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + + PF_Err PreRender(SAAEIOData &AAEData); + PF_Err SmartRender(SAAEIOData &AAEData); + PF_Err UpdateParams(SAAEIOData &AAEData, PF_ParamDef *params[]); + PF_Err UpdateParamsUI(SAAEIOData &AAEData, PF_ParamDef *params[]); + + PF_Err SetDefaultValueIFN(SAAEIOData &AAEData, PF_ParamDef *params[], SAttributeData *AttrData); + + PF_Err HandleDataFromAEGP(SAAEIOData &AAEData, PF_ParamDef *params[]); + + void UpdateBoolAttribute(SAAEIOData &AAEData, SAttributeDesc *descriptor, bool *uiVisibility); + void UpdateIntAttribute(SAAEIOData &AAEData, SAttributeDesc *descriptor, bool *uiVisibility); + void UpdateFloatAttribute(SAAEIOData &AAEData, SAttributeDesc *descriptor, bool *uiVisibility); + +private: + CPluginInterface(); + static CPluginInterface *m_Instance; + static uint32_t m_AttrUID; + + bool _GetAttributeSequenceUID(SAAEIOData &AAEData, std::string &out); + + PF_Err _RegisterAttributeInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SAttributeSequenceDataFlat *sequenceData, bool setup); + + std::unordered_map m_AttributeData; + + std::thread::id m_MainThreadID; +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif diff --git a/AE_Effect_Attribute/Include/AEAttribute_SequenceData.h b/AE_Effect_Attribute/Include/AEAttribute_SequenceData.h new file mode 100644 index 00000000..e74600f2 --- /dev/null +++ b/AE_Effect_Attribute/Include/AEAttribute_SequenceData.h @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEATTRIBUTE_SEQUENCEDATA_H__ +#define __AEATTRIBUTE_SEQUENCEDATA_H__ + +#include +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +namespace SequenceCST +{ + static const size_t MAX_PATH_LEN = 1024; + static const size_t MAX_NAME_LEN = 100; + static const size_t UUID_LEN = 64; +}; + +//---------------------------------------------------------------------------- + +struct SAttributeSequenceDataFlat +{ + bool m_IsFlat = true; + + char m_AttributeUUID[SequenceCST::UUID_LEN]; + size_t m_AttributeUUIDLen; + + char m_AttributeName[SequenceCST::MAX_NAME_LEN]; + size_t m_AttributeNameLen; + + bool m_IsDefault = true; + + A_long m_LayerID; + + void CopyFrom(SAttributeSequenceDataFlat* src); + + void SetIsDefaultValue(bool value); + bool SetUUID(const char *uuid); + bool SetName(const char *name); + bool SetLayerID(bool value); +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif // !__AAEFFECT_SEQUENCEDATA_H__ diff --git a/AE_Effect_Attribute/PkgInfo b/AE_Effect_Attribute/PkgInfo new file mode 100644 index 00000000..31cf1f41 --- /dev/null +++ b/AE_Effect_Attribute/PkgInfo @@ -0,0 +1 @@ +eFKTFXTC \ No newline at end of file diff --git a/AE_Effect_Attribute/Precompiled/ae_precompiled.cpp b/AE_Effect_Attribute/Precompiled/ae_precompiled.cpp new file mode 100644 index 00000000..84e52276 --- /dev/null +++ b/AE_Effect_Attribute/Precompiled/ae_precompiled.cpp @@ -0,0 +1 @@ +#include "ae_precompiled.h" diff --git a/AE_Effect_Attribute/Precompiled/ae_precompiled.h b/AE_Effect_Attribute/Precompiled/ae_precompiled.h new file mode 100644 index 00000000..5b1746dd --- /dev/null +++ b/AE_Effect_Attribute/Precompiled/ae_precompiled.h @@ -0,0 +1,13 @@ +#pragma once + +#undef PV_MODULE_NAME +#undef PV_MODULE_SYM +#define PV_MODULE_NAME "AEPlugin" +#define PV_MODULE_SYM AEPlugin + +#include + +#if defined(PK_WINDOWS) +#define WIN32_LEAN_AND_MEAN +#include +#endif diff --git a/AE_Effect_Attribute/Sources/AEAttribute_Main.cpp b/AE_Effect_Attribute/Sources/AEAttribute_Main.cpp new file mode 100644 index 00000000..a442da88 --- /dev/null +++ b/AE_Effect_Attribute/Sources/AEAttribute_Main.cpp @@ -0,0 +1,172 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttribute_Main.h" + +#include "AEAttribute_PluginInterface.h" +#include "PopcornFX_Suite.h" + +#include + +#include + +//---------------------------------------------------------------------------- + +extern "C" +{ + DllExport PF_Err PluginDataEntryFunction( PF_PluginDataPtr inPtr, + PF_PluginDataCB inPluginDataCallBackPtr, + SPBasicSuite *inSPBasicSuitePtr, + const char *inHostName, + const char *inHostVersion) + { + (void)inSPBasicSuitePtr; + (void)inHostName; + (void)inHostVersion; + + PF_Err result = PF_Err_INVALID_CALLBACK; + + result = PF_REGISTER_EFFECT( + inPtr, // Infos must match the PopcornFXPiPL.r + inPluginDataCallBackPtr, // + "Attribute", // Name + "ADBE PopcornFX Attribute", // Match Name + "PopcornFX", // Category + AE_RESERVED_INFO); // Reserved Info + return result; + } +} + +//---------------------------------------------------------------------------- + +PF_Err EffectMain( PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra) +{ + PF_Err result = PF_Err_NONE; + AAePk::CPluginInterface &AEPlugin = AAePk::CPluginInterface::Instance(); + AAePk::SAAEIOData AAEData{ cmd, in_data, out_data, extra, AEPlugin.GetParametersIndexes() }; + +#if _DEBUG + try + { +#endif + + assert(in_data != nullptr); + assert(out_data != nullptr); + if (in_data == nullptr) + return PF_Err_BAD_CALLBACK_PARAM; + //Force Render + //AAEData.m_OutData->out_flags &= PF_OutFlag_FORCE_RERENDER + + if (AAEData.m_InData->appl_id == 'PrMr') + { + //User Tried to load plugin in Premiere Pro. + //There is surely a better way to handle this. + return PF_Err_UNRECOGNIZED_PARAM_TYPE; + } + + switch (cmd) + { + // Called once + case PF_Cmd_ABOUT: + //Mandatory + //Version and General Infos about the plugin + result = AEPlugin.About(AAEData, params, output); + break; + case PF_Cmd_GLOBAL_SETUP: + //Mandatory + //Startup run + result = AEPlugin.GlobalSetup(AAEData, params, output); + break; + case PF_Cmd_PARAMS_SETUP: + //Mandatory + //Setup AAE UI. + result = AEPlugin.ParamsSetup(AAEData, params, output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + //Mandatory + result = AEPlugin.GlobalSetdown(AAEData, params, output); + break; + // Sequence Handling + //UI thread + case PF_Cmd_SEQUENCE_SETUP: + //Each time the user adds the effect to a layer + result = AEPlugin.SequenceSetup(AAEData, params, output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + //Load or Duplicate + //UI/Render thread + result = AEPlugin.SequenceReSetup(AAEData, params, output); + break; + case PF_Cmd_SEQUENCE_FLATTEN: + //Effect Saved, copied, duplicated.. + //UI/Render thread + result = AEPlugin.SequenceFlatten(AAEData, params, output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + //Effect Deleted + result = AEPlugin.SequenceShutdown(AAEData, params, output); + break; + case PF_Cmd_GET_FLATTENED_SEQUENCE_DATA: + break; + + // Called each Frame + case PF_Cmd_AUDIO_SETUP: + case PF_Cmd_AUDIO_RENDER: + case PF_Cmd_AUDIO_SETDOWN: + break; + case PF_Cmd_FRAME_SETUP: + //Allow resizing of drawing area + break; + case PF_Cmd_SMART_PRE_RENDER: + result = AEPlugin.PreRender(AAEData); + //Can be called several times for one render + break; + case PF_Cmd_SMART_RENDER: + result = AEPlugin.SmartRender(AAEData); + break; + case PF_Cmd_FRAME_SETDOWN: + //Allow resizing of drawing area + break; + + // Messaging + case PF_Cmd_EVENT: + break; + case PF_Cmd_USER_CHANGED_PARAM: + AEPlugin.UpdateParams(AAEData, params); + //If PF_ParamFlag_SUPERVIZE if set when adding param, PF_Cmd_USER_CHANGED_PARAM is called when value change + break; + case PF_Cmd_UPDATE_PARAMS_UI: + result = AEPlugin.UpdateParamsUI(AAEData, params); + break; + case PF_Cmd_ARBITRARY_CALLBACK: + case PF_Cmd_GET_EXTERNAL_DEPENDENCIES: + break; + case PF_Cmd_COMPLETELY_GENERAL: + result = AEPlugin.HandleDataFromAEGP(AAEData, params); + break; + case PF_Cmd_DO_DIALOG: + //Send when user click on Options + //Received if PF_OutFlag_I_DO_DIALOG is set in PF_Cmd_GLOBAL_SETUP + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + break; + default: + break; + } + +#if _DEBUG + } + catch (...) + { + assert(false); + } +#endif + return result; +} diff --git a/AE_Effect_Attribute/Sources/AEAttribute_ParamDefine.cpp b/AE_Effect_Attribute/Sources/AEAttribute_ParamDefine.cpp new file mode 100644 index 00000000..19ba1ce2 --- /dev/null +++ b/AE_Effect_Attribute/Sources/AEAttribute_ParamDefine.cpp @@ -0,0 +1,66 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttribute_ParamDefine.h" + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +struct STableString +{ + A_u_long index; + A_char str[256]; +} ; + +//---------------------------------------------------------------------------- + +STableString g_strs[StrID_NUMTYPES] = +{ + { StrID_NONE, "" }, + { StrID_Name, "Attribute" }, + { StrID_Description, "PopcornFX Plugin." }, + { StrID_Generic_Bool1, "Attribute bool" }, + { StrID_Generic_Bool2, "Attribute bool 2" }, + { StrID_Generic_Bool3, "Attribute bool 3" }, + { StrID_Generic_Bool4, "Attribute bool 4" }, + { StrID_Generic_Int1, "Attribute int" }, + { StrID_Generic_Int2, "Attribute int 2" }, + { StrID_Generic_Int3, "Attribute int 3" }, + { StrID_Generic_Int4, "Attribute int 4" }, + { StrID_Generic_Float1, "Attribute float" }, + { StrID_Generic_Float2, "Attribute float 2" }, + { StrID_Generic_Float3, "Attribute float 3" }, + { StrID_Generic_Float4, "Attribute float 4" }, + { StrID_Generic_Quaternion, "Attribute Quaternion" }, + { StrID_Generic_Infernal_Uuid, "AttributeKey" }, + { StrID_Scale_Checkbox, "Affected by scale" }, + { StrID_Generic_Infernal_Name, "AttributeName" }, + { StrID_Generic_Color_RGB, "RGB" }, + { StrID_Generic_Color_A, "Alpha" }, + { StrID_Parameters_Reset, "" }, + { StrID_Parameters_Reset_Button, "Reset Value" }, +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +//---------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" +{ +#endif + +A_char *GetStringPtr(int strNum) +{ + return AAePk::g_strs[strNum].str; +} + +#ifdef __cplusplus +} +#endif + diff --git a/AE_Effect_Attribute/Sources/AEAttribute_PluginInterface.cpp b/AE_Effect_Attribute/Sources/AEAttribute_PluginInterface.cpp new file mode 100644 index 00000000..a6ac028b --- /dev/null +++ b/AE_Effect_Attribute/Sources/AEAttribute_PluginInterface.cpp @@ -0,0 +1,928 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttribute_PluginInterface.h" +#include "AEAttribute_SequenceData.h" +#include "AEAttribute_ParamDefine.h" + +#include "PopcornFX_UID.h" + +//AE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//AAE Plugin code +#include +#include + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +CPluginInterface *CPluginInterface::m_Instance = nullptr; +uint32_t CPluginInterface::m_AttrUID = 1; + +//---------------------------------------------------------------------------- + +CPluginInterface::CPluginInterface() +{ +} + +//---------------------------------------------------------------------------- + +CPluginInterface::~CPluginInterface() +{ + for (auto& it : m_AttributeData) + { + delete(it.second); + } + m_AttributeData.clear(); +} + +//---------------------------------------------------------------------------- + +CPluginInterface &CPluginInterface::Instance() +{ + if (CPluginInterface::m_Instance == nullptr) + { + m_Instance = new CPluginInterface(); + } + return *m_Instance; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::About( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + suites.ANSICallbacksSuite1()->sprintf(AAEData.m_OutData->return_msg, + "%s v%d.%d.%d\r%s", + STR(StrID_Name), + AEPOPCORNFX_MAJOR_VERSION, + AEPOPCORNFX_MINOR_VERSION, + AEPOPCORNFX_BUG_VERSION, + STR(StrID_Description)); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::GlobalSetup( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + m_MainThreadID = std::this_thread::get_id(); + + AEFX_SuiteScoper popcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + AAEData.m_OutData->my_version = PF_VERSION( AEPOPCORNFX_MAJOR_VERSION, + AEPOPCORNFX_MINOR_VERSION, + AEPOPCORNFX_BUG_VERSION, + AEPOPCORNFX_STAGE_VERSION, + AEPOPCORNFX_BUILD_VERSION); + + //PF_OutFlag_DEEP_COLOR_AWARE -> To support 16bit per chan format. + //PF_OutFlag_I_AM_OBSOLETE -> Do not show in menu. We do not want user to create this effect manually. + //PF_OutFlag_SEND_UPDATE_PARAMS_UI -> To be notified when PF_ParamFlag_SUPERVISE is set on parameters + AAEData.m_OutData->out_flags = PF_OutFlag_DEEP_COLOR_AWARE | PF_OutFlag_I_AM_OBSOLETE | PF_OutFlag_SEND_UPDATE_PARAMS_UI; + //PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS -> To be able to change dynamicly some out_flags. see doc. + //PF_OutFlag2_FLOAT_COLOR_AWARE -> To support 32bit per chan format. Need PF_OutFlag2_SUPPORTS_SMART_RENDER + //PF_OutFlag2_SUPPORTS_SMART_RENDER -> Necessary for new render pipeline. + //PF_OutFlag2_I_USE_3D_CAMERA -> Can query 3D camera information, Not sure if necessery in Attribute or just on Effect. + AAEData.m_OutData->out_flags2 = PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS | PF_OutFlag2_FLOAT_COLOR_AWARE | PF_OutFlag2_SUPPORTS_SMART_RENDER | PF_OutFlag2_I_USE_3D_CAMERA | + PF_OutFlag2_SUPPORTS_THREADED_RENDERING;// | PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWER;; + + suites.UtilitySuite3()->AEGP_RegisterWithAEGP(nullptr, STR(StrID_Name), &m_AAEID); + + return popcornFXSuite->InitializePopcornFXIFN(AAEData); +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::ParamsSetup( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEFX_SuiteScoper popcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + PF_Err result = PF_Err_NONE; + //TMP Used in Macros + PF_InData *in_data = AAEData.m_InData; + PF_ParamDef def; + + m_ParametersIndexes = new int[__Attribute_Parameters_Count]; + for (unsigned int i = 0; i < __Attribute_Parameters_Count; ++i) + m_ParametersIndexes[i] = -1; + m_ParametersIndexes[0] = 0; // First Parameter is reserved to AE + + AddCheckBoxParameter(in_data, STR(StrID_Generic_Bool1), Attribute_Parameters_Bool1); + AddCheckBoxParameter(in_data, STR(StrID_Generic_Bool2), Attribute_Parameters_Bool2); + AddCheckBoxParameter(in_data, STR(StrID_Generic_Bool3), Attribute_Parameters_Bool3); + AddCheckBoxParameter(in_data, STR(StrID_Generic_Bool4), Attribute_Parameters_Bool4); + + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Int1), Attribute_Parameters_Int1, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Int2), Attribute_Parameters_Int2, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Int3), Attribute_Parameters_Int3, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Int4), Attribute_Parameters_Int4, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Float1), Attribute_Parameters_Float1, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Float2), Attribute_Parameters_Float2, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Float3), Attribute_Parameters_Float3, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + AddFloatParameterUnbound(in_data, STR(StrID_Generic_Float4), Attribute_Parameters_Float4, 0.0f, PF_ValueDisplayFlag_NONE | PF_ParamFlag_SUPERVISE | PF_ParamFlag_COLLAPSE_TWIRLY); + + //To do add Quaternion + //PF_ADD_POINT_3D(STR(StrID_Generic_Quaternion), 50, 50, 0, AttributeType_Quaternion) + + AddCheckBoxParameter(in_data, STR(StrID_Generic_Infernal_Uuid), Attribute_Parameters_Infernal_Uuid, false, 0, PF_PUI_INVISIBLE); + + AddCheckBoxParameter(in_data, STR(StrID_Scale_Checkbox), Attribute_Parameters_AffectedByScale, false, PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + + AddCheckBoxParameter(in_data, STR(StrID_Generic_Infernal_Name), Attribute_Parameters_Infernal_Name, false, 0, PF_PUI_INVISIBLE); + + + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR(StrID_Generic_Color_RGB), + (char)(0.0f), + (char)(0.0f), + (char)(0.0f), + Attribute_Parameters_Color_RGB); + m_ParametersIndexes[Attribute_Parameters_Color_RGB] = ++m_CurrentIndex; + + AddPercentParameter(in_data, STR(StrID_Generic_Color_A), Attribute_Parameters_Color_A, 100); + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(STR(StrID_Parameters_Reset), STR(StrID_Parameters_Reset_Button), 0, PF_ParamFlag_SUPERVISE, Attribute_Parameters_Reset); + m_ParametersIndexes[Attribute_Parameters_Reset] = ++m_CurrentIndex; + + AAEData.m_OutData->num_params = __Attribute_Parameters_Count; + + popcornFXSuite->SetParametersIndexes(m_ParametersIndexes, EPKChildPlugins::ATTRIBUTE); + + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::GlobalSetdown( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + + + if (m_ParametersIndexes != nullptr) + delete[] m_ParametersIndexes; + m_ParametersIndexes = nullptr; + for (auto it = m_AttributeData.begin(); it != m_AttributeData.end(); ++it) + { + if (it->second != nullptr) + { + delete (it->second); + it->second = nullptr; + } + } + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + + A_Err result = A_Err_NONE; + SAttributeSequenceDataFlat *sequenceData = nullptr; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Handle sequenceDataHandle = suites.HandleSuite1()->host_new_handle(sizeof(SAttributeSequenceDataFlat)); + + if (!sequenceDataHandle) + return PF_Err_OUT_OF_MEMORY; + sequenceData = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataHandle)); + if (sequenceData != nullptr) + { + AEFX_CLR_STRUCT(*sequenceData); + + sequenceData->m_IsDefault = true; + sequenceData->m_IsFlat = true; + sequenceData->SetUUID(CUUIDGenerator::Get16().data()); + sequenceData->SetName("AttributeName"); + + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + if (result == A_Err_NONE) + sequenceData->SetLayerID(dstID); + + _RegisterAttributeInstancePlugin(AAEData, params, sequenceData, true); + + AAEData.m_OutData->sequence_data = sequenceDataHandle; + suites.HandleSuite1()->host_unlock_handle(sequenceDataHandle); + } + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceReSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err result = PF_Err_NONE; + + if (AAEData.m_InData->sequence_data) + { + PF_Handle sequenceDataFlatHandle = AAEData.m_InData->sequence_data; + SAttributeSequenceDataFlat *sequenceDataFlat = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataFlatHandle)); + + if (sequenceDataFlat) + { + _RegisterAttributeInstancePlugin(AAEData, params, sequenceDataFlat, false); + AAEData.m_OutData->sequence_data = sequenceDataFlatHandle; + + suites.HandleSuite1()->host_unlock_handle(sequenceDataFlatHandle); + } + } + else + { + result = SequenceSetup(AAEData, params, output); + } + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceFlatten(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err result = PF_Err_NONE; + + if (!AAEData.m_InData->sequence_data) + return result; + + PF_Handle sequenceDataHandle = AAEData.m_InData->sequence_data; + SAttributeSequenceDataFlat *sequenceData = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataHandle)); + + if (sequenceData) + { + std::string uuid; + //Check Layer ID to determine if its a duplicate. if so, update LayerID and regenerate UUID + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + if (result == A_Err_NONE) + { + if (sequenceData->m_LayerID != dstID) + { + sequenceData->m_LayerID = dstID; + sequenceData->SetUUID(CUUIDGenerator::Get16().data()); + } + } + _RegisterAttributeInstancePlugin(AAEData, params, sequenceData, false); + + if (GetParamsSequenceUID(AAEData, uuid, m_ParametersIndexes[Attribute_Parameters_Infernal_Uuid]) != A_Err_NONE) + return result; + + if (m_AttributeData.count(uuid) == 0) + return result; + + SAttributeDesc *descriptor = m_AttributeData[uuid]->m_DescAttribute; + + if (descriptor == nullptr) + return result; + + sequenceData->m_IsFlat = true; + sequenceData->SetIsDefaultValue(descriptor->m_IsDefaultValue); + sequenceData->SetName(descriptor->GetAttributePKKey().c_str()); + + AAEData.m_OutData->sequence_data = sequenceDataHandle; + suites.HandleSuite1()->host_unlock_handle(sequenceDataHandle); + } + else + result = PF_Err_INTERNAL_STRUCT_DAMAGED; + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceShutdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + if (AAEData.m_InData->sequence_data != nullptr) + { + PF_Handle sequenceDataHandle = AAEData.m_InData->sequence_data; + suites.HandleSuite1()->host_dispose_handle(sequenceDataHandle); + } + AAEData.m_InData->sequence_data = nullptr; + AAEData.m_OutData->sequence_data = nullptr; + + return PF_Err_NONE; + +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::PreRender(SAAEIOData &AAEData) +{ + PF_RenderRequest req = AAEData.m_ExtraData.m_PreRenderData->input->output_request; + PF_CheckoutResult in_result; + + AE_VERIFY(AAEData.m_ExtraData.m_PreRenderData != nullptr); + AE_VERIFY(AAEData.m_ExtraData.m_PreRenderData->cb != nullptr); + + AAEData.m_ExtraData.m_PreRenderData->cb->checkout_layer(AAEData.m_InData->effect_ref, + ATTRIBUTE_INPUT, + ATTRIBUTE_INPUT, + &req, + AAEData.m_InData->current_time, + AAEData.m_InData->local_time_step, + AAEData.m_InData->time_scale, + &in_result); + + UnionLRect(&in_result.result_rect, &AAEData.m_ExtraData.m_PreRenderData->output->result_rect); + UnionLRect(&in_result.max_result_rect, &AAEData.m_ExtraData.m_PreRenderData->output->max_result_rect); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +void CPluginInterface::UpdateBoolAttribute(SAAEIOData &AAEData, SAttributeDesc *descriptor, bool *uiVisibility) +{ + bool value[4]; + + for (uint32_t i = 0; i < 4; ++i) + { + if (uiVisibility[i + Attribute_Parameters_Bool1]) + { + SAAEScopedParams params{ AAEData, i + Attribute_Parameters_Bool1 }; + + value[i] = params.GetCheckBoxValue(); + } + } + descriptor->SetValue(&value); +} + +//---------------------------------------------------------------------------- + +void CPluginInterface::UpdateIntAttribute(SAAEIOData &AAEData, SAttributeDesc *descriptor, bool *uiVisibility) +{ + int value[4]; + + if (descriptor->m_AttributeSemantic == AttributeSemantic_Color) + { + SAAEScopedParams color{ AAEData, Attribute_Parameters_Color_RGB }; + SAAEScopedParams alpha{ AAEData, Attribute_Parameters_Color_A }; + + A_FloatPoint3 AEColor = color.GetColor(); + + value[0] = (int)AEColor.x * 255; + value[1] = (int)AEColor.y * 255; + value[2] = (int)AEColor.z * 255; + value[3] = (int)alpha.GetPercent() *255; + } + else + { + for (uint32_t i = 0; i < 4; ++i) + { + if (uiVisibility[i + Attribute_Parameters_Int1]) + { + SAAEScopedParams params{ AAEData, i + Attribute_Parameters_Int1 }; + + value[i] = params.GetInt(); + } + } + } + descriptor->SetValue(&value); +} + +//---------------------------------------------------------------------------- + +void CPluginInterface::UpdateFloatAttribute(SAAEIOData &AAEData, SAttributeDesc *descriptor, bool *uiVisibility) +{ + float value[4]; + + if (descriptor->m_AttributeSemantic == AttributeSemantic_Color) + { + SAAEScopedParams color{ AAEData, Attribute_Parameters_Color_RGB }; + SAAEScopedParams alpha{ AAEData, Attribute_Parameters_Color_A }; + + A_FloatPoint3 AEColor = color.GetColor(); + + value[0] = (float)AEColor.x; + value[1] = (float)AEColor.y; + value[2] = (float)AEColor.z; + value[3] = alpha.GetPercent(); + } + else + { + for (uint32_t i = 0; i < 4; ++i) + { + if (uiVisibility[i + Attribute_Parameters_Float1]) + { + SAAEScopedParams params{ AAEData, i + Attribute_Parameters_Float1 }; + value[i] = params.GetFloat(); + } + } + } + descriptor->SetValue(&value); +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SmartRender(SAAEIOData &AAEData) +{ + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_EffectWorld *inputWorld = nullptr; + PF_EffectWorld *outputWorld = nullptr; + PF_Err err = PF_Err_NONE; + + std::string uuid; + + AAEData.m_ExtraData.m_SmartRenderData->cb->checkout_layer_pixels(AAEData.m_InData->effect_ref, ATTRIBUTE_INPUT, &inputWorld); + AAEData.m_ExtraData.m_SmartRenderData->cb->checkout_output(AAEData.m_InData->effect_ref, &outputWorld); + + if (inputWorld == nullptr || outputWorld == nullptr) + return PF_Err_BAD_CALLBACK_PARAM; + outputWorld->data = inputWorld->data; + + if (GetParamsSequenceUID(AAEData, uuid, m_ParametersIndexes[Attribute_Parameters_Infernal_Uuid]) != PF_Err_NONE) + return PF_Err_BAD_CALLBACK_PARAM; + if ( m_AttributeData.count(uuid) == 0) + return err; + + SAttributeDesc *descriptor = m_AttributeData[uuid]->m_DescAttribute; + bool *uiVisibility = m_AttributeData[uuid]->m_UIVisibility; + + if (descriptor != nullptr) + { + switch (descriptor->m_Type) + { + case Attribute_Parameters_Bool1: + case Attribute_Parameters_Bool2: + case Attribute_Parameters_Bool3: + case Attribute_Parameters_Bool4: + UpdateBoolAttribute(AAEData, descriptor, uiVisibility); + break; + case Attribute_Parameters_Int1: + case Attribute_Parameters_Int2: + case Attribute_Parameters_Int3: + case Attribute_Parameters_Int4: + UpdateIntAttribute(AAEData, descriptor, uiVisibility); + break; + case Attribute_Parameters_Float1: + case Attribute_Parameters_Float2: + case Attribute_Parameters_Float3: + case Attribute_Parameters_Float4: + UpdateFloatAttribute(AAEData, descriptor, uiVisibility); + break; + } + { + SAAEScopedParams affectedByScale{ AAEData, Attribute_Parameters_AffectedByScale }; + + descriptor->m_IsAffectedByScale = affectedByScale.GetCheckBoxValue(); + } + } + + AAEData.m_ExtraData.m_SmartRenderData->cb->checkin_layer_pixels(AAEData.m_InData->effect_ref, ATTRIBUTE_INPUT); + + return err; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::UpdateParams(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + (void)AAEData; + (void)params; + + PF_Err result = PF_Err_NONE; +#if 1 + std::string uuid; + + if (GetParamsSequenceUID(AAEData, uuid, m_ParametersIndexes[Attribute_Parameters_Infernal_Uuid]) != A_Err_NONE) + return PF_Err_BAD_CALLBACK_PARAM; + if (m_AttributeData.count(uuid) == 0) + return result; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + SAttributeDesc *descriptor = m_AttributeData[uuid]->m_DescAttribute; + + if (descriptor == nullptr) + return result; + + if (descriptor != nullptr) + { + if (AAEData.m_ExtraData.m_ChangeParamData->param_index == m_ParametersIndexes[Attribute_Parameters_Reset]) + { + descriptor->ResetValues(); + m_AttributeData[uuid]->m_IsDefault = true; + SetDefaultValueIFN(AAEData, params, m_AttributeData[uuid]); + } + } +#endif + return result; +} + +//---------------------------------------------------------------------------- + +bool CPluginInterface::_GetAttributeSequenceUID(SAAEIOData &AAEData, std::string &out) +{ + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEFX_SuiteScoper seqdata_suite = AEFX_SuiteScoper(AAEData.m_InData, kPFEffectSequenceDataSuite, kPFEffectSequenceDataSuiteVersion1, AAEData.m_OutData); + PF_ConstHandle constSeq; + seqdata_suite->PF_GetConstSequenceData(AAEData.m_InData->effect_ref, &constSeq); + + const SAttributeSequenceDataFlat *sequenceDataFlat = static_cast(suites.HandleSuite1()->host_lock_handle((PF_Handle)constSeq)); + + out.clear(); + if (sequenceDataFlat && sequenceDataFlat->m_IsFlat == true) + { + out.append(sequenceDataFlat->m_AttributeUUID, strlen(sequenceDataFlat->m_AttributeUUID)); + suites.HandleSuite1()->host_unlock_handle((PF_Handle)constSeq); + return true; + } + if (sequenceDataFlat) + suites.HandleSuite1()->host_unlock_handle((PF_Handle)constSeq); + return false; +} + +//---------------------------------------------------------------------------- + +bool Debug_IsInterfaceRelevant(EAttributeParameterType current, EAttributeType attribute, EAttributeSemantic semantic) +{ + if (semantic == AttributeSemantic_Color) + { + if (current == Attribute_Parameters_Color_RGB) + return true; + else if (current == Attribute_Parameters_Color_A && + (attribute == AttributeType_Int4 || attribute == AttributeType_Float4)) + return true; + else + return false; + } + if (attribute >= AttributeType_Bool1 && attribute <= AttributeType_Bool4) + { + return (current >= AttributeType_Bool1 && current <= attribute); + } + if (attribute >= AttributeType_Int1 && attribute <= AttributeType_Int4) + { + return (current >= AttributeType_Int1 && current <= attribute); + } + if (attribute >= AttributeType_Float1 && attribute <= AttributeType_Float4) + { + return (current >= AttributeType_Float1 && current <= attribute); + } + return false; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SetDefaultValueIFN(SAAEIOData &AAEData, PF_ParamDef *params[], SAttributeData *AttrData) +{ + (void)params; + + PF_Err err = PF_Err_NONE; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_StreamRefH streamRef = nullptr; + AEGP_EffectRefH effectRef = nullptr; + bool *uiVisibility = AttrData->m_UIVisibility; + SAttributeDesc *desc = AttrData->m_DescAttribute; + + err = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + if (!AE_VERIFY(err == A_Err_NONE)) + return err; + + for (int i = 1; i < __Attribute_Parameters_Count; ++i) // Start at 1, first params is reserved. + { + if (i == Attribute_Parameters_Infernal_Uuid || + i == Attribute_Parameters_AffectedByScale || + i == Attribute_Parameters_Infernal_Name || + i == Attribute_Parameters_Reset) + continue; + err |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AAEID, effectRef, m_ParametersIndexes[i], &streamRef); + if (!AE_VERIFY(err == A_Err_NONE)) + return err; + + if (Debug_IsInterfaceRelevant((EAttributeParameterType)i, desc->m_Type, desc->m_AttributeSemantic) == false) // Disable + { + uiVisibility[i] = false; + } + else // Enable and Update name + { + uiVisibility[i] = true; + } + // Toggle visibility of parameter + err |= suites.DynamicStreamSuite2()->AEGP_SetDynamicStreamFlag(streamRef, AEGP_DynStreamFlag_HIDDEN, FALSE, !uiVisibility[i]); + + // Set Default Value + if (uiVisibility[i] && AttrData->m_IsDefault) + { + AEGP_StreamValue streamValue; + if (i < __AttributeType_Count) + { + AttrData->m_DescAttribute->GetValueAsStreamValue((EAttributeType)i, &streamValue); + err |= suites.StreamSuite2()->AEGP_SetStreamValue(m_AAEID, streamRef, &streamValue); + } + else if (desc->m_AttributeSemantic == AttributeSemantic_Color) + { + float color[4]; + float mult = 1.0f; + + if (desc->m_Type >= AttributeType_Int1 && desc->m_Type <= AttributeType_Int4) + mult = 255.0f; + + AttrData->m_DescAttribute->GetValue(color); + if (i == Attribute_Parameters_Color_RGB) + { + streamValue.val.color.redF = color[0] / mult; + streamValue.val.color.greenF = color[1] / mult; + streamValue.val.color.blueF = color[2] / mult; + err |= suites.StreamSuite2()->AEGP_SetStreamValue(m_AAEID, streamRef, &streamValue); + } + else if (i == Attribute_Parameters_Color_A) + { + streamValue.val.one_d = color[3] * 100.0f / mult; + err |= suites.StreamSuite2()->AEGP_SetStreamValue(m_AAEID, streamRef, &streamValue); + } + } + } + + err |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + streamRef = nullptr; + } + AAEData.m_OutData->out_flags |= PF_OutFlag_REFRESH_UI; + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + + if (!AE_VERIFY(err == A_Err_NONE)) + return err; + return err; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::HandleDataFromAEGP(SAAEIOData &AAEData, + PF_ParamDef *params[]) +{ + PF_Err err = PF_Err_NONE; + void *extraData = AAEData.m_ExtraData.m_UndefinedData; + SAttributeDesc *desc = reinterpret_cast(extraData); + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + if (desc != nullptr) + { + if (desc->m_IsDeleted) + { + std::string uuid; + + if (_GetAttributeSequenceUID(AAEData, uuid) == false) + { + AE_VERIFY(false); + return PF_Err_BAD_CALLBACK_PARAM; + } + if (m_AttributeData.count(uuid) == 0) + return PF_Err_BAD_CALLBACK_PARAM; + + SAttributeData *AttrData = m_AttributeData[uuid]; + + if (AttrData) + { + m_AttributeData.erase(uuid); + + AttrData->m_DescAttribute = nullptr; + delete desc; + delete AttrData; + return PF_Err_NONE; + } + } + else + { + m_AttrUID += 1; + + std::string pkKey; + std::string uuid; + SAttributeData *AttrData = nullptr; + + if (_GetAttributeSequenceUID(AAEData, uuid) == false) + { + AE_VERIFY(false); + return PF_Err_BAD_CALLBACK_PARAM; + } + if (m_AttributeData.count(uuid) == 0) + { + AttrData = new SAttributeData{}; + } + AttrData = m_AttributeData[uuid]; + AttrData->m_DescAttribute = desc; + + pkKey = AttrData->m_DescAttribute->GetAttributePKKey(); + + AttrData->m_DescAttribute->m_IsDefaultValue = AttrData->m_IsDefault; + + err |= SetDefaultValueIFN(AAEData, params, AttrData); + + AEGP_EffectRefH effectRef = nullptr; + + err = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + if (!AE_VERIFY(err == A_Err_NONE)) + return err; + + err |= SetEffectName(AAEData, pkKey, effectRef); + err |= SetParameterStreamName(AAEData, uuid, m_ParametersIndexes[Attribute_Parameters_Infernal_Uuid] , effectRef); + err |= SetParameterStreamName(AAEData, pkKey, m_ParametersIndexes[Attribute_Parameters_Infernal_Name], effectRef); + + params[m_ParametersIndexes[Attribute_Parameters_Infernal_Name]]->ui_flags |= PF_PUI_INVISIBLE; + params[m_ParametersIndexes[Attribute_Parameters_Infernal_Name]]->ui_flags |= PF_PUI_DISABLED; + + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + + AAEData.m_OutData->out_flags |= PF_OutFlag_REFRESH_UI; + effectRef = nullptr; + } + } + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER; + AE_VERIFY(err == A_Err_NONE); + return err; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::UpdateParamsUI(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + std::string uuid; + + if (GetParamsSequenceUID(AAEData, uuid, m_ParametersIndexes[Attribute_Parameters_Infernal_Uuid]) != A_Err_NONE) + return PF_Err_BAD_CALLBACK_PARAM; + if (m_AttributeData.count(uuid) == 0) + return A_Err_NONE; + + PF_Err err = PF_Err_NONE; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + SAttributeDesc *descriptor = m_AttributeData[uuid]->m_DescAttribute; + bool *uiVisibility = m_AttributeData[uuid]->m_UIVisibility; + + if (descriptor == nullptr) + return PF_Err_NONE; + + if (descriptor != nullptr && descriptor->m_IsDeleted) + { + m_AttributeData.erase(uuid); + delete descriptor; + return PF_Err_NONE; + } + PF_ParamDef paramCopy[__Attribute_Parameters_Count]; + + MakeParamCopy(params, paramCopy, __Attribute_Parameters_Count); + for (int i = 1; i < __Attribute_Parameters_Count; ++i) // Start at 1, first params is reserved. + { + if (i == Attribute_Parameters_Infernal_Uuid || + i == Attribute_Parameters_AffectedByScale || + i == Attribute_Parameters_Infernal_Name) + continue; + if (uiVisibility[i] == false) // Disable + { + paramCopy[m_ParametersIndexes[i]].ui_flags |= PF_PUI_DISABLED; + } + else // Enable + { + if ((paramCopy[m_ParametersIndexes[i]].ui_flags & PF_PUI_DISABLED) != 0) + { + paramCopy[m_ParametersIndexes[i]].ui_flags &= ~PF_PUI_DISABLED; + } + //Should set min and max value. + if (paramCopy[m_ParametersIndexes[i]].param_type == PF_Param_FLOAT_SLIDER) + { + float value; + descriptor->GetDefaultValueByType((EAttributeType)i, &value); + paramCopy[m_ParametersIndexes[i]].u.fs_d.dephault = static_cast(value); + + if (descriptor->m_HasMax || descriptor->m_HasMin) + { + if (descriptor->m_HasMin) + { + descriptor->GetMinValueByType((EAttributeType)i, &value); + paramCopy[m_ParametersIndexes[i]].u.fs_d.slider_min = static_cast(value); + } + if (descriptor->m_HasMax) + { + descriptor->GetMaxValueByType((EAttributeType)i, &value); + paramCopy[m_ParametersIndexes[i]].u.fs_d.slider_max = static_cast(value); + } + if ((paramCopy[m_ParametersIndexes[i]].flags & PF_ParamFlag_COLLAPSE_TWIRLY) != 0) + paramCopy[m_ParametersIndexes[i]].flags &= ~PF_ParamFlag_COLLAPSE_TWIRLY; + } + else + { + paramCopy[m_ParametersIndexes[i]].flags |= PF_ParamFlag_COLLAPSE_TWIRLY; + } + + paramCopy[m_ParametersIndexes[i]].uu.change_flags = PF_ChangeFlag_CHANGED_VALUE; + } + } + //Apply Change on param + err |= suites.ParamUtilsSuite3()->PF_UpdateParamUI(AAEData.m_InData->effect_ref, m_ParametersIndexes[i], ¶mCopy[m_ParametersIndexes[i]]); + } + AE_VERIFY(err == A_Err_NONE); + return err; +} + +//---------------------------------------------------------------------------- + +A_Err CPluginInterface::_RegisterAttributeInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SAttributeSequenceDataFlat *sequenceData, bool setup) +{ + (void)params; + + PF_Err err = PF_Err_NONE; + std::string id; + + if (sequenceData != nullptr) + id = sequenceData->m_AttributeUUID; + else if (_GetAttributeSequenceUID(AAEData, id) == false) + return A_Err_NONE; + + if (m_AttributeData.count(id) == 0) + { + SAttributeData *AttrData = new SAttributeData{}; + + if (!AE_VERIFY(AttrData != nullptr)) + return A_Err_ALLOC; + + if (!setup) + { + if (m_MainThreadID == std::this_thread::get_id()) + { + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_EffectRefH effectRef = nullptr; + + err |= suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + + std::string uuid(sequenceData->m_AttributeUUID); + std::string name(sequenceData->m_AttributeName); + err |= SetParameterStreamName(AAEData, uuid, m_ParametersIndexes[Attribute_Parameters_Infernal_Uuid], effectRef); + err |= SetParameterStreamName(AAEData, name, m_ParametersIndexes[Attribute_Parameters_Infernal_Name], effectRef); + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + } + m_AttributeData[id] = AttrData; + } + if (sequenceData != nullptr) + { + m_AttributeData[id]->m_IsDefault = sequenceData->m_IsDefault; + } + return A_Err_NONE;; +} + +//---------------------------------------------------------------------------- + +__AAEPK_END diff --git a/AE_Effect_Attribute/Sources/AEAttribute_SequenceData.cpp b/AE_Effect_Attribute/Sources/AEAttribute_SequenceData.cpp new file mode 100644 index 00000000..3007a780 --- /dev/null +++ b/AE_Effect_Attribute/Sources/AEAttribute_SequenceData.cpp @@ -0,0 +1,59 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttribute_SequenceData.h" + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +void SAttributeSequenceDataFlat::CopyFrom(SAttributeSequenceDataFlat *src) +{ + m_IsFlat = true; + SetUUID(src->m_AttributeUUID); + SetName(src->m_AttributeName); + SetIsDefaultValue(src->m_IsDefault); +} + +//---------------------------------------------------------------------------- + +void SAttributeSequenceDataFlat::SetIsDefaultValue(bool value) +{ + m_IsDefault = value; +} + +//---------------------------------------------------------------------------- + +bool SAttributeSequenceDataFlat::SetUUID(const char *uuid) +{ + m_AttributeUUIDLen = strlen(uuid) + 1; + + strncpy(m_AttributeUUID, uuid, SequenceCST::UUID_LEN); + return true; +} + +//---------------------------------------------------------------------------- + +bool SAttributeSequenceDataFlat::SetName(const char *name) +{ + m_AttributeNameLen = strlen(name) + 1; + + strncpy(m_AttributeName, name, SequenceCST::MAX_NAME_LEN); + return true; +} + +//---------------------------------------------------------------------------- + +bool SAttributeSequenceDataFlat::SetLayerID(bool value) +{ + m_LayerID = value; + return true; +} + +//---------------------------------------------------------------------------- +__AAEPK_END diff --git a/AE_Effect_Attribute/Sources/AE_Effect_Attribute.plugin-Info.plist b/AE_Effect_Attribute/Sources/AE_Effect_Attribute.plugin-Info.plist new file mode 100644 index 00000000..3299ec2f --- /dev/null +++ b/AE_Effect_Attribute/Sources/AE_Effect_Attribute.plugin-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleExecutable + Attribute + CFBundleIdentifier + com.PersistantStudio.PopcornFX.Attribute + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + AE_Effect_Attribute + CFBundlePackageType + eFKT + CFBundleSignature + FXTC + LSRequiresCarbon + + NSAppleScriptEnabled + No + NSHumanReadableCopyright + © PersistantStudio PopcornFX + + diff --git a/AE_Effect_Attribute/Sources/AE_Effect_Attribute_PiPL.r b/AE_Effect_Attribute/Sources/AE_Effect_Attribute_PiPL.r new file mode 100644 index 00000000..0fe45ea0 --- /dev/null +++ b/AE_Effect_Attribute/Sources/AE_Effect_Attribute_PiPL.r @@ -0,0 +1,73 @@ +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include +#endif + + +#ifdef AE_OS_WIN +#include "../../AE_Suites/PopcornFX_Define_Version.h" +#endif +#ifdef AE_OS_MAC +#include "PopcornFX_Define_Version.h" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + "Attribute" + }, + /* [3] */ + Category { + "PopcornFX" + }, +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EffectMain"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMacIntel64 {"EffectMain"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + AEPOPCORNFX_PIPL_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + 0x06200000 + }, + AE_Effect_Global_OutFlags_2 { + 0x08001403 + }, + /* [11] */ + AE_Effect_Match_Name { + "ADBE PopcornFX Attribute" + }, + /* [12] */ + AE_Reserved_Info { + 8 + } + } +}; diff --git a/AE_Effect_AttributeSampler/Include/AEAttributeSampler_Main.h b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_Main.h new file mode 100644 index 00000000..48128c83 --- /dev/null +++ b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_Main.h @@ -0,0 +1,39 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEATTRIBUTESAMPLER_MAIN_H__ +#define __FX_AEATTRIBUTESAMPLER_MAIN_H__ + +#include + +#ifdef AE_OS_WIN + typedef unsigned short PixelType; + #include +#endif + +#include +#include + +#include "PopcornFX_Define.h" + +//---------------------------------------------------------------------------- + +extern "C" { + DllExport + PF_Err + EffectMain( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); + +} + +//---------------------------------------------------------------------------- + +#endif + diff --git a/AE_Effect_AttributeSampler/Include/AEAttributeSampler_ParamDefine.h b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_ParamDefine.h new file mode 100644 index 00000000..f47ca41b --- /dev/null +++ b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_ParamDefine.h @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEATTRIBUTESAMPLER_PARAM_DEFINE_H__ +#define __FX_AEATTRIBUTESAMPLER_PARAM_DEFINE_H__ + +#include +#include + +#include + +__AAEPK_BEGIN + + +//---------------------------------------------------------------------------- + +enum EPKParams +{ + ATTRIBUTESAMPLER_INPUT = 0, + ATTRIBUTESAMPLER_PARAM, + ATTRIBUTESAMPLER_NUM_PARAMS +}; + +//---------------------------------------------------------------------------- + +enum EStrIDType +{ + StrID_NONE = 0, + StrID_Name, + StrID_Description, + StrID_Generic_Infernal_Uuid, + StrID_Generic_Infernal_Name, + StrID_Parameters_Shapes, + StrID_Parameters_Shapes_Combobox, + + StrID_Topic_Shape_Start, + + StrID_Topic_Shape_Box_Start, + StrID_Parameters_Box_Size_X, + StrID_Parameters_Box_Size_Y, + StrID_Parameters_Box_Size_Z, + + StrID_Topic_Shape_Sphere_Start, + StrID_Parameters_Sphere_Radius, + StrID_Parameters_Sphere_InnerRadius, + + StrID_Topic_Shape_Ellipsoid_Start, + StrID_Parameters_Ellipsoid_Radius, + StrID_Parameters_Ellipsoid_InnerRadius, + + StrID_Topic_Shape_Cylinder_Start, + StrID_Parameters_Cylinder_Radius, + StrID_Parameters_Cylinder_Height, + StrID_Parameters_Cylinder_InnerRadius, + + StrID_Topic_Shape_Capsule_Start, + StrID_Parameters_Capsule_Radius, + StrID_Parameters_Capsule_Height, + StrID_Parameters_Capsule_InnerRadius, + + StrID_Topic_Shape_Cone_Start, + StrID_Parameters_Cone_Radius, + StrID_Parameters_Cone_Height, + + StrID_Topic_Shape_Mesh_Start, + StrID_Parameters_Mesh_Scale, + + StrID_Parameters_Mesh_Path, + StrID_Parameters_Mesh_Path_Button, + + StrID_Parameters_Mesh_Bind_Backdrop, + StrID_Parameters_Mesh_Bind_Backdrop_Weight_Enabled, + StrID_Parameters_Mesh_Bind_Backdrop_ColorStreamID, + StrID_Parameters_Mesh_Bind_Backdrop_WeightStreamID, + + StrID_Parameters_Layer_Pick, + + StrID_Parameters_Layer_Sample_Once, + StrID_Parameters_Layer_Sample_Seeking, + + StrID_Parameters_VectorField_Path, + StrID_Parameters_VectorField_Path_Button, + StrID_Parameters_VectorField_Strength, + StrID_Parameters_VectorField_Position, + StrID_Parameters_VectorField_Interpolation, + StrID_Parameters_VectorField_Interpolation_Combobox, + + StrID_Parameters_Layer_Sample_Downsampling_X, + StrID_Parameters_Layer_Sample_Downsampling_Y, + + StrID_NUMTYPES +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +//---------------------------------------------------------------------------- + +bool GetParamsVisibility(int num, AAePk::EAttributeSamplerType type); + +#endif + diff --git a/AE_Effect_AttributeSampler/Include/AEAttributeSampler_PluginInterface.h b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_PluginInterface.h new file mode 100644 index 00000000..9e330073 --- /dev/null +++ b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_PluginInterface.h @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + + +#ifndef __FX_AEATTRIBUTESAMPLER_PLUGIN_INTERFACE_H__ +#define __FX_AEATTRIBUTESAMPLER_PLUGIN_INTERFACE_H__ + + +#include "PopcornFX_Define.h" +#include "PopcornFX_BasePluginInterface.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +struct SAAEIOData; +struct SAttributeSamplerDesc; +struct SAttributeSamplerSequenceDataFlat; + +//---------------------------------------------------------------------------- + +class CPluginInterface : public CBasePluginInterface +{ + struct SAttributeSamplerData + { + //Memory Owned by effect + SAttributeSamplerDesc *m_DescAttribute; + + std::string m_ResourcePath; + bool m_IsDefault; + + SAttributeSamplerData() + : m_DescAttribute(nullptr) + , m_ResourcePath("") + , m_IsDefault(true) + { + } + ~SAttributeSamplerData() + { + m_DescAttribute = nullptr; + } + }; +public: + ~CPluginInterface(); + static CPluginInterface &Instance(); + + PF_Err About(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err GlobalSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err ParamsSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err GlobalSetdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + + PF_Err SequenceSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceReSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceFlatten(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceShutdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + + PF_Err PreRender(SAAEIOData &AAEData); + PF_Err SmartRender(SAAEIOData &AAEData); + PF_Err UpdateParams(SAAEIOData &AAEData, PF_ParamDef *params[]); + PF_Err UpdateParamsUI(SAAEIOData &AAEData, PF_ParamDef *params[]); + + PF_Err HandleDataFromAEGP(SAAEIOData &AAEData, PF_ParamDef *params[]); + +private: + CPluginInterface(); + + PF_Err _UpdateParamsVisibility(SAAEIOData &AAEData, SAttributeSamplerData *AttrData); + + bool _GetAttributeSequenceUID(SAAEIOData &AAEData, std::string &out); + + PF_Err _RegisterAttributeInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SAttributeSamplerSequenceDataFlat *sequenceData, bool setup); + + + void UpdateSamplerGeometry(SAAEIOData &AAEData, SAttributeSamplerDesc *descriptor); + void UpdateSamplerText(SAAEIOData &AAEData, SAttributeSamplerDesc *descriptor); + void UpdateSamplerImage(SAAEIOData &AAEData, SAttributeSamplerDesc *descriptor); + void UpdateSamplerVectorField(SAAEIOData &AAEData, SAttributeSamplerDesc *descriptor); + + static CPluginInterface *m_Instance; + static uint32_t m_AttrUID; + + std::unordered_map m_AttributeData; + + std::thread::id m_MainThreadID; +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif diff --git a/AE_Effect_AttributeSampler/Include/AEAttributeSampler_SequenceData.h b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_SequenceData.h new file mode 100644 index 00000000..7ad1dde2 --- /dev/null +++ b/AE_Effect_AttributeSampler/Include/AEAttributeSampler_SequenceData.h @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEATTRIBUTESAMPLER_SEQUENCEDATA_H__ +#define __AEATTRIBUTESAMPLER_SEQUENCEDATA_H__ + +#include +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +namespace SequenceCST +{ + static const size_t MAX_PATH_LEN = 4096; + static const size_t MAX_NAME_LEN = 100; + static const size_t UUID_LEN = 64; +} + +//---------------------------------------------------------------------------- + +struct SAttributeSamplerSequenceDataFlat +{ + bool m_IsFlat = true; + + char m_AttributeUUID[SequenceCST::UUID_LEN]; + size_t m_AttributeUUIDLen; + + char m_AttributeName[SequenceCST::MAX_NAME_LEN]; + size_t m_AttributeNameLen; + + char m_ResourcePath[SequenceCST::MAX_PATH_LEN]; + size_t m_ResourcePathLen; + + A_long m_LayerID; + + bool SetUUID(const char *uuid); + bool SetName(const char *name); + bool SetResourcePath(const char * path); + bool SetLayerID(A_long id); +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif // !__AAEFFECT_SEQUENCEDATA_H__ + diff --git a/AE_Effect_AttributeSampler/PkgInfo b/AE_Effect_AttributeSampler/PkgInfo new file mode 100644 index 00000000..31cf1f41 --- /dev/null +++ b/AE_Effect_AttributeSampler/PkgInfo @@ -0,0 +1 @@ +eFKTFXTC \ No newline at end of file diff --git a/AE_Effect_AttributeSampler/Precompiled/ae_precompiled.cpp b/AE_Effect_AttributeSampler/Precompiled/ae_precompiled.cpp new file mode 100644 index 00000000..84e52276 --- /dev/null +++ b/AE_Effect_AttributeSampler/Precompiled/ae_precompiled.cpp @@ -0,0 +1 @@ +#include "ae_precompiled.h" diff --git a/AE_Effect_AttributeSampler/Precompiled/ae_precompiled.h b/AE_Effect_AttributeSampler/Precompiled/ae_precompiled.h new file mode 100644 index 00000000..ee643f3d --- /dev/null +++ b/AE_Effect_AttributeSampler/Precompiled/ae_precompiled.h @@ -0,0 +1,8 @@ +#pragma once + +#undef PV_MODULE_NAME +#undef PV_MODULE_SYM +#define PV_MODULE_NAME "AEPlugin" +#define PV_MODULE_SYM AEPlugin + +#include diff --git a/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_Main.cpp b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_Main.cpp new file mode 100644 index 00000000..b4bdd532 --- /dev/null +++ b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_Main.cpp @@ -0,0 +1,170 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttributeSampler_Main.h" + +#include "AEAttributeSampler_PluginInterface.h" +#include "PopcornFX_Suite.h" + +#include + +#include + +//---------------------------------------------------------------------------- + +extern "C" +{ + DllExport PF_Err PluginDataEntryFunction( PF_PluginDataPtr inPtr, + PF_PluginDataCB inPluginDataCallBackPtr, + SPBasicSuite *inSPBasicSuitePtr, + const char *inHostName, + const char *inHostVersion) + { + (void)inSPBasicSuitePtr; + (void)inHostName; + (void)inHostVersion; + + PF_Err result = PF_Err_INVALID_CALLBACK; + + result = PF_REGISTER_EFFECT( + inPtr, // Infos must match the PopcornFXPiPL.r + inPluginDataCallBackPtr, // + "Attribute Sampler", // Name + "ADBE PopcornFX Sampler", // Match Name + "PopcornFX", // Category + AE_RESERVED_INFO); // Reserved Info + return result; + } +} + +//---------------------------------------------------------------------------- + +PF_Err EffectMain( PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra) +{ + PF_Err result = PF_Err_NONE; + AAePk::CPluginInterface &AEPlugin = AAePk::CPluginInterface::Instance(); + AAePk::SAAEIOData AAEData{ cmd, in_data, out_data, extra, AEPlugin.GetParametersIndexes() }; + +#if _DEBUG + try + { +#endif + + assert(in_data != nullptr); + assert(out_data != nullptr); + if (in_data == nullptr) + return PF_Err_BAD_CALLBACK_PARAM; + + if (AAEData.m_InData->appl_id == 'PrMr') + { + //User Tried to load plugin in Premiere Pro. + //There is surely a better way to handle this. + return PF_Err_UNRECOGNIZED_PARAM_TYPE; + } + + switch (cmd) + { + // Called once + case PF_Cmd_ABOUT: + //Mandatory + //Version and General Infos about the plugin + result = AEPlugin.About(AAEData, params, output); + break; + case PF_Cmd_GLOBAL_SETUP: + //Mandatory + //Startup run + result = AEPlugin.GlobalSetup(AAEData, params, output); + break; + case PF_Cmd_PARAMS_SETUP: + //Mandatory + //Setup AAE UI. + result = AEPlugin.ParamsSetup(AAEData, params, output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + //Mandatory + result = AEPlugin.GlobalSetdown(AAEData, params, output); + break; + // Sequence Handling + //UI thread + case PF_Cmd_SEQUENCE_SETUP: + //Each time the user adds the effect to a layer + result = AEPlugin.SequenceSetup(AAEData, params, output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + //Load or Duplicate + result = AEPlugin.SequenceReSetup(AAEData, params, output); + break; + //UI thread + case PF_Cmd_SEQUENCE_FLATTEN: + //Effect Saved, copied, duplicated.. + result = AEPlugin.SequenceFlatten(AAEData, params, output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + //Effect Deleted + result = AEPlugin.SequenceShutdown(AAEData, params, output); + break; + case PF_Cmd_GET_FLATTENED_SEQUENCE_DATA: + break; + // Called each Frame + case PF_Cmd_AUDIO_SETUP: + case PF_Cmd_AUDIO_RENDER: + case PF_Cmd_AUDIO_SETDOWN: + break; + case PF_Cmd_FRAME_SETUP: + //Allow resizing of drawing area + break; + case PF_Cmd_SMART_PRE_RENDER: + result = AEPlugin.PreRender(AAEData); + //Can be called several times for one render + break; + case PF_Cmd_SMART_RENDER: + result = AEPlugin.SmartRender(AAEData); + break; + case PF_Cmd_FRAME_SETDOWN: + //Allow resizing of drawing area + break; + // Messaging + case PF_Cmd_EVENT: + break; + case PF_Cmd_USER_CHANGED_PARAM: + AEPlugin.UpdateParams(AAEData, params); + //If PF_ParamFlag_SUPERVIZE if set when adding param, PF_Cmd_USER_CHANGED_PARAM is called when value change + break; + case PF_Cmd_UPDATE_PARAMS_UI: + result = AEPlugin.UpdateParamsUI(AAEData, params); + break; + case PF_Cmd_ARBITRARY_CALLBACK: + case PF_Cmd_GET_EXTERNAL_DEPENDENCIES: + break; + case PF_Cmd_COMPLETELY_GENERAL: + result = AEPlugin.HandleDataFromAEGP(AAEData, params); + break; + case PF_Cmd_DO_DIALOG: + //Send when user click on Options + //Received if PF_OutFlag_I_DO_DIALOG is set in PF_Cmd_GLOBAL_SETUP + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + break; + default: + break; + } + +#if _DEBUG + } + catch (...) + { + assert(false); + } +#endif + return result; +} + +//---------------------------------------------------------------------------- + diff --git a/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_ParamDefine.cpp b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_ParamDefine.cpp new file mode 100644 index 00000000..2c3b9e3f --- /dev/null +++ b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_ParamDefine.cpp @@ -0,0 +1,169 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttributeSampler_ParamDefine.h" + +#include "PopcornFX_Suite.h" + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +struct STableString +{ + A_u_long index; + A_char str[256]; +} ; + +//---------------------------------------------------------------------------- + +STableString g_strs[StrID_NUMTYPES] = +{ + { StrID_NONE, "" }, + { StrID_Name, "Attribute Sampler" }, + { StrID_Description, "PopcornFX Plugin." }, + { StrID_Generic_Infernal_Uuid, "AttributeKey" }, + { StrID_Generic_Infernal_Name, "AttributeSamplerName" }, + { StrID_Parameters_Shapes, "Geometry" }, + { StrID_Parameters_Shapes_Combobox, "Box|Sphere|Ellipsoid|Cylinder|Capsule|Cone|Mesh" }, + { StrID_Topic_Shape_Start, "Shapes Properties" }, + { StrID_Topic_Shape_Box_Start, "Box" }, + { StrID_Parameters_Box_Size_X, "Width" }, + { StrID_Parameters_Box_Size_Y, "Height" }, + { StrID_Parameters_Box_Size_Z, "Depth" }, + { StrID_Topic_Shape_Sphere_Start, "Sphere" }, + { StrID_Parameters_Sphere_Radius, "Radius" }, + { StrID_Parameters_Sphere_InnerRadius, "Inner Radius" }, + { StrID_Topic_Shape_Ellipsoid_Start, "Complex Ellipsoid" }, + { StrID_Parameters_Ellipsoid_Radius, "Radius" }, + { StrID_Parameters_Ellipsoid_InnerRadius, "Inner Radius" }, + { StrID_Topic_Shape_Cylinder_Start, "Cylinder" }, + { StrID_Parameters_Cylinder_Radius, "Radius" }, + { StrID_Parameters_Cylinder_Height, "Height" }, + { StrID_Parameters_Cylinder_InnerRadius, "Inner Radius" }, + { StrID_Topic_Shape_Capsule_Start, "Capsule" }, + { StrID_Parameters_Capsule_Radius, "Radius" }, + { StrID_Parameters_Capsule_Height, "Height" }, + { StrID_Parameters_Capsule_InnerRadius, "Inner Radius" }, + { StrID_Topic_Shape_Cone_Start, "Cone" }, + { StrID_Parameters_Cone_Radius, "Radius" }, + { StrID_Parameters_Cone_Height, "Height" }, + { StrID_Topic_Shape_Mesh_Start, "Mesh" }, + { StrID_Parameters_Mesh_Scale, "Scale" }, + { StrID_Parameters_Mesh_Path, "Mesh Path" }, + { StrID_Parameters_Mesh_Path_Button, "Browse" }, + { StrID_Parameters_Mesh_Bind_Backdrop, "Bind to Backdrop" }, + { StrID_Parameters_Mesh_Bind_Backdrop_Weight_Enabled, "Weight Sampling" }, + { StrID_Parameters_Mesh_Bind_Backdrop_ColorStreamID, "Color Stream ID" }, + { StrID_Parameters_Mesh_Bind_Backdrop_WeightStreamID, "Weight Stream ID" }, + { StrID_Parameters_Layer_Pick, "Layer" }, + { StrID_Parameters_Layer_Sample_Once, "Sample once" }, + { StrID_Parameters_Layer_Sample_Seeking, "Sample while seeking" }, + { StrID_Parameters_VectorField_Path, "VectorField Path" }, + { StrID_Parameters_VectorField_Path_Button, "Browse" }, + { StrID_Parameters_VectorField_Strength, "Strength" }, + { StrID_Parameters_VectorField_Position, "Position" }, + { StrID_Parameters_VectorField_Interpolation, "Interpolation Type" }, + { StrID_Parameters_VectorField_Interpolation_Combobox, "Point|Trilinear|Quadrilinear" }, + { StrID_Parameters_Layer_Sample_Downsampling_X, "Downsample X" }, + { StrID_Parameters_Layer_Sample_Downsampling_Y, "Downsample Y" }, +}; + +//---------------------------------------------------------------------------- + +struct STableVisibility +{ + A_u_long index; + bool visibility[__AttributeSamplerType_Count]; +}; + +//---------------------------------------------------------------------------- + +STableVisibility g_attributeSamplerParamVisibility[__AttributeSamplerType_Parameters_Count] = +{ + // None , AT , Audio, Curve, Event, Geom , Img , ImgAT, Text , Vector + { 0,/*Padding*/ { false, false, false, false, false, false, false, false, false, false } },/*Padding*/ + { AttributeSamplerType_Parameters_Infernal_Uuid, { false, false, false, false, false, false, false, false, false, false } }, + { AttributeSamplerType_Parameters_Infernal_Name, { false, false, false, false, false, false, false, false, false, false } }, + { AttributeSamplerType_Parameters_Shapes, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Box_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Box_Size_X, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Box_Size_Y, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Box_Size_Z, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Box_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Sphere_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Sphere_Radius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Sphere_InnerRadius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Sphere_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Ellipsoid_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Ellipsoid_Radius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Ellipsoid_InnerRadius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Ellipsoid_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Cylinder_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Cylinder_Radius, { false, false, false, false, false, TRUE, false, false, false, false } }, + // None , AT , Audio, Curve, Event, Geom , Img , ImgAT, Text , Vector + { AttributeSamplerType_Parameters_Cylinder_Height, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Cylinder_InnerRadius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Cylinder_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Capsule_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Capsule_Radius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Capsule_Height, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Capsule_InnerRadius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Capsule_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Cone_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Cone_Radius, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Cone_Height, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Cone_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Mesh_Start, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Mesh_Scale, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Mesh_Path, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Mesh_Bind_Backdrop, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_Weighted_Enabled, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_ColorStreamID, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_WeightStreamID, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_Mesh_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + { AttributeSamplerType_Topic_Shape_End, { false, false, false, false, false, TRUE, false, false, false, false } }, + // None , AT , Audio, Curve, Event, Geom , Img , ImgAT, Text , Vector + { AttributeSamplerType_Layer_Pick, { false, false, TRUE, false, false, false, TRUE, false, TRUE, false } }, + { AttributeSamplerType_Layer_Sample_Once, { false, false, false, false, false, false, TRUE, false, TRUE, false } }, + { AttributeSamplerType_Layer_Sample_Seeking, { false, false, TRUE, false, false, false, TRUE, false, TRUE, false } }, + + { AttributeSamplerType_Parameters_VectorField_Path, { false, false, false, false, false, false, false, false, false, TRUE } }, + { AttributeSamplerType_Parameters_VectorField_Strength, { false, false, false, false, false, false, false, false, false, TRUE } }, + { AttributeSamplerType_Parameters_VectorField_Position, { false, false, false, false, false, false, false, false, false, TRUE } }, + { AttributeSamplerType_Parameters_VectorField_Interpolation, { false, false, false, false, false, false, false, false, false, TRUE } }, + + { AttributeSamplerType_Layer_Sample_Downsampling_X, { false, false, false, false, false, false, TRUE, false, false, false } }, + { AttributeSamplerType_Layer_Sample_Downsampling_Y, { false, false, false, false, false, false, TRUE, false, false, false } }, + // None , AT , Audio, Curve, Event, Geom , Img , ImgAT, Text , Vector +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +//---------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" +{ +#endif + +A_char *GetStringPtr(int strNum) +{ + return AAePk::g_strs[strNum].str; +} + +#ifdef __cplusplus +} +#endif + +//---------------------------------------------------------------------------- + +bool GetParamsVisibility(int num, AAePk::EAttributeSamplerType type) +{ + return AAePk::g_attributeSamplerParamVisibility[num].visibility[type]; +} diff --git a/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_PluginInterface.cpp b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_PluginInterface.cpp new file mode 100644 index 00000000..7a85032b --- /dev/null +++ b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_PluginInterface.cpp @@ -0,0 +1,780 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttributeSampler_PluginInterface.h" +#include "AEAttributeSampler_SequenceData.h" +#include "AEAttributeSampler_ParamDefine.h" + +#include "PopcornFX_UID.h" + +//AE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//AAE Plugin code +#include +#include + +#include +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +CPluginInterface *CPluginInterface::m_Instance = nullptr; +uint32_t CPluginInterface::m_AttrUID = 1; + +//---------------------------------------------------------------------------- + +CPluginInterface::CPluginInterface() +{ +} + +//---------------------------------------------------------------------------- + +CPluginInterface::~CPluginInterface() +{ + for (auto& it : m_AttributeData) + { + delete(it.second); + } + m_AttributeData.clear(); +} + +//---------------------------------------------------------------------------- + +CPluginInterface &CPluginInterface::Instance() +{ + if (CPluginInterface::m_Instance == nullptr) + { + m_Instance = new CPluginInterface(); + } + return *m_Instance; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::About( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + suites.ANSICallbacksSuite1()->sprintf(AAEData.m_OutData->return_msg, + "%s v%d.%d.%d\r%s", + STR(StrID_Name), + AEPOPCORNFX_MAJOR_VERSION, + AEPOPCORNFX_MINOR_VERSION, + AEPOPCORNFX_BUG_VERSION, + STR(StrID_Description)); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::GlobalSetup( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + m_MainThreadID = std::this_thread::get_id(); + + AEFX_SuiteScoper popcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + AAEData.m_OutData->my_version = PF_VERSION( AEPOPCORNFX_MAJOR_VERSION, + AEPOPCORNFX_MINOR_VERSION, + AEPOPCORNFX_BUG_VERSION, + AEPOPCORNFX_STAGE_VERSION, + AEPOPCORNFX_BUILD_VERSION); + + //PF_OutFlag_DEEP_COLOR_AWARE -> To support 16bit per chan format. + //PF_OutFlag_I_AM_OBSOLETE -> Do not show in menu. We do not want user to create this effect manually. + //PF_OutFlag_SEND_UPDATE_PARAMS_UI -> To be notified when PF_ParamFlag_SUPERVISE is set on parameters + AAEData.m_OutData->out_flags = PF_OutFlag_DEEP_COLOR_AWARE | + PF_OutFlag_I_AM_OBSOLETE | + PF_OutFlag_SEND_UPDATE_PARAMS_UI; + //PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS -> To be able to change dynamicly some out_flags. see doc. + //PF_OutFlag2_FLOAT_COLOR_AWARE -> To support 32bit per chan format. Need PF_OutFlag2_SUPPORTS_SMART_RENDER + //PF_OutFlag2_SUPPORTS_SMART_RENDER -> Necessary for new render pipeline. + //PF_OutFlag2_I_USE_3D_CAMERA -> Can query 3D camera information, Not sure if necessery in Attribute or just on Effect. + AAEData.m_OutData->out_flags2 = PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS | + PF_OutFlag2_FLOAT_COLOR_AWARE | + PF_OutFlag2_SUPPORTS_SMART_RENDER | + PF_OutFlag2_I_USE_3D_CAMERA | + PF_OutFlag2_SUPPORTS_THREADED_RENDERING; + + suites.UtilitySuite3()->AEGP_RegisterWithAEGP(nullptr, STR(StrID_Name), &m_AAEID); + + return popcornFXSuite->InitializePopcornFXIFN(AAEData); +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::ParamsSetup( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEFX_SuiteScoper popcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + PF_Err result = PF_Err_NONE; + PF_InData *in_data = AAEData.m_InData; //Used in AE Macros + PF_ParamDef def; + float minFloat = -100000.0f; //std::numeric_limits::min() crashes AfterFX, smashing his stack to pieces. + float maxFloat = 100000.0f; //same as above. + + m_ParametersIndexes = new int[__AttributeSamplerType_Parameters_Count]; + for (unsigned int i = 0; i < __AttributeSamplerType_Parameters_Count; ++i) + m_ParametersIndexes[i] = -1; + m_ParametersIndexes[0] = 0; // First Parameter is reserved to AE + + CBasePluginInterface::AddCheckBoxParameter(in_data, GetStringPtr(StrID_Generic_Infernal_Uuid), AttributeSamplerType_Parameters_Infernal_Uuid); + CBasePluginInterface::AddCheckBoxParameter(in_data, GetStringPtr(StrID_Generic_Infernal_Name), AttributeSamplerType_Parameters_Infernal_Name, false, 0, PF_PUI_INVISIBLE); + + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_INTERP; + PF_ADD_POPUP( GetStringPtr(StrID_Parameters_Shapes), + __SamplerShapeType_Count, + SamplerShapeType_Box, + GetStringPtr(StrID_Parameters_Shapes_Combobox), + AttributeSamplerType_Parameters_Shapes); + m_ParametersIndexes[AttributeSamplerType_Parameters_Shapes] = ++m_CurrentIndex; + + CBasePluginInterface::StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Start), AttributeSamplerType_Topic_Shape_Start); + { + CBasePluginInterface::StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Box_Start), AttributeSamplerType_Topic_Shape_Box_Start); + { + CBasePluginInterface::AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Box_Size_X), AttributeSamplerType_Parameters_Box_Size_X, 0.5f); + CBasePluginInterface::AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Box_Size_Y), AttributeSamplerType_Parameters_Box_Size_Y, 0.5f); + CBasePluginInterface::AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Box_Size_Z), AttributeSamplerType_Parameters_Box_Size_Z, 0.5f); + } + CBasePluginInterface::EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_Box_End); + + StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Sphere_Start), AttributeSamplerType_Topic_Shape_Sphere_Start); + { + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Sphere_Radius), AttributeSamplerType_Parameters_Sphere_Radius, 1.0f); + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Sphere_InnerRadius), AttributeSamplerType_Parameters_Sphere_InnerRadius, 0.0f); + } + EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_Sphere_End); + + StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Ellipsoid_Start), AttributeSamplerType_Topic_Shape_Ellipsoid_Start); + { + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Ellipsoid_Radius), AttributeSamplerType_Parameters_Ellipsoid_Radius, 1.0f); + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Ellipsoid_InnerRadius), AttributeSamplerType_Parameters_Ellipsoid_InnerRadius, 0.0f); + } + EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_Ellipsoid_End); + + StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Cylinder_Start), AttributeSamplerType_Topic_Shape_Cylinder_Start); + { + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Cylinder_Radius), AttributeSamplerType_Parameters_Cylinder_Radius, 1.0f); + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Cylinder_Height), AttributeSamplerType_Parameters_Cylinder_Height, 0.5f); + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Cylinder_InnerRadius), AttributeSamplerType_Parameters_Cylinder_InnerRadius, 0.0f); + } + EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_Cylinder_End); + + StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Capsule_Start), AttributeSamplerType_Topic_Shape_Capsule_Start); + { + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Capsule_Radius), AttributeSamplerType_Parameters_Capsule_Radius, 1.0f); + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Capsule_Height), AttributeSamplerType_Parameters_Capsule_Height, 0.5f); + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Capsule_InnerRadius), AttributeSamplerType_Parameters_Capsule_InnerRadius, 0.0f); + } + EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_Capsule_End); + + StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Cone_Start), AttributeSamplerType_Topic_Shape_Cone_Start); + { + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Cone_Radius), AttributeSamplerType_Parameters_Cone_Radius, 1.0f); + AddFloatParameterUnbound(in_data, GetStringPtr(StrID_Parameters_Cone_Height), AttributeSamplerType_Parameters_Cone_Height, 0.5f); + } + EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_Cone_End); + + StartParameterCategory(in_data, GetStringPtr(StrID_Topic_Shape_Mesh_Start), AttributeSamplerType_Topic_Shape_Mesh_Start); + { + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDERX(GetStringPtr(StrID_Parameters_Mesh_Scale), minFloat, maxFloat, minFloat, maxFloat, 1.0f/*default*/, 6, 0, 0, AttributeSamplerType_Parameters_Mesh_Scale); + m_ParametersIndexes[AttributeSamplerType_Parameters_Mesh_Scale] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetStringPtr(StrID_Parameters_Mesh_Path), GetStringPtr(StrID_Parameters_Mesh_Path_Button), 0, PF_ParamFlag_SUPERVISE, AttributeSamplerType_Parameters_Mesh_Path); + m_ParametersIndexes[AttributeSamplerType_Parameters_Mesh_Path] = ++m_CurrentIndex; + + AddCheckBoxParameter(in_data, GetStringPtr(StrID_Parameters_Mesh_Bind_Backdrop), AttributeSamplerType_Parameters_Mesh_Bind_Backdrop); + + AddCheckBoxParameter(in_data, GetStringPtr(StrID_Parameters_Mesh_Bind_Backdrop_Weight_Enabled), AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_Weighted_Enabled); + + AddIntParameter(in_data, GetStringPtr(StrID_Parameters_Mesh_Bind_Backdrop_ColorStreamID), AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_ColorStreamID, 0, 0, 100); + AddIntParameter(in_data, GetStringPtr(StrID_Parameters_Mesh_Bind_Backdrop_WeightStreamID), AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_WeightStreamID, 0, 0, 100); + + } + EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_Mesh_End); + } + EndParameterCategory(in_data, AttributeSamplerType_Topic_Shape_End); + + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE; + PF_ADD_LAYER(GetStringPtr(StrID_Parameters_Layer_Pick), PF_LayerDefault_NONE, AttributeSamplerType_Layer_Pick); + m_ParametersIndexes[AttributeSamplerType_Layer_Pick] = ++m_CurrentIndex; + + AddCheckBoxParameter(in_data, GetStringPtr(StrID_Parameters_Layer_Sample_Once), AttributeSamplerType_Layer_Sample_Once); + + AddCheckBoxParameter(in_data, GetStringPtr(StrID_Parameters_Layer_Sample_Seeking), AttributeSamplerType_Layer_Sample_Seeking); + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetStringPtr(StrID_Parameters_VectorField_Path), GetStringPtr(StrID_Parameters_Mesh_Path_Button), 0, PF_ParamFlag_SUPERVISE, AttributeSamplerType_Parameters_VectorField_Path); + m_ParametersIndexes[AttributeSamplerType_Parameters_VectorField_Path] = ++m_CurrentIndex; + + AddFloatParameter(in_data, GetStringPtr(StrID_Parameters_VectorField_Strength), AttributeSamplerType_Parameters_VectorField_Strength, 0.1f, 0.0f, 10.0f); + + AEFX_CLR_STRUCT(def); + def.ui_flags = PF_PUI_INVISIBLE; + def.param_type = PF_Param_POINT_3D; + PF_STRCPY(def.name, (GetStringPtr(StrID_Parameters_VectorField_Position))); + def.u.point3d_d.x_value = def.u.point3d_d.x_dephault = 0; + def.u.point3d_d.y_value = def.u.point3d_d.y_dephault = 0; + def.u.point3d_d.z_value = def.u.point3d_d.z_dephault = 0; + def.uu.id = (AttributeSamplerType_Parameters_VectorField_Position); + PF_ADD_PARAM(in_data, -1, &def); + m_ParametersIndexes[AttributeSamplerType_Parameters_VectorField_Position] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + //def.ui_flags = PF_PUI_STD_CONTROL_ONLY; + PF_ADD_POPUP(GetStringPtr(StrID_Parameters_VectorField_Interpolation), + __EInterpolationType_Count, + EInterpolationType_Point, + GetStringPtr(StrID_Parameters_VectorField_Interpolation_Combobox), + AttributeSamplerType_Parameters_VectorField_Interpolation); + m_ParametersIndexes[AttributeSamplerType_Parameters_VectorField_Interpolation] = ++m_CurrentIndex; + + AddFloatParameter(in_data, GetStringPtr(StrID_Parameters_Layer_Sample_Downsampling_X), AttributeSamplerType_Layer_Sample_Downsampling_X, 1.0f, 1.0f, 100.0f); + AddFloatParameter(in_data, GetStringPtr(StrID_Parameters_Layer_Sample_Downsampling_Y), AttributeSamplerType_Layer_Sample_Downsampling_Y, 1.0f, 1.0f, 100.0f); + + AAEData.m_OutData->num_params = __AttributeSamplerType_Parameters_Count; + + popcornFXSuite->SetParametersIndexes(m_ParametersIndexes, EPKChildPlugins::SAMPLER); + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::GlobalSetdown( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + + if (m_ParametersIndexes != nullptr) + delete[] m_ParametersIndexes; + m_ParametersIndexes = nullptr; + + for (auto it = m_AttributeData.begin(); it != m_AttributeData.end(); ++it) + { + if (it->second != nullptr) + { + delete (it->second); + it->second = nullptr; + } + } + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + + A_Err result = A_Err_NONE; + SAttributeSamplerSequenceDataFlat *sequenceData = nullptr; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Handle sequenceDataHandle = suites.HandleSuite1()->host_new_handle(sizeof(SAttributeSamplerSequenceDataFlat)); + + if (!sequenceDataHandle) + return PF_Err_OUT_OF_MEMORY; + sequenceData = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataHandle)); + if (sequenceData != nullptr) + { + AEFX_CLR_STRUCT(*sequenceData); + + sequenceData->m_IsFlat = true; + + sequenceData->SetUUID(CUUIDGenerator::Get16().data()); + sequenceData->SetName("AttributeSamplerName"); + sequenceData->SetResourcePath(""); + + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + if (result == A_Err_NONE) + sequenceData->SetLayerID(dstID); + + _RegisterAttributeInstancePlugin(AAEData, params, sequenceData, true); + + AAEData.m_OutData->sequence_data = sequenceDataHandle; + suites.HandleSuite1()->host_unlock_handle(sequenceDataHandle); + } + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceReSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err result = PF_Err_NONE; + + if (AAEData.m_InData->sequence_data) + { + PF_Handle sequenceDataFlatHandle = AAEData.m_InData->sequence_data; + SAttributeSamplerSequenceDataFlat *sequenceDataFlat = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataFlatHandle)); + + if (sequenceDataFlat) + { + _RegisterAttributeInstancePlugin(AAEData, params, sequenceDataFlat, false); + AAEData.m_OutData->sequence_data = sequenceDataFlatHandle; + + suites.HandleSuite1()->host_unlock_handle(sequenceDataFlatHandle); + } + } + else + { + result = SequenceSetup(AAEData, params, output); + } + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceFlatten(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err result = PF_Err_NONE; + + if (!AAEData.m_InData->sequence_data) + return result; + + PF_Handle sequenceDataHandle = AAEData.m_InData->sequence_data; + SAttributeSamplerSequenceDataFlat *sequenceData = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataHandle)); + + if (sequenceData) + { + std::string uuid; + //Check Layer ID to determine if its a duplicate. if so, update LayerID and regenerate UUID + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + if (result == A_Err_NONE) + { + if (sequenceData->m_LayerID != dstID) + { + sequenceData->m_LayerID = dstID; + sequenceData->SetUUID(CUUIDGenerator::Get16().data()); + } + } + _RegisterAttributeInstancePlugin(AAEData, params, sequenceData, false); + + if (GetParamsSequenceUID(AAEData, uuid, m_ParametersIndexes[AttributeSamplerType_Parameters_Infernal_Uuid]) != PF_Err_NONE) + return result; + + if (m_AttributeData.count(uuid) == 0) + return result; + + SAttributeSamplerDesc *descriptor = m_AttributeData[uuid]->m_DescAttribute; + + if (descriptor == nullptr) + return result; + + sequenceData->m_IsFlat = true; + sequenceData->SetName(descriptor->GetAttributePKKey().c_str()); + sequenceData->SetResourcePath(descriptor->m_ResourcePath.c_str()); + + AAEData.m_OutData->sequence_data = sequenceDataHandle; + suites.HandleSuite1()->host_unlock_handle(sequenceDataHandle); + } + else + result = PF_Err_INTERNAL_STRUCT_DAMAGED; + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceShutdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + if (AAEData.m_InData->sequence_data != nullptr) + { + PF_Handle sequenceDataHandle = AAEData.m_InData->sequence_data; + suites.HandleSuite1()->host_dispose_handle(sequenceDataHandle); + } + AAEData.m_InData->sequence_data = nullptr; + AAEData.m_OutData->sequence_data = nullptr; + + return PF_Err_NONE; + +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::PreRender(SAAEIOData &AAEData) +{ + PF_RenderRequest req = AAEData.m_ExtraData.m_PreRenderData->input->output_request; + PF_CheckoutResult in_result; + + AE_VERIFY(AAEData.m_ExtraData.m_PreRenderData != nullptr); + AE_VERIFY(AAEData.m_ExtraData.m_PreRenderData->cb != nullptr); + + AAEData.m_ExtraData.m_PreRenderData->cb->checkout_layer(AAEData.m_InData->effect_ref, + ATTRIBUTESAMPLER_INPUT, + ATTRIBUTESAMPLER_INPUT, + &req, + AAEData.m_InData->current_time, + AAEData.m_InData->local_time_step, + AAEData.m_InData->time_scale, + &in_result); + + UnionLRect(&in_result.result_rect, &AAEData.m_ExtraData.m_PreRenderData->output->result_rect); + UnionLRect(&in_result.max_result_rect, &AAEData.m_ExtraData.m_PreRenderData->output->max_result_rect); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SmartRender(SAAEIOData &AAEData) +{ + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_EffectWorld *inputWorld = nullptr; + PF_EffectWorld *outputWorld = nullptr; + PF_Err err = PF_Err_NONE; + + std::string uuid; + + AAEData.m_ExtraData.m_SmartRenderData->cb->checkout_layer_pixels(AAEData.m_InData->effect_ref, ATTRIBUTESAMPLER_INPUT, &inputWorld); + AAEData.m_ExtraData.m_SmartRenderData->cb->checkout_output(AAEData.m_InData->effect_ref, &outputWorld); + + if (inputWorld == nullptr || outputWorld == nullptr) + { + return PF_Err_BAD_CALLBACK_PARAM; + } + outputWorld->data = inputWorld->data; + + AAEData.m_ExtraData.m_SmartRenderData->cb->checkin_layer_pixels(AAEData.m_InData->effect_ref, ATTRIBUTESAMPLER_INPUT); + + return err; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::UpdateParams(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + (void)AAEData; + (void)params; + + PF_Err result = PF_Err_NONE; + std::string uuid; + + if (AAEData.m_InData->appl_id == 'PrMr') + return result; + + if (_GetAttributeSequenceUID(AAEData, uuid) == false) + return PF_Err_BAD_CALLBACK_PARAM; + if (m_AttributeData.count(uuid) == 0) + return result; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + SAttributeSamplerDesc *descriptor = m_AttributeData[uuid]->m_DescAttribute; + + if (descriptor == nullptr) + return result; + + if (descriptor != nullptr) + { + if (m_ParametersIndexes[AttributeSamplerType_Parameters_Mesh_Path] == (AAEData.m_ExtraData.m_ChangeParamData->param_index) || + m_ParametersIndexes[AttributeSamplerType_Parameters_VectorField_Path] == (AAEData.m_ExtraData.m_ChangeParamData->param_index)) + { + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper(AAEData.m_InData, kPopcornFXSuite1, kPopcornFXSuiteVersion1, AAEData.m_OutData, "PopcornFX suite was not found."); + result |= PopcornFXSuite->Display_AttributeSampler_BrowseMeshDialog(AAEData, descriptor); + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER; + } + else if (m_ParametersIndexes[AttributeSamplerType_Layer_Pick] == (AAEData.m_ExtraData.m_ChangeParamData->param_index)) + { + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER; + } + } + return result; +} + +//---------------------------------------------------------------------------- + +bool CPluginInterface::_GetAttributeSequenceUID(SAAEIOData &AAEData, std::string &out) +{ + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Handle sequenceDataHandle = AAEData.m_InData->sequence_data; + SAttributeSamplerSequenceDataFlat *sequenceDataFlat = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataHandle)); + + out.clear(); + if (sequenceDataFlat && sequenceDataFlat->m_IsFlat == true) + { + out.append(sequenceDataFlat->m_AttributeUUID, strlen(sequenceDataFlat->m_AttributeUUID)); + suites.HandleSuite1()->host_unlock_handle(sequenceDataHandle); + return true; + } + return false; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::_UpdateParamsVisibility(SAAEIOData &AAEData, SAttributeSamplerData *AttrData) +{ + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err err = PF_Err_NONE; + AEGP_EffectRefH effectRef = nullptr; + AEGP_StreamRefH streamRef = nullptr; + + AAEData.m_OutData->out_flags |= PF_OutFlag_REFRESH_UI; + + err = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + if (!AE_VERIFY(err == A_Err_NONE)) + return err; + + for (int i = 1; i < __AttributeSamplerType_Parameters_Count; ++i) // Start at 1, first params is reserved. + { + err |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AAEID, effectRef, m_ParametersIndexes[i], &streamRef); + if (!AE_VERIFY(err == A_Err_NONE)) + { + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return err; + + } + bool visibility = GetParamsVisibility(i, AttrData->m_DescAttribute->m_Type); + + // Toggle visibility of parameter + err |= suites.DynamicStreamSuite2()->AEGP_SetDynamicStreamFlag(streamRef, AEGP_DynStreamFlag_HIDDEN, FALSE, !visibility); + + err |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + streamRef = nullptr; + if (!AE_VERIFY(err == A_Err_NONE)) + { + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return err; + } + } + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return err; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::HandleDataFromAEGP(SAAEIOData &AAEData, + PF_ParamDef *params[]) +{ + (void)params; + + PF_Err err = PF_Err_NONE; + void *extraData = AAEData.m_ExtraData.m_UndefinedData; + SAttributeSamplerDesc *desc = reinterpret_cast(extraData); + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + if (desc != nullptr) + { + if (desc->m_IsDeleted) + { + std::string uuid; + + if (_GetAttributeSequenceUID(AAEData, uuid) == false) + { + AE_VERIFY(false); + return PF_Err_BAD_CALLBACK_PARAM; + } + + if (m_AttributeData.count(uuid) == 0) + return PF_Err_BAD_CALLBACK_PARAM; + + SAttributeSamplerData *AttrData = m_AttributeData[uuid]; + + if (AttrData) + { + m_AttributeData.erase(uuid); + + AttrData->m_DescAttribute = nullptr; + if (desc->m_Descriptor != nullptr) + delete desc->m_Descriptor; + delete desc; + delete AttrData; + return PF_Err_NONE; + } + } + else + { + m_AttrUID += 1; + + std::string pkKey; + std::string uuid; + SAttributeSamplerData *AttrData = nullptr; + + if (_GetAttributeSequenceUID(AAEData, uuid) == false) + { + AE_VERIFY(false); + return PF_Err_BAD_CALLBACK_PARAM; + } + if (m_AttributeData.count(uuid) == 0) + { + AttrData = new SAttributeSamplerData{}; + } + AttrData = m_AttributeData[uuid]; + AttrData->m_DescAttribute = desc; + + pkKey = AttrData->m_DescAttribute->GetAttributePKKey(); + + AttrData->m_DescAttribute->m_IsDefaultValue = AttrData->m_IsDefault; + AttrData->m_DescAttribute->m_ResourcePath = AttrData->m_ResourcePath; + + AEGP_EffectRefH effectRef = nullptr; + + err = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + if (!AE_VERIFY(err == A_Err_NONE)) + return err; + + err |= SetEffectName(AAEData, pkKey, effectRef); + err |= SetParameterStreamName(AAEData, uuid, m_ParametersIndexes[AttributeSamplerType_Parameters_Infernal_Uuid], effectRef); + err |= SetParameterStreamName(AAEData, pkKey, m_ParametersIndexes[AttributeSamplerType_Parameters_Infernal_Name], effectRef); + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + effectRef = nullptr; + + + _UpdateParamsVisibility(AAEData, AttrData); + } + + } + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER; + AE_VERIFY(err == A_Err_NONE); + return err; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::UpdateParamsUI(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + (void)params; + std::string uuid; + + if (GetParamsSequenceUID(AAEData, uuid, m_ParametersIndexes[AttributeSamplerType_Parameters_Infernal_Uuid]) != PF_Err_NONE) + return PF_Err_BAD_CALLBACK_PARAM; + if (m_AttributeData.count(uuid) == 0) + return A_Err_NONE; + + PF_Err err = PF_Err_NONE; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + SAttributeSamplerDesc *descriptor = m_AttributeData[uuid]->m_DescAttribute; + + if (descriptor == nullptr) + return PF_Err_NONE; + + if (descriptor != nullptr && descriptor->m_IsDeleted) + { + m_AttributeData.erase(uuid); + delete descriptor; + return PF_Err_NONE; + } + return err; +} + +//---------------------------------------------------------------------------- + +A_Err CPluginInterface::_RegisterAttributeInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SAttributeSamplerSequenceDataFlat *sequenceData, bool setup) +{ + (void)params; + + PF_Err err = PF_Err_NONE; + std::string id; + + if (sequenceData != nullptr) + id = sequenceData->m_AttributeUUID; + else if (_GetAttributeSequenceUID(AAEData, id) == false) + return A_Err_NONE; + + if (m_AttributeData.count(id) == 0) + { + SAttributeSamplerData *AttrData = new SAttributeSamplerData{}; + + if (!AE_VERIFY(AttrData != nullptr)) + return A_Err_ALLOC; + + if (!setup) + { + if (m_MainThreadID == std::this_thread::get_id()) + { + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_EffectRefH effectRef = nullptr; + + err |= suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + + std::string uuid(sequenceData->m_AttributeUUID); + std::string name(sequenceData->m_AttributeName); + + err |= SetParameterStreamName(AAEData, uuid, m_ParametersIndexes[AttributeSamplerType_Parameters_Infernal_Uuid], effectRef); + err |= SetParameterStreamName(AAEData, name, m_ParametersIndexes[AttributeSamplerType_Parameters_Infernal_Name], effectRef); + err |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + } + m_AttributeData[id] = AttrData; + } + if (sequenceData != nullptr) + { + m_AttributeData[id]->m_ResourcePath = sequenceData->m_ResourcePath; + } + AE_VERIFY(err == A_Err_NONE); + return A_Err_NONE;; +} + +//---------------------------------------------------------------------------- + +__AAEPK_END diff --git a/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_SequenceData.cpp b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_SequenceData.cpp new file mode 100644 index 00000000..4f13f72d --- /dev/null +++ b/AE_Effect_AttributeSampler/Sources/AEAttributeSampler_SequenceData.cpp @@ -0,0 +1,59 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEAttributeSampler_SequenceData.h" + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +bool SAttributeSamplerSequenceDataFlat::SetUUID(const char *uuid) +{ + m_AttributeUUIDLen = std::min(strlen(uuid) + 1, SequenceCST::UUID_LEN); + if (m_AttributeUUIDLen != 0) + { + strncpy(m_AttributeUUID, uuid, m_AttributeUUIDLen); + } + return true; +} + +//---------------------------------------------------------------------------- + +bool SAttributeSamplerSequenceDataFlat::SetName(const char *name) +{ + m_AttributeNameLen = std::min(strlen(name) + 1, SequenceCST::MAX_NAME_LEN); + if (m_AttributeNameLen != 0) + { + strncpy(m_AttributeName, name, m_AttributeNameLen); + } + return true; +} + +//---------------------------------------------------------------------------- + +bool SAttributeSamplerSequenceDataFlat::SetResourcePath(const char *path) +{ + m_ResourcePathLen = std::min(strlen(path) + 1, SequenceCST::MAX_PATH_LEN); + if (m_ResourcePathLen != 0) + { + strncpy(m_ResourcePath, path, m_ResourcePathLen); + } + return true; +} + +//---------------------------------------------------------------------------- + +bool SAttributeSamplerSequenceDataFlat::SetLayerID(A_long id) +{ + m_LayerID = id; + return true; +} + +//---------------------------------------------------------------------------- + +__AAEPK_END diff --git a/AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler.plugin-Info.plist b/AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler.plugin-Info.plist new file mode 100644 index 00000000..719de26a --- /dev/null +++ b/AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler.plugin-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleExecutable + AttributeSampler + CFBundleIdentifier + com.PersistantStudio.PopcornFX.AttributeSampler + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + PK-AfterEffects_AttributeSampler + CFBundlePackageType + eFKT + CFBundleSignature + FXTC + LSRequiresCarbon + + NSAppleScriptEnabled + No + NSHumanReadableCopyright + © PersistantStudio PopcornFX + + diff --git a/AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler_PiPL.r b/AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler_PiPL.r new file mode 100644 index 00000000..bf73cd01 --- /dev/null +++ b/AE_Effect_AttributeSampler/Sources/AE_Effect_AttributeSampler_PiPL.r @@ -0,0 +1,73 @@ +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include +#endif + +#ifdef AE_OS_WIN +#include "../../AE_Suites/PopcornFX_Define_Version.h" +#endif +#ifdef AE_OS_MAC +#include "PopcornFX_Define_Version.h" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + "Attribute Sampler" + }, + /* [3] */ + Category { + "PopcornFX" + }, +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EffectMain"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMacIntel64 {"EffectMain"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + AEPOPCORNFX_PIPL_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + 0x06200000 + }, + AE_Effect_Global_OutFlags_2 { + 0x08001403 + }, + /* [11] */ + AE_Effect_Match_Name { + "ADBE PopcornFX Sampler" + }, + /* [12] */ + AE_Reserved_Info { + 8 + } + } +}; + diff --git a/AE_Effect_Emitter/Include/AEEffect_Main.h b/AE_Effect_Emitter/Include/AEEffect_Main.h new file mode 100644 index 00000000..dac2331a --- /dev/null +++ b/AE_Effect_Emitter/Include/AEEffect_Main.h @@ -0,0 +1,39 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEEFFECT_MAIN_H__ +#define __FX_AEEFFECT_MAIN_H__ + +#include + +#ifdef AE_OS_WIN + typedef unsigned short PixelType; + #include +#endif + +#include +#include + +#include "PopcornFX_Define.h" + +//---------------------------------------------------------------------------- + +extern "C" { + DllExport + PF_Err + EffectMain( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra); + +} + +//---------------------------------------------------------------------------- + +#endif + diff --git a/AE_Effect_Emitter/Include/AEEffect_ParamDefine.h b/AE_Effect_Emitter/Include/AEEffect_ParamDefine.h new file mode 100644 index 00000000..86ab0a90 --- /dev/null +++ b/AE_Effect_Emitter/Include/AEEffect_ParamDefine.h @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +enum EStrIDType +{ + StrID_None_Param_Name, + StrID_Name_Param_Name, + StrID_Description_Param_Name, + + StrID_Generic_Infernal_Autorender_Param_Name, + + StrID_Parameters_Path, + StrID_Parameters_Path_Button, + + StrID_Parameters_Path_Reimport, + StrID_Parameters_Path_Reimport_Button, + + StrID_Generic_Infernal_Effect_Path_Hash, + + StrID_Topic_Transform_Start, + StrID_Parameters_Position, + StrID_Parameters_Rotation_X, + StrID_Parameters_Rotation_Y, + StrID_Parameters_Rotation_Z, + + StrID_Parameters_Seed, + + StrID_Topic_Rendering_Start, + + StrID_Parameters_Render_Background_Toggle, + StrID_Parameters_Render_Background_Opacity, + + StrID_Parameters_Render_Type, + StrID_Parameters_Render_Type_Combobox, + + StrID_Topic_Camera_Start, + StrID_Parameters_Camera, + StrID_Parameters_Camera_Combobox, + StrID_Parameters_Camera_Position, + StrID_Parameters_Camera_Rotation_X, + StrID_Parameters_Camera_Rotation_Y, + StrID_Parameters_Camera_Rotation_Z, + StrID_Parameters_Camera_FOV, + StrID_Parameters_Camera_Near, + StrID_Parameters_Camera_Far, + + StrID_Parameters_Receive_Light, + + StrID_Topic_PostFX_Start, + + StrID_Topic_Distortion_Start, + StrID_Parameters_Distortion_Enable, + + StrID_Topic_Bloom_Start, + StrID_Parameters_Bloom_Enable, + StrID_Parameters_Bloom_BrightPassValue, + StrID_Parameters_Bloom_Intensity, + StrID_Parameters_Bloom_Attenuation, + StrID_Parameters_Bloom_GaussianBlur, + StrID_Parameters_Bloom_GaussianBlur_Combobox, + StrID_Parameters_Bloom_RenderPassCount, + + StrID_Topic_ToneMapping_Start, + StrID_Parameters_ToneMapping_Enable, + StrID_Parameters_ToneMapping_Saturation, + StrID_Parameters_ToneMapping_Exposure, + + StrID_Topic_FXAA_Start, + StrID_Parameters_FXAA_Enable, + + StrID_Topic_BackdropMesh_Start, + + StrID_Parameters_BackdropMesh_Enable_Rendering, + StrID_Parameters_BackdropMesh_Enable_Collisions, + StrID_Parameters_BackdropMesh_Path, + StrID_Parameters_BackdropMesh_Path_Button, + + StrID_Parameters_BackdropMesh_Reset, + StrID_Parameters_BackdropMesh_Reset_Button, + + StrID_Topic_BackdropMesh_Transform_Start, + StrID_Parameters_BackdropMesh_Position, + StrID_Parameters_BackdropMesh_Rotation_X, + StrID_Parameters_BackdropMesh_Rotation_Y, + StrID_Parameters_BackdropMesh_Rotation_Z, + StrID_Parameters_BackdropMesh_Scale_X, + StrID_Parameters_BackdropMesh_Scale_Y, + StrID_Parameters_BackdropMesh_Scale_Z, + StrID_Parameters_BackdropMesh_Roughness, + StrID_Parameters_BackdropMesh_Metalness, + + StrID_Topic_BackdropAudio_Start, + StrID_Parameters_Audio, + + StrID_Topic_BackdropEnvMap_Start, + StrID_Parameters_BackdropEnvMap_Enable_Rendering, + StrID_Parameters_BackdropEnvMap_Path, + StrID_Parameters_BackdropEnvMap_Path_Button, + StrID_Parameters_BackdropEnvMap_Reset, + StrID_Parameters_BackdropEnvMap_Reset_Button, + StrID_Parameters_BackdropEnvMap_Intensity, + StrID_Parameters_BackdropEnvMap_Color, + + StrID_Topic_Light_Start, + StrID_Parameters_Light_Category, + StrID_Parameters_Light_Combobox, + StrID_Parameters_Light_Direction, + StrID_Parameters_Light_Intensity, + StrID_Parameters_Light_Color, + StrID_Parameters_Light_Ambient, + + StrID_Parameters_Scale_Factor, + StrID_Parameters_Refresh_Render, + StrID_Parameters_Render_Seeking_Toggle, + StrID_Parameters_Simulation_State, + + StrID_Parameters_BackdropMesh_Enable_Animation, + + StrID_Parameters_Path_Marketplace, + StrID_Parameters_Path_Marketplace_Button, + + StrID_Parameters_TransformType, + StrID_Parameters_TransformType_Combobox, + + StrID_Parameters_Position_2D, + StrID_Parameters_Position_2D_Distance, + + StrID_Parameters_BringEffectIntoView, + StrID_Parameters_BringEffectIntoView_Button, + + StrID_num_types +}; + +//---------------------------------------------------------------------------- + +char *GetParamsStringPtr(int strNum); + +//---------------------------------------------------------------------------- + +__AAEPK_END diff --git a/AE_Effect_Emitter/Include/AEEffect_PluginInterface.h b/AE_Effect_Emitter/Include/AEEffect_PluginInterface.h new file mode 100644 index 00000000..a8f64e06 --- /dev/null +++ b/AE_Effect_Emitter/Include/AEEffect_PluginInterface.h @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_CPluginInterface_H__ +#define __FX_CPluginInterface_H__ + + +#include "PopcornFX_Define.h" +#include "PopcornFX_Suite.h" +#include "PopcornFX_BasePluginInterface.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +struct SEmitterDesc; +struct SEffectSequenceDataFlat; +struct SAAEIOData; + +//---------------------------------------------------------------------------- + +class CPluginInterface : public CBasePluginInterface +{ + struct SEffectData + { + //Memory Owned by effect + SEmitterDesc *m_Desc; + int m_LastRenderTime = -1; + + std::mutex m_Lock; + + SEffectData() + : m_Desc(nullptr) + { + + } + }; +public: + virtual ~CPluginInterface(); + static CPluginInterface &Instance(); + + PF_Err About(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err GlobalSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err ParamsSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err GlobalSetdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + + PF_Err SequenceSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceReSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceFlatten(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + PF_Err SequenceShutdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output); + + PF_Err PreRender(SAAEIOData &AAEData); + PF_Err SmartRender(SAAEIOData &AAEData); + + PF_Err ParamValueChanged(SAAEIOData &AAEData, PF_ParamDef *params[]); + PF_Err UpdateParamsUI(SAAEIOData &AAEData, PF_ParamDef *params[]); + PF_Err HandleDataFromAEGP(SAAEIOData &AAEData, PF_ParamDef *params[]); + PF_Err QueryDynamicFlags(SAAEIOData &AAEData, PF_ParamDef *params[]); + + bool GetEffectSequenceUID(SAAEIOData &AAEData, std::string &out); + + +private: + CPluginInterface(); + static CPluginInterface *m_Instance; + static uint32_t m_AttrUID; + + //void _MakeParamCopy(PF_ParamDef *actual[], PF_ParamDef copy[]); + bool _RegisterEffectInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SEffectSequenceDataFlat *sequenceData); + bool _UnRegisterEffectInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SEffectSequenceDataFlat *sequenceData); + + //PF_Err _UpdateEmitterName(SAAEIOData &AAEData, SEmitterDesc* desc); + //PF_Err _UpdateBackdropMeshPath(SAAEIOData &AAEData, SEmitterDesc* desc); + + std::unordered_map m_EffectData; + std::vector m_QueuedEffectData; + +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif diff --git a/AE_Effect_Emitter/Include/AEEffect_SequenceData.h b/AE_Effect_Emitter/Include/AEEffect_SequenceData.h new file mode 100644 index 00000000..7867a5be --- /dev/null +++ b/AE_Effect_Emitter/Include/AEEffect_SequenceData.h @@ -0,0 +1,65 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AAEFFECT_SEQUENCEDATA_H__ +#define __AAEFFECT_SEQUENCEDATA_H__ + +#include +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +namespace SequenceCST +{ + static const size_t MAX_PATH_LEN = 1024; + static const size_t MAX_NAME_LEN = 100; + static const size_t UUID_LEN = 32; +} + +//---------------------------------------------------------------------------- + +struct SEffectSequenceDataFlat +{ + //Set is useless, as we do not create directly the struct. Just a friendly reminder. + bool m_IsFlat = true; + + char m_EffectUUID[SequenceCST::UUID_LEN]; + + char m_EffectName[SequenceCST::MAX_NAME_LEN]; + size_t m_EffectNameLen; + + char m_EffectPath[SequenceCST::MAX_PATH_LEN]; + size_t m_EffectPathLen; + + char m_EffectPathSource[SequenceCST::MAX_PATH_LEN]; + size_t m_EffectPathSourceLen; + + char m_EffectBackdropMeshPath[SequenceCST::MAX_PATH_LEN]; + size_t m_EffectBackdropMeshPathLen; + + char m_EffectEnvironmentMapPath[SequenceCST::MAX_PATH_LEN]; + size_t m_EffectEnvironmentMapPathLen; + + A_long m_LayerID; + + bool SetEffectName(const char *name); + bool SetEffectPathSource(const char *name); + bool SetEffectBackdropMeshPath(const char *name); + bool SetEffectEnvironmentMapPath(const char *name); + bool SetUUID(const std::string &uuid); + bool SetUUID(const char *uuid); + void SetLayerID(A_long id); + bool CopyFrom(SEffectSequenceDataFlat *src); +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif // !__AAEFFECT_SEQUENCEDATA_H__ + diff --git a/AE_Effect_Emitter/PkgInfo b/AE_Effect_Emitter/PkgInfo new file mode 100644 index 00000000..31cf1f41 --- /dev/null +++ b/AE_Effect_Emitter/PkgInfo @@ -0,0 +1 @@ +eFKTFXTC \ No newline at end of file diff --git a/AE_Effect_Emitter/Precompiled/ae_precompiled.cpp b/AE_Effect_Emitter/Precompiled/ae_precompiled.cpp new file mode 100644 index 00000000..84e52276 --- /dev/null +++ b/AE_Effect_Emitter/Precompiled/ae_precompiled.cpp @@ -0,0 +1 @@ +#include "ae_precompiled.h" diff --git a/AE_Effect_Emitter/Precompiled/ae_precompiled.h b/AE_Effect_Emitter/Precompiled/ae_precompiled.h new file mode 100644 index 00000000..ee643f3d --- /dev/null +++ b/AE_Effect_Emitter/Precompiled/ae_precompiled.h @@ -0,0 +1,8 @@ +#pragma once + +#undef PV_MODULE_NAME +#undef PV_MODULE_SYM +#define PV_MODULE_NAME "AEPlugin" +#define PV_MODULE_SYM AEPlugin + +#include diff --git a/AE_Effect_Emitter/Sources/AEEffect_Main.cpp b/AE_Effect_Emitter/Sources/AEEffect_Main.cpp new file mode 100644 index 00000000..53906ab5 --- /dev/null +++ b/AE_Effect_Emitter/Sources/AEEffect_Main.cpp @@ -0,0 +1,169 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEEffect_Main.h" + +#include "PopcornFX_Suite.h" +#include "AEEffect_PluginInterface.h" +#include "PopcornFX_Define.h" + +#include + +//---------------------------------------------------------------------------- + +extern "C" +{ + DllExport PF_Err PluginDataEntryFunction( PF_PluginDataPtr inPtr, + PF_PluginDataCB inPluginDataCallBackPtr, + SPBasicSuite *inSPBasicSuitePtr, + const char *inHostName, + const char *inHostVersion) + { + (void)inSPBasicSuitePtr; + (void)inHostName; + (void)inHostVersion; + + PF_Err result = PF_Err_INVALID_CALLBACK; + + result = PF_REGISTER_EFFECT( + inPtr, // Infos must match the PopcornFXPiPL.r + inPluginDataCallBackPtr, // + "Emitter", // Name + "ADBE PopcornFX Emitter", // Match Name + "PopcornFX", // Category + AE_RESERVED_INFO); // Reserved Info + return result; + } +} + +//---------------------------------------------------------------------------- + +PF_Err EffectMain( PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void *extra) +{ + PF_Err result = PF_Err_NONE; + AAePk::CPluginInterface &AEPlugin = AAePk::CPluginInterface::Instance(); + AAePk::SAAEIOData AAEData{ cmd, in_data, out_data, extra, AEPlugin.GetParametersIndexes() }; + + assert(in_data != nullptr); + assert(out_data != nullptr); + +#if _DEBUG + try + { +#endif + + if (AAEData.m_InData->appl_id == 'PrMr') + { + //User Tried to load plugin in Premiere Pro. + //There is surely a better way to handle this. + return PF_Err_UNRECOGNIZED_PARAM_TYPE; + } + + switch (cmd) + { + // Called once + case PF_Cmd_ABOUT: + //Mandatory + //Version and General Infos about the plugin + result = AEPlugin.About(AAEData, params, output); + break; + case PF_Cmd_GLOBAL_SETUP: + //Mandatory + //Startup run + result = AEPlugin.GlobalSetup(AAEData, params, output); + break; + case PF_Cmd_PARAMS_SETUP: + //Mandatory + //Setup AAE UI. + result = AEPlugin.ParamsSetup(AAEData, params, output); + break; + case PF_Cmd_GLOBAL_SETDOWN: + //Mandatory + result = AEPlugin.GlobalSetdown(AAEData, params, output); + break; + // Sequence Handling + //UI thread + case PF_Cmd_SEQUENCE_SETUP: + //Each time the user adds the effect to a layer + result = AEPlugin.SequenceSetup(AAEData, params, output); + break; + case PF_Cmd_SEQUENCE_RESETUP: + //Load or Duplicate + result = AEPlugin.SequenceReSetup(AAEData, params, output); + break; + //UI thread + case PF_Cmd_SEQUENCE_FLATTEN: + //Effect Saved, copied, duplicated.. + result = AEPlugin.SequenceFlatten(AAEData, params, output); + break; + case PF_Cmd_SEQUENCE_SETDOWN: + //Effect Deleted + result = AEPlugin.SequenceShutdown(AAEData, params, output); + break; + case PF_Cmd_GET_FLATTENED_SEQUENCE_DATA: + break; + // Audio + case PF_Cmd_AUDIO_SETUP: + case PF_Cmd_AUDIO_RENDER: + case PF_Cmd_AUDIO_SETDOWN: + break; + case PF_Cmd_SMART_PRE_RENDER: + //Can be called several times for one render + result = AEPlugin.PreRender(AAEData); + break; + case PF_Cmd_SMART_RENDER: + result = AEPlugin.SmartRender(AAEData); + break; + case PF_Cmd_FRAME_SETDOWN: + //Allow resizing of drawing area + break; + // Messaging + case PF_Cmd_EVENT: + break; + case PF_Cmd_USER_CHANGED_PARAM: + result = AEPlugin.ParamValueChanged(AAEData, params); + break; + //UI thread + //If PF_ParamFlag_SUPERVIZE if set when adding param, PF_Cmd_USER_CHANGED_PARAM is called when value change + case PF_Cmd_UPDATE_PARAMS_UI: + result = AEPlugin.UpdateParamsUI(AAEData, params); + break; + case PF_Cmd_ARBITRARY_CALLBACK: + case PF_Cmd_GET_EXTERNAL_DEPENDENCIES: + break; + case PF_Cmd_COMPLETELY_GENERAL: + result = AEPlugin.HandleDataFromAEGP(AAEData, params); + break; + case PF_Cmd_DO_DIALOG: + //UI thread + //Send when user click on Options + //Received if PF_OutFlag_I_DO_DIALOG is set in PF_Cmd_GLOBAL_SETUP + break; + case PF_Cmd_QUERY_DYNAMIC_FLAGS: + result = AEPlugin.QueryDynamicFlags(AAEData, params); + break; + default: + break; + } + +#if _DEBUG + } + catch (...) + { + assert(false); + } +#endif + if (AAEData.m_ReturnCode != PF_Err_NONE) + return AAEData.m_ReturnCode; + return result; +} + +//---------------------------------------------------------------------------- + diff --git a/AE_Effect_Emitter/Sources/AEEffect_ParamDefine.cpp b/AE_Effect_Emitter/Sources/AEEffect_ParamDefine.cpp new file mode 100644 index 00000000..77a65ab4 --- /dev/null +++ b/AE_Effect_Emitter/Sources/AEEffect_ParamDefine.cpp @@ -0,0 +1,155 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEEffect_ParamDefine.h" + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +struct STableString +{ + A_u_long index; + A_char str[256]; +}; + +//---------------------------------------------------------------------------- + +STableString g_strs_params[StrID_num_types] = +{ + { StrID_None_Param_Name, "" }, + { StrID_Name_Param_Name, "Emitter" }, + { StrID_Description_Param_Name, "PopcornFX Emitter plugin" }, + + { StrID_Generic_Infernal_Autorender_Param_Name, "Internal Autorender" }, + + { StrID_Parameters_Path, "" }, + { StrID_Parameters_Path_Button, "Browse local files" }, + + { StrID_Parameters_Path_Reimport, "" }, + { StrID_Parameters_Path_Reimport_Button, "Reimport" }, + + { StrID_Generic_Infernal_Effect_Path_Hash, "Internal - Param Path Hash" }, + + { StrID_Topic_Transform_Start, "Transform" }, + { StrID_Parameters_Position, "Position" }, + { StrID_Parameters_Rotation_X, "Rotation X" }, + { StrID_Parameters_Rotation_Y, "Rotation Y" }, + { StrID_Parameters_Rotation_Z, "Rotation Z" }, + + { StrID_Parameters_Seed, "Seed" }, + + { StrID_Topic_Rendering_Start, "Rendering" }, + + { StrID_Parameters_Render_Background_Toggle, "Override background opacity" }, + { StrID_Parameters_Render_Background_Opacity, "Background opacity" }, + { StrID_Parameters_Render_Type, "Render Output" }, + { StrID_Parameters_Render_Type_Combobox, "Final|Emissive(Not impld)|Albedo(Not impld)|Normal|Depth" }, + + { StrID_Topic_Camera_Start, "Camera Options" }, + { StrID_Parameters_Camera, "Camera" }, + { StrID_Parameters_Camera_Combobox, "Default Composition|Custom Composition(Not impld)" }, + { StrID_Parameters_Camera_Position, "Position" }, + { StrID_Parameters_Camera_Rotation_X, "Rotation X" }, + { StrID_Parameters_Camera_Rotation_Y, "Rotation Y" }, + { StrID_Parameters_Camera_Rotation_Z, "Rotation Z" }, + { StrID_Parameters_Camera_FOV, "FOV" }, + { StrID_Parameters_Camera_Near, "Near" }, + { StrID_Parameters_Camera_Far, "Far" }, + + { StrID_Parameters_Receive_Light, "Receive Light(Not impld)" }, + + { StrID_Topic_PostFX_Start, "Post Effects" }, + + { StrID_Topic_Distortion_Start, "Distortion" }, + { StrID_Parameters_Distortion_Enable, "Enable" }, + + { StrID_Topic_Bloom_Start, "Bloom" }, + { StrID_Parameters_Bloom_Enable, "Enable" }, + { StrID_Parameters_Bloom_BrightPassValue, "Bright Pass Value" }, + { StrID_Parameters_Bloom_Intensity, "Intensity" }, + { StrID_Parameters_Bloom_Attenuation, "Attenuation" }, + { StrID_Parameters_Bloom_GaussianBlur, "Blur Pixel Radius" }, + { StrID_Parameters_Bloom_GaussianBlur_Combobox, "5|9|13" }, + { StrID_Parameters_Bloom_RenderPassCount, "Render Pass Count" }, + + { StrID_Topic_ToneMapping_Start, "Tone Mapping" }, + { StrID_Parameters_ToneMapping_Enable, "Enable" }, + { StrID_Parameters_ToneMapping_Saturation, "Saturation" }, + { StrID_Parameters_ToneMapping_Exposure, "Exposure" }, + + { StrID_Topic_FXAA_Start, "FXAA" }, + { StrID_Parameters_FXAA_Enable, "Enable" }, + + { StrID_Topic_BackdropMesh_Start, "Backdrop Mesh" }, + + { StrID_Parameters_BackdropMesh_Enable_Rendering, "Enable Rendering" }, + { StrID_Parameters_BackdropMesh_Enable_Collisions, "Enable Collisions" }, + { StrID_Parameters_BackdropMesh_Path, "Mesh Path" }, + { StrID_Parameters_BackdropMesh_Path_Button, "Browse" }, + { StrID_Parameters_BackdropMesh_Reset, "" }, + { StrID_Parameters_BackdropMesh_Reset_Button, "Reset" }, + + { StrID_Topic_BackdropMesh_Transform_Start, "Transform" }, + { StrID_Parameters_BackdropMesh_Position, "Position" }, + { StrID_Parameters_BackdropMesh_Rotation_X, "Rotation X" }, + { StrID_Parameters_BackdropMesh_Rotation_Y, "Rotation Y" }, + { StrID_Parameters_BackdropMesh_Rotation_Z, "Rotation Z" }, + { StrID_Parameters_BackdropMesh_Scale_X, "Scale X" }, + { StrID_Parameters_BackdropMesh_Scale_Y, "Scale Y" }, + { StrID_Parameters_BackdropMesh_Scale_Z, "Scale Z" }, + { StrID_Parameters_BackdropMesh_Roughness, "Roughness" }, + { StrID_Parameters_BackdropMesh_Metalness, "Metalness" }, + + { StrID_Topic_BackdropAudio_Start, "Backdrop Audio" }, + { StrID_Parameters_Audio, "Audio Layer" }, + + { StrID_Topic_BackdropEnvMap_Start, "Environment Map" }, + { StrID_Parameters_BackdropEnvMap_Enable_Rendering, "Enable Rendering" }, + { StrID_Parameters_BackdropEnvMap_Path, "Map Path" }, + { StrID_Parameters_BackdropEnvMap_Path_Button, "Browse" }, + { StrID_Parameters_BackdropEnvMap_Reset, "" }, + { StrID_Parameters_BackdropEnvMap_Reset_Button, "Reset" }, + { StrID_Parameters_BackdropEnvMap_Intensity, "Intensity" }, + { StrID_Parameters_BackdropEnvMap_Color, "Color" }, + + { StrID_Topic_Light_Start, "Light" }, + { StrID_Parameters_Light_Category, "Category" }, + { StrID_Parameters_Light_Combobox, "Internal|All in Composition" }, + { StrID_Parameters_Light_Direction, "Direction" }, + { StrID_Parameters_Light_Intensity, "Intensity" }, + { StrID_Parameters_Light_Color, "Color" }, + { StrID_Parameters_Light_Ambient, "Ambient" }, + + { StrID_Parameters_Scale_Factor, "Effect Scale Up Factor" }, + { StrID_Parameters_Refresh_Render, "Internal" }, + { StrID_Parameters_Render_Seeking_Toggle, "Seeking Simulation" }, + { StrID_Parameters_Simulation_State, "Simulation state" }, + + { StrID_Parameters_BackdropMesh_Enable_Animation, "Enable Animations" }, + + { StrID_Parameters_Path_Marketplace, "Emitter Effect" }, + { StrID_Parameters_Path_Marketplace_Button, "Browse Marketplace" }, + + { StrID_Parameters_TransformType, "Transform Type" }, + { StrID_Parameters_TransformType_Combobox, "3D|2D" }, + + { StrID_Parameters_Position_2D, "Position" }, + { StrID_Parameters_Position_2D_Distance, "Distance To camera" }, + + { StrID_Parameters_BringEffectIntoView, "" }, + { StrID_Parameters_BringEffectIntoView_Button, "Bring Effect to view" }, +}; + +//---------------------------------------------------------------------------- + +A_char *GetParamsStringPtr(int strNum) +{ + return AAePk::g_strs_params[strNum].str; +} + +//---------------------------------------------------------------------------- + +__AAEPK_END diff --git a/AE_Effect_Emitter/Sources/AEEffect_PluginInterface.cpp b/AE_Effect_Emitter/Sources/AEEffect_PluginInterface.cpp new file mode 100644 index 00000000..ee91d280 --- /dev/null +++ b/AE_Effect_Emitter/Sources/AEEffect_PluginInterface.cpp @@ -0,0 +1,1304 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEEffect_PluginInterface.h" +#include "AEEffect_ParamDefine.h" +#include "AEEffect_SequenceData.h" + +//AE +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//AAE Plugin code +#include "PopcornFX_Suite.h" +#include "PopcornFX_UID.h" + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +int SEmitterDesc::s_ID = 0; + +CPluginInterface *CPluginInterface::m_Instance = nullptr; +uint32_t CPluginInterface::m_AttrUID = 1; + +//---------------------------------------------------------------------------- + +CPluginInterface::CPluginInterface() +{ +} + +//---------------------------------------------------------------------------- + +CPluginInterface::~CPluginInterface() +{ +} + +//---------------------------------------------------------------------------- + +CPluginInterface &CPluginInterface::Instance() +{ + if (CPluginInterface::m_Instance == nullptr) + { + m_Instance = new CPluginInterface(); + } + return *m_Instance; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::About( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + suites.ANSICallbacksSuite1()->sprintf(AAEData.m_OutData->return_msg, + "%s v%d.%d.%d\r%s", + GetParamsStringPtr(StrID_Name_Param_Name), + AEPOPCORNFX_MAJOR_VERSION, + AEPOPCORNFX_MINOR_VERSION, + AEPOPCORNFX_BUG_VERSION, + GetParamsStringPtr(StrID_Description_Param_Name)); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::GlobalSetup( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + + AAEData.m_OutData->my_version = PF_VERSION(AEPOPCORNFX_MAJOR_VERSION, AEPOPCORNFX_MINOR_VERSION, AEPOPCORNFX_BUG_VERSION, AEPOPCORNFX_STAGE_VERSION, AEPOPCORNFX_BUILD_VERSION); + + //PF_OutFlag_DEEP_COLOR_AWARE -> To support 16bit per chan format. + //PF_OutFlag_SEND_UPDATE_PARAMS_UI -> To be notified when PF_ParamFlag_SUPERVISE is set on parameters + AAEData.m_OutData->out_flags = PF_OutFlag_DEEP_COLOR_AWARE | + PF_OutFlag_SEND_UPDATE_PARAMS_UI | + PF_OutFlag_I_USE_SHUTTER_ANGLE; + //PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS -> To be able to change dynamicly some out_flags. see doc. + //PF_OutFlag2_FLOAT_COLOR_AWARE -> To support 32bit per chan format. Need PF_OutFlag2_SUPPORTS_SMART_RENDER + //PF_OutFlag2_SUPPORTS_SMART_RENDER -> Necessary for new render pipeline. + //PF_OutFlag2_I_USE_3D_CAMERA -> Can query 3D camera information, Not sure if necessery in Attribute or just on Effect. + //PF_OutFlag2_I_USE_3D_LIGHTS -> Can query 3D LIGHT information, Not sure if necessery in Attribute or just on Effect. + AAEData.m_OutData->out_flags2 = PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS | + PF_OutFlag2_FLOAT_COLOR_AWARE | + PF_OutFlag2_SUPPORTS_SMART_RENDER | + PF_OutFlag2_I_USE_3D_CAMERA | + PF_OutFlag2_I_USE_3D_LIGHTS | + PF_OutFlag2_SUPPORTS_THREADED_RENDERING; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + suites.UtilitySuite3()->AEGP_RegisterWithAEGP(nullptr, GetParamsStringPtr(StrID_Name_Param_Name), &m_AAEID); + + return PopcornFXSuite->InitializePopcornFXIFN(AAEData); +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::ParamsSetup( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + + AEFX_SuiteScoper popcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + AAEData.m_OutData, + "PopcornFX suite was not found."); + + PF_Err result = PF_Err_NONE; + PF_InData *in_data = AAEData.m_InData; + PF_ParamDef def; + + const float minFloat = -1000000.0f;//std::numeric_limits::min() crashes AfterFX, smashing his stack to pieces. + const float maxFloat = 1000000.0f;//same as above. + + m_ParametersIndexes = new int[__Effect_Parameters_Count]; + for (unsigned int i = 0; i < __Effect_Parameters_Count; ++i) + m_ParametersIndexes[i] = -1; + m_ParametersIndexes[0] = 0; // First Parameter is reserved to AE + + AddFloatParameterUnbound(in_data, GetParamsStringPtr(StrID_Generic_Infernal_Autorender_Param_Name), Effect_Parameters_Infernal_Autorender, 0.0f, PF_ValueDisplayFlag_NONE, PF_PUI_INVISIBLE); + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_Path_Marketplace), GetParamsStringPtr(StrID_Parameters_Path_Marketplace_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_Path_Marketplace); + m_ParametersIndexes[Effect_Parameters_Path_Marketplace] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_Path), GetParamsStringPtr(StrID_Parameters_Path_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_Path); + m_ParametersIndexes[Effect_Parameters_Path] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_Path_Reimport), GetParamsStringPtr(StrID_Parameters_Path_Reimport_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_Path_Reimport); + m_ParametersIndexes[Effect_Parameters_Path_Reimport] = ++m_CurrentIndex; + + AddIntParameterUnbound(in_data, GetParamsStringPtr(StrID_Generic_Infernal_Effect_Path_Hash), Effect_Parameters_Infernal_Effect_Path_Hash, 0, PF_ValueDisplayFlag_NONE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP, PF_PUI_INVISIBLE); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_Transform_Start), Effect_Topic_Transform_Start); + { + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + //def.ui_flags = PF_PUI_STD_CONTROL_ONLY; + PF_ADD_POPUP(GetParamsStringPtr(StrID_Parameters_TransformType), + __ETransformType_Count, + ETransformType_3D, + GetParamsStringPtr(StrID_Parameters_TransformType_Combobox), + Effect_Parameters_TransformType); + m_ParametersIndexes[Effect_Parameters_TransformType] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + def.param_type = PF_Param_POINT_3D; + PF_STRCPY(def.name, (GetParamsStringPtr(StrID_Parameters_Position))); + def.u.point3d_d.x_value = def.u.point3d_d.x_dephault = 50; + def.u.point3d_d.y_value = def.u.point3d_d.y_dephault = 50; + def.u.point3d_d.z_value = def.u.point3d_d.z_dephault = 0; + def.uu.id = (Effect_Parameters_Position); + PF_ADD_PARAM(in_data, -1, &def); + m_ParametersIndexes[Effect_Parameters_Position] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + def.param_type = PF_Param_POINT; + PF_STRCPY(def.name, (GetParamsStringPtr(StrID_Parameters_Position_2D))); + def.u.td.x_value = def.u.td.x_dephault = 50; + def.u.td.y_value = def.u.td.y_dephault = 50; + def.uu.id = (Effect_Parameters_Position_2D); + PF_ADD_PARAM(in_data, -1, &def); + m_ParametersIndexes[Effect_Parameters_Position_2D] = ++m_CurrentIndex; + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Position_2D_Distance), Effect_Parameters_Position_2D_Distance, 1.0f, -10.f, 500.0f, NULL); + + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_Rotation_X), Effect_Parameters_Rotation_X, 0.0f); + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_Rotation_Y), Effect_Parameters_Rotation_Y, 0.0f); + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_Rotation_Z), Effect_Parameters_Rotation_Z, 0.0f); + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Scale_Factor), Effect_Parameters_Scale_Factor, 1.0f, 0.001f, 10000.0f, PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_BringEffectIntoView), GetParamsStringPtr(StrID_Parameters_BringEffectIntoView_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_BringEffectIntoView); + m_ParametersIndexes[Effect_Parameters_BringEffectIntoView] = ++m_CurrentIndex; + + } + EndParameterCategory(in_data, Effect_Topic_Transform_End); + + AddIntParameterUnbound(in_data, GetParamsStringPtr(StrID_Parameters_Seed), Effect_Parameters_Seed, 0, PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_Simulation_State), Effect_Parameters_Simulation_State, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_INTERP); + + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_Render_Seeking_Toggle), Effect_Parameters_Seeking_Toggle, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP, PF_PUI_INVISIBLE); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_Rendering_Start), Effect_Topic_Rendering_Start); + { + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_Render_Background_Toggle), Effect_Parameters_Background_Toggle); + + AddPercentParameter(in_data, GetParamsStringPtr(StrID_Parameters_Render_Background_Opacity), Effect_Parameters_Background_Opacity, 0); + + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + //def.ui_flags = PF_PUI_STD_CONTROL_ONLY; + PF_ADD_POPUP(GetParamsStringPtr(StrID_Parameters_Render_Type), + __RenderType_Count, + RenderType_FinalCompositing, + GetParamsStringPtr(StrID_Parameters_Render_Type_Combobox), + Effect_Parameters_Render_Type); + m_ParametersIndexes[Effect_Parameters_Render_Type] = ++m_CurrentIndex; + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_Camera_Start), Effect_Topic_Camera_Start); + { + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + //def.ui_flags = PF_PUI_STD_CONTROL_ONLY; + PF_ADD_POPUP(GetParamsStringPtr(StrID_Parameters_Camera), + __ECameraType_Count, + ECameraType_Compo_Default, + GetParamsStringPtr(StrID_Parameters_Camera_Combobox), + Effect_Parameters_Camera); + m_ParametersIndexes[Effect_Parameters_Camera] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + def.ui_flags = PF_PUI_INVISIBLE; + def.param_type = PF_Param_POINT_3D; + PF_STRCPY(def.name, (GetParamsStringPtr(StrID_Parameters_Camera_Position))); + def.u.point3d_d.x_value = def.u.point3d_d.x_dephault = 50; + def.u.point3d_d.y_value = def.u.point3d_d.y_dephault = 50; + def.u.point3d_d.z_value = def.u.point3d_d.z_dephault = 1; + def.uu.id = (Effect_Parameters_Camera_Position); + PF_ADD_PARAM(in_data, -1, &def); + m_ParametersIndexes[Effect_Parameters_Camera_Position] = ++m_CurrentIndex; + + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_Camera_Rotation_X), Effect_Parameters_Camera_Rotation_X, 0, 0, PF_PUI_INVISIBLE); + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_Camera_Rotation_Y), Effect_Parameters_Camera_Rotation_Y, 0, 0, PF_PUI_INVISIBLE); + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_Camera_Rotation_Z), Effect_Parameters_Camera_Rotation_Z, 0, 0, PF_PUI_INVISIBLE); + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Camera_FOV), Effect_Parameters_Camera_FOV, 90.0f, 1.0f, 179.0f, 0, PF_PUI_INVISIBLE); + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Camera_Near), Effect_Parameters_Camera_Near, 0.01f, 0.0001f, 1.0f); + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Camera_Far), Effect_Parameters_Camera_Far, 1000.0f, 1.0f, 100000.0f); + } + EndParameterCategory(in_data, Effect_Topic_Camera_End); + + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_Receive_Light), Effect_Parameters_Receive_Light, false, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP, PF_PUI_DISABLED | PF_PUI_INVISIBLE); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_PostFX_Start), Effect_Topic_PostFX_Start); + { + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_Distortion_Start), Effect_Topic_Distortion_Start); + { + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_Distortion_Enable), Effect_Parameters_Distortion_Enable, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + } + EndParameterCategory(in_data, Effect_Topic_Distortion_End); + + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_Bloom_Start), Effect_Topic_Bloom_Start); + { + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_Bloom_Enable), Effect_Parameters_Bloom_Enable, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Bloom_BrightPassValue), Effect_Parameters_Bloom_BrightPassValue, 1.0f, 0.0f, 20.0f); + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Bloom_Intensity), Effect_Parameters_Bloom_Intensity, 0.75f, 0.0f, 20.0f); + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Bloom_Attenuation), Effect_Parameters_Bloom_Attenuation, 0.5f, 0.0f, 1.0f); + + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_POPUP(GetParamsStringPtr(StrID_Parameters_Bloom_GaussianBlur), + __GaussianBlurPixelRadius_Count, + GaussianBlurPixelRadius_5, + GetParamsStringPtr(StrID_Parameters_Bloom_GaussianBlur_Combobox), + Effect_Parameters_Bloom_GaussianBlur); + m_ParametersIndexes[Effect_Parameters_Bloom_GaussianBlur] = ++m_CurrentIndex; + + AddIntParameter(in_data, GetParamsStringPtr(StrID_Parameters_Bloom_RenderPassCount), Effect_Parameters_Bloom_RenderPassCount, 6, 0, 13, PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + } + EndParameterCategory(in_data, Effect_Topic_Bloom_End); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_ToneMapping_Start), Effect_Topic_ToneMapping_Start); + { + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_ToneMapping_Enable), Effect_Parameters_ToneMapping_Enable, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_ToneMapping_Saturation), Effect_Parameters_ToneMapping_Saturation, 1.0f, 0.0f, 2.0f); + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_ToneMapping_Exposure), Effect_Parameters_ToneMapping_Exposure, 0.0f, -5.0f, 5.0f); + } + EndParameterCategory(in_data, Effect_Topic_ToneMapping_End); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_FXAA_Start), Effect_Topic_FXAA_Start); + { + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_FXAA_Enable), Effect_Parameters_FXAA_Enable, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + } + EndParameterCategory(in_data, Effect_Topic_FXAA_End); + } + EndParameterCategory(in_data, Effect_Topic_PostFX_End); + } + EndParameterCategory(in_data, Effect_Topic_Rendering_End); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_BackdropMesh_Start), Effect_Topic_BackdropMesh_Start); + { + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Enable_Rendering), Effect_Parameters_BackdropMesh_Enable_Rendering, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Enable_Collisions), Effect_Parameters_BackdropMesh_Enable_Collisions, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Enable_Animation), Effect_Parameters_BackdropMesh_Enable_Animation, true, PF_ParamFlag_SUPERVISE | PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP); + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_BackdropMesh_Path), GetParamsStringPtr(StrID_Parameters_BackdropMesh_Path_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_BackdropMesh_Path); + m_ParametersIndexes[Effect_Parameters_BackdropMesh_Path] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_BackdropMesh_Reset), GetParamsStringPtr(StrID_Parameters_BackdropMesh_Reset_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_BackdropMesh_Reset); + m_ParametersIndexes[Effect_Parameters_BackdropMesh_Reset] = ++m_CurrentIndex; + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_BackdropMesh_Transform_Start), Effect_Topic_BackdropMesh_Transform_Start); + { + AEFX_CLR_STRUCT(def); + PF_ADD_POINT_3D(GetParamsStringPtr(StrID_Parameters_BackdropMesh_Position), 0, 0, 0, Effect_Parameters_BackdropMesh_Position); + m_ParametersIndexes[Effect_Parameters_BackdropMesh_Position] = ++m_CurrentIndex; + + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Rotation_X), Effect_Parameters_BackdropMesh_Rotation_X, 0); + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Rotation_Y), Effect_Parameters_BackdropMesh_Rotation_Y, 0); + AddAngleParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Rotation_Z), Effect_Parameters_BackdropMesh_Rotation_Z, 0); + + AddFloatParameterUnbound(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Scale_X), Effect_Parameters_BackdropMesh_Scale_X, 1.0f); + AddFloatParameterUnbound(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Scale_Y), Effect_Parameters_BackdropMesh_Scale_Y, 1.0f); + AddFloatParameterUnbound(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Scale_Z), Effect_Parameters_BackdropMesh_Scale_Z, 1.0f); + } + EndParameterCategory(in_data, Effect_Topic_BackdropMesh_Transform_End); + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Roughness), Effect_Parameters_BackdropMesh_Roughness, 1.0f, 0.0f, 1.0f); + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropMesh_Metalness), Effect_Parameters_BackdropMesh_Metalness, 0.0f, 0.0f, 1.0f); + } + EndParameterCategory(in_data, Effect_Topic_BackdropMesh_End); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_BackdropAudio_Start), Effect_Topic_BackdropAudio_Start); + { + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE; + PF_ADD_LAYER(GetParamsStringPtr(StrID_Parameters_Audio), PF_LayerDefault_NONE, Effect_Parameters_Audio); + m_ParametersIndexes[Effect_Parameters_Audio] = ++m_CurrentIndex; + } + EndParameterCategory(in_data, Effect_Topic_BackdropAudio_End); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_BackdropEnvMap_Start), Effect_Topic_BackdropEnvMap_Start); + { + AddCheckBoxParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropEnvMap_Enable_Rendering), Effect_Parameters_BackdropEnvMap_Enable_Rendering); + + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_BackdropEnvMap_Path), GetParamsStringPtr(StrID_Parameters_BackdropEnvMap_Path_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_BackdropEnvMap_Path); + m_ParametersIndexes[Effect_Parameters_BackdropEnvMap_Path] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + PF_ADD_BUTTON(GetParamsStringPtr(StrID_Parameters_BackdropEnvMap_Reset), GetParamsStringPtr(StrID_Parameters_BackdropEnvMap_Reset_Button), 0, PF_ParamFlag_SUPERVISE, Effect_Parameters_BackdropEnvMap_Reset); + m_ParametersIndexes[Effect_Parameters_BackdropEnvMap_Reset] = ++m_CurrentIndex; + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_BackdropEnvMap_Intensity), Effect_Parameters_BackdropEnvMap_Intensity, 1.0f, 0.0f, 10.0f); + + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(GetParamsStringPtr(StrID_Parameters_BackdropEnvMap_Color), 51, 51, 51, Effect_Parameters_BackdropEnvMap_Color); + m_ParametersIndexes[Effect_Parameters_BackdropEnvMap_Color] = ++m_CurrentIndex; + } + EndParameterCategory(in_data, Effect_Topic_BackdropEnvMap_End); + + StartParameterCategory(in_data, GetParamsStringPtr(StrID_Topic_Light_Start), Effect_Topic_Light_Start); + { + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_POPUP(GetParamsStringPtr(StrID_Parameters_Light_Category), + __ELightCategory_Count, + ELightCategory_Debug_Default, + GetParamsStringPtr(StrID_Parameters_Light_Combobox), + Effect_Parameters_Light_Category); + m_ParametersIndexes[Effect_Parameters_Light_Category] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + //def.ui_flags = PF_PUI_INVISIBLE; + def.param_type = PF_Param_POINT_3D; + PF_STRCPY(def.name, (GetParamsStringPtr(StrID_Parameters_Light_Direction))); + def.u.point3d_d.x_value = def.u.point3d_d.x_dephault = 0; + def.u.point3d_d.y_value = def.u.point3d_d.y_dephault = 1; + def.u.point3d_d.z_value = def.u.point3d_d.z_dephault = 0; + def.uu.id = (Effect_Parameters_Light_Direction); + PF_ADD_PARAM(in_data, -1, &def); + m_ParametersIndexes[Effect_Parameters_Light_Direction] = ++m_CurrentIndex; + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Light_Intensity), Effect_Parameters_Light_Intensity, 1.0f, -100.0f, 100.0f); + + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(GetParamsStringPtr(StrID_Parameters_Light_Color), 51, 51, 51, Effect_Parameters_Light_Color); + m_ParametersIndexes[Effect_Parameters_Light_Color] = ++m_CurrentIndex; + + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(GetParamsStringPtr(StrID_Parameters_Light_Ambient), 51, 51, 51, Effect_Parameters_Light_Ambient); + m_ParametersIndexes[Effect_Parameters_Light_Ambient] = ++m_CurrentIndex; + } + EndParameterCategory(in_data, Effect_Topic_Light_End); + + AddFloatParameter(in_data, GetParamsStringPtr(StrID_Parameters_Refresh_Render), Effect_Parameters_Refresh_Render, 0.0f, 0.0f, 10000.0f, 0, PF_PUI_INVISIBLE | PF_PUI_DISABLED); + + AAEData.m_OutData->num_params = __Effect_Parameters_Count; + + popcornFXSuite->SetParametersIndexes(m_ParametersIndexes, EPKChildPlugins::EMITTER); + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::GlobalSetdown( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)AAEData; + (void)output; + (void)params; + + if (m_ParametersIndexes != nullptr) + delete[] m_ParametersIndexes; + m_ParametersIndexes = nullptr; + for (auto it = m_QueuedEffectData.begin(); it != m_QueuedEffectData.end(); ++it) + { + if (*it != nullptr) + { + if ((*it)->m_Desc != nullptr) + { + delete ((*it)->m_Desc); + (*it)->m_Desc = nullptr; + } + delete (*it); + } + } + + for (auto it = m_EffectData.begin(); it != m_EffectData.end(); ++it) + { + if (it->second != nullptr) + { + if (it->second->m_Desc != nullptr) + { + delete (it->second->m_Desc); + it->second->m_Desc = nullptr; + } + delete (it->second); + it->second = nullptr; + } + } + m_EffectData.clear(); + + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +bool CPluginInterface::GetEffectSequenceUID(SAAEIOData &AAEData, std::string &out) +{ + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEFX_SuiteScoper seqdata_suite = AEFX_SuiteScoper(AAEData.m_InData, kPFEffectSequenceDataSuite, kPFEffectSequenceDataSuiteVersion1, AAEData.m_OutData); + + PF_ConstHandle constSeq; + seqdata_suite->PF_GetConstSequenceData(AAEData.m_InData->effect_ref, &constSeq); + + const SEffectSequenceDataFlat *sequenceDataFlat = static_cast(suites.HandleSuite1()->host_lock_handle((PF_Handle)constSeq)); + + out.clear(); + if (sequenceDataFlat && sequenceDataFlat->m_IsFlat == true) + { + out.append(sequenceDataFlat->m_EffectUUID, strlen(sequenceDataFlat->m_EffectUUID)); + suites.HandleSuite1()->host_unlock_handle((PF_Handle)constSeq); + return true; + } + if (sequenceDataFlat) + suites.HandleSuite1()->host_unlock_handle((PF_Handle)constSeq); + return false; +} + +//---------------------------------------------------------------------------- + +//Called when creating an effect only. +PF_Err CPluginInterface::SequenceSetup( SAAEIOData &AAEData, + PF_ParamDef *params[], + PF_LayerDef *output) +{ + (void)output; + (void)params; + + A_Err result = A_Err_NONE; + SEffectSequenceDataFlat *sequenceData = nullptr; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Handle sequenceDataHandle = suites.HandleSuite1()->host_new_handle(sizeof(SEffectSequenceDataFlat)); + + if (!sequenceDataHandle) + return PF_Err_OUT_OF_MEMORY; + sequenceData = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataHandle)); + if (sequenceData != nullptr) + { + AEFX_CLR_STRUCT(*sequenceData); + + sequenceData->m_IsFlat = true; + + sequenceData->SetEffectPathSource(""); + sequenceData->SetEffectBackdropMeshPath(""); + sequenceData->SetEffectName(""); + + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + if (result == A_Err_NONE) + sequenceData->SetLayerID(dstID); + + sequenceData->SetUUID(std::to_string(dstID)); + + AAEData.m_OutData->sequence_data = sequenceDataHandle; + suites.HandleSuite1()->host_unlock_handle(sequenceDataHandle); + } + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceReSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err result = PF_Err_NONE; + + if (AAEData.m_InData->sequence_data) + { + PF_Handle sequenceDataFlatHandle = AAEData.m_InData->sequence_data; + SEffectSequenceDataFlat *sequenceDataFlat = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataFlatHandle)); + + if (sequenceDataFlat) + { + //Check Layer ID to determine if its a duplicate. if so, update LayerID and regenerate UUID + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + if (result == A_Err_NONE) + { + if (sequenceDataFlat->m_LayerID != dstID) + { + sequenceDataFlat->m_LayerID = dstID; + sequenceDataFlat->SetUUID(std::to_string(dstID).c_str()); + } + } + _RegisterEffectInstancePlugin(AAEData, params, sequenceDataFlat); + + AAEData.m_OutData->sequence_data = sequenceDataFlatHandle; + suites.HandleSuite1()->host_unlock_handle(sequenceDataFlatHandle); + } + } + else + { + result = SequenceSetup(AAEData, params, output); + } + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceFlatten(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err result = PF_Err_NONE; + + if (!AAEData.m_InData->sequence_data) + return result; + + PF_Handle sequenceDataHandle = AAEData.m_InData->sequence_data; + SEffectSequenceDataFlat *sequenceData = static_cast(suites.HandleSuite1()->host_lock_handle(sequenceDataHandle)); + + if (sequenceData) + { + //First Update sequence Data to reflect RT information + std::string uuid; + + if (GetEffectSequenceUID(AAEData, uuid) == false) + return false; + if (m_EffectData.count(uuid) == 0) + return false; + SEffectData *data = m_EffectData[uuid]; + if (data->m_Desc != nullptr) + { + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + size_t extensionIdx = data->m_Desc->m_Name.find_last_of('.'); + if (extensionIdx != std::string::npos) + data->m_Desc->m_Name = data->m_Desc->m_Name.substr(0, extensionIdx) + ".pkfx"; + + sequenceData->SetEffectName(data->m_Desc->m_Name.data()); + sequenceData->SetEffectPathSource(data->m_Desc->m_PathSource.data()); + sequenceData->SetEffectBackdropMeshPath(data->m_Desc->m_BackdropMesh.m_Path.data()); + sequenceData->SetEffectEnvironmentMapPath(data->m_Desc->m_BackdropEnvironmentMap.m_Path.data()); + sequenceData->SetLayerID(dstID); + sequenceData->SetUUID(std::to_string(dstID)); + } + AAEData.m_OutData->sequence_data = sequenceDataHandle; + suites.HandleSuite1()->host_unlock_handle(sequenceDataHandle); + } + else + result = PF_Err_INTERNAL_STRUCT_DAMAGED; + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SequenceShutdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) +{ + (void)output; + (void)params; + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + if (AAEData.m_InData->sequence_data != nullptr) + { + PF_Handle sequenceDataHandle = AAEData.m_InData->sequence_data; + + _UnRegisterEffectInstancePlugin(AAEData, params, nullptr); + + suites.HandleSuite1()->host_dispose_handle(sequenceDataHandle); + } + AAEData.m_InData->sequence_data = nullptr; + AAEData.m_OutData->sequence_data = nullptr; + + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::QueryDynamicFlags(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + (void)params; + (void)AAEData; + + PF_Err result = PF_Err_NONE; + + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::PreRender(SAAEIOData &AAEData) +{ + PF_Err result = PF_Err_NONE; + PF_RenderRequest req = AAEData.m_ExtraData.m_PreRenderData->input->output_request; + PF_CheckoutResult in_result; + + req.preserve_rgb_of_zero_alpha = TRUE; + AAEData.m_ExtraData.m_PreRenderData->output->solid = false; + + result = AAEData.m_ExtraData.m_PreRenderData->cb->checkout_layer( AAEData.m_InData->effect_ref, + Effect_Parameters_InputReserved, + Effect_Parameters_InputReserved, + &req, + AAEData.m_InData->current_time, + AAEData.m_InData->local_time_step, + AAEData.m_InData->time_scale, + &in_result); + + UnionLRect(&in_result.result_rect, &AAEData.m_ExtraData.m_PreRenderData->output->result_rect); + UnionLRect(&in_result.max_result_rect, &AAEData.m_ExtraData.m_PreRenderData->output->max_result_rect); + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::SmartRender(SAAEIOData &AAEData) +{ + PF_Err result = PF_Err_NONE; + std::string uuid; + + if (GetEffectSequenceUID(AAEData, uuid) == false) + return PF_Err_NONE; + if (m_EffectData.count(uuid) == 0) + return PF_Err_NONE; + + SEffectData *data = m_EffectData[uuid]; + SEmitterDesc *emitterDesc = data->m_Desc; + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper(AAEData.m_InData, kPopcornFXSuite1, kPopcornFXSuiteVersion1, AAEData.m_OutData, "PopcornFX suite was not found."); + + if (emitterDesc == nullptr || !PopcornFXSuite->CheckEmitterValidity(AAEData, data->m_Desc)) + { + return PF_Interrupt_CANCEL; + } + // With multi-frame rendering, multiple threads can execute this at the same time even with just one emitter per layer: + data->m_Lock.lock(); + { + SAAEScopedParams emitterTransformType { AAEData, Effect_Parameters_TransformType }; + + SAAEScopedParams emitterPosition { AAEData, Effect_Parameters_Position }; + + SAAEScopedParams emitterPosition2D { AAEData, Effect_Parameters_Position_2D }; + SAAEScopedParams emitterPosition2DDist { AAEData, Effect_Parameters_Position_2D_Distance }; + + SAAEScopedParams emitterRotationX { AAEData, Effect_Parameters_Rotation_X }; + SAAEScopedParams emitterRotationY { AAEData, Effect_Parameters_Rotation_Y }; + SAAEScopedParams emitterRotationZ { AAEData, Effect_Parameters_Rotation_Z }; + SAAEScopedParams emitterSeed { AAEData, Effect_Parameters_Seed }; + + SAAEScopedParams emitterSimulationState { AAEData, Effect_Parameters_Simulation_State }; + + emitterDesc->m_TransformType = (ETransformType)emitterTransformType.GetComboBoxValue(); + if (emitterDesc->m_TransformType == ETransformType_3D) + emitterDesc->m_Position = emitterPosition.GetPoint3D(); + else + { + A_FloatPoint xy = emitterPosition2D.GetPoint2D(); + emitterDesc->m_Position.x = xy.x; + emitterDesc->m_Position.y = xy.y; + emitterDesc->m_Position.z = emitterPosition2DDist.GetFloat(); + } + emitterDesc->m_Rotation.x = emitterRotationX.GetAngle(); + emitterDesc->m_Rotation.y = emitterRotationY.GetAngle(); + emitterDesc->m_Rotation.z = emitterRotationZ.GetAngle(); + emitterDesc->m_Seed = emitterSeed.GetInt(); + + {//Camera + SAAEScopedParams emitterCameraType{ AAEData, Effect_Parameters_Camera }; + emitterDesc->m_Camera.m_Internal = false; + + SAAEScopedParams cameraPosition{ AAEData, Effect_Parameters_Camera_Position }; + SAAEScopedParams cameraRotationX{ AAEData, Effect_Parameters_Camera_Rotation_X }; + SAAEScopedParams cameraRotationY{ AAEData, Effect_Parameters_Camera_Rotation_Y }; + SAAEScopedParams cameraRotationZ{ AAEData, Effect_Parameters_Camera_Rotation_Z }; + SAAEScopedParams cameraFOV{ AAEData, Effect_Parameters_Camera_FOV }; + + emitterDesc->m_Camera.m_Position = cameraPosition.GetPoint3D(); + emitterDesc->m_Camera.m_Rotation.x = cameraRotationX.GetAngle(); + emitterDesc->m_Camera.m_Rotation.y = cameraRotationY.GetAngle(); + emitterDesc->m_Camera.m_Rotation.z = cameraRotationZ.GetAngle(); + emitterDesc->m_Camera.m_FOV = cameraFOV.GetFloat(); + + SAAEScopedParams cameraNear { AAEData, Effect_Parameters_Camera_Near }; + SAAEScopedParams cameraFar { AAEData, Effect_Parameters_Camera_Far }; + + emitterDesc->m_Camera.m_Near = cameraNear.GetFloat(); + emitterDesc->m_Camera.m_Far = cameraFar.GetFloat(); + } + {//Rendering + SAAEScopedParams renderingType { AAEData, Effect_Parameters_Render_Type }; + SAAEScopedParams renderingReceiveLight { AAEData, Effect_Parameters_Receive_Light }; + SAAEScopedParams renderingDistortionEnable { AAEData, Effect_Parameters_Distortion_Enable }; + SAAEScopedParams renderingBloomEnable { AAEData, Effect_Parameters_Bloom_Enable }; + SAAEScopedParams renderingBloomBrightPass { AAEData, Effect_Parameters_Bloom_BrightPassValue }; + SAAEScopedParams renderingBloomIntensity { AAEData, Effect_Parameters_Bloom_Intensity }; + SAAEScopedParams renderingBloomAttenuation { AAEData, Effect_Parameters_Bloom_Attenuation }; + SAAEScopedParams renderingBloomGaussianBlur { AAEData, Effect_Parameters_Bloom_GaussianBlur }; + SAAEScopedParams renderingBloomRenderPassCount { AAEData, Effect_Parameters_Bloom_RenderPassCount }; + SAAEScopedParams renderingToneMappingEnable { AAEData, Effect_Parameters_ToneMapping_Enable }; + SAAEScopedParams renderingToneMappingSaturation { AAEData, Effect_Parameters_ToneMapping_Saturation }; + SAAEScopedParams renderingToneMappingExposure { AAEData, Effect_Parameters_ToneMapping_Exposure }; + SAAEScopedParams renderingFXAAEnable { AAEData, Effect_Parameters_FXAA_Enable }; + + SAAEScopedParams renderingAlphaOverride { AAEData, Effect_Parameters_Background_Toggle }; + SAAEScopedParams renderingAlphaOverrideValue { AAEData, Effect_Parameters_Background_Opacity }; + + + emitterDesc->m_Rendering.m_Type = (ERenderType)renderingType.GetComboBoxValue(); + emitterDesc->m_Rendering.m_ReceiveLight = renderingReceiveLight.GetCheckBoxValue(); + + emitterDesc->m_Rendering.m_Distortion.m_Enable = renderingDistortionEnable.GetCheckBoxValue(); + + emitterDesc->m_Rendering.m_Bloom.m_Enable = renderingBloomEnable.GetCheckBoxValue(); + emitterDesc->m_Rendering.m_Bloom.m_BrightPassValue = renderingBloomBrightPass.GetFloat(); + emitterDesc->m_Rendering.m_Bloom.m_Intensity = renderingBloomIntensity.GetFloat(); + emitterDesc->m_Rendering.m_Bloom.m_Attenuation = renderingBloomAttenuation.GetFloat(); + emitterDesc->m_Rendering.m_Bloom.m_GaussianBlur = (EGaussianBlurPixelRadius)renderingBloomGaussianBlur.GetComboBoxValue(); + emitterDesc->m_Rendering.m_Bloom.m_RenderPassCount = renderingBloomRenderPassCount.GetInt(); + + emitterDesc->m_Rendering.m_ToneMapping.m_Enable = renderingToneMappingEnable.GetCheckBoxValue(); + emitterDesc->m_Rendering.m_ToneMapping.m_Saturation = renderingToneMappingSaturation.GetFloat(); + emitterDesc->m_Rendering.m_ToneMapping.m_Exposure = renderingToneMappingExposure.GetFloat(); + + emitterDesc->m_Rendering.m_FXAA.m_Enable = renderingFXAAEnable.GetCheckBoxValue(); + + emitterDesc->m_IsAlphaBGOverride = renderingAlphaOverride.GetCheckBoxValue(); + emitterDesc->m_AlphaBGOverride = renderingAlphaOverrideValue.GetPercent(); + } + {//BackdropMesh + SAAEScopedParams backdropMeshEnableRendering { AAEData, Effect_Parameters_BackdropMesh_Enable_Rendering }; + SAAEScopedParams backdropMeshEnableCollisions { AAEData, Effect_Parameters_BackdropMesh_Enable_Collisions }; + SAAEScopedParams backdropMeshEnableAnimation { AAEData, Effect_Parameters_BackdropMesh_Enable_Animation }; + SAAEScopedParams backdropMeshPosition { AAEData, Effect_Parameters_BackdropMesh_Position }; + SAAEScopedParams backdropMeshRotationX { AAEData, Effect_Parameters_BackdropMesh_Rotation_X }; + SAAEScopedParams backdropMeshRotationY { AAEData, Effect_Parameters_BackdropMesh_Rotation_Y }; + SAAEScopedParams backdropMeshRotationZ { AAEData, Effect_Parameters_BackdropMesh_Rotation_Z }; + SAAEScopedParams backdropMeshScaleX { AAEData, Effect_Parameters_BackdropMesh_Scale_X }; + SAAEScopedParams backdropMeshScaleY { AAEData, Effect_Parameters_BackdropMesh_Scale_Y }; + SAAEScopedParams backdropMeshScaleZ { AAEData, Effect_Parameters_BackdropMesh_Scale_Z }; + SAAEScopedParams backdropMeshRoughness { AAEData, Effect_Parameters_BackdropMesh_Roughness }; + SAAEScopedParams backdropMeshMetalness { AAEData, Effect_Parameters_BackdropMesh_Metalness }; + + emitterDesc->m_BackdropMesh.m_EnableRendering = backdropMeshEnableRendering.GetCheckBoxValue(); + emitterDesc->m_BackdropMesh.m_EnableCollisions = backdropMeshEnableCollisions.GetCheckBoxValue(); + emitterDesc->m_BackdropMesh.m_EnableAnimations = backdropMeshEnableAnimation.GetCheckBoxValue(); + + emitterDesc->m_BackdropMesh.m_Position = backdropMeshPosition.GetPoint3D(); + emitterDesc->m_BackdropMesh.m_Rotation.x = DegToRad(backdropMeshRotationX.GetAngle()); + emitterDesc->m_BackdropMesh.m_Rotation.y = DegToRad(backdropMeshRotationY.GetAngle()); + emitterDesc->m_BackdropMesh.m_Rotation.z = DegToRad(backdropMeshRotationZ.GetAngle()); + emitterDesc->m_BackdropMesh.m_Scale = A_FloatPoint3{ backdropMeshScaleX.GetFloat(), backdropMeshScaleY.GetFloat(), backdropMeshScaleZ.GetFloat() }; + + emitterDesc->m_BackdropMesh.m_Roughness = backdropMeshRoughness.GetFloat(); + emitterDesc->m_BackdropMesh.m_Metalness = backdropMeshMetalness.GetFloat(); + + } + {//Backdrop Environment + SAAEScopedParams backdropEnvMapEnableRendering { AAEData, Effect_Parameters_BackdropEnvMap_Enable_Rendering }; + SAAEScopedParams backdropEnvMapIntensity { AAEData, Effect_Parameters_BackdropEnvMap_Intensity }; + SAAEScopedParams backdropEnvMapColor { AAEData, Effect_Parameters_BackdropEnvMap_Color }; + + emitterDesc->m_BackdropEnvironmentMap.m_EnableRendering = backdropEnvMapEnableRendering.GetCheckBoxValue(); + emitterDesc->m_BackdropEnvironmentMap.m_Intensity = backdropEnvMapIntensity.GetFloat(); + emitterDesc->m_BackdropEnvironmentMap.m_Color = backdropEnvMapColor.GetColor(); + } + + {//Light + SAAEScopedParams LightCategory{ AAEData, Effect_Parameters_Light_Category }; + SAAEScopedParams LightDirection{ AAEData, Effect_Parameters_Light_Direction }; + SAAEScopedParams LightIntensity{ AAEData, Effect_Parameters_Light_Intensity }; + SAAEScopedParams LightColor{ AAEData, Effect_Parameters_Light_Color }; + SAAEScopedParams LightAmbient{ AAEData, Effect_Parameters_Light_Ambient }; + + if (LightCategory.GetComboBoxValue() == ELightCategory_Debug_Default) + { + emitterDesc->m_Light.m_Internal = true; + } + else + { + emitterDesc->m_Light.m_Internal = false; + } + emitterDesc->m_Light.m_Category = (ELightCategory)LightCategory.GetComboBoxValue(); + emitterDesc->m_Light.m_Direction = LightDirection.GetPoint3D(); + emitterDesc->m_Light.m_Intensity = LightIntensity.GetFloat(); + emitterDesc->m_Light.m_Color = LightColor.GetColor(); + emitterDesc->m_Light.m_Ambient = LightAmbient.GetColor(); + } + { + SAAEScopedParams scaleFactor{ AAEData, Effect_Parameters_Scale_Factor }; + + emitterDesc->m_ScaleFactor = scaleFactor.GetFloat(); + } + } + +#if defined(PK_SCALE_DOWN) + emitterDesc->m_Position.x = emitterDesc->m_Position.x / emitterDesc->m_ScaleFactor; + emitterDesc->m_Position.y = emitterDesc->m_Position.y / emitterDesc->m_ScaleFactor; + emitterDesc->m_Position.z = emitterDesc->m_Position.z / emitterDesc->m_ScaleFactor; + + emitterDesc->m_BackdropMesh.m_Position.x = emitterDesc->m_BackdropMesh.m_Position.x / emitterDesc->m_ScaleFactor; + emitterDesc->m_BackdropMesh.m_Position.y = emitterDesc->m_BackdropMesh.m_Position.y / emitterDesc->m_ScaleFactor; + emitterDesc->m_BackdropMesh.m_Position.z = emitterDesc->m_BackdropMesh.m_Position.z / emitterDesc->m_ScaleFactor; + + emitterDesc->m_Camera.m_Position.x = emitterDesc->m_Camera.m_Position.x / emitterDesc->m_ScaleFactor; + emitterDesc->m_Camera.m_Position.y = emitterDesc->m_Camera.m_Position.y / emitterDesc->m_ScaleFactor; + emitterDesc->m_Camera.m_Position.z = emitterDesc->m_Camera.m_Position.z / emitterDesc->m_ScaleFactor; +#endif + + PF_EffectWorld *input_worldP = nullptr; + result |= AAEData.m_ExtraData.m_SmartRenderData->cb->checkout_layer_pixels(AAEData.m_InData->effect_ref, 0/*POPCORN_INPUT*/, &input_worldP); + if (input_worldP == nullptr) + { + data->m_Lock.unlock(); + return result; + } + + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + emitterDesc->m_UUID = std::to_string(dstID); + emitterDesc->m_LayerID = dstID; + + PopcornFXSuite->UpdateScene(AAEData, emitterDesc); + + result = PF_ABORT(AAEData.m_InData); + if (result) + { + AAEData.m_ExtraData.m_SmartRenderData->cb->checkin_layer_pixels(AAEData.m_InData->effect_ref, 0); + data->m_Lock.unlock(); + return result; + } + + AAEData.m_ExtraData.m_SmartRenderData->cb->checkin_layer_pixels(AAEData.m_InData->effect_ref, 0); + data->m_LastRenderTime = AAEData.m_InData->current_time; + + data->m_Lock.unlock(); + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::ParamValueChanged(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + (void)params; + + std::string id; + PF_Err result = PF_Err_NONE; + + if (GetEffectSequenceUID(AAEData, id) == false) + return false; + if (m_EffectData.count(id) == 0) + return false; + + // this block must be in this function, if not, it will fail. + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + A_Time AETime; + AEGP_LayerH cameraLayer = nullptr; + AETime.scale = AAEData.m_InData->time_scale; + AETime.value = AAEData.m_InData->current_time; + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectCamera(AAEData.m_InData->effect_ref, &AETime, &cameraLayer); + if (cameraLayer == nullptr) + { + A_FloatPoint center; + AEGP_CompH effectComp = nullptr; + + center.x = AAEData.m_InData->width / 2.0f; + center.y = AAEData.m_InData->height / 2.0f; + + A_UTF16Char name[64]; + CopyCharToUTF16("PopcornFX Camera", name); + + AEGP_LayerH layerH = nullptr; + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite5()->AEGP_GetLayerParentComp(layerH, &effectComp); + result |= suites.CompSuite11()->AEGP_CreateCameraInComp(name, center, effectComp, &cameraLayer); + if (result != A_Err_NONE) + return false; + + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper(AAEData.m_InData, kPopcornFXSuite1, kPopcornFXSuiteVersion1, AAEData.m_OutData, "PopcornFX suite was not found."); + PopcornFXSuite->SetDefaultLayerPosition(AAEData, cameraLayer); + + } + SEffectData *data = m_EffectData[id]; + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper(AAEData.m_InData, kPopcornFXSuite1, kPopcornFXSuiteVersion1, AAEData.m_OutData, "PopcornFX suite was not found."); + + if (data->m_Desc != nullptr) + { + if (data->m_Desc->m_IsDeleted) + { + m_EffectData.erase(id); + delete data->m_Desc; + delete data; + return PF_Err_NONE; + } + if (m_ParametersIndexes[Effect_Parameters_Path] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + if (PopcornFXSuite->DisplayBrowseEffectPanel(AAEData, (data->m_Desc)) != A_Err_NONE) + { + strcpy(AAEData.m_OutData->return_msg, "PopcornFX Error: Unable to load effect"); + AAEData.m_OutData->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + } + else + { + SetParameterStreamName(AAEData, data->m_Desc->m_Name, m_ParametersIndexes[Effect_Parameters_Path]); //_UpdateEmitterName(AAEData, desc); + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + else if (m_ParametersIndexes[Effect_Parameters_Path_Marketplace] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + if (PopcornFXSuite->DisplayMarketplacePanel(AAEData, (data->m_Desc)) != A_Err_NONE) + { + strcpy(AAEData.m_OutData->return_msg, "PopcornFX Error: Unable to load effect"); + AAEData.m_OutData->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + } + } + else if (m_ParametersIndexes[Effect_Parameters_Path_Reimport] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + PopcornFXSuite->ReimportEffect(AAEData, (data->m_Desc)); + + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + else if (m_ParametersIndexes[Effect_Parameters_BackdropMesh_Path] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + if (PopcornFXSuite->DisplayBrowseMeshDialog(AAEData, (data->m_Desc)) != A_Err_NONE) + { + strcpy(AAEData.m_OutData->return_msg, "PopcornFX Error: Unable to load mesh"); + AAEData.m_OutData->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + } + else + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + else if (m_ParametersIndexes[Effect_Parameters_BackdropEnvMap_Path] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + if (PopcornFXSuite->DisplayBrowseEnvironmentMapDialog(AAEData, (data->m_Desc)) != A_Err_NONE) + { + strcpy(AAEData.m_OutData->return_msg, "PopcornFX Error: Unable to load Env Map"); + AAEData.m_OutData->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + } + else + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + else if (m_ParametersIndexes[Effect_Parameters_BackdropEnvMap_Reset] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + data->m_Desc->m_BackdropEnvironmentMap.m_Path = ""; + data->m_Desc->m_Update = true; + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + else if (m_ParametersIndexes[Effect_Parameters_BackdropMesh_Reset] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + data->m_Desc->m_BackdropMesh.m_Path = ""; + data->m_Desc->m_Update = true; + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + else if (m_ParametersIndexes[Effect_Parameters_Audio] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + else if (m_ParametersIndexes[Effect_Parameters_BringEffectIntoView] == AAEData.m_ExtraData.m_ChangeParamData->param_index) + { + PopcornFXSuite->MoveEffectIntoCurrentView(AAEData, (data->m_Desc)); + + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + } + } + return result; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::UpdateParamsUI(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + (void)AAEData; + (void)params; + + PF_Err err = PF_Err_NONE; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + std::string id; + + if (GetEffectSequenceUID(AAEData, id) == false) + return false; + + // PK to AE + if (m_EffectData.count(id) != 0) + { + SEffectData *effectData = m_EffectData[id]; + SEmitterDesc *desc = effectData->m_Desc; + + if (desc) + { + if (desc->m_IsDeleted) + { + m_EffectData.erase(id); + delete desc; + delete effectData; + return PF_Err_NONE; + } + + if (desc->m_Update) + { + desc->m_Update = false; + err |= SetParameterStreamName(AAEData, desc->m_Name, m_ParametersIndexes[Effect_Parameters_Path]); //_UpdateEmitterName(AAEData, desc); + err |= SetParameterStreamName(AAEData, desc->m_BackdropMesh.m_Path, m_ParametersIndexes[Effect_Parameters_BackdropMesh_Path]); //_UpdateBackdropMeshPath(AAEData, desc); + } + } + } + PF_ParamDef paramCopy[__Effect_Parameters_Count]; + std::map indexChanged; + + MakeParamCopy(params, paramCopy, __Effect_Parameters_Count); + + if (params[m_ParametersIndexes[Effect_Parameters_TransformType]]->u.pd.value == ETransformType_3D) + { + indexChanged.insert({ { m_ParametersIndexes[Effect_Parameters_Position], paramCopy[m_ParametersIndexes[Effect_Parameters_Position]].ui_flags &= ~(PF_PUI_DISABLED | PF_PUI_INVISIBLE) }, + { m_ParametersIndexes[Effect_Parameters_Position_2D], paramCopy[m_ParametersIndexes[Effect_Parameters_Position_2D]].ui_flags |= PF_PUI_DISABLED | PF_PUI_INVISIBLE }, + { m_ParametersIndexes[Effect_Parameters_Position_2D_Distance], paramCopy[m_ParametersIndexes[Effect_Parameters_Position_2D_Distance]].ui_flags |= PF_PUI_DISABLED | PF_PUI_INVISIBLE }, + }); + + } + else if (params[m_ParametersIndexes[Effect_Parameters_TransformType]]->u.pd.value == ETransformType_2D) + { + indexChanged.insert({ { m_ParametersIndexes[Effect_Parameters_Position], paramCopy[m_ParametersIndexes[Effect_Parameters_Position]].ui_flags |= PF_PUI_DISABLED | PF_PUI_INVISIBLE }, + { m_ParametersIndexes[Effect_Parameters_Position_2D], paramCopy[m_ParametersIndexes[Effect_Parameters_Position_2D]].ui_flags &= ~(PF_PUI_DISABLED | PF_PUI_INVISIBLE) }, + { m_ParametersIndexes[Effect_Parameters_Position_2D_Distance], paramCopy[m_ParametersIndexes[Effect_Parameters_Position_2D_Distance]].ui_flags &= ~(PF_PUI_DISABLED | PF_PUI_INVISIBLE) }, + }); + } + //Apply Change on param + AEGP_EffectRefH effectHandle = nullptr; + err |= suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectHandle); + if (err != A_Err_NONE) + return err; + for (auto it = indexChanged.begin(); it != indexChanged.end(); ++it) + { + AEGP_StreamRefH streamHandle = nullptr; + // Toggle visibility of parameter + err |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AAEID, effectHandle, it->first, &streamHandle); + + bool visibility = false; + if ((it->second & PF_PUI_INVISIBLE) != 0) + visibility = true; + err |= suites.DynamicStreamSuite2()->AEGP_SetDynamicStreamFlag(streamHandle, AEGP_DynStreamFlag_HIDDEN, FALSE, visibility); + err |= suites.StreamSuite2()->AEGP_DisposeStream(streamHandle); + + paramCopy[it->first].ui_flags = it->second; + err |= suites.ParamUtilsSuite3()->PF_UpdateParamUI(AAEData.m_InData->effect_ref, it->first, ¶mCopy[it->first]); + } + + if (effectHandle) + err |= suites.EffectSuite2()->AEGP_DisposeEffect(effectHandle); + return err; +} + +//---------------------------------------------------------------------------- + +PF_Err CPluginInterface::HandleDataFromAEGP(SAAEIOData &AAEData, PF_ParamDef *params[]) +{ + (void)params; + + PF_Err result = PF_Err_NONE; + std::string id; + void *extraData = AAEData.m_ExtraData.m_UndefinedData; + + const EEmitterEffectGenericCall *extraDataType = (EEmitterEffectGenericCall*)(extraData); + + if (*extraDataType == EEmitterEffectGenericCall::EmitterDesc) + { + SEmitterDesc *desc = reinterpret_cast(extraData); + + if (desc) + { + if (desc->m_IsDeleted) + { + if (GetEffectSequenceUID(AAEData, id) == false) + return false; + if (m_EffectData.count(id) != 0) + { + SEffectData *effectData = m_EffectData[id]; + delete effectData; + m_EffectData.erase(id); + } + delete desc; + return PF_Err_NONE; + } + else + { + desc->m_Update = false; + + + size_t extensionIdx = desc->m_Name.find_last_of('.'); + if (extensionIdx != std::string::npos) + desc->m_Name = desc->m_Name.substr(0, extensionIdx) + ".pkfx"; + result |= SetParameterStreamName(AAEData, desc->m_Name, m_ParametersIndexes[Effect_Parameters_Path]); //_UpdateEmitterName(AAEData, desc); + result |= SetParameterStreamName(AAEData, desc->m_BackdropMesh.m_Path, m_ParametersIndexes[Effect_Parameters_BackdropMesh_Path]); //_UpdateBackdropMeshPath(AAEData, desc); + } + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER; + AAEData.m_OutData->out_flags |= PF_OutFlag_REFRESH_UI; + } + } + else if (*extraDataType == EEmitterEffectGenericCall::GetEmitterInfos) + { + SGetEmitterInfos *infoToFill = reinterpret_cast(extraData); + + if (GetEffectSequenceUID(AAEData, id) == false) + return false; + if (m_EffectData.count(id) != 0) + { + strncpy(infoToFill->m_Name, m_EffectData[id]->m_Desc->m_Name.c_str(), 1023); + infoToFill->m_Name[1023] = '\0'; + strncpy(infoToFill->m_PathSource, m_EffectData[id]->m_Desc->m_PathSource.c_str(), 1023); + infoToFill->m_PathSource[1023] = '\0'; + } + } + return result; +} + +//---------------------------------------------------------------------------- + +bool CPluginInterface::_RegisterEffectInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SEffectSequenceDataFlat *sequenceData) +{ + (void)params; + + std::string id; + + if (sequenceData != nullptr) + id = sequenceData->m_EffectUUID; + else if (GetEffectSequenceUID(AAEData, id) == false) + return false; + + if (m_EffectData.count(id) == 0) + { + //Check if effect is valid + { + PF_Err result = PF_Err_NONE; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_EffectRefH effectHandle = nullptr; + AEGP_LayerH layerH; + bool discard = false; + + result |= suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectHandle); + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + + if (result != PF_Err_NONE || effectHandle == nullptr || layerH == nullptr) + discard = true; + if (effectHandle) + result |= suites.EffectSuite2()->AEGP_DisposeEffect(effectHandle); + if (discard == true) + return false; + } + SEffectData *effectData = new SEffectData{}; + effectData->m_Desc = new SEmitterDesc{}; + m_EffectData[id] = effectData; + + if (sequenceData != nullptr) + { + PF_Err result = PF_Err_NONE; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_LayerH layerH; + A_long dstID = 0; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + effectData->m_Desc->m_UUID = std::to_string(dstID); + effectData->m_Desc->m_LayerID = dstID; + if (sequenceData->m_EffectName) + effectData->m_Desc->m_Name = sequenceData->m_EffectName; + if (sequenceData->m_EffectPathSource) + effectData->m_Desc->m_PathSource = sequenceData->m_EffectPathSource; + if (sequenceData->m_EffectBackdropMeshPath) + effectData->m_Desc->m_BackdropMesh.m_Path = sequenceData->m_EffectBackdropMeshPath; + if (sequenceData->m_EffectEnvironmentMapPath) + effectData->m_Desc->m_BackdropEnvironmentMap.m_Path = sequenceData->m_EffectEnvironmentMapPath; + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper( AAEData.m_InData, kPopcornFXSuite1, kPopcornFXSuiteVersion1, AAEData.m_OutData, "PopcornFX suite was not found."); + PopcornFXSuite->HandleNewEmitterEvent(AAEData, effectData->m_Desc); + + AAEData.m_OutData->out_flags |= PF_OutFlag_REFRESH_UI; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPluginInterface::_UnRegisterEffectInstancePlugin(SAAEIOData &AAEData, PF_ParamDef *params[], SEffectSequenceDataFlat *sequenceData) +{ + (void)params; + + std::string id; + + if (sequenceData != nullptr) + id = sequenceData->m_EffectUUID; + else if (GetEffectSequenceUID(AAEData, id) == false) + return false; + + if (m_EffectData.count(id) != 0) + { + SEffectData *effectData = m_EffectData[id]; + + AEFX_SuiteScoper PopcornFXSuite = AEFX_SuiteScoper(AAEData.m_InData, kPopcornFXSuite1, kPopcornFXSuiteVersion1, AAEData.m_OutData, "PopcornFX suite was not found."); + PopcornFXSuite->HandleDeleteEmitterEvent(AAEData, effectData->m_Desc); + + delete effectData->m_Desc; + delete effectData; + + m_EffectData.erase(id); + } + return true; +} + +//---------------------------------------------------------------------------- + +__AAEPK_END diff --git a/AE_Effect_Emitter/Sources/AEEffect_SequenceData.cpp b/AE_Effect_Emitter/Sources/AEEffect_SequenceData.cpp new file mode 100644 index 00000000..2f8c40e0 --- /dev/null +++ b/AE_Effect_Emitter/Sources/AEEffect_SequenceData.cpp @@ -0,0 +1,88 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEEffect_SequenceData.h" + +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +bool SEffectSequenceDataFlat::SetEffectName(const char* name) +{ + strncpy(m_EffectName, name, SequenceCST::MAX_NAME_LEN); + + m_EffectNameLen = strlen(name) + 1; + return true; +} + +//---------------------------------------------------------------------------- + +bool SEffectSequenceDataFlat::SetEffectPathSource(const char *path) +{ + m_EffectPathSourceLen = strlen(path) + 1; + strncpy(m_EffectPathSource, path, SequenceCST::MAX_PATH_LEN); + return true; +} + +//---------------------------------------------------------------------------- + +bool SEffectSequenceDataFlat::SetEffectBackdropMeshPath(const char *path) +{ + m_EffectBackdropMeshPathLen = strlen(path) + 1; + strncpy(m_EffectBackdropMeshPath, path, SequenceCST::MAX_PATH_LEN); + return true; +} + +//---------------------------------------------------------------------------- + +bool SEffectSequenceDataFlat::SetEffectEnvironmentMapPath(const char *path) +{ + m_EffectEnvironmentMapPathLen = strlen(path) + 1; + strncpy(m_EffectEnvironmentMapPath, path, SequenceCST::MAX_PATH_LEN); + return true; +} + +//---------------------------------------------------------------------------- + +bool SEffectSequenceDataFlat::SetUUID(const char *uuid) +{ + strncpy(m_EffectUUID, uuid, SequenceCST::UUID_LEN); + return true; +} + +//---------------------------------------------------------------------------- + +bool SEffectSequenceDataFlat::SetUUID(const std::string &uuid) +{ + strncpy(m_EffectUUID, uuid.c_str(), SequenceCST::UUID_LEN); + return true; +} + +//---------------------------------------------------------------------------- + +void SEffectSequenceDataFlat::SetLayerID(A_long id) +{ + m_LayerID = id; +} + +//---------------------------------------------------------------------------- + +bool SEffectSequenceDataFlat::CopyFrom(SEffectSequenceDataFlat *src) +{ + SetEffectName(src->m_EffectName); + SetEffectPathSource(src->m_EffectPathSource); + SetEffectBackdropMeshPath(src->m_EffectBackdropMeshPath); + SetEffectEnvironmentMapPath(src->m_EffectEnvironmentMapPath); + SetUUID(src->m_EffectUUID); + SetLayerID(src->m_LayerID); + return true; +} + +//---------------------------------------------------------------------------- +__AAEPK_END + diff --git a/AE_Effect_Emitter/Sources/AE_Effect_Emitter.plugin-Info.plist b/AE_Effect_Emitter/Sources/AE_Effect_Emitter.plugin-Info.plist new file mode 100644 index 00000000..2f07e012 --- /dev/null +++ b/AE_Effect_Emitter/Sources/AE_Effect_Emitter.plugin-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleExecutable + Emitter + CFBundleIdentifier + com.PersistantStudio.PopcornFX.Emitter + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + AE_Effect_Emitter + CFBundlePackageType + eFKT + CFBundleSignature + FXTC + LSRequiresCarbon + + NSAppleScriptEnabled + No + NSHumanReadableCopyright + © PersistantStudio PopcornFX + + diff --git a/AE_Effect_Emitter/Sources/AE_Effect_Emitter_PiPL.r b/AE_Effect_Emitter/Sources/AE_Effect_Emitter_PiPL.r new file mode 100644 index 00000000..7ef877b3 --- /dev/null +++ b/AE_Effect_Emitter/Sources/AE_Effect_Emitter_PiPL.r @@ -0,0 +1,73 @@ +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include +#endif + +#ifdef AE_OS_WIN +#include "../../AE_Suites/PopcornFX_Define_Version.h" +#endif +#ifdef AE_OS_MAC +#include "PopcornFX_Define_Version.h" +#endif + +resource 'PiPL' (16000) { + { /* array properties: 12 elements */ + /* [1] */ + Kind { + AEEffect + }, + /* [2] */ + Name { + "Emitter" + }, + /* [3] */ + Category { + "PopcornFX" + }, +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EffectMain"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMacIntel64 {"EffectMain"}, + #endif +#endif + /* [6] */ + AE_PiPL_Version { + 2, + 0 + }, + /* [7] */ + AE_Effect_Spec_Version { + PF_PLUG_IN_VERSION, + PF_PLUG_IN_SUBVERS + }, + /* [8] */ + AE_Effect_Version { + AEPOPCORNFX_PIPL_VERSION + }, + /* [9] */ + AE_Effect_Info_Flags { + 0 + }, + /* [10] */ + AE_Effect_Global_OutFlags { + 101187584 + }, + AE_Effect_Global_OutFlags_2 { + 134222855 + }, + /* [11] */ + AE_Effect_Match_Name { + "ADBE PopcornFX Emitter" + }, + /* [12] */ + AE_Reserved_Info { + 8 + } + } +}; + diff --git a/AE_GeneralPlugin/GeneralPlugin.manifest b/AE_GeneralPlugin/GeneralPlugin.manifest new file mode 100644 index 00000000..ad87fd43 --- /dev/null +++ b/AE_GeneralPlugin/GeneralPlugin.manifest @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AE_GeneralPlugin/Include/AEGP_AEPKConversion.h b/AE_GeneralPlugin/Include/AEGP_AEPKConversion.h new file mode 100644 index 00000000..a965359d --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_AEPKConversion.h @@ -0,0 +1,77 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AECONVERSION_H__ +#define __FX_AECONVERSION_H__ + +#include "AEGP_Define.h" + +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +RHI::EPixelFormat AAEToPK(PF_PixelFormat format); +PF_PixelFormat PKToAAE(RHI::EPixelFormat format); +u32 GetPixelSizeFromPixelFormat(RHI::EPixelFormat format); + +void AAEToPK(A_Matrix4 &in, CFloat4x4 &out); +void AAEToPK(A_Matrix4 &in, CFloat4x4 *out); + +CFloat3 AAEToPK(A_FloatPoint3 &in); +A_FloatPoint3 PKToAAE(CFloat3 &in); + +CFloat3 AngleAAEToPK(A_FloatPoint3 &in); +A_FloatPoint3 AnglePKToAAE(CFloat3 &in); + +EAttributeSemantic AttributePKToAAE(EDataSemantic value); + +EAttributeType AttributePKToAAE(EBaseTypeID value); +EBaseTypeID AttributeAAEToPK(EAttributeType value); + +EAttributeSamplerType AttributeSamplerPKToAAE(SParticleDeclaration::SSampler::ESamplerType type); + +void AAEToPK(SPostFXBloomDesc &in, PKSample::SParticleSceneOptions::SBloom &out); +void AAEToPK(SPostFXDistortionDesc &in, PKSample::SParticleSceneOptions::SDistortion &out); +void AAEToPK(SPostFXToneMappingDesc &in, PKSample::SParticleSceneOptions::SToneMapping &out); +void AAEToPK(SRenderingDesc &in, PKSample::SParticleSceneOptions &out); + +CUbyte3 ConvertSRGBToLinear(CUbyte3 v); +CUbyte3 ConvertLinearToSRGB(CUbyte3 v); + +EApiValue RHIApiToAEApi(RHI::EGraphicalApi value); +RHI::EGraphicalApi AEApiToRHIApi(EApiValue value); + +PKSample::CRHIParticleSceneRenderHelper::ERenderTargetDebug AAEToPK(ERenderType format); +CParticleSamplerDescriptor_VectorField_Grid::EInterpolation AAEToPK(EInterpolationType &value); + +//---------------------------------------------------------------------------- + +inline void WCharToCString(aechar_t *input, CString *destination) +{ + CStringUnicode tmp = CStringUnicode::FromUTF16(input); + destination->Append(tmp.ToUTF8()); +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif // !__FX_AECONVERSION_H__ diff --git a/AE_GeneralPlugin/Include/AEGP_AssetBaker.h b/AE_GeneralPlugin/Include/AEGP_AssetBaker.h new file mode 100644 index 00000000..c2b50a73 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_AssetBaker.h @@ -0,0 +1,222 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_ASSET_BAKER_H__ +#define __AEGP_ASSET_BAKER_H__ + +#include "AEGP_Define.h" + +#include "pk_base_object/include/hbo_object.h" +#include "pk_kernel/include/kr_threads.h" +#include "pk_kernel/include/kr_timers.h" +#include "pk_kernel/include/kr_resources.h" +#include "pk_kernel/include/kr_file_directory_walker.h" +#include + +//---------------------------------------------------------------------------- + +__PK_API_BEGIN + +class CResourceHandlerMesh; +class CResourceHandlerImage; +class CResourceHandlerRectangleList; +class CResourceHandlerFontMetrics; +class CResourceHandlerVectorField; +class CResourceManager; +class CCookery; +namespace HBO { + class CContext; +} + +__PK_API_END + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +class CResourceHandlerDummy : public IResourceHandler +{ +public: + CResourceHandlerDummy() { } + virtual ~CResourceHandlerDummy() { } + virtual void *Load(const CResourceManager *resourceManager, u32 resourceTypeID, const CString &resourcePath, bool pathNotVirtual, const SResourceLoadCtl &loadCtl, CMessageStream &loadReport, SAsyncLoadStatus *asyncLoadStatus) override + { + (void)resourceManager; (void)resourceTypeID; (void)resourcePath; (void)pathNotVirtual; (void)loadCtl; (void)loadReport; (void)asyncLoadStatus; + return null; + } + virtual void *Load(const CResourceManager *resourceManager, u32 resourceTypeID, const CFilePackPath &resourcePath, const SResourceLoadCtl &loadCtl, CMessageStream &loadReport, SAsyncLoadStatus *asyncLoadStatus) override + { + (void)resourceManager; (void)resourceTypeID; (void)resourcePath; (void)loadCtl; (void)loadReport; (void)asyncLoadStatus; + return null; + } + + virtual void Unload(const CResourceManager *, u32, void *) override { } + virtual void AppendDependencies(const CResourceManager *, u32, void *, TArray &) const override { } + virtual void AppendDependencies(const CResourceManager *, u32, const CString &, bool, TArray &) const override { } + virtual void AppendDependencies(const CResourceManager *, u32, const CFilePackPath &, TArray &) const override { } + virtual void BroadcastResourceChanged(const CResourceManager *, const CFilePackPath &) override { } +}; + +class CProjectSettingsFinder : public CFileDirectoryWalker +{ +public: + CProjectSettingsFinder(const CString &rootDir, IFileSystem *controller = null); + + virtual void FileNotifier(const CFilePack *pack, const char *fullPath, u32 fileFirstCharPos) override; + virtual bool DirectoryNotifier(const CFilePack *pack, const char *fullPath, u32 directoryFirstCharPos) override; + const CString &ProjectSettingsPath() const; + +private: + static bool ProjectSettingsPathValidator(const char *filePath); + +private: + CString m_ProjectSettingsPath; +}; + +//---------------------------------------------------------------------------- + +class SBakeContext +{ +public: + SBakeContext(); + ~SBakeContext(); + + IResourceHandler *m_BakeResourceMeshHandler; + IResourceHandler *m_BakeResourceImageHandler; + IResourceHandler *m_BakeResourceRectangleListHandler; + IResourceHandler *m_BakeResourceFontMetricsHandler; + IResourceHandler *m_BakeResourceVectorFieldHandler; + + IFileSystem *m_BakeFSController; + CResourceManager *m_BakeResourceManager; + HBO::CContext *m_BakeContext; + + bool m_Initialized; + + bool Init(); + + static bool _RemapPath(CString &path); + static CString _RemapFX(const CString &path); +}; + +//---------------------------------------------------------------------------- + +enum EAssetChangesType : int +{ + Undefined = 0, + Add, + Remove, + Update, + Rename +}; + +//---------------------------------------------------------------------------- + +class HBO_CLASS(CEditorAssetEffect), public CBaseObject +{ +private: + // Camera + HBO_FIELD(CFloat3, StartCameraPosition); + HBO_FIELD(CFloat3, StartCameraOrientation); +public: + CEditorAssetEffect(); + virtual ~CEditorAssetEffect(); + + void CopyFrom(CEditorAssetEffect *other); + + HBO_CLASS_DECLARATION(); +}; +PK_DECLARE_REFPTRCLASS(EditorAssetEffect); + +//---------------------------------------------------------------------------- + +class CEffectBaker : public CRefCountedObject +{ +private: + struct SAssetChange + { + CString m_EffectPath; + CString m_EffectPathOld; + EAssetChangesType m_Type; + }; + + struct SDirectoryValidator + { + const CStringView m_LibraryDir; + const CStringView m_EditorCacheDir; + const CStringView m_TemplatesDir; + + bool cmp(const char *rawPath) + { + const CStringView path = CStringView::FromNullTerminatedString(rawPath); + return !path.Contains(m_LibraryDir) && !path.Contains(m_EditorCacheDir) && !path.Contains(m_TemplatesDir); + } + + SDirectoryValidator(const CString &library, const CString &editor, const CString &templat) + : m_LibraryDir(library) + , m_EditorCacheDir(editor) + , m_TemplatesDir(templat) + { + } + }; + +public: + CEffectBaker(); + ~CEffectBaker(); + + void FileAdded(const CString &path); + void FileRemoved(const CString &path); + void FileChanged(const CString &path); + void FileChangedRelativePath(const CString &path); + void FileRenamed(const CString &oldPath, const CString &newPath); + + void Initialize(const CString &srcPack, const CString &dstPack, const CString &pkprojPath); + void LoadProjectSettings(const CString &pkprojPath); + void Clear(); + + void Lock(); + void Unlock(); + + void CancelAllFileChanges(); + int PopFileChanges(); + bool IsChangeRegistered(const CString &path, EAssetChangesType type); + void ReimportAssets(TArray &paths, bool importPkri = true); + void ReimportAllAssets(bool refesh); + void GetAllAssetPath(); + const CString &GetSourcePackRootPath() const { return m_RootDir; } + bool BakeAssetOrAddToRetryStack(SAssetChange &path); + bool LoadAndBrowseEffect(const CString &path); + bool BakeAsset(const CString &path, bool bakeDependencies = true); + + SBakeContext &GetBakeContextData() { return m_BakeContext; } + + void ClearBakedPaths() { m_BakedPaths.Clear(); } +private: + + bool m_Initialized; + + TArray m_ToBake; + TArray m_BakedPaths; + CString m_DstPackPath; + CString m_SrcPackPath; + PFilePack m_SrcPack; + PFilePack m_DstPack; + + SBakeContext m_BakeContext; + CCookery m_Cookery; + Threads::CCriticalSection m_Lock; + + CString m_RootDir; + CString m_LibraryDir; + CString m_EditorCacheDir; + CString m_PresetsDir; +}; +PK_DECLARE_REFPTRCLASS(EffectBaker); + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_Attribute.h b/AE_GeneralPlugin/Include/AEGP_Attribute.h new file mode 100644 index 00000000..760d8e8d --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_Attribute.h @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AAEATTRIBUTE_H__ +#define __FX_AAEATTRIBUTE_H__ + +#include "AEGP_Define.h" + +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- + +namespace PopcornFX +{ + PK_FORWARD_DECLARE(ParticleSamplerDescriptor); + PK_FORWARD_DECLARE(ShapeDescriptor); + PK_FORWARD_DECLARE(ImageSampler); + PK_FORWARD_DECLARE(ResourceMeshBatch); + PK_FORWARD_DECLARE(ResourceMesh); + + class CMeshSurfaceSamplerStructuresRandom; + class CMeshSurfaceSamplerStructuresFromUV; + class CMeshKdTree; + class CMeshVolumeSamplerStructuresRandom; + class CMeshProjection; + + struct SDensitySamplerData; +} + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +struct SSamplerBase +{ + PParticleSamplerDescriptor m_SamplerDescriptor; + bool m_Dirty = true; + + SSamplerBase(); + virtual ~SSamplerBase(); +}; + +//---------------------------------------------------------------------------- + +struct SSamplerShape : public SSamplerBase +{ + ESamplerShapeType m_Type; + + PShapeDescriptor m_ShapeDesc; + + + PResourceMeshBatch m_MeshBatch; + + // Acceleration structures are now owned by the integration: +#if (PK_GEOMETRICS_BUILD_MESH_SAMPLER_SURFACE != 0) + CMeshSurfaceSamplerStructuresRandom *m_SurfaceSamplingStructs; + CMeshSurfaceSamplerStructuresFromUV *m_SurfaceUVSamplingStructs; + + bool CreateSurfaceSamplingStructs(const PResourceMeshBatch mesh); + bool CreateSurfaceUVSamplingStructs(const PResourceMeshBatch mesh); +#endif + +#if (PK_GEOMETRICS_BUILD_MESH_SAMPLER_VOLUME != 0) + CMeshVolumeSamplerStructuresRandom *m_VolumeSamplingStructs; + + bool CreateVolumeSamplingStructs(const PResourceMeshBatch mesh); +#endif + +#if (PK_GEOMETRICS_BUILD_MESH_PROJECTION != 0) && 0 + CMeshProjection *m_ProjectionStructs; + + bool CreateProjectionStructs(const PResourceMeshBatch mesh); +#endif + +#if (PK_GEOMETRICS_BUILD_KDTREE != 0) + CMeshKdTree *m_KdTree; + + bool CreateKdTree(const PResourceMeshBatch mesh); +#endif + + SSamplerShape(); + virtual ~SSamplerShape(); + bool UpdateShape(SShapeSamplerDescriptor *aeShapeDesc); +}; + +//---------------------------------------------------------------------------- + +struct SSamplerImage : public SSamplerBase +{ + PRefCountedMemoryBuffer m_TextureData; + u32 m_Width; + u32 m_Height; + u32 m_SizeInBytes; + CImage::EFormat m_PixelFormat; + + int m_WrapMode; + + CImageSampler *m_ImageDesc = null; + SDensitySamplerData *m_DensitySampler = null; + + SSamplerImage(); + virtual ~SSamplerImage(); + bool UpdateImage(SImageSamplerDescriptor *aeTextDesc); +}; + +//---------------------------------------------------------------------------- + +struct SSamplerText : public SSamplerBase +{ + CString m_Data; + + SSamplerText(); + virtual ~SSamplerText(); + bool UpdateText(STextSamplerDescriptor *aeTextDesc); +}; + +//---------------------------------------------------------------------------- + +struct SSamplerAudio : public SSamplerBase +{ + enum SamplingType + { + SamplingType_Unknown = 0, + SamplingType_WaveForm, + SamplingType_Spectrum, + }; + + float *m_Waveform; + u32 m_InputSampleCount; + u32 m_SampleCount; + + AEGP_SoundDataH m_SoundData; + + SamplingType m_SamplingType; + float *m_WaveformData; + TArray m_WaveformPyramid; + + CStringId m_Name; + + Threads::CCriticalSection m_Lock; + bool m_BuiltThisFrame; + + SSamplerAudio(); + virtual ~SSamplerAudio(); + bool UpdateSound(SAudioSamplerDescriptor *aeTextDesc); + + bool CleanAudioPyramid(); + bool BuildAudioPyramidIFN(); + + bool ReleaseAEResources(); +}; + +//---------------------------------------------------------------------------- + +struct SSamplerVectorField : public SSamplerBase +{ + SSamplerVectorField(); + virtual ~SSamplerVectorField(); + bool UpdateVectorField(SVectorFieldSamplerDescriptor *aeShapeDesc); +}; + +//---------------------------------------------------------------------------- + +struct SPendingAttribute +{ + PF_ProgPtr m_ParentEffectPtr; + + SAttributeBaseDesc *m_Desc; + + SSamplerBase *m_PKDesc; + + AEGP_EffectRefH m_AttributeEffectRef; + + bool m_Deleted = false; + + SPendingAttribute(PF_ProgPtr parent = null, SAttributeBaseDesc *desc = null, AEGP_EffectRefH effectRef = null) + : m_ParentEffectPtr(parent) + , m_Desc(desc) + , m_PKDesc(null) + , m_AttributeEffectRef(effectRef) + {}; + + SPendingAttribute(const SPendingAttribute &other) + : m_ParentEffectPtr(other.m_ParentEffectPtr) + , m_Desc(other.m_Desc) + , m_PKDesc(other.m_PKDesc) + , m_AttributeEffectRef(other.m_AttributeEffectRef) + {}; + + ~SPendingAttribute() + { + PK_ASSERT(!m_AttributeEffectRef); + }; + +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_Define.h b/AE_GeneralPlugin/Include/AEGP_Define.h new file mode 100644 index 00000000..68347847 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_Define.h @@ -0,0 +1,41 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEGP_DEFINE_H__ +#define __FX_AEGP_DEFINE_H__ + +#include + +#include + +//---------------------------------------------------------------------------- + +#define __AEGP_PK_BEGIN namespace AEGPPk { +#define __AEGP_PK_END } + +#define ASSERT_AE_ERR(result, value) PK_ASSERT(value != A_Err_NONE); result |= value; + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +using namespace PK_NAMESPACE; +using namespace AAePk; + +//---------------------------------------------------------------------------- + +enum EApiValue //Do not reorder/change values +{ + D3D11 = 1, + D3D12, + Metal, + Size, +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif // !__FX_AEGP_DEFINE_H__ diff --git a/AE_GeneralPlugin/Include/AEGP_FileDialog.h b/AE_GeneralPlugin/Include/AEGP_FileDialog.h new file mode 100644 index 00000000..d57aa9c1 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_FileDialog.h @@ -0,0 +1,82 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_FILEDIALOG_H__ +#define __AEGP_FILEDIALOG_H__ + +#include "AEGP_Define.h" +#if defined (PK_MACOSX) +#include "AEGP_FileDialogMac.h" +#endif +#if defined (PK_WINDOWS) +#include "AEGP_WinFileDialog.h" +#endif +#include + +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +#if defined(PK_MACOSX) + +//---------------------------------------------------------------------------- + +struct SMacFileDialogFilterData +{ + CString m_Desc; + CString m_Type; + + SMacFileDialogFilterData(const CString desc, const CString type); +}; + +//---------------------------------------------------------------------------- + +struct SMacFileOpenData +{ + TArray m_Filters; + PopcornFX::FastDelegate m_Cb; + + SMacFileOpenData(); + + ~SMacFileOpenData(); + + bool AddFilter(const CString &desc, const CString &type); +}; + +//---------------------------------------------------------------------------- + +bool MacBasicFileOpen(SMacFileOpenData &data); + +//---------------------------------------------------------------------------- +#endif + +//---------------------------------------------------------------------------- + +struct SFileDialog +{ +#if defined(PK_WINDOWS) + SWinFileOpenData m_Data; +#elif defined (PK_MACOSX) + SMacFileOpenData m_Data; +#endif + bool m_Cancel; + + SFileDialog(); + + bool AddFilter(const CString &desc, const CString &type); + void SetCallback(FastDelegate cb) { m_Data.m_Cb = cb; }; + bool BasicFileOpen(); + + bool IsCancelled(); + +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_FileDialogMac.h b/AE_GeneralPlugin/Include/AEGP_FileDialogMac.h new file mode 100644 index 00000000..68a5dcab --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_FileDialogMac.h @@ -0,0 +1,23 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#ifndef __AEGP_FILEDIALOGMAC_H__ +#define __AEGP_FILEDIALOGMAC_H__ + +#include "AEGP_Define.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +#if defined(PK_MACOSX) + +CString OpenFileDialogMac(const TArray &filters, const CString &defaultPathAndFile = CString()); + +#endif + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_FileWatcher.h b/AE_GeneralPlugin/Include/AEGP_FileWatcher.h new file mode 100644 index 00000000..c9989506 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_FileWatcher.h @@ -0,0 +1,43 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_FILE_WATCHER_H__ +#define __AEGP_FILE_WATCHER_H__ + +#include "AEGP_Define.h" + +#include + +__AEGP_PK_BEGIN +//---------------------------------------------------------------------------- + +class CFileWatcher : public CRefCountedObject +{ +private: + PFileSystemWatcher m_FileWatcher; + CString m_PathToWatch; + + bool CreateWatcherIFN(); + void RemoveWatchIFN(); + +public: + CFileWatcher(); + ~CFileWatcher(); + + void PauseFileWatcher(); + void RestartFileWatcher(); + + bool SetWatchPack(const CString &pathToWatch); + void SetNotifierAdd(void(*callback)(const CString &filePath)); + void SetNotifierRemove(void(*callback)(const CString &filePath)); + void SetNotifierModify(void(*callback)(const CString &filePath)); + void SetNotifierRename(void(*callback)(const CString &oldFilePath, const CString &newFilePath)); +}; +PK_DECLARE_REFPTRCLASS(FileWatcher); + +//---------------------------------------------------------------------------- +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_FrameCollector.h b/AE_GeneralPlugin/Include/AEGP_FrameCollector.h new file mode 100644 index 00000000..866c148d --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_FrameCollector.h @@ -0,0 +1,46 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#include "PK-SampleLib/PKSample.h" + +#include +#include + +#include + +#include "AEGP_Define.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- +// +// Frame collector +// +//---------------------------------------------------------------------------- + +// CFrameCollector is specialized with our policy to work with RHI. +// Create your own policy to use it in your custom engine. +class CFrameCollector : public TFrameCollector +{ +public: + CFrameCollector(); + virtual ~CFrameCollector(); + + // Views to cull against (setup from update thread) + TMemoryView m_CullingFrustums; + +private: + // Early Cull: Culls an entire medium on the update thread (when collecting the frame) + virtual bool EarlyCull(const PopcornFX::CAABB &bbox) const override; + + // Late Cull: Cull draw requests or individual pages on the render thread (when collecting draw calls) + // You can use this method if you don't have render thread views available from the update thread + // Ideally, cull in EarlyCull, but you should implement both methods + // Late cull also allows for finer culling (per draw request / per page) + virtual bool LateCull(const PopcornFX::CAABB &bbox) const override { return EarlyCull(bbox); } +}; + +//---------------------------------------------------------------------------- +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Include/AEGP_LayerHolder.h b/AE_GeneralPlugin/Include/AEGP_LayerHolder.h new file mode 100644 index 00000000..4d2556ae --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_LayerHolder.h @@ -0,0 +1,152 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once +#include "AEGP_Define.h" + +#include "AEGP_Attribute.h" + +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include + +namespace AAePk +{ + struct SAAEIOData; + struct SAttributeDesc; + struct SAttributeSamplerDesc; + struct SEmitterDesc; +}; + +__AEGP_PK_BEGIN + +PK_FORWARD_DECLARE(AAEScene); +PK_FORWARD_DECLARE(RendererProperties); + +//---------------------------------------------------------------------------- + +class HBO_CLASS(CGraphicOverride), public CBaseObject +{ +public: + HBO_FIELD(u32, RendererID); + HBO_FIELD(u32, PropertyID); + + HBO_FIELD(CString, Value); +public: + CGraphicOverride(); + ~CGraphicOverride(); + + bool operator==(const CGraphicOverride &other); + + HBO_CLASS_DECLARATION(); +}; +PK_DECLARE_REFPTRCLASS(GraphicOverride); + +//---------------------------------------------------------------------------- + +class HBO_CLASS(CLayerProperty), public CBaseObject +{ +public: + HBO_FIELD(CString, CompName); + HBO_FIELD(u32, ID); + HBO_FIELD(TArray, RendererProperties); + +public: + CLayerProperty(); + ~CLayerProperty(); + + HBO_CLASS_DECLARATION(); +}; +PK_DECLARE_REFPTRCLASS(LayerProperty); + +//---------------------------------------------------------------------------- + +struct SPendingEmitter +{ + PF_ProgPtr m_EffectHandle; + + //Data Owned by AEEffect. Do not free in AEGP + SEmitterDesc *m_Desc; + + SPendingEmitter(PF_ProgPtr ptr = null, SEmitterDesc *desc = null) + : m_EffectHandle(ptr) + , m_Desc(desc) + { + + } + + SPendingEmitter(const SPendingEmitter& other) + { + m_EffectHandle = other.m_EffectHandle; + m_Desc = other.m_Desc; + } + + ~SPendingEmitter() + { + m_EffectHandle = null; + m_Desc = null; + } +}; + +//---------------------------------------------------------------------------- + +struct SLayerHolder +{ + u32 ID = 0; + + u32 m_TimeScale = 0; + u32 m_TimeStep = 0; + u32 m_CurrentTime = 0; + CFloat4x4 m_ViewMatrix = CFloat4x4::IDENTITY; + CFloat4 m_CameraPos = CFloat4::ZERO; + + AEGP_LayerH m_EffectLayer = null; + AEGP_LayerH m_CameraLayer = null; + PAAEScene m_Scene = null; + + TArray m_SPendingEmitters; + SPendingEmitter m_SpawnedEmitter; + + TArray m_SPendingAttributes; + THashMap m_DeletedAttributes; + THashMap m_SpawnedAttributes; + + THashMap m_DeletedAttributesSampler; + THashMap m_SpawnedAttributesSampler; + + SSamplerAudio *m_BackdropAudioWaveform = null; + SSamplerAudio *m_BackdropAudioSpectrum = null; + + float m_ScaleFactor = 1; + bool m_ForceRender = false; + bool m_Deleted = false; + + Threads::CCriticalSection m_LayerLock; + + CString m_SourcePackPath; + PFilePack m_BakedPack = null; + + CString m_LayerName; + CString m_CompositionName; + PLayerProperty m_LayerProperty = null; + + SLayerHolder(); + ~SLayerHolder(); + + bool Clear(SPBasicSuite* suite); +}; + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Include/AEGP_Log.h b/AE_GeneralPlugin/Include/AEGP_Log.h new file mode 100644 index 00000000..2778c891 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_Log.h @@ -0,0 +1,51 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEGP_LOG_H__ +#define __FX_AEGP_LOG_H__ + +#include + +#include +#include +#include +#include +#include +#include + +#include "AEGP_Define.h" + +//---------------------------------------------------------------------------- +namespace AAePk +{ + struct SAAEIOData; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_BEGIN + +class CAELog +{ + static bool s_PKState; + static SAAEIOData *s_IOData; +public: + static bool LogErrorWindows(SAAEIOData *AAEData, const CString errorStr); + + static bool SetIOData(SAAEIOData *AAEData); + static void ClearIOData(); + static bool TryLogErrorWindows(const CString errorStr); + static void SetPKLogState(bool state); + + + static bool TryLogInfoWindows(const CString infoStr); +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif + diff --git a/AE_GeneralPlugin/Include/AEGP_Main.h b/AE_GeneralPlugin/Include/AEGP_Main.h new file mode 100644 index 00000000..8f3086d9 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_Main.h @@ -0,0 +1,30 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEGP_MAIN_H__ +#define __FX_AEGP_MAIN_H__ + +#include + +#include +#include +#include +#include +#include +#include + +#ifdef AE_OS_WIN + typedef unsigned short PixelType; + #include +#endif + +//---------------------------------------------------------------------------- +// This entry point is exported through the PiPL (.r file) +extern "C" DllExport AEGP_PluginInitFuncPrototype EntryPointFunc; + +//---------------------------------------------------------------------------- + +#endif + diff --git a/AE_GeneralPlugin/Include/AEGP_PackExplorer.h b/AE_GeneralPlugin/Include/AEGP_PackExplorer.h new file mode 100644 index 00000000..5e777cd4 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_PackExplorer.h @@ -0,0 +1,61 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_PACK_EXPLORER_H__ +#define __FX_PACK_EXPLORER_H__ + +#include "AEGP_Define.h" + +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +class CPackExplorer : public CFileDirectoryWalker, public CRefCountedObject +{ +protected: + CString m_Pack; + TArray m_EffectPaths; + + virtual bool DirectoryNotifier(const CFilePack *pack, const char *fullPath, u32 directoryFirstCharPos) override; + virtual void FileNotifier(const CFilePack *pack, const char *fullPath, u32 fileFirstCharPos) override; + +public: + CPackExplorer(const CString &pack, IFileSystem *fileSystem = null); + virtual ~CPackExplorer(); + + void Explore(); // will start scanning + + const CString &Pack() const { return m_Pack; } + TMemoryView EffectPaths() const { return m_EffectPaths; } +}; + +//---------------------------------------------------------------------------- + +class CBakedPackExplorer : public CFileDirectoryWalker, public CRefCountedObject +{ +protected: + CString m_Pack; + TArray m_EffectPaths; + + virtual bool DirectoryNotifier(const CFilePack *pack, const char *fullPath, u32 directoryFirstCharPos) override; + virtual void FileNotifier(const CFilePack *pack, const char *fullPath, u32 fileFirstCharPos) override; + +public: + CBakedPackExplorer(const CString &pack, IFileSystem *fileSystem = null); + virtual ~CBakedPackExplorer(); + + void Explore(); // will start scanning + + const CString &Pack() const { return m_Pack; } + TMemoryView EffectPaths() const { return m_EffectPaths; } +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif // __FX_PACK_EXPLORER_H__ diff --git a/AE_GeneralPlugin/Include/AEGP_ParticleScene.h b/AE_GeneralPlugin/Include/AEGP_ParticleScene.h new file mode 100644 index 00000000..52206183 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_ParticleScene.h @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AAEPARTICLESCENE_H__ +#define __FX_AAEPARTICLESCENE_H__ + +#include "AEGP_Define.h" + +#include + +#include +#include +#include + +#include + +__AEGP_PK_BEGIN + +class CAAEScene; + +//---------------------------------------------------------------------------- + +class CAAEParticleScene : public IParticleScene +{ +public: + CAAEParticleScene() {} + virtual ~CAAEParticleScene() {} + + virtual void RayTracePacket( const Colliders::STraceFilter &traceFilter, + const Colliders::SRayPacket &packet, + const Colliders::STracePacket &results) override; + + void ClearBackdropMesh(); + void SetBackdropMeshTransform(const CFloat4x4 &transforms); + void SetBackdropMesh(const TResourcePtr &resourceMesh, const CFloat4x4 &transforms); + const CFloat4x4 &BackdropMeshTransforms() const { return m_BackdropMeshTransforms; } + + virtual TMemoryView GetAudioSpectrum(CStringId channelGroup, u32 &outBaseCount) const override; + virtual TMemoryView GetAudioWaveform(CStringId channelGroup, u32 &outBaseCount) const override; + + CAAEScene *m_Parent = null; +private: + // Mesh backdrop + TArray m_BackdropMeshes; + CFloat4x4 m_BackdropMeshTransforms = CFloat4x4::IDENTITY; +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_PopcornFXPlugins.h b/AE_GeneralPlugin/Include/AEGP_PopcornFXPlugins.h new file mode 100644 index 00000000..eeda0a43 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_PopcornFXPlugins.h @@ -0,0 +1,55 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_POPCORNPLUGINS_H__ +#define __FX_POPCORNPLUGINS_H__ + +#include "AEGP_Define.h" + +__AEGP_PK_BEGIN +//---------------------------------------------------------------------------- + +enum ERuntimePlugin +{ + EPlugin_ImageCodecDDS = 1 << 0, + EPlugin_ImageCodecPNG = 1 << 1, + EPlugin_ImageCodecJPG = 1 << 2, + EPlugin_ImageCodecTGA = 1 << 3, + EPlugin_ImageCodecTIFF = 1 << 4, + EPlugin_ImageCodecPKM = 1 << 5, + EPlugin_ImageCodecPVR = 1 << 6, + EPlugin_ImageCodecHDR = 1 << 7, + EPlugin_ImageCodecEXR = 1 << 8, + + EPlugin_MeshCodecFBX = 1 << 16, + EPlugin_MeshCodecGranny = 1 << 17, + + EPlugin_CompilerBackendVM = 1 << 20, + EPlugin_CompilerBackendISPC = 1 << 21, + EPlugin_CompilerBackendD3D = 1 << 22, + EPlugin_CompilerBackendPSSLC = 1 << 23, + + // All "base" plugins + EPlugin_Default = EPlugin_CompilerBackendVM | + EPlugin_CompilerBackendD3D | + EPlugin_ImageCodecDDS | + EPlugin_ImageCodecPNG | + EPlugin_ImageCodecJPG | + EPlugin_ImageCodecTGA | + EPlugin_ImageCodecHDR, +}; + +//---------------------------------------------------------------------------- + +// loads selected plugins. set 'selected' to a bitwise combinations of the above plugin flags. must be matched by a call to 'UnregisterPlugins' +bool PopcornRegisterPlugins(u32 selected = 0); + +// unloads all previously loaded plugins +void PopcornUnregisterPlugins(); + +//---------------------------------------------------------------------------- +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_RenderContext.h b/AE_GeneralPlugin/Include/AEGP_RenderContext.h new file mode 100644 index 00000000..9fb4ebc5 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_RenderContext.h @@ -0,0 +1,120 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_RENDERCONTEXT_H__ +#define __FX_RENDERCONTEXT_H__ + +#include "AEGP_Define.h" + +#include +#include +#include + +#include + +#include +#include + +//---------------------------------------------------------------------------- + +namespace AAePk +{ + struct SAAEIOData; +} + +__AEGP_PK_BEGIN + +class CAAEBaseContext; +PK_FORWARD_DECLARE(AAERenderContext); + +//---------------------------------------------------------------------------- + +class CAAERenderContext : public CRefCountedObject +{ +public: + CAAERenderContext(); + ~CAAERenderContext(); + + bool InitializeIFN(RHI::EGraphicalApi api, const CString &className); + bool InitGraphicContext(RHI::EPixelFormat rhiformat, u32 width, u32 height); + bool Destroy(); + + CAAEBaseContext *GetAEGraphicContext(); + + PKSample::CRHIParticleSceneRenderHelper *GetCurrentSceneRenderer(); + CUint2 GetViewportSize() const; + void *GetWindowHandle() { return m_WindowHandle; } + + void LogGraphicsErrors(); + + void SetShaderLoader(PKSample::CShaderLoader *sl); + PKSample::CShaderLoader *GetShaderLoader(); + void SetPostFXOptions(PKSample::SParticleSceneOptions &so); + + bool SetAsCurrentContext(); + + void SetBackgroundOptions(bool isOverride, float alphaValue) { m_IsOverride = isOverride; m_AlphaValue = alphaValue; } + void SetGamma(float gamma) { m_Gamma = gamma; } + + bool RenderFrameBegin(u32 width, u32 height); + bool RenderFrameEnd(); + + bool AERenderFrameBegin (SAAEIOData &AAEData, bool getBackground = true); + bool AERenderFrameEnd (SAAEIOData &AAEData); + bool RenderToSAAEWorld (SAAEIOData &AAEData, AEGP_SuiteHandler &suiteHandler, PF_EffectWorld *inputWorld, PF_EffectWorld *effectWorld, PF_PixelFormat format); + bool GetCompositingBuffer(SAAEIOData &AAEData, AEGP_SuiteHandler &suiteHandler, PF_EffectWorld *inputWorld, PF_EffectWorld *effectWorld, PF_PixelFormat format); + + CUint2 GetContextSize(); + +private: + bool CreateInternalWindowIFN(const CString& className); + + void *m_WindowHandle; + void *m_DeviceContext; + + u32 m_Width; + u32 m_Height; + + RHI::EGraphicalApi m_API; + + static Threads::CCriticalSection m_AEGraphicContextLock; + static CAAEBaseContext *m_AEGraphicContext; + + RHI::EPixelFormat m_Format; + PF_PixelFormat m_AAEFormat; + + bool m_Initialized; + + float m_Gamma = 1.0f; + bool m_IsOverride = false; + float m_AlphaValue = 1.0f; + + PKSample::CRHIParticleSceneRenderHelper *m_RHIRendering; + + //Shared between rendercontexts + PKSample::CShaderLoader *m_ShaderLoader; + + PKSample::SParticleSceneOptions m_SceneOptions; + + PRefCountedMemoryBuffer m_UploadBuffer = null; + u32 m_UploadBufferSize = 0; + + PRefCountedMemoryBuffer m_DownloadBuffer = null; + u32 m_DownloadBufferSize = 0; + +private: + void ResetCheckedOutWorlds(SAAEIOData &AAEData); + + PF_EffectWorld *m_InputWorld = null; + PF_EffectWorld *m_OutputWorld = null; + +}; +PK_DECLARE_REFPTRCLASS(AAERenderContext); + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_Scene.h b/AE_GeneralPlugin/Include/AEGP_Scene.h new file mode 100644 index 00000000..d43adcb7 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_Scene.h @@ -0,0 +1,316 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AAESCENE_H__ +#define __FX_AAESCENE_H__ + +#include "AEGP_Define.h" + +#include "AEGP_RenderContext.h" +#include "AEGP_FrameCollector.h" + +#include + +#include + +#include + +#include +#include +#include + +#include "AEGP_Attribute.h" +#include "AEGP_ParticleScene.h" + +#include + +//---------------------------------------------------------------------------- + +__PK_API_BEGIN +PK_FORWARD_DECLARE(SkeletonState); +__PK_API_END + +__AAEPK_BEGIN + +struct SEmitterDesc; + +__AAEPK_END + + +__AEGP_PK_BEGIN + +PK_FORWARD_DECLARE(AAERenderContext); +PK_FORWARD_DECLARE(SkinnedMeshInstance); + +// Forward declare our simple scene definition +struct SSimpleSceneDef; +struct SLayerHolder; + +struct SSamplerAudio; +struct SPendingAttribute; + +//---------------------------------------------------------------------------- + +struct SAAEWorld +{ + CFloat3 m_WorldOrigin; + float m_WorldWidth = -1.0f; + float m_WorldHeight = -1.0f; +}; + +//---------------------------------------------------------------------------- + +struct SRendererProperties +{ + CString m_Name; + CString m_Value; + + CString m_EffectLayerName; + u32 m_EffectLayerUID; + + CStringId m_LayerID; + + u32 m_RendererUID; + u32 m_PropertyUID; + + + SRendererProperties(const CString &name, const CString &value, const CString &effectLayerName, u32 effectLayerUID, CStringId layerID, u32 rdrUID, u32 propUID) + : m_Name(name) + , m_Value(value) + , m_EffectLayerName(effectLayerName) + , m_EffectLayerUID(effectLayerUID) + , m_LayerID(layerID) + , m_RendererUID(rdrUID) + , m_PropertyUID(propUID) + { + + } +}; + +PK_FORWARD_DECLARE(AAEScene); + +//---------------------------------------------------------------------------- + +class CAAEScene : public CRefCountedObject +{ +public: + + struct SSkinnedDataSimple + { + struct SSkinnedDataSubMesh + { + u32 m_SubMeshID; + TStridedMemoryView m_Positions; + TStridedMemoryView m_Normals; + SSkinnedDataSubMesh() : m_SubMeshID(0) {} + }; + + bool m_Valid; + TSemiDynamicArray m_SubMeshes; + + SSkinnedDataSimple() : m_Valid(false) {} + }; +public: + static u32 s_SceneID; + u32 m_ID; +public: + CAAEScene(); + virtual ~CAAEScene(); + + bool Init(SAAEIOData &AAEData); + bool Quit(); + static void ShutdownPopcornFX(); + + bool Update(SAAEIOData &AAEData); + bool UpdateLight(SLayerHolder *layer); + bool UpdateAttributes(SLayerHolder *layer); + + void UpdateBackdropTransform(SEmitterDesc *desc); + bool UpdateBackdrop(SLayerHolder *layer, SEmitterDesc *desc); + bool Render(SAAEIOData &AAEData); + + bool ResetEffect(bool unload); + + TArray &GetRenderers() { return m_OverridableProperties; } + HBO::CContext *GetContext() { return m_HBOContext; } + bool GetEmitterBounds(CAABB &bounds); + + void SetLayerHolder(SLayerHolder *parent); + void SetCameraViewMatrix(const CFloat4x4 &viewMatrix, const CFloat4 &pos, const float cameraZoom); + + void SetWorldSize(SAAEIOData &AAEData); + void SetEmitterPosition(const CFloat3 &position, ETransformType type); + void SetEmitterRotation(const CFloat3 &rotation); + void SetEmitterTeleport(bool teleport = true); + + bool SetupScene(bool seeking, bool refresh); + + //Pack&Effect Management + bool SetPack(PFilePack pack, bool unload); + bool SetSelectedEffect(CString name, bool refresh); + + void SetEffectDescriptor(SEmitterDesc* desc); + + bool RefreshAssetList(); + + SSamplerAudio *GetAudioSamplerDescriptor(CStringId name, SSamplerAudio::SamplingType type); + + void SetSeeking(bool seekingEnabled) { m_SeekingEnabled = seekingEnabled; } + void SetSkinnedBackdropParams(bool enabled, bool weightedSampling, u32 colorStreamID, u32 weightStreamID); + +protected: + bool _LateInitializeIFN(); + bool _SetupMediumCollection(); + void _FastForwardSimulation(SAAEIOData &AAEData, float timeTarget); + bool _UpdateShapeSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc* descriptor); + bool _UpdateTextSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc* descriptor); + bool _UpdateImageSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc* descriptor); + bool _UpdateAudioSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc* descriptor); + bool _UpdateVectorFieldSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc* descriptor); + bool _SeekingUpdateEffect(float dt, float elapsedTime, float timeTarget, u32 curUpdateIdx, u32 totalUpdatesCount); + void _SeekingLoadAndRunEffect(CParticleMediumCollection *mediumCollection, + const CParticleEffect *effect, + const CFloat4x4 &transform, + float timeFromStartOfFrame, + float timeToEndOfFrame, + float elapsedTime); + bool _SeekingWaitForUpdateFence(CTimer *waitTimer, float customMaxUpdateTime = -1.0f); + u32 _PickNewEffectSeed(); + + // Scene + bool _LoadScene(const SSimpleSceneDef &fxPath); + void _CollectCurrentFrame(); + void _RenderLastCollectedFrame(); + + void _UpdateEmitter(float dt); + void _UpdateCamera(); + void _UpdateMediumCollectionView(); + + void _OnUpdateComplete(CParticleMediumCollection *collection); + + // Effects + bool _LoadEffectIFN(const SSimpleSceneDef &sceneDef); + PParticleEffectInstance _InstantiateEffect(); + PParticleEffectInstance _InstantiateEffect(float timeFromStartOfFrame, float timeToEndOfFrame); + void _OnInstanceDeath(const PParticleEffectInstance &instance); + + bool _RebuildAttributes(const SSimpleSceneDef &sceneDef); + + void _ExtractAEFrameInfo(SAAEIOData &AAEData); + bool _CheckRenderAbort(SAAEIOData *AAEData); + // Camera + void _SetProj(float fovxDegrees, const CFloat2 &winDimPixel, float zNear, float zFar); + + void _FillAdditionnalDataForRender(); +public: + // GPU Sim +#if (PK_PARTICLES_UPDATER_USE_D3D12 != 0 || PK_PARTICLES_UPDATER_USE_D3D11 != 0) + static bool SimDispatchMask(const PopcornFX::CParticleDescriptor *descriptor, PopcornFX::SSimDispatchHint &outHint); + void D3D12_EnqueueTask(const PopcornFX::PParticleUpdaterTaskD3D12 &task); +#endif + +protected: + //World + SAAEWorld m_SAAEWorldData; + PF_ProgPtr m_EffectRef; + SEmitterDesc *m_EffectDesc; + + SLayerHolder *m_LayerHolder; + + CFloat3 m_EmitterDefaultPosition; + CFloat3 m_EmitterDefaultOrientation; + + ETransformType m_EmitterTransformType; + CFloat4x4 m_EmitterTransformsCurrent; + CFloat4x4 m_EmitterTransformsPrevious; + CFloat3 m_EmitterVelCurrent; + CFloat3 m_EmitterVelPrevious; + + CUint2 m_OriginViewport; + + bool m_Paused; + + //AE Interface + CFloat3 m_AEEmitterPosition; + CFloat3 m_AEEmitterRotation; + u32 m_AEEmitterSeed; + + CFloat4x4 m_AEViewMatrix; + CFloat4 m_AECameraPos; + float m_AECameraZoom; + bool m_TeleportEmitter; + + u32 m_FrameNumber; + float m_DT; + float m_PreviousTimeSec; + float m_CurrentTimeSec; + + bool m_Initialized; + bool m_SeekingEnabled; + + A_Err m_FrameAbortedDuringSeeking; + + PKSample::SCamera m_Camera; + + PParticleEffect m_Effect; + + PBaseObjectFile m_EffectFile; + CString m_EffectPath; + PParticleEffectInstance m_EffectLastInstance; + + PParticleAttributeList m_AttributesList; + + TArray m_ActiveAudioSamplers; + + CFloat4 m_EmitterPositionNormalized_Debug; + CFloat4x4 m_LastInstanceXForms; + float m_ElapsedTimeSinceLastSpawn; + + PKSample::CRHIParticleRenderDataFactory m_ParticleRenderDataFactory; + CFrameCollector m_FrameCollector; + PKSample::SRHIDrawOutputs m_DrawOutputs; + EDrawCallSortMethod m_DCSortMethod; + + PKSample::SSceneInfoData m_SceneInfoData; + RHI::PConstantSet m_SceneInfoConstantSet; + RHI::PGpuBuffer m_SceneInfoConstantBuffer; + + CString m_SelectedEffect; + + PFilePack m_LoadedPack; + + HBO::CContext *m_HBOContext; + CAAEParticleScene *m_ParticleScene; + CParticleMediumCollection *m_ParticleMediumCollection; + float m_Stats_SimulationTime; + + CGuid m_ViewSlotInMediumCollection; + PKSample::SBackdropsData m_BackdropData; + + TResourcePtr m_ResourceMesh; + PSkinnedMeshInstance m_SkinnedMeshInstance; + PSkeletonState m_SkeletonState; + TArray m_FXInstancesSkinnedData; + + CResourceManager *m_ResourceManager; + + //Skinned Mesh Sampling + bool m_HasBoundBackdrop; + bool m_IsWeightedSampling; + u32 m_ColorStreamID; + u32 m_WeightStreamID; + SAAEIOData *m_AAEDataForSeeking; + +private: + TArray m_OverridableProperties; + bool m_ForceRestartSeeking; +}; +PK_DECLARE_REFPTRCLASS(AAEScene); + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_SkinnedMesh.h b/AE_GeneralPlugin/Include/AEGP_SkinnedMesh.h new file mode 100644 index 00000000..529b6509 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_SkinnedMesh.h @@ -0,0 +1,122 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_SKINNEDMESH_H__ +#define __AEGP_SKINNEDMESH_H__ + +#include "AEGP_Define.h" + +#include +#include + +// For skinned mesh backdrops +#include +#include +#include + +//---------------------------------------------------------------------------- + +namespace PopcornFX +{ + PK_FORWARD_DECLARE(SkeletonState); + PK_FORWARD_DECLARE(ResourceMeshBatch); +} + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +enum EMeshChannels +{ + Channel_Position = 0x1, + Channel_Normal = 0x2, + Channel_Tangent = 0x4, + Channel_Velocity = 0x8, +}; + +//---------------------------------------------------------------------------- + +class CSkinnedMesh : public CRefCountedObject +{ +protected: + PSkeletonState m_SkeletonState; + CTimeline m_Timeline; + + struct SSubMesh + { + PCResourceMeshBatch m_SkeletalMesh; + PSkeletonState m_SkeletonState; + CSkinAsyncContext m_SkinUpdateContext; + SSamplerSourceOverride m_SampleSourceOverride; + void *m_RawSkinnedData = null; + u32 m_RawSkinnedDataElementCount = 0; + TStridedMemoryView m_Positions; // view inside 'm_RawSkinnedData' + TStridedMemoryView m_Normals; // view inside 'm_RawSkinnedData' + TStridedMemoryView m_Tangents; // view inside 'm_RawSkinnedData' + TStridedMemoryView m_OldPositions; // view inside 'm_RawSkinnedData' + TStridedMemoryView m_Velocities; // view inside 'm_RawSkinnedData' + float m_SkinDt; // accessed by skinning jobs + bool m_FirstFrame; + + ~SSubMesh() + { + PK_FREE(m_RawSkinnedData); + } + + bool Empty() const { return m_SkeletalMesh == null; } + + void Skin_PreProcess(u32 vertexStart, u32 vertexCount, const SSkinContext &ctx); + void Skin_PostProcess(u32 vertexStart, u32 vertexCount, const SSkinContext &ctx); + }; + + TArray m_SubMeshes; + + float m_SkinDt; // accessed by skinning jobs + bool m_FirstFrame; + u32 m_SamplingChannels; + + bool _Init_Impl(const TResourcePtr &meshResource, u32 samplingChannels, const PSkeletonState &srcSkeletonState); + +public: + CSkinnedMesh(); + ~CSkinnedMesh(); + + void Reset(); + bool Init(const TResourcePtr &meshResource, u32 samplingChannels, const PSkeletonState &srcSkeletonState); + bool Play(const PSkeletonAnimationInstance &animInstance); + void Stop(); + void Update(float dt); + bool Valid() const { return m_SkeletonState != null; } + // void Render(); + void StartAsyncUpdateSkin(float dt); + bool WaitAsyncUpdateSkin(); + void ClearVelocities(); + + u32 SubMeshCount() const { return m_SubMeshes.Count(); } + TStridedMemoryView Positions(u32 batchId) const { return m_SubMeshes[batchId].m_Positions; } + TStridedMemoryView Normals(u32 batchId) const { return m_SubMeshes[batchId].m_Normals; } + + u32 SamplingChannels() const { return m_SamplingChannels; } + + // CMeshAnimRenderer &Renderer() { return m_Renderer; } + PSkeletonState SkeletonState() { return m_SkeletonState; } + bool HasGeometry() const + { + for (const auto &mesh : m_SubMeshes) + { + if (mesh.m_SkeletalMesh != null && mesh.m_SkeletalMesh->RawMesh() != null && !mesh.m_SkeletalMesh->RawMesh()->TriangleBatch().Empty()) + return true;; + } + return false; + } + SSamplerSourceOverride *SamplerSourceOverride(u32 batchId) { return &m_SubMeshes[batchId].m_SampleSourceOverride; } +}; +PK_DECLARE_REFPTRCLASS(SkinnedMesh); + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_SkinnedMeshInstance.h b/AE_GeneralPlugin/Include/AEGP_SkinnedMeshInstance.h new file mode 100644 index 00000000..1df464a7 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_SkinnedMeshInstance.h @@ -0,0 +1,82 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_SKINNEDMESHINSTANCE_H__ +#define __AEGP_SKINNEDMESHINSTANCE_H__ + +#include "AEGP_Define.h" + +#include + +#include +#include +#include +#include + +//---------------------------------------------------------------------------- + +__PK_API_BEGIN + +PK_FORWARD_DECLARE(SkeletonAnimationInstance); +PK_FORWARD_DECLARE(ParticleSamplerDescriptor_Shape); +PK_FORWARD_DECLARE(MeshSurfaceSamplerStructuresRandom); +PK_FORWARD_DECLARE(MeshVolumeSamplerStructuresRandom); +PK_FORWARD_DECLARE(ResourceMesh); + +namespace HBO { + class CContext; +} +__PK_API_END + +__AEGP_PK_BEGIN + +PK_FORWARD_DECLARE(SkinnedMesh); + +//---------------------------------------------------------------------------- + +class CSkinnedMeshInstance : public CRefCountedObject +{ +public: + PSkeletonAnimationInstance m_SkeletonAnimationInstance; + CString m_CurrentAnimationPath; + PSkinnedMesh m_SkinnedMesh; + PParticleSamplerDescriptor_Shape m_ShapeDescOverride; + + CMeshSurfaceSamplerStructuresRandom *m_SurfaceSamplingStruct = null; + CMeshVolumeSamplerStructuresRandom *m_VolumeSamplingStruct = null; + + CFloat4x4 m_CurMeshTransformScaled; + CFloat4x4 m_CurMeshTransform; + CFloat4x4 m_PrevMeshTransform; + +public: + CSkinnedMeshInstance(); + ~CSkinnedMeshInstance(); + + CSkinnedMeshInstance &operator = (const CSkinnedMeshInstance &other); + + + void ResetXForms(const CFloat4x4 &backdropXForm); + void SetBackdropXForms(const CFloat4x4 &backdropXForm); + + CFloat3 PredictVelocity(float dt); + + void ResetAnimationCursor(); + + void Update(float dt); + void StartAsyncUpdateSkin(float dt); + bool WaitAsyncUpdateSkin(); + + void ClearSkinnedMesh(); + bool LoadSkinnedMeshIFN(const TResourcePtr &meshResource, u32 samplingChannels, const PSkeletonState &scrSkeletonState); + bool LoadAnimationIFN(HBO::CContext *context, const CString &pksaPath, bool forceReload); + bool SetupAttributeSampler(CMeshNew *srcMesh, bool weightedSampling, u32 weightedSamplingColorStreamId, u32 weightedSamplingChannelId); +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_System.h b/AE_GeneralPlugin/Include/AEGP_System.h new file mode 100644 index 00000000..63a3c71d --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_System.h @@ -0,0 +1,60 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once +#include "AEGP_Define.h" + +#include +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +struct SEditorExecutable +{ + CString m_BinaryPathUninstall; + CString m_BinaryPath; + SEngineVersion m_Version; + + SEditorExecutable() {} + SEditorExecutable(const CString &path, const CString &uninstallerPath, const SEngineVersion &version) + : m_BinaryPathUninstall(uninstallerPath) + , m_BinaryPath(path) + , m_Version(version) + { + + } + + bool operator < (const SEditorExecutable &other) const { return m_Version < other.m_Version; } +}; + +//---------------------------------------------------------------------------- + +class CSystemHelper +{ +public: // Get Hardware ID + static const CString GetUniqueHardwareID(); + static const CString GetUniqueHardwareIDForHuman(); + + static bool LaunchEditorAsPopup(); + +private: + static u16 *_ComputeSystemUniqueId(); + + static void _Smear(u16 *id); + static void _Unsmear(u16 *id); + + static u16 _GetMacHash(); + + static u16 _GetCPUHash(); + static const char *_GetMachineName(); + +private: + CSystemHelper() = delete; + ~CSystemHelper() = delete; +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Include/AEGP_UpdateAEState.h b/AE_GeneralPlugin/Include/AEGP_UpdateAEState.h new file mode 100644 index 00000000..8e2d7dcc --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_UpdateAEState.h @@ -0,0 +1,90 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_UPDATEAESTATE_H__ +#define __AEGP_UPDATEAESTATE_H__ + +#include "AEGP_Define.h" +#include "PopcornFX_Suite.h" + +#include "AEGP_World.h" + +#include +#include +#include +#include +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +struct SLayerHolder; +struct SPendingAttribute; + +//---------------------------------------------------------------------------- + +class CAEUpdater +{ +public: + static A_Err UpdateLayerAtTime(SLayerHolder *targetLayer, float time, bool isSeeking); + + static bool GetLightsAtTime(SLayerHolder *layer, A_Time &AETime, TArray &lights); + static bool GetCameraViewMatrixAtTime(SLayerHolder *layer, CFloat4x4 &view, CFloat4 &pos, A_Time &AETime, float &cameraZoom); + + static int s_AttributeIndexes[__Attribute_Parameters_Count]; + static int s_EmitterIndexes[__Effect_Parameters_Count]; + static int s_SamplerIndexes[__AttributeSamplerType_Parameters_Count]; +private: + CAEUpdater(); + ~CAEUpdater(); + + static A_Err _UpdateLayerAtTime(SLayerHolder *targetLayer, A_Time &AETime, bool isSeeking); + + static A_Err _UpdateSamplerAtTime(SLayerHolder *targetLayer, SPendingAttribute *sampler, AEGP_EffectRefH effect, A_Time &AETime, bool isSeeking); + static A_Err _UpdateAttributeAtTime(SLayerHolder *targetLayer, SPendingAttribute *attribute, AEGP_EffectRefH effect, A_Time &AETime, bool isSeeking); + static A_Err _UpdateEmitterAtTime(SLayerHolder *layer, AEGP_EffectRefH effectRef, A_Time &AETime, bool isSeeking); + static bool _SetupAudioSampler(SLayerHolder *targetLayer, AEGP_LayerIDVal layerID, A_Time &AETime, SSamplerAudio *samplerAudio, bool isSeeking); + + template + static A_Err _GetParamsStreamValueAtTime(s32 idx, AEGP_EffectRefH effectRef, A_Time &AETime, T &out) + { + A_Err result = A_Err_NONE; + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + AEGP_StreamRefH streamHandler; + AEGP_StreamValue2 value; + AEGP_StreamType stream_type; + + result |= suites.StreamSuite5()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, idx, &streamHandler); + + AEFX_CLR_STRUCT(value); + if (!PK_VERIFY(streamHandler != null)) + return result; + + result |= suites.StreamSuite5()->AEGP_GetStreamType(streamHandler, &stream_type); + if (AEGP_StreamType_NO_DATA == stream_type) + { + PK_ASSERT_NOT_REACHED(); + result |= suites.StreamSuite5()->AEGP_DisposeStream(streamHandler); + return result; + } + result |= suites.StreamSuite5()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + + out = *reinterpret_cast(&value.val.one_d); + + result |= suites.StreamSuite5()->AEGP_DisposeStreamValue(&value); + result |= suites.StreamSuite5()->AEGP_DisposeStream(streamHandler); + + return result; + } +}; + +//---------------------------------------------------------------------------- + + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_VaultHandler.h b/AE_GeneralPlugin/Include/AEGP_VaultHandler.h new file mode 100644 index 00000000..78103e2d --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_VaultHandler.h @@ -0,0 +1,99 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_VAULHANDLER_H__ +#define __AEGP_VAULHANDLER_H__ + +#include + +#include "AEGP_Define.h" +#include "AEGP_FileWatcher.h" + +#include +#include + +//---------------------------------------------------------------------------- + +namespace AAePk +{ + struct SAttributeSamplerDesc; +} + +__AEGP_PK_BEGIN + +PK_DECLARE_REFPTRCLASS(LogListenerFile); + +//---------------------------------------------------------------------------- + +struct SResourceBakeConfig +{ + bool m_StraightCopy = false; + bool m_IsAnimTrack = false; + bool m_IsSkeletalAnim = false; +}; + +//---------------------------------------------------------------------------- + +class CVaultHandler +{ +public: + CVaultHandler(); + ~CVaultHandler(); + + bool InitializeIFN(); + bool ShutdownIFN(); + //func ptr callback for the file watcher + static void FileAdded(const CString &path); + static void FileRemoved(const CString &path); + static void FileChanged(const CString &path); + static void FileChangedRelativePath(const CString &path); + static void FileRenamed(const CString &oldPath, const CString &newPath); + + bool IsBakedAssetLatestVersion(const CString &srcPath, const CString &dstPath); + bool LoadEffectIntoVault(const CString &packPath, CString &effectPath, const CString &pkprojPath, bool &refresh); + CString ImportResource(const CString resourcePath); + + CString CopyResource(const CString resourcePath); + + CString BakeVectorField(const CString resourcePath, const CString targetPath, const SResourceBakeConfig &config); + CString BakeMesh(const CString resourcePath, const CString targetPath, const SResourceBakeConfig &config); + CString BakeResource(const CString resourcePath, const SResourceBakeConfig &config); + + PFilePack GetVaultPackFromPath(CString path); + + const CString VaultPathRoot() const { return m_VaultPathRoot; }; + const CString VaultPathAssets() const { return m_VaultPathAssets; }; + const CString VaultPathCache() const { return m_VaultPathCache; }; + const CString VaultPathLog() const { return m_VaultPathLogs; }; + PFilePack InternalPack() const { return m_InternalPack; }; +private: + + bool _SetupVault(); +private: + + bool m_Initialized = false; + + PFileWatcher m_FileWatcher = null; + + PLogListenerFile m_AELogFileListener = null; + + PFilePack m_InternalPack = null; + + CString m_VaultPathRoot = ""; + CString m_VaultPathAssets = ""; + CString m_VaultPathCache = ""; + CString m_VaultPathLogs = ""; + + static const char *k_VaultFolderMainName; + static const char *k_VaultFolderAssetsName; + static const char *k_VaultFolderCacheName; + static const char *k_VaultFolderLogsName; +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_WinFileDialog.h b/AE_GeneralPlugin/Include/AEGP_WinFileDialog.h new file mode 100644 index 00000000..46c22aa2 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_WinFileDialog.h @@ -0,0 +1,111 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#if defined(PK_WINDOWS) + +#include +#include + +using namespace PopcornFX; + +//---------------------------------------------------------------------------- + +struct SWinFileDialogFilterData +{ + wchar_t *m_Desc; + wchar_t *m_Type; + + COMDLG_FILTERSPEC m_Spec; + + SWinFileDialogFilterData(const CString desc, const CString type) + : m_Desc(null) + , m_Type(null) + { + convert(&m_Desc, desc); + convert(&m_Type, type); + + m_Spec.pszName = m_Desc; + m_Spec.pszSpec = m_Type; + } + + // Simple move assignment operator + SWinFileDialogFilterData(SWinFileDialogFilterData&& other) + { + m_Desc = other.m_Desc; + m_Type = other.m_Type; + + m_Spec.pszName = m_Desc; + m_Spec.pszSpec = m_Type; + + other.m_Desc = null; + other.m_Type = null; + } + + SWinFileDialogFilterData& operator=(SWinFileDialogFilterData&& other) + { + m_Desc = other.m_Desc; + m_Type = other.m_Type; + + m_Spec.pszName = m_Desc; + m_Spec.pszSpec = m_Type; + + other.m_Desc = null; + other.m_Type = null; + return *this; + } + + ~SWinFileDialogFilterData() + { + if (m_Desc != null) + PK_FREE(m_Desc); + if (m_Type != null) + PK_FREE(m_Type); + } + + void convert(wchar_t **dst, const CString& desc) + { + const int wideStringLength = ::MultiByteToWideChar(CP_UTF8, 0, desc.Data(), -1, NULL, 0); + if (!PK_VERIFY(wideStringLength >= 0)) + return; + *dst = PK_TALLOC(wideStringLength); + if (!PK_VERIFY(*dst != null)) + return; + + ::MultiByteToWideChar(CP_UTF8, 0, desc.Data(), -1, *dst, wideStringLength); + } +}; + +//---------------------------------------------------------------------------- + +struct SWinFileOpenData +{ + TArray m_Filters; + PopcornFX::FastDelegate m_Cb; + + SWinFileOpenData() + { + } + + + ~SWinFileOpenData() + { + } + + bool AddFilter(const CString &desc, const CString &type) + { + //SWinFileDialogFilterData filterData(desc, type); + if (!PK_VERIFY(m_Filters.PushBack(SWinFileDialogFilterData(desc, type)).Valid())) + return false; + return true; + } +}; + +//---------------------------------------------------------------------------- + +HRESULT WinBasicFileOpen(SWinFileOpenData& data); + +//---------------------------------------------------------------------------- + +#endif diff --git a/AE_GeneralPlugin/Include/AEGP_WinSystem.h b/AE_GeneralPlugin/Include/AEGP_WinSystem.h new file mode 100644 index 00000000..61616ccc --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_WinSystem.h @@ -0,0 +1,34 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once +#include "AEGP_Define.h" +#include "AEGP_System.h" + +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +#if defined(PK_WINDOWS) + +class CWinSystemHelper +{ +private: + CWinSystemHelper() = delete; + ~CWinSystemHelper() = delete; +public: + static CString GetLastErrorAsString(); + static CString GetLastErrorAsString(TArray &ignore); + static CString _GetWindowsInstallDir(); + static TArray _FindInstalledVersions(const CString &baseSearchPath); + + static SEditorExecutable GetMatchingEditor(const SEngineVersion &version); +}; + +#endif + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Include/AEGP_World.h b/AE_GeneralPlugin/Include/AEGP_World.h new file mode 100644 index 00000000..5ac41b71 --- /dev/null +++ b/AE_GeneralPlugin/Include/AEGP_World.h @@ -0,0 +1,322 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_WORLD_H__ +#define __FX_WORLD_H__ + +#include + +#include +#if defined(PK_MACOSX) +# include +#endif +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include + + +#include "AEGP_Define.h" +#include "AEGP_Attribute.h" +#include "AEGP_Scene.h" +#include "AEGP_LayerHolder.h" +#include "AEGP_VaultHandler.h" + +#include + +#include + +//---------------------------------------------------------------------------- + +namespace AAePk +{ + struct SAAEIOData; + struct SAttributeDesc; + struct SAttributeSamplerDesc; + struct SEmitterDesc; +} + +namespace PopcornFX +{ + PK_FORWARD_DECLARE(LogListenerFile); +} + + +__AEGP_PK_BEGIN +//---------------------------------------------------------------------------- + +PK_FORWARD_DECLARE(EffectBaker); +PK_FORWARD_DECLARE(AAERenderContext); + +class CPanelBaseGUI; + +//---------------------------------------------------------------------------- + +struct SUIEvent +{ + virtual ~SUIEvent() {}; + virtual bool Exec() = 0; +}; + +//---------------------------------------------------------------------------- + +struct SUIEventString : public SUIEvent +{ + SLayerHolder *m_TargetLayer; + CString m_Data; + PopcornFX::FastDelegate m_Cb; + + virtual bool Exec() override + { + return m_Cb(m_TargetLayer, m_Data); + } +}; + +//---------------------------------------------------------------------------- + +struct SAEPreferenciesKeys +{ + static constexpr const char *kSection = "AEPocornFX"; + static constexpr const char *kApi = "Api"; + + static constexpr const EApiValue kSupportedAPIs[] = + { +#if PK_BUILD_WITH_D3D12_SUPPORT != 0 + EApiValue::D3D11, +#endif +#if PK_BUILD_WITH_D3D11_SUPPORT != 0 + EApiValue::D3D12, +#endif +#if PK_BUILD_WITH_METAL_SUPPORT != 0 + EApiValue::Metal, +#endif + }; + static constexpr const char *kApiNames[EApiValue::Size] = { "Unknown", "DirectX 11", "DirectX 12", "Metal" }; + + static const char *GetGraphicsApiAsCharPtr(EApiValue value); + static const char *GetGraphicsApiAsCharPtr(RHI::EGraphicalApi value); +}; + +//---------------------------------------------------------------------------- + +class HBO_CLASS(CAEPProjectProperties), public CBaseObject +{ +public: + HBO_FIELD(CString, ProjectName); + HBO_FIELD(TArray, LayerProperties); + +public: + CAEPProjectProperties(); + ~CAEPProjectProperties(); + + HBO_CLASS_DECLARATION(); +}; +PK_DECLARE_REFPTRCLASS(AEPProjectProperties); + +//---------------------------------------------------------------------------- + +class CPopcornFXWorld +{ +public: + ~CPopcornFXWorld(); + static CPopcornFXWorld &Instance(); + + bool Setup(SPBasicSuite *pica_basicP, AEGP_PluginID id); + bool SetCommandHandle(AEGP_Command &command, const char *name); + + AEGP_PluginID GetPluginID(); + SPBasicSuite *GetAESuites(); + + bool FetchAEProject(); + + RHI::EGraphicalApi GetRenderApi(); + void SetRenderApi(EApiValue AEGraphicsApi); + + bool IdleUpdate(); + bool HandleNewAttributeEvent(PF_ProgPtr &effectRef, SAttributeDesc *desc, bool asyncMerge = true, SLayerHolder *layer = null); + bool HandleNewAttributeSamplerEvent(PF_ProgPtr &effectRef, SAttributeSamplerDesc *desc, bool asyncMerge = true, SLayerHolder *layer = null); + bool HandleNewAttributes(TArray &attributes, PF_ProgPtr &effectRef, SLayerHolder *layer, bool asyncMerge = true); + + void CreatePanel(AEGP_PlatformViewRef container, AEGP_PanelH panelH, AEGP_PanelFunctions1 *outFunctionTable, AEGP_PanelRefcon *outRefcon); + void Command(AEGP_Command command, AEGP_HookPriority hookPriority, A_Boolean alreadyHandled, A_Boolean *handledPB); + void UpdateMenu(AEGP_WindowType activeWindow); + + void ClearAttributesAndSamplers(SLayerHolder *layer); + + CStringId GetAEEffectID(AEGP_EffectRefH &effect, s32 paramIdx); + + CStringId GetAttributeID(AEGP_EffectRefH &effect); + CStringId GetAttributeID(SAttributeBaseDesc *desc); + + CStringId GetAttributeSamplerID(AEGP_EffectRefH &effect); + + s32 _ExecSPendingEmitters(SLayerHolder *layer); + + s32 _ExecSPendingAttributes(SLayerHolder *layer); + s32 _ExecClearAttributes(SLayerHolder *layer); + + bool _ExecDeleteAttribute(SPendingAttribute *attribute, AEGP_EffectRefH &effectRef); + bool _ExecDeleteAttributeSampler(SPendingAttribute *attribute, AEGP_EffectRefH &effectRef); + + bool _SetupAutoRender(AEGP_EffectRefH &effect); + + bool _GetAEPath(AEGP_GetPathTypes type, CString &dst); + + //Pack Management + bool SetDestinationPackFromPath(SLayerHolder &layer, const CString &packPath); + + CString GetPluginInstallationPath(); + CString GetInternalPackPath(); + CString GetResourcesPath(); + + CString GetPluginVersion() const; + AEGP_InstalledEffectKey GetPluginEffectKey(EPKChildPlugins type) const; + + void SetWorkerCount(u32 count) { m_WorkerCount = count; } + u32 GetWorkerCount() const { return m_WorkerCount; } + + CVaultHandler &GetVaultHandler() { return m_VaultHandler; } + + void RefreshAssetList(); + + TArray &GetLayers() { return m_Layers; } + SLayerHolder *GetLayerForSEmitterDesc(SEmitterDesc *desc); + SLayerHolder *GetLayerForSEmitterDescID(CStringId id); + + bool SetSelectedEffectAsync(SLayerHolder *targetLayer, CString &name); + bool SetSelectedEffectFromPath(SEmitterDesc *desc, CString path, bool forceReload = false); + bool SetSelectedEffect(SLayerHolder *layer, CString &name); + bool SetEffectDefaultTransform(SLayerHolder *layer, const CFloat3 &pos, const CFloat3 &rot); + bool SetBackdropMeshDefaultTransform(SLayerHolder *layer); + + bool SetPanelInstance(CPanelBaseGUI *panel); + + //Suite + bool InitializeIFN(SAAEIOData &AAEData); + bool HandleNewEmitterEvent(AAePk::SAAEIOData &AAEData, SEmitterDesc *desc); + bool HandleDeleteEmitterEvent(AAePk::SAAEIOData &AAEData, SEmitterDesc *desc); + + bool CheckEmitterValidity(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor); + bool UpdateScene(SAAEIOData &AAEData, SEmitterDesc *desc); + bool UpdateEmitter(SAAEIOData &AAEData, SEmitterDesc *desc); + + bool InvalidateEmitterRender(SLayerHolder *layer, AEGP_EffectRefH effectRef); + bool InvalidateEmitterRender(SAAEIOData &AAEData, SEmitterDesc *desc); + + bool LaunchEditorAsPopup(AAePk::SAAEIOData &AAEData, SEmitterDesc *desc); + + bool ShutdownIFN(); + + void SetProfilingState(bool state); + + void SetParametersIndexes(const int *indexes, EPKChildPlugins plugin); + bool SetDefaultLayerPosition(SAAEIOData& AAEData, AEGP_LayerH layer); + bool MoveEffectIntoCurrentView(SAAEIOData &AAEData, SEmitterDesc *descriptor); + + PAAERenderContext GetCurrentRenderContext(); + + void OnEndSetupScene(); + + bool GetMostRecentCompName(CString &compName); + bool SetLayerName(SLayerHolder *layer); + bool SetLayerCompName(SLayerHolder *layer); + + const PBaseObjectFile &GetProjectConfFile(); + bool CreateLayerPropertyIFP(SLayerHolder *layer); + + bool SetResourceOverride(CStringId layerID, u32 rdrID, u32 propID, const CString &value); + bool WriteProjectFileModification(); + + //HOOK + static A_Err DeathHook(AEGP_GlobalRefcon pluginRefCon, AEGP_DeathRefcon refCon); + static A_Err IdleHook(AEGP_GlobalRefcon pluginRefCon, AEGP_IdleRefcon refCon, A_long *maxSleep); + + static A_Err CreatePanelHook(AEGP_GlobalRefcon pluginRefconP, + AEGP_CreatePanelRefcon refconP, + AEGP_PlatformViewRef container, + AEGP_PanelH panelH, + AEGP_PanelFunctions1 *outFunctionTable, + AEGP_PanelRefcon *outRefcon); + + static A_Err CommandHook( AEGP_GlobalRefcon plugin_refconP, + AEGP_CommandRefcon refconP, + AEGP_Command command, + AEGP_HookPriority hook_priority, + A_Boolean already_handledB, + A_Boolean *handledPB); + + static A_Err UpdateMenuHook( AEGP_GlobalRefcon plugin_refconP, + AEGP_UpdateMenuRefcon refconP, + AEGP_WindowType active_window); + + Threads::CCriticalSection &GetRenderLock() { return m_RenderLock; } + +private: + CPopcornFXWorld(); + + + static CPopcornFXWorld *m_Instance; + + bool m_Initialized; + + CString m_ClassName; + + TArray m_AAETreadID; + u32 m_WorkerCount; + + TArray m_Layers; + + Threads::CCriticalSection m_Lock; + + CPanelBaseGUI *m_Panel = null; + + SPBasicSuite *m_Suites; + AEGP_PluginID m_AEGPID; + AEGP_InstalledEffectKey m_PKInstalledPluginKeys[_PLUGIN_COUNT]; + + AEGP_Command m_Command = 42; + CString m_CommandName; + + RHI::EGraphicalApi m_GraphicsApi; + + CVaultHandler m_VaultHandler; + + //Developpement + float m_CameraZoom = 2000.0; + + PFilePack m_ProjectPack = null; + PBaseObjectFile m_ProjectConfFile = null; + PAEPProjectProperties m_ProjectProperty = null; + CString m_AEProjectFilename; + CString m_AEProjectPath; + PLogListenerFile m_AELogFileListener; + + CString m_PluginPath; + CString m_UserPluginPath; + CString m_AllUserPluginPath; + CString m_AEPath; + CString m_MostRecentCompName; + + + Threads::CCriticalSection m_UIEventLock; + TArray m_UIEvents; + + Threads::CCriticalSection m_RenderLock; +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif //!__FX_WORLD_H__ + diff --git a/AE_GeneralPlugin/Include/Panels/AEGP_GraphicalResourcesTreeModel.h b/AE_GeneralPlugin/Include/Panels/AEGP_GraphicalResourcesTreeModel.h new file mode 100644 index 00000000..e064ad6a --- /dev/null +++ b/AE_GeneralPlugin/Include/Panels/AEGP_GraphicalResourcesTreeModel.h @@ -0,0 +1,163 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_GRAPHICALRESOURCESTREEMODEL_H__ +#define __AEGP_GRAPHICALRESOURCESTREEMODEL_H__ + +#include "AEGP_Define.h" + +#include "pk_kernel/include/kr_string_id.h" + +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- + +__AEGP_PK_BEGIN + +struct SRendererProperties; + +//---------------------------------------------------------------------------- + +class CGraphicResetButtonView +{ +public: + explicit CGraphicResetButtonView(); + + void paint(QPainter *painter, const QRect &rect, const QPalette &palette, bool hover) const; + QSize sizeHint() const; + + QPixmap m_Pixmap; +}; + +//---------------------------------------------------------------------------- + +class CGraphicResourceView +{ +public: + enum class ViewType { ViewType_Effect, ViewType_PathResource, ViewType_Layer }; + + explicit CGraphicResourceView(); + explicit CGraphicResourceView(ViewType type); + explicit CGraphicResourceView(ViewType type, const QPixmap &pixmap); + + void paint(QPainter *painter, const QRect &rect, const QPalette &palette, bool hover) const; + QSize sizeHint() const; + + ViewType Type() const { return m_Type; } +private: + ViewType m_Type; + QPixmap m_Pixmap; +}; + +//---------------------------------------------------------------------------- + +class CGraphicResourceDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + using QStyledItemDelegate::QStyledItemDelegate; + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; +}; + +//---------------------------------------------------------------------------- + +class CGraphicalResourcesTreeItem +{ +public: + explicit CGraphicalResourcesTreeItem(); + explicit CGraphicalResourcesTreeItem(const QVector &data, CGraphicalResourcesTreeItem *parentItem = nullptr); + ~CGraphicalResourcesTreeItem(); + + void AppendChild(CGraphicalResourcesTreeItem *child); + void InsertChild(CGraphicalResourcesTreeItem *child, int index); + CGraphicalResourcesTreeItem *Child(int row); + int ChildCount() const; + int ColumnCount() const; + QVariant Data(int column) const; + int Row() const; + CGraphicalResourcesTreeItem *ParentItem(); + void ClearChildren(); + void RemoveChild(int index); + void RemoveChildren(int from, int count); + + void SetData(int column, const QVariant &data); + + u32 GetID() const { return m_UID; } + bool GetUpdated() { return m_Updated; } + void SetID(u32 id) { m_UID = id; } + void SetUpdated(bool updated) { m_Updated = updated; } + + CStringId GetLayerID() const { return m_LayerUID; } + u32 GetRendererID() const { return m_RendererUID; } + void SetLayerID(CStringId id) { m_LayerUID = id; } + void SetRendererID(u32 id) { m_RendererUID = id; } +private: + QVector m_ChildItems; + QVector m_ItemData; + CGraphicalResourcesTreeItem *m_ParentItem = null; + + u32 m_UID; + bool m_Updated; + + CStringId m_LayerUID; + u32 m_RendererUID; +}; + +//---------------------------------------------------------------------------- + +class CGraphicalResourcesTreeModel : public QAbstractItemModel +{ + Q_OBJECT + +public: + explicit CGraphicalResourcesTreeModel(QObject *parent = nullptr); + ~CGraphicalResourcesTreeModel(); + + QVariant data(const QModelIndex &index, int role) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; + QModelIndex parent(const QModelIndex &index) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + + CGraphicalResourcesTreeItem *Item(const QModelIndex &index) const; + QModelIndex Index(CGraphicalResourcesTreeItem *item) const; + + void UpdateModel(); +private: + void _UpdateModel(); + void _ResetModel(); + + CGraphicalResourcesTreeItem *_CreateEffect(const QString &layerName, const QString &emitterName, u32 uid); + CGraphicalResourcesTreeItem *_CreateEffectLayer(const QString &layerName, u32 uid, CGraphicalResourcesTreeItem *effect); + CGraphicalResourcesTreeItem *_CreateRenderer(SRendererProperties *renderer, CGraphicalResourcesTreeItem *layer); + + CGraphicalResourcesTreeItem *_FindChild(CGraphicalResourcesTreeItem *parent, u32 childId); + void _UnflagUpdated(CGraphicalResourcesTreeItem *parent); + void _RemoveOldItems(CGraphicalResourcesTreeItem *parent); + + bool _LoadImageThumbnail(const CString &path, QPixmap *outThumbnail); + + CGraphicalResourcesTreeItem *m_RootItem = null; + CString m_CompositionName; +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +Q_DECLARE_METATYPE(AEGPPk::CGraphicResetButtonView) +Q_DECLARE_METATYPE(AEGPPk::CGraphicResourceView) +Q_DECLARE_METATYPE(AEGPPk::CGraphicalResourcesTreeItem) + +#endif //!__AEGP_GRAPHICALRESOURCESTREEMODEL_H__ diff --git a/AE_GeneralPlugin/Include/Panels/AEGP_PanelQT.h b/AE_GeneralPlugin/Include/Panels/AEGP_PanelQT.h new file mode 100644 index 00000000..0a100011 --- /dev/null +++ b/AE_GeneralPlugin/Include/Panels/AEGP_PanelQT.h @@ -0,0 +1,201 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_PANELQT_H__ +#define __FX_PANELQT_H__ + +#include "AEGP_Define.h" + +#include +#include + +#include +#include + +#include +#include + +//---------------------------------------------------------------------------- + +struct SPBasicSuite; + +__AEGP_PK_BEGIN + +class CGraphicalResourcesTreeModel; + +//---------------------------------------------------------------------------- + +class QPanelAppSignalSink : public QObject +{ + Q_OBJECT +public: + QPanelAppSignalSink(QApplication *app, QObject *parent = null); + + Q_SIGNAL void OnWindowHandlerChanged(WId wid); + Q_SIGNAL void OnWindowSizeChanged(const QRect &rect); + Q_SIGNAL void OnRenderersChanged(); + Q_SIGNAL void OnExit(); + + void DoExit(); + +private: + QApplication *m_App = null; +}; + +//---------------------------------------------------------------------------- + +class QPanel : public QObject +{ + Q_OBJECT +public: + QPanel(QPanelAppSignalSink* appSignal, QApplication *application, QObject *parent = null); + ~QPanel(); + +private: + void _CreateWindowContent(); + + void _SetWindow(WId wid); + void _SetGeometry(const QRect &windowRect); + void _UpdateModel(); + + + CGraphicalResourcesTreeModel *m_TreeModel = null; + + QPanelAppSignalSink *m_AppSignal = null; + QApplication *m_App = null; + + QWindow *m_Window = null; + QWidget *m_Widget = null; + + WId m_PendingWindowHandle = 0; +}; + +//---------------------------------------------------------------------------- + +class CPanelApp +{ +public: + CPanelApp(); + ~CPanelApp(); + + bool Startup(); + void LaunchApp(); + void Shutdown(); + + void OnWindowHandlerChanged(WId wid); + void OnWindowSizeChanged(const QRect &rect); + void OnRenderersChanged(); + void OnExit(); + +private: + QApplication *m_QApp = null; +#if defined(PK_MACOSX) + QEventLoop *m_EventLoop = null; +#endif + QPanelAppSignalSink *m_AppSignalSink = null; + + QPanel *m_Panel = null; +}; + +//---------------------------------------------------------------------------- + +#if !defined(PK_MACOSX) +class CAsynchronousJob_QtThread : public CAsynchronousJob +{ +public: + CAsynchronousJob_QtThread(); + ~CAsynchronousJob_QtThread(); + virtual void _OnRefptrDestruct() override {} + + +protected: + virtual void _VirtualLaunch(Threads::SThreadContext &) override { ImmediateExecute(); } + +public: + void ImmediateExecute(); + + CPanelApp &App() { return m_App; } + + // Waited for by the main thread: + Threads::CEvent m_Initialized; + Threads::CEvent m_Exited; + +private: + CPanelApp m_App; +}; +PK_DECLARE_REFPTRCLASS(AsynchronousJob_QtThread); +#endif + +//---------------------------------------------------------------------------- + +class CPanelBaseGUI +{ + static CPanelBaseGUI *m_Instance; + + CPanelBaseGUI(); + virtual ~CPanelBaseGUI(); + +public: + static CPanelBaseGUI *GetInstance(); + static bool DestroyInstance(); + + + bool InitializeIFN(); +#if defined(PK_MACOSX) + void IdleUpdate(); +#endif + bool CreatePanel(SPBasicSuite *spbP, AEGP_PanelH panelH, AEGP_PlatformViewRef platformWindowRef, AEGP_PanelFunctions1 *outFunctionTable); + void SetGeometry(const QRect &rect); + void UpdateScenesModel(); + +protected: + //Base AE Commands + void operator=(const CPanelBaseGUI&) = delete; + CPanelBaseGUI(const CPanelBaseGUI&) = delete; + + AEGP_PanelH m_PanelHandle; + + virtual void GetSnapSizes(A_LPoint *snapSizes, A_long *numSizesP); + virtual void PopulateFlyout(AEGP_FlyoutMenuItem *itemsP, A_long *in_out_numItemsP); + virtual void DoFlyoutCommand(AEGP_FlyoutMenuCmdID commandID); + +private: + + static A_Err _GetSnapSizes(AEGP_PanelRefcon refcon, A_LPoint *snapSizes, A_long *numSizesP); + static A_Err _PopulateFlyout(AEGP_PanelRefcon refcon, AEGP_FlyoutMenuItem *itemsP, A_long *in_out_numItemsP); + static A_Err _DoFlyoutCommand(AEGP_PanelRefcon refcon, AEGP_FlyoutMenuCmdID commandID); + + SPBasicSuite *m_BasicSuite = null; + +#if !defined(PK_MACOSX) + PAsynchronousJob_QtThread m_Task; +#else + CPanelApp m_App; +#endif + + bool m_Initialized = false; + +#if defined(PK_WINDOWS) +public: + + static LRESULT CALLBACK StaticOSWindowWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); + LRESULT OSWindowWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); + +private: + typedef LRESULT(CALLBACK* WindowProc)(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); + + Threads::CCriticalSection m_HandleLock; + HWND m_WindowHandle; + WindowProc m_WindowProc; + + void _SetWindowHandle(HWND hwnd); +#endif +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif //!__FX_PANELQT_H__ diff --git a/AE_GeneralPlugin/Include/RenderApi/AEGP_BaseContext.h b/AE_GeneralPlugin/Include/RenderApi/AEGP_BaseContext.h new file mode 100644 index 00000000..491062eb --- /dev/null +++ b/AE_GeneralPlugin/Include/RenderApi/AEGP_BaseContext.h @@ -0,0 +1,68 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_BASECONTEXT_H__ +#define __FX_BASECONTEXT_H__ + +#include "AEGP_Define.h" +#include +#include "AEGP_RenderContext.h" + +namespace AAePk { + struct SAAEIOData; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_BEGIN + +PK_FORWARD_DECLARE(Texture); + +//---------------------------------------------------------------------------- + +class CAAEBaseContext +{ +public: + static CAAEBaseContext *GetInstance() { return null; } + + CAAEBaseContext(); + virtual ~CAAEBaseContext(); + + virtual bool BeginFrame() { return false; }; + virtual bool EndFrame() { return m_ApiManager->EndFrame(); }; + + virtual void LogApiError() { return; }; + + virtual bool InitIFN() { return true; }; + + virtual bool CreatePlatformContext(void *winHandle, void *deviceContext) { (void)winHandle; (void)deviceContext; return false; }; + virtual bool CreateRenderTarget(RHI::EPixelFormat format, CUint3 size) { (void)format; (void)size; return false; }; + + virtual TMemoryView GetCurrentSwapChain() { return TMemoryView(); }; + + virtual bool SetAsCurrent(void *deviceContext) { (void)deviceContext; return false; }; + + virtual bool FillRenderBuffer(PRefCountedMemoryBuffer dstBuffer, RHI::PFrameBuffer srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) { (void)dstBuffer; (void)srcBuffer; (void)format; (void)width; (void)height; (void)rowLength; return false; }; + + virtual bool FillCompositingTexture(void* srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) { (void)srcBuffer; (void)format; (void)width; (void)height; (void)rowLength; return false; }; + + RHI::PApiManager GetApiManager(); + RHI::SApiContext *GetApiContext(); + RHI::PTexture GetCompositingTexture(); + +protected: + bool m_Initialized = false; + RHI::PApiManager m_ApiManager; + RHI::SApiContext *m_ApiContext; + + RHI::PTexture m_CompositingTexture; +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + + +#endif // ! diff --git a/AE_GeneralPlugin/Include/RenderApi/AEGP_CopyPixels.h b/AE_GeneralPlugin/Include/RenderApi/AEGP_CopyPixels.h new file mode 100644 index 00000000..f9bf91b9 --- /dev/null +++ b/AE_GeneralPlugin/Include/RenderApi/AEGP_CopyPixels.h @@ -0,0 +1,45 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_COPYPIXELS_H__ +#define __FX_COPYPIXELS_H__ + +#include "AEGP_Define.h" + +#include + +namespace PopcornFX +{ + PK_FORWARD_DECLARE(RefCountedMemoryBuffer); +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_BEGIN + +struct SCopyPixel { + PRefCountedMemoryBuffer m_BufferPtr; + PF_EffectWorld *m_InputWorld; + double m_Gamma; + + bool m_IsAlphaOverride; + double m_AlphaOverrideValue; +}; + +//---------------------------------------------------------------------------- + +PF_Err CopyPixelIn32(void *refcon, A_long x, A_long y, PF_Pixel32 *inP, PF_Pixel32 *); +PF_Err CopyPixelIn16(void *refcon, A_long x, A_long y, PF_Pixel16 *inP, PF_Pixel16 *); +PF_Err CopyPixelIn8(void *refcon, A_long x, A_long y, PF_Pixel8 *inP, PF_Pixel8 *); + +PF_Err CopyPixelOut32(void *refcon, A_long x, A_long y, PF_Pixel32 *, PF_Pixel32 *outP); +PF_Err CopyPixelOut16(void *refcon, A_long x, A_long y, PF_Pixel16 *, PF_Pixel16 *outP); +PF_Err CopyPixelOut8(void *refcon, A_long x, A_long y, PF_Pixel8 *, PF_Pixel8 *outP); + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Include/RenderApi/AEGP_CopyTask.h b/AE_GeneralPlugin/Include/RenderApi/AEGP_CopyTask.h new file mode 100644 index 00000000..f9d9ba7b --- /dev/null +++ b/AE_GeneralPlugin/Include/RenderApi/AEGP_CopyTask.h @@ -0,0 +1,70 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_AEGP_COPYTASK_H__ +#define __FX_AEGP_COPYTASK_H__ + +#include "AEGP_Define.h" + +#include "RenderApi/AEGP_BaseContext.h" + +#include "pk_render_helpers/include/draw_requests/rh_tasks.h" // Task::CBase +#include "pk_render_helpers/include/draw_requests/rh_job_pools.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +class CAsynchronousJob_CopyTextureTask : public CAsynchronousJob +{ +public: + TAtomic *m_Counter; + Threads::CEvent *m_EndCB; + + u32 m_TargetCount; + + // data + u32 m_Height; + u32 m_StartOffset; + + BYTE *m_DestinationPtr; + BYTE *m_SourcePtr; + + u32 m_WidthSize; + u32 m_RowPitch; + +public: + CAsynchronousJob_CopyTextureTask() { } + ~CAsynchronousJob_CopyTextureTask() { } + +protected: + virtual void _VirtualLaunch(Threads::SThreadContext &) override { ImmediateExecute(); } + +public: + bool Setup() { return true; } + void ImmediateExecute() + { + PK_NAMEDSCOPEDPROFILE("Copy Task"); + + //Loop + for (u32 i = 0; i < m_Height; ++i) + { + memcpy(m_DestinationPtr + (m_StartOffset + i) * m_WidthSize, m_SourcePtr + (m_StartOffset + i) * m_RowPitch, m_WidthSize); + } + + u32 value = m_Counter->Inc(); + + if (value == m_TargetCount) + m_EndCB->Trigger(); + } +}; +PK_DECLARE_REFPTRCLASS(AsynchronousJob_CopyTextureTask); + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + + +#endif __FX_AEGP_COPYTASK_H__ diff --git a/AE_GeneralPlugin/Include/RenderApi/AEGP_D3D11Context.h b/AE_GeneralPlugin/Include/RenderApi/AEGP_D3D11Context.h new file mode 100644 index 00000000..083debe2 --- /dev/null +++ b/AE_GeneralPlugin/Include/RenderApi/AEGP_D3D11Context.h @@ -0,0 +1,77 @@ +#pragma once + +#ifndef __FX_D3D11CONTEXT_H__ +#define __FX_D3D11CONTEXT_H__ + +#if (PK_BUILD_WITH_D3D11_SUPPORT != 0) + +#include "AEGP_Define.h" + +#include "RenderApi/AEGP_BaseContext.h" + +#include + +namespace AAePk { + struct SAAEIOData; +} + +PK_FORWARD_DECLARE(CD3D11ApiManager); + +__AEGP_PK_BEGIN + +PK_FORWARD_DECLARE(AsynchronousJob_CopyTextureTask); + +struct SD3D11PlatformContext; + +class CAAED3D11Context : public CAAEBaseContext +{ +public: + static CAAEBaseContext *GetInstance() + { + return PK_NEW(CAAED3D11Context); + } + + CAAED3D11Context(); + virtual ~CAAED3D11Context(); + + virtual bool BeginFrame() override; + virtual bool EndFrame() override; + virtual void LogApiError() override; + + + virtual bool InitIFN() override; + virtual bool CreatePlatformContext(void *winHandle, void *deviceContext) override; + virtual bool CreateRenderTarget(RHI::EPixelFormat format, CUint3 size) override; + + virtual bool SetAsCurrent(void *deviceContext) override; + + virtual bool FillRenderBuffer(PRefCountedMemoryBuffer dstBuffer, RHI::PFrameBuffer srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) override; + + virtual bool FillCompositingTexture(void* srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) override; + + virtual TMemoryView GetCurrentSwapChain() override; + + RHI::SD3D11BasicContext *m_D3D11Context = null; +private: + bool _LoadDynamicLibrary(); + bool _CreateDevice(); + bool _PickHardwareAdapter(); + + RHI::CD3D11ApiManager *m_D3D11Manager = null; + SD3D11PlatformContext *m_Context = null; + + ID3D11Texture2D *m_Texture = null; + ID3D11Texture2D *m_StagingTexture = null; + RHI::PD3D11RenderTarget m_SwapChainRenderTarget; + + + TArray m_Tasks; + u32 m_WorkerCount; + +}; + +__AEGP_PK_END + +#endif + +#endif // __FX_D3D11CONTEXT_H__! diff --git a/AE_GeneralPlugin/Include/RenderApi/AEGP_D3D12Context.h b/AE_GeneralPlugin/Include/RenderApi/AEGP_D3D12Context.h new file mode 100644 index 00000000..15566f4a --- /dev/null +++ b/AE_GeneralPlugin/Include/RenderApi/AEGP_D3D12Context.h @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_D3D12CONTEXT_H__ +#define __FX_D3D12CONTEXT_H__ + +#if (PK_BUILD_WITH_D3D12_SUPPORT != 0) + +#include "AEGP_Define.h" + +#include "RenderApi/AEGP_BaseContext.h" + +#include + +//---------------------------------------------------------------------------- + +namespace AAePk { + struct SAAEIOData; +} + +PK_FORWARD_DECLARE(CD3D12ApiManager); + +__AEGP_PK_BEGIN + +PK_FORWARD_DECLARE(AsynchronousJob_CopyTextureTask); +struct SD3D12PlatformContext; + +//---------------------------------------------------------------------------- + +class CAAED3D12Context : public CAAEBaseContext +{ + + static bool m_Once; + static CAAED3D12Context *m_Instance; +public: + static CAAEBaseContext *GetInstance() + { + if (m_Instance == null) + m_Instance = PK_NEW(CAAED3D12Context); + return m_Instance; + } + + CAAED3D12Context(); + virtual ~CAAED3D12Context(); + + CAAED3D12Context(CAAED3D12Context &) = delete; + CAAED3D12Context &operator=(CAAED3D12Context &) = delete; + + virtual bool BeginFrame() override; + virtual bool EndFrame() override; + virtual void LogApiError() override; + + + virtual bool InitIFN() override; + virtual bool CreatePlatformContext(void *winHandle, void *deviceContext) override; + virtual bool CreateRenderTarget(RHI::EPixelFormat format, CUint3 size) override; + + + virtual bool SetAsCurrent(void *deviceContext) override; + + virtual bool FillRenderBuffer(PRefCountedMemoryBuffer dstBuffer, RHI::PFrameBuffer srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) override; + + virtual bool FillCompositingTexture(void* srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) override; + + bool CreateCommandQueue(); + + + virtual TMemoryView GetCurrentSwapChain() override; + + RHI::SD3D12BasicContext *m_D3D12Context; + + //Don't iterate over the different RT yet; + static const u32 kFrameCount = 1; +private: + bool LoadDynamicLibrary(); + bool CreateDevice(); + bool PickHardwareAdapter(); + bool CreateDescriptorAllocator(); + PRefCountedMemoryBuffer CreateBufferFromReadBackTexture(RHI::PCReadBackTexture readBackTexture) const; + void ClearContextSwapchainsRT(); + + RHI::CD3D12ApiManager *m_D3D12Manager; + SD3D12PlatformContext *m_Context; + RHI::PD3D12Fence m_Fence; + u64 m_FrameCount = 0; + + + ID3D12Resource *m_Resources[CAAED3D12Context::kFrameCount]; + RHI::PD3D12RenderTarget m_SwapChainRenderTarget; + + + TArray m_Tasks; + u32 m_WorkerCount = 0; + +}; + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif + +#endif // __FX_D3D12CONTEXT_H__! diff --git a/AE_GeneralPlugin/Include/RenderApi/AEGP_MetalContext.h b/AE_GeneralPlugin/Include/RenderApi/AEGP_MetalContext.h new file mode 100644 index 00000000..c2fd2208 --- /dev/null +++ b/AE_GeneralPlugin/Include/RenderApi/AEGP_MetalContext.h @@ -0,0 +1,90 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __AEGP_METALCONTEXT_H__ +#define __AEGP_METALCONTEXT_H__ + +#if defined (PK_MACOSX) + + +#include "AEGP_Define.h" +#include "RenderApi/AEGP_BaseContext.h" + +#include "pk_render_helpers/include/draw_requests/rh_tasks.h" // Task::CBase +#include "pk_render_helpers/include/draw_requests/rh_job_pools.h" + +//---------------------------------------------------------------------------- + +#if (PK_BUILD_WITH_METAL_SUPPORT != 0) + +namespace AAePk { + struct SAAEIOData; +} + +__PK_RHI_API_BEGIN + struct SMetalBasicContext; + struct SWaitAllSwapChains; + class CMetalApiManager; +__PK_RHI_API_END + +PK_FORWARD_DECLARE(CMetalApiManager); + +__AEGP_PK_BEGIN + struct SMetalPlatformContext; +__AEGP_PK_END + + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +class CAAEMetalContext : public CAAEBaseContext +{ +public: + static CAAEMetalContext *GetInstance() + { + if (m_Instance == null) + m_Instance = PK_NEW(CAAEMetalContext); + return m_Instance; + } + + CAAEMetalContext(); + virtual ~CAAEMetalContext(); + + virtual bool BeginFrame() override; + virtual bool EndFrame() override; + virtual void LogApiError() override; + + + virtual bool InitIFN() override; + + virtual bool SetAsCurrent(void *deviceContext) { (void)deviceContext; return true; }; + + virtual bool CreateRenderTarget(RHI::EPixelFormat format, CUint3 size) override; + + virtual bool FillRenderBuffer(PRefCountedMemoryBuffer dstBuffer, RHI::PFrameBuffer srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) override; + + virtual bool FillCompositingTexture(void *srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) override; + + virtual TMemoryView GetCurrentSwapChain() override; + + virtual bool CreatePlatformContext(void *winHandle, void *deviceContext) override; + +private: + SMetalPlatformContext *m_Data; + bool m_Parented; + static CAAEMetalContext *m_Instance; + RHI::SWaitAllSwapChains *m_LastFrameSyncInfo = null; +}; + +__AEGP_PK_END + +//---------------------------------------------------------------------------- + +#endif //PK_BUILD_WITH_METAL_SUPPORT != 0 + +#endif //PK_MACOSX + +#endif //__AEGP_METALCONTEXT_H__ diff --git a/AE_GeneralPlugin/PkgInfo b/AE_GeneralPlugin/PkgInfo new file mode 100644 index 00000000..62f1eddb --- /dev/null +++ b/AE_GeneralPlugin/PkgInfo @@ -0,0 +1 @@ +AEgxFXTC \ No newline at end of file diff --git a/AE_GeneralPlugin/Precompiled/ae_precompiled.cpp b/AE_GeneralPlugin/Precompiled/ae_precompiled.cpp new file mode 100644 index 00000000..84e52276 --- /dev/null +++ b/AE_GeneralPlugin/Precompiled/ae_precompiled.cpp @@ -0,0 +1 @@ +#include "ae_precompiled.h" diff --git a/AE_GeneralPlugin/Precompiled/ae_precompiled.h b/AE_GeneralPlugin/Precompiled/ae_precompiled.h new file mode 100644 index 00000000..b6bb494c --- /dev/null +++ b/AE_GeneralPlugin/Precompiled/ae_precompiled.h @@ -0,0 +1,28 @@ +#pragma once + +#ifndef __AE_PRECOMPILED_H__ +#define __AE_PRECOMPILED_H__ + +#undef PV_MODULE_NAME +#undef PV_MODULE_SYM +#define PV_MODULE_NAME "AEPlugin" +#define PV_MODULE_SYM AEPlugin + +#include + +PK_LOG_MODULE_DEFINE(); + +#include + + + +#ifdef PK_NULL_AS_VARIABLE +using PopcornFX::null; +#endif + +#if defined(PK_WINDOWS) +#define WIN32_LEAN_AND_MEAN +#include +#endif + +#endif //__AE_PRECOMPILED_H__ diff --git a/AE_GeneralPlugin/Sources/AEGP_AEPKConversion.cpp b/AE_GeneralPlugin/Sources/AEGP_AEPKConversion.cpp new file mode 100644 index 00000000..a2f51712 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_AEPKConversion.cpp @@ -0,0 +1,492 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_AEPKConversion.h" +#include "AEGP_World.h" + +#include +#include + + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +RHI::EPixelFormat AAEToPK(PF_PixelFormat format) +{ + RHI::EPixelFormat result = RHI::EPixelFormat::FormatUnknown; + switch (format) + { + case PF_PixelFormat_ARGB32: + result = RHI::EPixelFormat::FormatUnorm8RGBA; + break; + case PF_PixelFormat_ARGB64: + result = RHI::EPixelFormat::FormatUnorm16RGBA; + break; + case PF_PixelFormat_ARGB128: + result = RHI::EPixelFormat::FormatFloat32RGBA; + break; + default: + //PF_PixelFormat_INVALID 1717854562 + PK_ASSERT_MESSAGE(false, "Unknown conversion of pixel format between PopcornFX and AfterEffects."); + break; + } + return result; +} + +//---------------------------------------------------------------------------- + +PF_PixelFormat PKToAAE(RHI::EPixelFormat format) +{ + PF_PixelFormat result = PF_PixelFormat_INVALID; + switch (format) + { + case RHI::EPixelFormat::FormatUnorm8RGBA: + result = PF_PixelFormat_ARGB32; + break; + case RHI::EPixelFormat::FormatUnorm16RGBA: + result = PF_PixelFormat_ARGB64; + break; + case RHI::EPixelFormat::FormatFloat32RGBA: + result = PF_PixelFormat_ARGB128; + break; + default: + PK_ASSERT_MESSAGE(false, "Unknown conversion of pixel format between PopcornFX and AfterEffects."); + break; + } + return result; +} + +//---------------------------------------------------------------------------- + +u32 GetPixelSizeFromPixelFormat(RHI::EPixelFormat format) +{ + u32 result = 0; + + switch (format) + { + case RHI::EPixelFormat::FormatUnorm8RGBA: + return sizeof(PF_Pixel8); + break; + case RHI::EPixelFormat::FormatUnorm16RGBA: + return sizeof(PF_Pixel16); + break; + case RHI::EPixelFormat::FormatFloat32RGBA: + return sizeof(PF_PixelFloat); + break; + default: + PK_ASSERT_MESSAGE(false, "Unknown conversion of pixel format between PopcornFX and AfterEffects."); + break; + } + return result; +} + +//---------------------------------------------------------------------------- + +void AAEToPK(A_Matrix4 &in, CFloat4x4 &out) +{ + out.XAxis() = CFloat4((float)in.mat[0][0], (float)in.mat[0][1], (float)in.mat[0][2], (float)in.mat[0][3]); + out.YAxis() = CFloat4((float)in.mat[1][0], (float)in.mat[1][1], (float)in.mat[1][2], (float)in.mat[1][3]); + out.ZAxis() = CFloat4((float)in.mat[2][0], (float)in.mat[2][1], (float)in.mat[2][2], (float)in.mat[2][3]); + out.WAxis() = CFloat4((float)in.mat[3][0], (float)in.mat[3][1], (float)in.mat[3][2], (float)in.mat[3][3]); +} + +//---------------------------------------------------------------------------- + +void AAEToPK(A_Matrix4 &in, CFloat4x4 *out) +{ + AAEToPK(in, *out); +} + +//---------------------------------------------------------------------------- + +CFloat3 AAEToPK(A_FloatPoint3 &in) +{ + CFloat3 res((float)in.x, (float)in.y, (float)in.z); + return res; +} + +//---------------------------------------------------------------------------- + +A_FloatPoint3 PKToAAE(CFloat3 &in) +{ + A_FloatPoint3 res; + res.x = in.x(); + res.y = in.y(); + res.z = in.z(); + return res; +} + +//---------------------------------------------------------------------------- + +CFloat3 AngleAAEToPK(A_FloatPoint3 &in) +{ + return CFloat3(DegToRad((float)in.x), DegToRad((float)in.y), DegToRad((float)in.z)); +} + +//---------------------------------------------------------------------------- + +A_FloatPoint3 AnglePKToAAE(CFloat3 &in) +{ + CFloat3 degree(RadToDeg(in.x()), RadToDeg(in.y()), RadToDeg(in.z())); + return PKToAAE(degree); +} + +//---------------------------------------------------------------------------- + +EAttributeSemantic AttributePKToAAE(EDataSemantic value) +{ + PK_STATIC_ASSERT((int)EDataSemantic::DataSemantic_None == (int)EAttributeSemantic::AttributeSemantic_None); + PK_STATIC_ASSERT((int)EDataSemantic::DataSemantic_3DCoordinate == (int)EAttributeSemantic::AttributeSemantic_Coordinate); + PK_STATIC_ASSERT((int)EDataSemantic::DataSemantic_3DScale == (int)EAttributeSemantic::AttributeSemantic_Scale); + PK_STATIC_ASSERT((int)EDataSemantic::DataSemantic_Color == (int)EAttributeSemantic::AttributeSemantic_Color); + + return (EAttributeSemantic)value; +} + +//---------------------------------------------------------------------------- + +EAttributeType AttributePKToAAE(EBaseTypeID value) +{ + EAttributeType res = AttributeType_None; + switch(value) + { + case (BaseType_Bool): + res = AttributeType_Bool1; + break; + case (BaseType_Bool2): + res = AttributeType_Bool2; + break; + case (BaseType_Bool3): + res = AttributeType_Bool3; + break; + case (BaseType_Bool4): + res = AttributeType_Bool4; + break; + case (BaseType_I32): + res = AttributeType_Int1; + break; + case (BaseType_Int2): + res = AttributeType_Int2; + break; + case (BaseType_Int3): + res = AttributeType_Int3; + break; + case (BaseType_Int4): + res = AttributeType_Int4; + break; + case (BaseType_Float): + res = AttributeType_Float1; + break; + case (BaseType_Float2): + res = AttributeType_Float2; + break; + case (BaseType_Float3): + res = AttributeType_Float3; + break; + case (BaseType_Float4): + res = AttributeType_Float4; + break; + default: + PK_ASSERT_NOT_REACHED_MESSAGE("Attribute Type missmatch !"); + } + return res; +} + +//---------------------------------------------------------------------------- + +EAttributeSamplerType AttributeSamplerPKToAAE(SParticleDeclaration::SSampler::ESamplerType type) +{ + EAttributeSamplerType res = AttributeSamplerType_None; + switch (type) + { + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_Animtrack): + res = AttributeSamplerType_Animtrack; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_Audio): + res = AttributeSamplerType_Audio; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_Curve): + res = AttributeSamplerType_Curve; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_EventStream): + res = AttributeSamplerType_EventStream; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_Geometry): + res = AttributeSamplerType_Geometry; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_Image): + res = AttributeSamplerType_Image; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_Grid): + res = AttributeSamplerType_Grid; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_ImageAtlas): + res = AttributeSamplerType_ImageAtlas; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_Text): + res = AttributeSamplerType_Text; + break; + case (SParticleDeclaration::SSampler::ESamplerType::Sampler_VectorField): + res = AttributeSamplerType_VectorField; + break; + default: + PK_ASSERT_NOT_REACHED_MESSAGE("Attribute Sampler Type missmatch !"); + break; + } + return res; +} + +//---------------------------------------------------------------------------- + +EBaseTypeID AttributeAAEToPK(EAttributeType value) +{ + EBaseTypeID res = BaseType_Evolved; + switch (value) + { + case (AttributeType_Bool1): + res = BaseType_Bool; + break; + case (AttributeType_Bool2): + res = BaseType_Bool2; + break; + case (AttributeType_Bool3): + res = BaseType_Bool3; + break; + case (AttributeType_Bool4): + res = BaseType_Bool4; + break; + case (AttributeType_Int1): + res = BaseType_I32; + break; + case (AttributeType_Int2): + res = BaseType_Int2; + break; + case (AttributeType_Int3): + res = BaseType_Int3; + break; + case (AttributeType_Int4): + res = BaseType_Int4; + break; + case (AttributeType_Float1): + res = BaseType_Float; + break; + case (AttributeType_Float2): + res = BaseType_Float2; + break; + case (AttributeType_Float3): + res = BaseType_Float3; + break; + case (AttributeType_Float4): + res = BaseType_Float4; + break; + default: + PK_ASSERT_NOT_REACHED_MESSAGE("Attribute Type missmatch !"); + } + return res; +} + +//---------------------------------------------------------------------------- + +PKSample::CRHIParticleSceneRenderHelper::ERenderTargetDebug AAEToPK(ERenderType value) +{ + PKSample::CRHIParticleSceneRenderHelper::ERenderTargetDebug res = PKSample::CRHIParticleSceneRenderHelper::RenderTargetDebug_NoDebug; + switch (value) + { + case (RenderType_FinalCompositing): + res = PKSample::CRHIParticleSceneRenderHelper::RenderTargetDebug_NoDebug; + break; + case (RenderType_Emissive): + res = PKSample::CRHIParticleSceneRenderHelper::RenderTargetDebug_NoDebug; + break; + case (RenderType_Albedo): + res = PKSample::CRHIParticleSceneRenderHelper::RenderTargetDebug_Diffuse; + break; + case (RenderType_Normal): + res = PKSample::CRHIParticleSceneRenderHelper::RenderTargetDebug_NormalUnpacked; + break; + case (RenderType_Depth): + res = PKSample::CRHIParticleSceneRenderHelper::RenderTargetDebug_Depth; + break; + default: + PK_ASSERT_NOT_REACHED_MESSAGE("Render Type missmatch !"); + + } + return res; +} + +//---------------------------------------------------------------------------- + +void AAEToPK(SPostFXBloomDesc &in, PKSample::SParticleSceneOptions::SBloom &out) +{ + out.m_Enable = in.m_Enable; + out.m_BrightPassValue = in.m_BrightPassValue; + out.m_Intensity = in.m_Intensity; + out.m_Attenuation = in.m_Attenuation; + + switch (in.m_GaussianBlur) + { + case (GaussianBlurPixelRadius_5): + out.m_BlurTap = PKSample::GaussianBlurCombination_5_Tap; + break; + case (GaussianBlurPixelRadius_9): + out.m_BlurTap = PKSample::GaussianBlurCombination_9_Tap; + break; + case (GaussianBlurPixelRadius_13): + out.m_BlurTap = PKSample::GaussianBlurCombination_13_Tap; + break; + } + out.m_RenderPassCount = in.m_RenderPassCount; +} + +//---------------------------------------------------------------------------- + +void AAEToPK(SPostFXDistortionDesc &in, PKSample::SParticleSceneOptions::SDistortion &out) +{ + out.m_Enable = in.m_Enable; +} + +//---------------------------------------------------------------------------- + +void AAEToPK(SPostFXToneMappingDesc &in, PKSample::SParticleSceneOptions::SToneMapping &out) +{ + out.m_Saturation = in.m_Saturation; + out.m_Enable = in.m_Enable; + out.m_Exposure = in.m_Exposure; +} + +//---------------------------------------------------------------------------- + +void AAEToPK(SPostFXAADesc &in, PKSample::SParticleSceneOptions::SFXAA &out) +{ + out.m_Enable = in.m_Enable; +} + +//---------------------------------------------------------------------------- + +void AAEToPK(SRenderingDesc &in, PKSample::SParticleSceneOptions &out) +{ + AAEToPK(in.m_Bloom, out.m_Bloom); + AAEToPK(in.m_Distortion, out.m_Distortion); + AAEToPK(in.m_ToneMapping, out.m_ToneMapping); + AAEToPK(in.m_FXAA, out.m_FXAA); +} + +//---------------------------------------------------------------------------- + +CParticleSamplerDescriptor_VectorField_Grid::EInterpolation AAEToPK(EInterpolationType &value) +{ + CParticleSamplerDescriptor_VectorField_Grid::EInterpolation res = CParticleSamplerDescriptor_VectorField_Grid::EInterpolation::__MaxInterpolations; + switch (value) + { + case EInterpolationType::EInterpolationType_Point: + res = CParticleSamplerDescriptor_VectorField_Grid::EInterpolation::Interpolation_Point; + break; + case EInterpolationType::EInterpolationType_Trilinear: + res = CParticleSamplerDescriptor_VectorField_Grid::EInterpolation::Interpolation_Trilinear; + break; + case EInterpolationType::EInterpolationType_Quadrilinear: + res = CParticleSamplerDescriptor_VectorField_Grid::EInterpolation::Interpolation_Quadrilinear; + break; + default: + PK_ASSERT_NOT_REACHED_MESSAGE("Render Type missmatch !"); + break; + } + return res; +} + +//---------------------------------------------------------------------------- + +CUbyte3 ConvertSRGBToLinear(CUbyte3 v) +{ + CFloat3 vf(v.x() / 255.0f, v.y() / 255.0f, v.z() / 255.0f); + + CFloat3 vfl = PKSample::ConvertSRGBToLinear(vf); + return CUbyte3(static_cast(vfl.x() * 255.0f), static_cast(vfl.y() * 255.0f), static_cast(vfl.z() * 255.0f)); +} + +//---------------------------------------------------------------------------- + +CUbyte3 ConvertLinearToSRGB(CUbyte3 v) +{ + CFloat3 vf(v.x() / 255.0f, v.y() / 255.0f, v.z() / 255.0f); + + CFloat3 vfl = PKSample::ConvertLinearToSRGB(vf); + return CUbyte3(static_cast(vfl.x() * 255.0f), static_cast(vfl.y() * 255.0f), static_cast(vfl.z() * 255.0f)); +} + +//---------------------------------------------------------------------------- + +EApiValue RHIApiToAEApi(RHI::EGraphicalApi value) +{ + EApiValue ret; + switch (value) + { +#if PK_BUILD_WITH_D3D12_SUPPORT != 0 + case RHI::EGraphicalApi::GApi_D3D12: + ret = EApiValue::D3D12; + break; +#endif +#if PK_BUILD_WITH_D3D11_SUPPORT != 0 + case RHI::EGraphicalApi::GApi_D3D11: + ret = EApiValue::D3D11; + break; +#endif +#if PK_BUILD_WITH_METAL_SUPPORT != 0 + case RHI::EGraphicalApi::GApi_Metal: + ret = EApiValue::Metal; + break; +#endif + default: +#if defined(PK_WINDOWS) && PK_BUILD_WITH_D3D11_SUPPORT != 0 + ret = EApiValue::D3D11; +#elif defined(PK_MACOSX) && PK_BUILD_WITH_METAL_SUPPORT != 0 + ret = EApiValue::Metal; +#else + PK_ASSERT_NOT_REACHED_MESSAGE("Cannot choose a compatible default API for the current platform"); +#endif + break; + } + return ret; +} + +//---------------------------------------------------------------------------- + +RHI::EGraphicalApi AEApiToRHIApi(EApiValue value) +{ + RHI::EGraphicalApi ret; + switch (value) + { +#if PK_BUILD_WITH_D3D12_SUPPORT != 0 + case EApiValue::D3D12: + ret = RHI::EGraphicalApi::GApi_D3D12; + break; +#endif +#if PK_BUILD_WITH_D3D11_SUPPORT != 0 + case EApiValue::D3D11: + ret = RHI::EGraphicalApi::GApi_D3D11; + break; +#endif +#if PK_BUILD_WITH_METAL_SUPPORT != 0 + case EApiValue::Metal: + ret = RHI::EGraphicalApi::GApi_Metal; + break; +#endif + default: +#if defined(PK_WINDOWS) && PK_BUILD_WITH_D3D11_SUPPORT != 0 + ret = RHI::EGraphicalApi::GApi_D3D11; +#elif defined(PK_MACOSX) && PK_BUILD_WITH_METAL_SUPPORT != 0 + ret = RHI::EGraphicalApi::GApi_Metal; +#else + PK_ASSERT_NOT_REACHED_MESSAGE("Cannot choose a compatible default API for the current platform"); +#endif + break; + } + return ret; + +} + +//---------------------------------------------------------------------------- +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_AssetBaker.cpp b/AE_GeneralPlugin/Sources/AEGP_AssetBaker.cpp new file mode 100644 index 00000000..4880ba38 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_AssetBaker.cpp @@ -0,0 +1,799 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" +#include "AEGP_AssetBaker.h" + +#include "AEGP_World.h" + +#include "AEGP_PopcornFXPlugins.h" + +#include "AEGP_PackExplorer.h" +#include "AEGP_FileWatcher.h" +#include "pk_kernel/include/kr_log_listeners_file.h" + +//Baking +#include "pk_imaging/include/im_resource.h" +#include "pk_geometrics/include/ge_mesh_resource_handler.h" +#include "pk_geometrics/include/ge_rectangle_list.h" +#include "pk_particles/include/ps_font_metrics_resource.h" +#include "pk_particles/include/ps_vectorfield_resource.h" +#include "pk_base_object/include/hbo_context.h" + +#include "PK-AssetBakerLib/AssetBaker_Oven.h" +#include "PK-AssetBakerLib/AssetBaker_Oven_HBO.h" +#include "PK-AssetBakerLib/AssetBaker_Oven_Mesh.h" +#include "PK-AssetBakerLib/AssetBaker_Oven_VectorField.h" +#include "PK-AssetBakerLib/AssetBaker_Oven_Texture.h" +#include "PK-AssetBakerLib/AssetBaker_Oven_StraightCopy.h" + +#include "AEGP_Log.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +static const CStringView kPopcornProjectExtension = "pkproj"; + +//---------------------------------------------------------------------------- + +HBO_CLASS_DEFINITION_BEGIN(CEditorAssetEffect) +.HBO_FIELD_DEFINITION(StartCameraPosition) +[ + HBO::Properties::DefaultValue(CFloat3(0.0f, 0.0f, 5.0f)), + HBO::Properties::AlwaysSerialize(), + HBO::Properties::Caracs(HBO::FieldCaracs::Caracs_3DCoordinateDistance), + HBO::Properties::Description("Initial position of the camera when opening the effect") +] +.HBO_FIELD_DEFINITION(StartCameraOrientation) +[ + HBO::Properties::DefaultValue(CFloat3::ZERO), + HBO::Properties::AlwaysSerialize(), + HBO::Properties::Caracs(HBO::Caracs_3DCoordinate), + HBO::Properties::Description("Initial euler orientation of the camera when opening the effect") +] +HBO_CLASS_DEFINITION_END + +//---------------------------------------------------------------------------- + +CEditorAssetEffect::CEditorAssetEffect() + :HBO_CONSTRUCT(CEditorAssetEffect) +{ + +} + +//---------------------------------------------------------------------------- + +CEditorAssetEffect::~CEditorAssetEffect() +{ + +} + +//---------------------------------------------------------------------------- + +void CEditorAssetEffect::CopyFrom(CEditorAssetEffect *other) +{ + SetStartCameraPosition(other->StartCameraPosition()); + SetStartCameraOrientation(other->StartCameraOrientation()); +} + +//---------------------------------------------------------------------------- + +CProjectSettingsFinder::CProjectSettingsFinder(const CString &rootDir, IFileSystem *controller) + : CFileDirectoryWalker(rootDir, IgnoreVirtualFS, controller) +{ + SetFilePathValidator(ProjectSettingsPathValidator); +} + +//---------------------------------------------------------------------------- + +void CProjectSettingsFinder::FileNotifier(const CFilePack *pack, const char *fullPath, u32 fileFirstCharPos) +{ + (void)pack; + (void)fileFirstCharPos; + + PK_ASSERT(CFilePath::IsPure(fullPath)); + PK_ASSERT(kPopcornProjectExtension == CFilePath::ExtractExtension(fullPath)); + + if (!PK_VERIFY(m_ProjectSettingsPath == null)) + { + CLog::Log(PK_ERROR, "Multiple pkproj found in RootDir (\"%s\").", fullPath); + } + else + { + m_ProjectSettingsPath = fullPath; + } +} + +//---------------------------------------------------------------------------- + +bool CProjectSettingsFinder::DirectoryNotifier(const CFilePack *pack, const char *fullPath, u32 directoryFirstCharPos) +{ + (void)pack; + (void)fullPath; + (void)directoryFirstCharPos; + return true; // Recursive search +} + +//---------------------------------------------------------------------------- + +const CString &CProjectSettingsFinder::ProjectSettingsPath() const +{ + return m_ProjectSettingsPath; +} + +//---------------------------------------------------------------------------- + +bool CProjectSettingsFinder::ProjectSettingsPathValidator(const char *filePath) +{ + return kPopcornProjectExtension == CFilePath::ExtractExtension(filePath); +} + +//---------------------------------------------------------------------------- +// SBakeContext +//---------------------------------------------------------------------------- + +SBakeContext::SBakeContext() + : m_BakeResourceMeshHandler(null) + , m_BakeResourceImageHandler(null) + , m_BakeResourceRectangleListHandler(null) + , m_BakeResourceFontMetricsHandler(null) + , m_BakeResourceVectorFieldHandler(null) + , m_BakeFSController(null) + , m_BakeResourceManager(null) + , m_Initialized(false) +{ +} + +//---------------------------------------------------------------------------- + +SBakeContext::~SBakeContext() +{ + if (!m_Initialized) + return; + + CCookeryLogger::Shutdown(); + + if (m_BakeResourceManager != null) + { + PK_ASSERT(m_BakeResourceMeshHandler != null); + PK_ASSERT(m_BakeResourceImageHandler != null); + PK_ASSERT(m_BakeResourceVectorFieldHandler != null); + PK_ASSERT(m_BakeResourceFontMetricsHandler != null); + PK_ASSERT(m_BakeResourceRectangleListHandler != null); + + m_BakeResourceManager->UnregisterHandler(m_BakeResourceMeshHandler); + m_BakeResourceManager->UnregisterHandler(m_BakeResourceImageHandler); + m_BakeResourceManager->UnregisterHandler(m_BakeResourceRectangleListHandler); + m_BakeResourceManager->UnregisterHandler(m_BakeResourceFontMetricsHandler); + m_BakeResourceManager->UnregisterHandler(m_BakeResourceVectorFieldHandler); + } + PK_SAFE_DELETE(m_BakeResourceMeshHandler); + PK_SAFE_DELETE(m_BakeResourceImageHandler); + PK_SAFE_DELETE(m_BakeResourceVectorFieldHandler); + PK_SAFE_DELETE(m_BakeResourceFontMetricsHandler); + PK_SAFE_DELETE(m_BakeResourceRectangleListHandler); + PK_SAFE_DELETE(m_BakeContext); + PK_SAFE_DELETE(m_BakeFSController); + PK_SAFE_DELETE(m_BakeResourceManager); + + // unregister the oven's HBO bake-config classes: + COvenBakeConfig_Audio::UnregisterHandler(); + COvenBakeConfig_StraightCopy::UnregisterHandler(); + COvenBakeConfig_Particle::UnregisterHandler(); + COvenBakeConfig_ParticleCompiler::UnregisterHandler(); + COvenBakeConfig_VectorField::UnregisterHandler(); + COvenBakeConfig_TextureAtlas::UnregisterHandler(); + COvenBakeConfig_Texture::UnregisterHandler(); + COvenBakeConfig_Mesh::UnregisterHandler(); + COvenBakeConfig_HBO::UnregisterHandler(); + COvenBakeConfig_Base::UnregisterHandler(); +} + +//---------------------------------------------------------------------------- + +bool SBakeContext::Init() +{ + PK_ASSERT(m_BakeResourceMeshHandler == null); + PK_ASSERT(m_BakeResourceImageHandler == null); + PK_ASSERT(m_BakeResourceVectorFieldHandler == null); + PK_ASSERT(m_BakeResourceFontMetricsHandler == null); + PK_ASSERT(m_BakeResourceRectangleListHandler == null); + PK_ASSERT(m_BakeFSController == null); + PK_ASSERT(m_BakeResourceManager == null); + + // We do not constant fold the images because we do not want to link with all the image codecs: + m_BakeResourceImageHandler = PK_NEW(CResourceHandlerDummy); + m_BakeResourceVectorFieldHandler = PK_NEW(CResourceHandlerDummy); + // Keep this updated with all PopcornFX resource types + m_BakeResourceMeshHandler = PK_NEW(PopcornFX::CResourceHandlerMesh); + m_BakeResourceRectangleListHandler = PK_NEW(PopcornFX::CResourceHandlerRectangleList); + m_BakeResourceFontMetricsHandler = PK_NEW(PopcornFX::CResourceHandlerFontMetrics); + + if (!PK_VERIFY(m_BakeResourceMeshHandler != null) || + !PK_VERIFY(m_BakeResourceImageHandler != null) || + !PK_VERIFY(m_BakeResourceRectangleListHandler != null) || + !PK_VERIFY(m_BakeResourceFontMetricsHandler != null) || + !PK_VERIFY(m_BakeResourceVectorFieldHandler != null)) + return false; + + m_BakeFSController = File::NewInternalFileSystem(); + if (!PK_VERIFY(m_BakeFSController != null)) + return false; + + m_BakeResourceManager = PK_NEW(PopcornFX::CResourceManager(m_BakeFSController)); + if (!PK_VERIFY(m_BakeResourceManager != null)) + return false; + m_BakeResourceManager->RegisterHandler(m_BakeResourceMeshHandler); + m_BakeResourceManager->RegisterHandler(m_BakeResourceImageHandler); + m_BakeResourceManager->RegisterHandler(m_BakeResourceRectangleListHandler); + m_BakeResourceManager->RegisterHandler(m_BakeResourceFontMetricsHandler); + m_BakeResourceManager->RegisterHandler(m_BakeResourceVectorFieldHandler); + + m_BakeContext = PK_NEW(PopcornFX::HBO::CContext(m_BakeResourceManager)); + if (!PK_VERIFY(m_BakeContext != null)) + return false; + + // register the oven's HBO bake-config classes: + COvenBakeConfig_Base::RegisterHandler(); + COvenBakeConfig_HBO::RegisterHandler(); + COvenBakeConfig_Mesh::RegisterHandler(); + COvenBakeConfig_Texture::RegisterHandler(); + COvenBakeConfig_TextureAtlas::RegisterHandler(); + COvenBakeConfig_VectorField::RegisterHandler(); + COvenBakeConfig_ParticleCompiler::RegisterHandler(); + COvenBakeConfig_Particle::RegisterHandler(); + COvenBakeConfig_StraightCopy::RegisterHandler(); + COvenBakeConfig_Audio::RegisterHandler(); + + const CVaultHandler &vault = CPopcornFXWorld::Instance().GetVaultHandler(); + + const CString vaultlogs = vault.VaultPathLog(); + + if (!PK_VERIFY(CCookeryLogger::Startup(vaultlogs / "AssetBakerLogs", true))) + return false; + + m_Initialized = true; + return true; +} + +//---------------------------------------------------------------------------- + +bool SBakeContext::_RemapPath(CString &path) +{ + CString extension = CFilePath::ExtractExtension(path.Data()); + + if (extension.Compare("fbx", CaseInsensitive)) + path = CFilePath::StripExtension(path) + ".pkmm"; + if (extension.Compare("fga", CaseInsensitive)) + path = CFilePath::StripExtension(path) + ".pkvf"; + if (extension.Compare("pkfx", CaseInsensitive)) + path = CFilePath::StripExtension(path) + ".pkb"; + + return true; +} + +CString SBakeContext::_RemapFX(const CString &path) +{ + CString extension = CFilePath::ExtractExtension(path.Data()); + + if (extension.Compare("pkfx", CaseInsensitive)) + return CFilePath::StripExtension(path) + ".pkb"; + return null; +} + +//---------------------------------------------------------------------------- + +CEffectBaker::CEffectBaker() + : m_Initialized(false) + , m_SrcPack(null) + , m_DstPack(null) +{ + m_BakeContext.Init(); +} + +//---------------------------------------------------------------------------- + +CEffectBaker::~CEffectBaker() +{ + Clear(); + m_Initialized = false; +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::FileAdded(const CString &path) +{ + if (path.EndsWith(".pkfx") == true || path.EndsWith(".pkri")) + { + SAssetChange effect; + + if (IsChangeRegistered(path, EAssetChangesType::Add) == true) + return; + CString cleanPath = path.Extract(m_SrcPackPath.SlashAppended().Length(), path.Length()); + CFilePath::Purify(cleanPath); + effect.m_EffectPath = cleanPath; + effect.m_Type = EAssetChangesType::Add; + + PK_SCOPEDLOCK(m_Lock); + m_ToBake.PushBack(effect); + } +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::FileRemoved(const CString &path) +{ + (void)path; +#if 0 //User isn't supposed to remove content of the vault during play ? + if (path.EndsWith(".pkfx") == true || path.EndsWith(".pkri")) + { + SAssetChange effect; + + if (IsChangeRegistered(path, EAssetChangesType::Remove) == true) + return; + CString cleanPath = path.Extract(m_SrcPackPath.SlashAppended().Length(), path.Length()); + CFilePath::Purify(cleanPath); + effect.m_EffectPath = cleanPath; + effect.m_Type = EAssetChangesType::Remove; + + PK_SCOPEDLOCK(m_Lock); + } +#endif +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::FileChanged(const CString &path) +{ + if (path.EndsWith(".pkfx") == true || path.EndsWith(".pkri")) + { + SAssetChange effect; + + if (IsChangeRegistered(path, EAssetChangesType::Update) == true) + return; + CString cleanPath = path.Extract(m_SrcPackPath.SlashAppended().Length(), path.Length()); + CFilePath::Purify(cleanPath); + + CEffectBaker::FileChangedRelativePath(cleanPath); + } +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::FileChangedRelativePath(const CString &path) +{ + SAssetChange effect; + + effect.m_EffectPath = path; + effect.m_Type = EAssetChangesType::Update; + + PK_SCOPEDLOCK(m_Lock); + m_ToBake.PushBack(effect); +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::FileRenamed(const CString &oldPath, const CString &newPath) +{ + if (newPath.EndsWith(".pkfx") == true) + { + SAssetChange effect; + + if (IsChangeRegistered(newPath, EAssetChangesType::Rename) == true) + return; + + CString cleanPath = newPath.Extract(m_SrcPackPath.SlashAppended().Length(), newPath.Length()); + CString cleanOldPath = oldPath.Extract(m_SrcPackPath.SlashAppended().Length(), oldPath.Length()); + + CFilePath::Purify(cleanPath); + CFilePath::Purify(cleanOldPath); + + effect.m_EffectPath = cleanPath; + effect.m_EffectPathOld = cleanOldPath; + effect.m_Type = EAssetChangesType::Rename; + + PK_SCOPEDLOCK(m_Lock); + m_ToBake.PushBack(effect); + } +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::Initialize(const CString &srcPack, const CString &dstPack, const CString &pkprojPath) +{ + m_RootDir = ""; + if (!pkprojPath.Empty()) + LoadProjectSettings(pkprojPath); + + m_SrcPackPath = srcPack / m_RootDir; + m_DstPackPath = dstPack; + + if (m_SrcPackPath == m_DstPackPath) + { + CAELog::TryLogErrorWindows("Bake Error: Trying to bake into the source pack, aborting"); + return; + } + CLog::Log(PK_INFO, "Setting up cookery with source pack: \"%s\" and destination path: \"%s\"", m_SrcPackPath.Data(), m_DstPackPath.Data()); + m_BakeContext.m_BakeFSController->UnmountAllPacks(); + + m_SrcPack = m_BakeContext.m_BakeFSController->MountPack(m_SrcPackPath); + + // Initialize the cookery: + if (!m_Initialized) + { + Mem::Reinit(m_Cookery); + + m_Cookery.SetHBOContext(m_BakeContext.m_BakeContext); + if (!m_Cookery.TurnOn()) + { + CLog::Log(PK_WARN, "Couldn't initialize the cookery, TurnOn Failed."); + return; + } + + const CGuid ovenIdHBO = m_Cookery.RegisterOven(PK_NEW(COven_HBO)); + const CGuid ovenIdMesh = m_Cookery.RegisterOven(PK_NEW(COven_Mesh)); + const CGuid ovenIdTexture = m_Cookery.RegisterOven(PK_NEW(COven_Texture)); + const CGuid ovenIdTextureAtlas = m_Cookery.RegisterOven(PK_NEW(COven_TextureAtlas)); + const CGuid ovenIdVectorField = m_Cookery.RegisterOven(PK_NEW(COven_VectorField)); + + COven_Particle *ovenParticle = PK_NEW(COven_Particle); + ovenParticle->SetExternalPathRemapper(FastDelegate(SBakeContext::_RemapPath)); + const CGuid ovenIdParticle = m_Cookery.RegisterOven(ovenParticle); + + const CGuid ovenIdStraightCopy = m_Cookery.RegisterOven(PK_NEW(COven_StraightCopy)); + const CGuid ovenIdAudio = m_Cookery.RegisterOven(PK_NEW(COven_Audio)); + + if (!ovenIdHBO.Valid() || !ovenIdMesh.Valid() || !ovenIdTexture.Valid() || !ovenIdTextureAtlas.Valid() || + !ovenIdVectorField.Valid() || !ovenIdParticle.Valid() || !ovenIdStraightCopy.Valid() || + !ovenIdAudio.Valid()) + { + CLog::Log(PK_WARN, "Couldn't initialize the cookery, RegisterOven Failed."); + return; + } + + m_Cookery.MapOven("pkri", ovenIdStraightCopy); // Editor Material + m_Cookery.MapOven("pkma", ovenIdStraightCopy); // Editor Material + // map all known extensions to the appropriate oven: + m_Cookery.MapOven("fbx", ovenIdMesh); // FBX mesh + m_Cookery.MapOven("pkmm", ovenIdMesh); // PopcornFX multi-mesh + m_Cookery.MapOven("dds", ovenIdTexture); // dds image + m_Cookery.MapOven("png", ovenIdTexture); // png image + m_Cookery.MapOven("jpg", ovenIdTexture); // jpg image + m_Cookery.MapOven("jpeg", ovenIdTexture); // jpg image + m_Cookery.MapOven("tga", ovenIdTexture); // tga image + m_Cookery.MapOven("tif", ovenIdTexture); // tiff image + m_Cookery.MapOven("tiff", ovenIdTexture); // tiff image + m_Cookery.MapOven("pkm", ovenIdTexture); // pkm image + m_Cookery.MapOven("pvr", ovenIdTexture); // pvrtc image + //m_Cookery.MapOven("exr", ovenIdTexture); // exr image ------------- Collide with FBX + m_Cookery.MapOven("hdr", ovenIdTexture); // hdr image + m_Cookery.MapOven("txt", ovenIdStraightCopy); // misc + m_Cookery.MapOven("fga", ovenIdVectorField); // FGA vector-field + m_Cookery.MapOven("pkfm", ovenIdStraightCopy); // PopcornFX font + m_Cookery.MapOven("pkvf", ovenIdStraightCopy); // PopcornFX vector-field + m_Cookery.MapOven("pkat", ovenIdTextureAtlas); // PopcornFX atlas definition + m_Cookery.MapOven("pksc", ovenIdStraightCopy); // PopcornFX simulation cache + m_Cookery.MapOven("pkbo", ovenIdHBO); // PopcornFX base object + m_Cookery.MapOven("pkan", ovenIdHBO); // PopcornFX Animation + m_Cookery.MapOven("pksa", ovenIdHBO); // PopcornFX Skeletal Animation + m_Cookery.MapOven("mp3", ovenIdAudio); // mp3 sound + m_Cookery.MapOven("wav", ovenIdAudio); // wav sound + m_Cookery.MapOven("ogg", ovenIdAudio); // ogg sound + m_Cookery.MapOven("pkfx", ovenIdParticle, FastDelegate(SBakeContext::_RemapFX)); // PopcornFX Effect + + m_Cookery.AddOvenFlags(PopcornFX::COven::Flags_BakeMemoryVersion); + AEGPPk::CPopcornFXWorld &world = AEGPPk::CPopcornFXWorld::Instance(); + CString installPath = world.GetPluginInstallationPath(); + CString SrcPackPath = srcPack.Replace('/', '\\'); + + PopcornFX::PBaseObjectFile configFile = m_Cookery.m_BaseConfigFile; + PK_FOREACH(it, configFile->ObjectList()) + { + PopcornFX::COvenBakeConfig_Particle *config = PopcornFX::HBO::Cast(*it); + if (config != null) + { + config->SetCompile(true); + config->SetSourceConfig(Bake_NoSource); + config->SetRemoveEditorNodes(true); + config->SetBakeMode(PopcornFX::COvenBakeConfig_HBO::Bake_SaveAsBinary); + + COvenBakeConfig_Particle::_TypeOfBackendCompilers backendCompilers; + +#if (PK_COMPILER_BUILD_COMPILER_D3D12 != 0) + if (world.GetRenderApi() == RHI::GApi_D3D12) + { + //BakeBytecodeCommandLine_Windows = "\"{DXC}\" -T cs_6_0 -E main -WX -Ges -O3 -nologo -all_resources_bound -Fo \"$(TargetPath)\" \"$(InputPath)\""; + const CString cmdLine_D3D12 = "\"" + installPath + "fxc.exe\"" + " -T cs_5_1 -E main -WX -Ges -O3 -all_resources_bound -Fo \"$(TargetPath)\" \"$(InputPath)\""; + POvenBakeConfig_ParticleCompiler backendCompiler = m_Cookery.HBOContext()->NewObject(configFile.Get()); + if (!PK_VERIFY(backendCompiler != null) || + !PK_VERIFY(backendCompilers.PushBack(backendCompiler).Valid())) + return; + backendCompiler->SetTarget(BackendTarget_D3D12); + backendCompiler->SetBakeBytecodeCommandLine_Windows(cmdLine_D3D12); + } +#endif +#if (PK_COMPILER_BUILD_COMPILER_D3D11 != 0) + if (world.GetRenderApi() == RHI::GApi_D3D11) + { + const CString cmdLine_D3D11 = "\"" + installPath + "fxc.exe\"" + " -T cs_5_0 -E main -WX -Ges -O3 -Fo \"$(TargetPath)\" \"$(InputPath)\""; + POvenBakeConfig_ParticleCompiler backendCompiler = m_Cookery.HBOContext()->NewObject(configFile.Get()); + if (!PK_VERIFY(backendCompiler != null) || + !PK_VERIFY(backendCompilers.PushBack(backendCompiler).Valid())) + return; + backendCompiler->SetTarget(BackendTarget_D3D11); + backendCompiler->SetBakeBytecodeCommandLine_Windows(cmdLine_D3D11); + } +#endif + config->SetBackendCompilers(backendCompilers); + + config->SetCompilerSwitches("--determinism"); + config->SetCommandLine_Windows( "\"" + installPath + "PK-ShaderTool_r.exe\" -v -k false -O \"$(TargetPath)\"" + " -P \"" + SrcPackPath + "\" " + + "-api d3d " + "-c \"\\\"" + installPath + "fxc.exe\\\" -T ##ShortStage##_5_0 ##InputPath## -Fo ##OutputPath## -nologo -O3\" \"$(InputPath)\""); + config->SetCommandLine_MacOsX( "\"" + installPath + "AE_GeneralPlugin.plugin/Contents/MacOs/PK-ShaderTool_r\" -v -k false -O \"$(TargetPath)\"" + " -P \"" + SrcPackPath + "\" " + + "-api metal -c \"xcrun -sdk macosx metal -mmacosx-version-min=10.14 -std=macos-metal2.1 ##InputPath## -o ##OutputPath##\" \"$(InputPath)\""); + continue; + } + PopcornFX::COvenBakeConfig_Base *configBase = PopcornFX::HBO::Cast(*it); + if (configBase != null) + continue; + } + m_Initialized = true; + } + const PopcornFX::SBakeTarget defaultTarget("AfterEffect_Generic", m_DstPackPath); + + m_Cookery.m_DstPackPaths.PushBack(defaultTarget); + +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::Clear() +{ + PK_SCOPEDLOCK(m_Lock); + + m_BakeContext.m_BakeFSController->UnmountAllPacks(); +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::Lock() +{ + m_Lock.Lock(); +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::Unlock() +{ + m_Lock.Unlock(); +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::CancelAllFileChanges() +{ + m_ToBake.Clear(); +} + +//---------------------------------------------------------------------------- + +int CEffectBaker::PopFileChanges() +{ + if (m_ToBake.Count() != 0) + { + SAssetChange effect = m_ToBake.Pop(); + + BakeAssetOrAddToRetryStack(effect); + } + return m_ToBake.Count(); +} + +//---------------------------------------------------------------------------- + +bool CEffectBaker::IsChangeRegistered(const CString &path, EAssetChangesType type) +{ + for (u32 i = 0; i < m_ToBake.Count(); ++i) + { + if (m_ToBake[i].m_Type == type && path.Compare(m_ToBake[i].m_EffectPath)) + return true; + } + return false; +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::ReimportAssets(TArray &paths, bool importPkri /*=true*/) +{ + for (u32 i = 0; i < paths.Count(); ++i) + { + FileChangedRelativePath(paths[i]); + } + if (importPkri) + FileChangedRelativePath(m_LibraryDir + "/PopcornFXCore/Materials/Interface/Editor.pkri"); +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::ReimportAllAssets(bool refresh) +{ + (void)refresh; + + CPackExplorer packExplorer(m_SrcPack->Path(), m_BakeContext.m_BakeFSController); + packExplorer.Explore(); + + TMemoryView path = packExplorer.EffectPaths(); + + for (u32 i = 0; i < path.Count(); ++i) + { + FileChangedRelativePath(path[i]); + } +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::LoadProjectSettings(const CString &pkprojPath) +{ + CString projectSettingsFilePath; + HBO::CContext context; + if (pkprojPath.Empty()) + { + CProjectSettingsFinder finder(m_SrcPack->Path(), m_BakeContext.m_BakeFSController); + + finder.Walk(); + + projectSettingsFilePath = finder.ProjectSettingsPath(); + } + else + projectSettingsFilePath = pkprojPath; + + if (projectSettingsFilePath.Empty() || + !m_BakeContext.m_BakeFSController->Exists(projectSettingsFilePath, true)) + { + CLog::Log(PK_ERROR, "Could not find Project Settings in pack \"%s\"", m_SrcPack->Path().Data()); + return; + } + + const CString fileBuffer = m_BakeContext.m_BakeFSController->BufferizeToString(projectSettingsFilePath, true); + if (fileBuffer == null) + { + CLog::Log(PK_ERROR, "Failed to read project settings file at \"%s\"", projectSettingsFilePath.Data()); + return; + } + + CConstMemoryStream stream(fileBuffer.Data(), fileBuffer.Length()); + PProjectSettings projectSettings = CProjectSettings::LoadFromStream(stream, &context); + if (projectSettings == null) + { + CLog::Log(PK_ERROR, "Failed to load project settings file at \"%s\"", projectSettingsFilePath.Data()); + return; + } + + PProjectSettingsGeneral general = projectSettings->General(); + m_RootDir = general->RootDir(); + m_LibraryDir = general->LibraryDir(); + m_EditorCacheDir = general->EditorCacheDir(); + m_PresetsDir = general->PresetsDir(); +} + +//---------------------------------------------------------------------------- + +void CEffectBaker::GetAllAssetPath() +{ + CPackExplorer packExplorer(m_SrcPack->Path(), m_BakeContext.m_BakeFSController); + SDirectoryValidator directoryValidator(m_LibraryDir, m_EditorCacheDir, m_PresetsDir); + CPackExplorer::PathValidator directoryPathValidator = CPackExplorer::PathValidator(&(directoryValidator), &SDirectoryValidator::cmp); + + packExplorer.SetDirectoryPathValidator(directoryPathValidator); + packExplorer.Explore(); + + TMemoryView paths = packExplorer.EffectPaths(); + TArray pathChar(paths.Count()); + for (u32 i = 0; i < paths.Count(); ++i) + { + pathChar[i] = paths[i].Data(); + } +} + +//---------------------------------------------------------------------------- + +bool CEffectBaker::BakeAssetOrAddToRetryStack(SAssetChange &assetInfo) +{ + CLog::Log(PK_INFO, "Baking asset '%s' and its dependencies...", assetInfo.m_EffectPath.Data()); + if (!BakeAsset(assetInfo.m_EffectPath)) + { + CString errorLog = "Bake Error: " + assetInfo.m_EffectPath + " failed to bake"; + CAELog::TryLogErrorWindows(errorLog); + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CEffectBaker::LoadAndBrowseEffect(const CString &path) +{ + PBaseObjectFile file = m_BakeContext.m_BakeContext->LoadFile(path); + + if (!PK_VERIFY(file != null)) + { + CLog::Log(PK_ERROR, "Could not load the effect file for '%s'", path.Data()); + return false; + } + + PEditorAssetEffect editorAssetEffect = file->FindFirstOf(); + if (!PK_VERIFY(editorAssetEffect != null)) + { + CLog::Log(PK_ERROR, "Could not find the CEditorAssetEffect object in file for '%s'", path.Data()); + return false; + } + CString pkboPath = CFilePath::StripExtension(path) + ".pkbo"; + IFileSystem *fileSystem = File::DefaultFileSystem(); + PFilePack dstPack = fileSystem->MountPack(m_DstPackPath); + + fileSystem->SetForcedFileCreationPack(dstPack); + PBaseObjectFile pkboFile = HBO::g_Context->LoadFile_AndCreateIFN_Pure(pkboPath.View(), false); + + + PEditorAssetEffect editorProp = pkboFile->FindFirstOf(); + if (editorProp == null) + { + editorProp = HBO::g_Context->NewObject(pkboFile.Get()); + } + editorProp->CopyFrom(editorAssetEffect.Get()); + + if (!PK_VERIFY(HBO::g_Context->WriteFile(pkboFile.Get(), pkboFile->Path()))) + { + return false; + } + fileSystem->SetForcedFileCreationPack(null); + editorAssetEffect = null; + file->Unload(); + return true; +} + +//---------------------------------------------------------------------------- + +bool CEffectBaker::BakeAsset(const CString &path, bool bakeDependencies) +{ + if (m_BakedPaths.Contains(path)) + return true; + + m_BakedPaths.PushBack(path); + + if (bakeDependencies) + { + TArray dependencies; + + m_Cookery.GetAssetDependencies(path, dependencies); + for (u32 i = 0; i < dependencies.Count(); i++) + { + const CString &dependency = (dependencies[i]); + if (dependency == null || + dependency.EndsWith(".pkfx") || + dependency.EndsWith(".pkbo")) + continue; + if (BakeAsset(dependency, true) == false) + { + CLog::Log(PK_ERROR, "Asset Dependency of '%s' failed baking: '%s'", path.Data(), dependency.Data()); + return false; + } + } + } + PopcornFX::CMessageStream bakerErrors; + if (!m_Cookery.BakeAsset(path, m_Cookery.m_BaseConfigFile, bakerErrors)) + { + CLog::Log(PK_ERROR, "Couldn't bake effect '%s':", path.Data()); + bakerErrors.Log(); + return false; + } + if (path.EndsWith(".pkfx")) + { + LoadAndBrowseEffect(path); + } + return true; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_Attribute.cpp b/AE_GeneralPlugin/Sources/AEGP_Attribute.cpp new file mode 100644 index 00000000..22f0060e --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_Attribute.cpp @@ -0,0 +1,758 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_Attribute.h" +#include "AEGP_AEPKConversion.h" + +#include +#include + +#include "AEGP_FileWatcher.h" +#include "pk_kernel/include/kr_log_listeners_file.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "AEGP_World.h" + +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +SSamplerBase::SSamplerBase() + : m_SamplerDescriptor(null) +{ + +} + +//---------------------------------------------------------------------------- + +SSamplerBase::~SSamplerBase() +{ + m_SamplerDescriptor = null; +} + +//---------------------------------------------------------------------------- + +SSamplerShape::SSamplerShape() + : m_Type(SamplerShapeType_None) + , m_ShapeDesc(null) + , m_MeshBatch(null) +{ + +} + +//---------------------------------------------------------------------------- + +SSamplerShape::~SSamplerShape() +{ + m_ShapeDesc = null; + +} + +//---------------------------------------------------------------------------- + +#if (PK_GEOMETRICS_BUILD_MESH_SAMPLER_SURFACE != 0) + +bool SSamplerShape::CreateSurfaceSamplingStructs(const PResourceMeshBatch mesh) +{ + m_SurfaceSamplingStructs = PK_NEW(CMeshSurfaceSamplerStructuresRandom); + if (!PK_VERIFY(m_SurfaceSamplingStructs != null)) + return false; + return m_SurfaceSamplingStructs->Build(mesh->RawMesh()->TriangleBatch().m_IStream, mesh->RawMesh()->TriangleBatch().m_VStream.Positions()); +} + +//---------------------------------------------------------------------------- + +bool SSamplerShape::CreateSurfaceUVSamplingStructs(const PResourceMeshBatch mesh) +{ + m_SurfaceUVSamplingStructs = PK_NEW(CMeshSurfaceSamplerStructuresFromUV); + if (!PK_VERIFY(m_SurfaceUVSamplingStructs != null)) + return false; + return m_SurfaceUVSamplingStructs->Build(SMeshUV2PCBuildConfig(), mesh->RawMesh()->TriangleBatch().m_VStream, mesh->RawMesh()->TriangleBatch().m_IStream); +} + +#endif + +//---------------------------------------------------------------------------- + +#if (PK_GEOMETRICS_BUILD_MESH_SAMPLER_VOLUME != 0) +bool SSamplerShape::CreateVolumeSamplingStructs(const PResourceMeshBatch mesh) +{ + m_VolumeSamplingStructs = PK_NEW(CMeshVolumeSamplerStructuresRandom); + if (!PK_VERIFY(m_VolumeSamplingStructs != null)) + return false; + + if (!mesh->RawMesh()->HasTetrahedralMeshing()) + return false; + + return m_VolumeSamplingStructs->Build(mesh->RawMesh()->TriangleBatch().m_VStream.Positions(), mesh->RawMesh()->TetrahedralOtherPositions(), mesh->RawMesh()->TetrahedralIndices(), mesh->RawMesh()->TetrahedralIndicesCount()); +} +#endif + +//---------------------------------------------------------------------------- + +#if (PK_GEOMETRICS_BUILD_MESH_PROJECTION) && 0 +bool SSamplerShape::CreateProjectionStructs(const PResourceMeshBatch mesh) +{ + m_ProjectionStructs = PK_NEW(CMeshProjection); + if (!PK_VERIFY(m_ProjectionStructs != null)) + return false; + return m_ProjectionStructs->Build(mesh->RawMesh()->TriangleBatch()); +} +#endif + +//---------------------------------------------------------------------------- + +#if (PK_GEOMETRICS_BUILD_KDTREE != 0) +bool SSamplerShape::CreateKdTree(const PResourceMeshBatch mesh) +{ + m_KdTree = PK_NEW(CMeshKdTree); + if (!PK_VERIFY(m_KdTree != null)) + return false; + SMeshKdTreeBuildConfig buildConfig; + buildConfig.m_Flags |= SMeshKdTreeBuildConfig::LowQualityButFasterBuild; + return m_KdTree->Build(mesh->RawMesh()->TriangleBatch(), buildConfig); +} +#endif + +//---------------------------------------------------------------------------- + +bool SSamplerShape::UpdateShape(SShapeSamplerDescriptor *aeShapeDesc) +{ + CParticleSamplerDescriptor_Shape_Default *desc = static_cast(m_SamplerDescriptor.Get()); + + if (m_ShapeDesc == null || + m_Type != aeShapeDesc->m_Type) + { + m_Type = aeShapeDesc->m_Type; + // Create new shape descriptor: + switch (m_Type) + { + case SamplerShapeType_Box: + m_ShapeDesc = PK_NEW(CShapeDescriptor_Box(CFloat3(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[1], aeShapeDesc->m_Dimension[2]))); + break; + case SamplerShapeType_Sphere: + m_ShapeDesc = PK_NEW(CShapeDescriptor_Sphere(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[1])); + break; + case SamplerShapeType_Ellipsoid: + m_ShapeDesc = PK_NEW(CShapeDescriptor_Ellipsoid(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[1])); + break; + case SamplerShapeType_Cylinder: + m_ShapeDesc = PK_NEW(CShapeDescriptor_Cylinder(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[1], aeShapeDesc->m_Dimension[2])); + break; + case SamplerShapeType_Capsule: + m_ShapeDesc = PK_NEW(CShapeDescriptor_Capsule(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[1], aeShapeDesc->m_Dimension[2])); + break; + case SamplerShapeType_Cone: + m_ShapeDesc = PK_NEW(CShapeDescriptor_Cone(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[1])); + break; + case SamplerShapeType_Mesh: + m_ShapeDesc = PK_NEW(CShapeDescriptor_Mesh()); + break; + default: + break; + } + } + if (aeShapeDesc->m_Type == m_Type) + { + // Update shape descriptor: + if (m_Type == SamplerShapeType_Box) + { + static_cast(m_ShapeDesc.Get())->SetDimensions(CFloat3(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[1], aeShapeDesc->m_Dimension[2])); + } + else if (m_Type == SamplerShapeType_Sphere) + { + CShapeDescriptor_Sphere *sphereDesc = static_cast(m_ShapeDesc.Get()); + sphereDesc->SetRadius(aeShapeDesc->m_Dimension[0]); + sphereDesc->SetInnerRadius(aeShapeDesc->m_Dimension[1]); + } + else if (m_Type == SamplerShapeType_Ellipsoid) + { + CShapeDescriptor_Ellipsoid *ellipsoidDesc = static_cast(m_ShapeDesc.Get()); + ellipsoidDesc->SetRadius(aeShapeDesc->m_Dimension[0]); + ellipsoidDesc->SetInnerRadius(aeShapeDesc->m_Dimension[1]); + } + else if (m_Type == SamplerShapeType_Cylinder) + { + CShapeDescriptor_Cylinder *cylinderDesc = static_cast(m_ShapeDesc.Get()); + cylinderDesc->SetRadius(aeShapeDesc->m_Dimension[0]); + cylinderDesc->SetHeight(aeShapeDesc->m_Dimension[1]); + cylinderDesc->SetInnerRadius(aeShapeDesc->m_Dimension[2]); + } + else if (m_Type == SamplerShapeType_Capsule) + { + CShapeDescriptor_Capsule *capsuleDesc = static_cast(m_ShapeDesc.Get()); + capsuleDesc->SetRadius(aeShapeDesc->m_Dimension[0]); + capsuleDesc->SetHeight(aeShapeDesc->m_Dimension[1]); + capsuleDesc->SetInnerRadius(aeShapeDesc->m_Dimension[2]); + } + else if (m_Type == SamplerShapeType_Cone) + { + CShapeDescriptor_Cone *coneDesc = static_cast(m_ShapeDesc.Get()); + coneDesc->SetRadius(aeShapeDesc->m_Dimension[0]); + coneDesc->SetHeight(aeShapeDesc->m_Dimension[1]); + } + else if (m_Type == SamplerShapeType_Mesh) + { + CShapeDescriptor_Mesh *meshDesc = static_cast(m_ShapeDesc.Get()); + + if (aeShapeDesc->m_Path.length() == 0) + return true; + + //Todo do it with the resource manager + CFilePackPath filePackPath = CFilePackPath::FromPhysicalPath(aeShapeDesc->m_Path.data(), File::DefaultFileSystem()); + + if (!filePackPath.Empty()) + { + CMessageStream loadReport; + PResourceMesh mesh = CResourceMesh::Load(File::DefaultFileSystem(), filePackPath, loadReport); + loadReport.Log(); + if (!PK_VERIFY(mesh != null)) + { + CLog::Log(PK_ERROR, "Fail loading the CMeshResource from the pkmm content"); + return false; + } + const u32 uSubMeshId = static_cast(0); + const u32 batchCount = mesh->BatchList().Count(); + if (!PK_VERIFY(uSubMeshId < batchCount)) + { + CLog::Log(PK_ERROR, "Cannot use the submesh ID %d: the mesh only has %d submeshes", uSubMeshId, batchCount); + return false; + } + m_MeshBatch = mesh->BatchList()[uSubMeshId]; + + // ------------------------------------------ + // Build KD Tree IFN + if ((aeShapeDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Mesh_Intersect) != 0 || + (aeShapeDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Mesh_Project) != 0 || + (aeShapeDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Mesh_Contains) != 0 || + (aeShapeDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Mesh_DistanceField) != 0) + { +#if (PK_GEOMETRICS_BUILD_KDTREE != 0) + if (!CreateKdTree(m_MeshBatch)) + CLog::Log(PK_WARN, "Failed building mesh kdTree acceleration structure"); + else + meshDesc->SetKdTree(m_KdTree); +#endif + } + +#if (PK_GEOMETRICS_BUILD_MESH_SAMPLER_SURFACE != 0) + // Build sampling info IFN + if ((aeShapeDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Mesh_Sample) != 0) + { + if (!CreateSurfaceSamplingStructs(m_MeshBatch)) + CLog::Log(PK_WARN, "Failed building mesh surface-sampling acceleration structure"); + else + meshDesc->SetSamplingStructs(m_SurfaceSamplingStructs, null); + } + + // Build UV 2 PCoords info IFN + if ((aeShapeDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Mesh_SampleFromUV) != 0) + { + if (!CreateSurfaceUVSamplingStructs(m_MeshBatch)) + CLog::Log(PK_WARN, "Failed building mesh uv-to-pcoords acceleration structure"); + else + meshDesc->SetUVSamplingStructs(m_SurfaceUVSamplingStructs, 0); + } +#endif +#if (PK_GEOMETRICS_BUILD_MESH_SAMPLER_VOLUME) + if ((aeShapeDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Mesh_Sample) != 0) + { + if (!CreateVolumeSamplingStructs(m_MeshBatch)) + CLog::Log(PK_WARN, "Failed building mesh surface-sampling acceleration structure"); + } +#endif + meshDesc->SetMesh(m_MeshBatch->RawMesh()); + meshDesc->SetScale(CFloat3(aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[0], aeShapeDesc->m_Dimension[0])); + } + } + } + + if (desc == null && m_ShapeDesc != null) + { + desc = PK_NEW(CParticleSamplerDescriptor_Shape_Default(m_ShapeDesc.Get())); + m_SamplerDescriptor = desc; + } + else if (m_ShapeDesc != null) + { + desc->m_Shape = m_ShapeDesc.Get(); + } + + return true; +} + +//---------------------------------------------------------------------------- + +SSamplerImage::SSamplerImage() + : m_ImageDesc(null) + , m_TextureData(null) + , m_Width(0) + , m_Height(0) + , m_SizeInBytes(0) + , m_PixelFormat(CImage::EFormat::Format_Invalid) + , m_DensitySampler(null) + +{ +} + +//---------------------------------------------------------------------------- + +SSamplerImage::~SSamplerImage() +{ + PK_SAFE_DELETE(m_DensitySampler); + PK_SAFE_DELETE(m_ImageDesc); +} + +//---------------------------------------------------------------------------- + +bool SSamplerImage::UpdateImage(SImageSamplerDescriptor *aeImageDesc) +{ + const u32 width = m_Width; + const u32 height = m_Height; + const u32 sizeInBytes = m_SizeInBytes; + const CImage::EFormat format = m_PixelFormat; + + CParticleSamplerDescriptor_Image_Default *desc = static_cast(m_SamplerDescriptor.Get()); + + if (width == 0 || height == 0) + return false; + + CImageMap map; + + map.m_RawBuffer = m_TextureData; + map.m_Dimensions = CUint3(width, height, 1); + + CImageSampler *imageDesc = m_ImageDesc; + CImageSurface surface(map, format); + + if (imageDesc == null) + { + imageDesc = PK_NEW(CImageSamplerBilinear); + m_ImageDesc = imageDesc; + } + + if (!PK_VERIFY(m_ImageDesc != null)) + { + CLog::Log(PK_ERROR, "Could not create the image sampler"); + return false; + } + + if (!imageDesc->SetupFromSurface(surface)) + { + surface.Convert(CImage::Format_BGRA8); + if (!PK_VERIFY(imageDesc->SetupFromSurface(surface))) + { + CLog::Log(PK_ERROR, "Could not setup the image sampler"); + return false; + } + } + + if (desc == null) + { + desc = PK_NEW(CParticleSamplerDescriptor_Image_Default(m_ImageDesc)); + m_SamplerDescriptor = desc; + } + else + { + desc->m_Sampler = m_ImageDesc; + desc->m_ImageDimensions = m_ImageDesc->Dimensions(); + } + + if (aeImageDesc->m_UsageFlags & SParticleDeclaration::SSampler::UsageFlags_Image_Density) + { + if (m_DensitySampler == null) + { + m_DensitySampler = PK_NEW(SDensitySamplerData); + + PK_ASSERT(m_DensitySampler != null); + } + SDensitySamplerBuildSettings densityBuildSettings; + + if (!m_DensitySampler->Build(surface, densityBuildSettings)) + { + CLog::Log(PK_ERROR, "Could not build the density sampler"); + return false; + } + if (!desc->SetupDensity(m_DensitySampler)) + { + CLog::Log(PK_ERROR, "Could not setup the density image sampler"); + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +SSamplerText::SSamplerText() +{ +} + +//---------------------------------------------------------------------------- + +SSamplerText::~SSamplerText() +{ +} + +//---------------------------------------------------------------------------- + +bool SSamplerText::UpdateText(STextSamplerDescriptor *aeTextDesc) +{ + m_Data = aeTextDesc->m_Data.c_str(); + + CParticleSamplerDescriptor_Text_Default *desc = static_cast(m_SamplerDescriptor.Get()); + + const CFontMetrics *fontKerning = null; + bool useKerning = false; + + if (desc == null) + { + desc = PK_NEW(CParticleSamplerDescriptor_Text_Default()); + m_SamplerDescriptor = desc; + } + if (desc != null) + { + if (!desc->_Setup(m_Data, fontKerning, useKerning)) + { + CLog::Log(PK_ERROR, "Could not setup the text descriptor"); + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +SSamplerAudio::SSamplerAudio() + : m_Waveform(null) + , m_InputSampleCount(0) + , m_SampleCount(0) + , m_Name(null) + , m_SoundData(null) + , m_SamplingType(SamplingType_Unknown) + , m_WaveformData(null) + , m_BuiltThisFrame(false) +{ +} + +//---------------------------------------------------------------------------- + +SSamplerAudio::~SSamplerAudio() +{ + CleanAudioPyramid(); +} + +//---------------------------------------------------------------------------- + +bool SSamplerAudio::UpdateSound(SAudioSamplerDescriptor *aeSoundDesc) +{ + (void)aeSoundDesc; + CParticleSamplerDescriptor_Audio_Default *desc = static_cast(m_SamplerDescriptor.Get()); + + if (desc == null) + { + desc = PK_NEW(CParticleSamplerDescriptor_Audio_Default()); + m_SamplerDescriptor = desc; + } + m_Name = desc->m_ChannelGroupNameID; + return true; +} + +//---------------------------------------------------------------------------- + +bool SSamplerAudio::CleanAudioPyramid() +{ + for (u32 i = 0; i < m_WaveformPyramid.Count(); i++) + { + PK_FREE(m_WaveformPyramid[i]); + } + m_WaveformPyramid.Clean(); + return true; +} + +//---------------------------------------------------------------------------- + +unsigned int BitReverse(u32 x, int log2n) +{ + return IntegerTools::ReverseBits(x) >> (32 - log2n); +} + +void BasicFFT(std::complex *inputs, std::complex *outputs, int log2n) +{ + const float kPI = 3.1415926536f; + const std::complex kImag(0, 1); + u32 n = 1 << log2n; + for (u32 i = 0; i < n; ++i) + { + outputs[BitReverse(i, log2n)] = inputs[i]; + } + for (s32 s = 1; s <= log2n; ++s) + { + u32 m = 1 << s; + u32 m2 = m >> 1; + std::complex w(1, 0); + std::complex wm = exp(-kImag * (kPI / m2)); + for (u32 j = 0; j < m2; ++j) + { + for (u32 k = j; k < n; k += m) + { + std::complex t = w * outputs[k + m2]; + std::complex u = outputs[k]; + outputs[k] = u + t; + outputs[k + m2] = u - t; + } + w *= wm; + } + } +} + +//---------------------------------------------------------------------------- + +bool SSamplerAudio::BuildAudioPyramidIFN() +{ + PK_SCOPEDLOCK(m_Lock); + + if (m_InputSampleCount == 0 || + m_Waveform == null) + return false; + + m_SampleCount = 1024; + PK_ASSERT(m_InputSampleCount >= m_SampleCount); + if (m_SamplingType == SamplingType_Spectrum) + { + const u32 frequencyCount = m_SampleCount * 2; + PK_ASSERT(m_InputSampleCount >= frequencyCount); + TArray > inData; + TArray > outData; + + if (!PK_VERIFY(inData.Resize(m_InputSampleCount) && outData.Resize(frequencyCount))) + return false; + + for (u32 i = 0; i < m_InputSampleCount; ++i) + { + inData[i].real(m_Waveform[i]); + inData[i].imag(0); + } + BasicFFT(inData.RawDataPointer(), outData.RawDataPointer(), IntegerTools::Log2(frequencyCount)); + for (u32 j = 0; j < m_SampleCount; ++j) + { + m_Waveform[j] = std::sqrt(PKSquared(outData[j].real()) + PKSquared(outData[j].imag())) / static_cast(m_SampleCount); + } + } + + // lazy-allocation + if (m_WaveformData == null) + { + CleanAudioPyramid(); + + const u32 baseAllocSize = m_SampleCount; + // allocate two double borders to avoid checking for overflow during sampling w/ Cubic or Linear filters + const u32 baseByteCount = (2 + baseAllocSize + 2) * sizeof(*m_WaveformData); + m_WaveformData = (float*)PK_MALLOC_ALIGNED(baseByteCount, 0x80); + if (m_WaveformData == null) + return false; + Mem::Clear(m_WaveformData, baseByteCount); + + bool success = true; + const u32 pyramidSize = IntegerTools::Log2(m_SampleCount) + 1; + if (m_WaveformPyramid.Resize(pyramidSize)) + { + u32 currentCount = m_SampleCount; + for (u32 i = 1; i < pyramidSize; i++) + { + currentCount >>= 1; + PK_ASSERT(currentCount != 0); + const u32 mipByteCount = (2 + currentCount + 2) * sizeof(float); + m_WaveformPyramid[i] = (float*)PK_MALLOC_ALIGNED(mipByteCount, 0x10); + if (m_WaveformPyramid[i] != null) + Mem::Clear(m_WaveformPyramid[i], mipByteCount); + success &= (m_WaveformPyramid[i] != null); + } + } + m_WaveformPyramid[0] = m_WaveformData; + + if (!success) + { + m_WaveformData = null; + CleanAudioPyramid(); + return false; + } + } + + PK_ASSERT(m_WaveformData != null); + float *realDataPtr = m_WaveformData + 2; // ptr to the first real element, skipping the two-element border + memcpy(realDataPtr, m_Waveform, m_SampleCount * sizeof(*m_WaveformData)); + + { + const float firstEntry = realDataPtr[0]; + const float lastEntry = realDataPtr[m_SampleCount - 1]; + realDataPtr[-1] = firstEntry; // duplicate the first entry in the two start borders + realDataPtr[-2] = firstEntry; + realDataPtr[m_SampleCount + 0] = lastEntry; // duplicate the last entry in the two end borders + realDataPtr[m_SampleCount + 1] = lastEntry; + } + + // right, rebuild the spectrum pyramid: + if (!m_WaveformPyramid.Empty()) + { + u32 currentCount = m_SampleCount; + for (u32 i = 1; i < m_WaveformPyramid.Count(); i++) + { + const float * __restrict src = 2 + m_WaveformPyramid[i - 1]; + float * __restrict dst = 2 + m_WaveformPyramid[i]; + + currentCount >>= 1; + + // downsample + for (u32 j = 0; j < currentCount; j++) + { + dst[j] = 0.5f * (src[j * 2 + 0] + src[j * 2 + 1]); + } + + const float firstEntry = dst[0]; + const float lastEntry = dst[currentCount - 1]; + dst[-1] = firstEntry; // duplicate the first entry in the two start borders + dst[-2] = firstEntry; + dst[currentCount + 0] = lastEntry; // duplicate the last entry in the two end borders + dst[currentCount + 1] = lastEntry; + } + } + m_BuiltThisFrame = true; + return true; +} + +//---------------------------------------------------------------------------- + +bool SSamplerAudio::ReleaseAEResources() +{ + m_Waveform = null; + if (m_SoundData != null) + { + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(instance.GetAESuites()); + + result |= suites.SoundDataSuite1()->AEGP_UnlockSoundDataSamples(m_SoundData); + result |= suites.SoundDataSuite1()->AEGP_DisposeSoundData(m_SoundData); + + m_SoundData = null; + if (result != A_Err_NONE) + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +SSamplerVectorField::SSamplerVectorField() +{ +} + +//---------------------------------------------------------------------------- + +SSamplerVectorField::~SSamplerVectorField() +{ +} + +//---------------------------------------------------------------------------- + +bool SSamplerVectorField::UpdateVectorField(SVectorFieldSamplerDescriptor * aeTurbulenceDesc) +{ + CParticleSamplerDescriptor_VectorField_Grid *desc = static_cast(m_SamplerDescriptor.Get()); + + if (m_Dirty == false) + return true; + + m_Dirty = false; + + if (desc == null) + { + desc = PK_NEW(CParticleSamplerDescriptor_VectorField_Grid()); + m_SamplerDescriptor = desc; + } + + + if (aeTurbulenceDesc->m_ResourceUpdate) + { + if (aeTurbulenceDesc->m_Path.length() == 0) + return true; + + CFilePackPath filePackPath = CFilePackPath::FromPhysicalPath(aeTurbulenceDesc->m_Path.data(), File::DefaultFileSystem()); + TResourcePtr rscVf = Resource::DefaultManager()->Load(filePackPath); + + CParticleSamplerDescriptor_VectorField_Grid::EDataType dataType = CParticleSamplerDescriptor_VectorField_Grid::DataType_Void; + switch (rscVf->m_DataType) + { + case VFDataType_Fp32: + dataType = CParticleSamplerDescriptor_VectorField_Grid::DataType_Fp32; + break; + case VFDataType_Fp16: + dataType = CParticleSamplerDescriptor_VectorField_Grid::DataType_Fp16; + break; + case VFDataType_U8SN: + dataType = CParticleSamplerDescriptor_VectorField_Grid::DataType_U8SN; + break; + default: + break; + } + CFloat4x4 transform = CFloat4x4::IDENTITY; + + transform.StrippedTranslations() = AAEToPK(aeTurbulenceDesc->m_Position); + + if (!(desc->Setup( rscVf->m_Dimensions, + rscVf->m_IntensityMultiplier, + rscVf->m_BoundsMin, + rscVf->m_BoundsMax, + rscVf->m_Data, + dataType, + aeTurbulenceDesc->m_Strength, //Strength + transform, //Xforms + 0, //Flags + AAEToPK(aeTurbulenceDesc->m_Interpolation)))) + return false; + } + else + { + CFloat4x4 transform = CFloat4x4::IDENTITY; + + transform.StrippedTranslations() = AAEToPK(aeTurbulenceDesc->m_Position); + + desc->SetTransforms(transform); + desc->SetStrength(aeTurbulenceDesc->m_Strength); + } + return true; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + diff --git a/AE_GeneralPlugin/Sources/AEGP_FileDialog.cpp b/AE_GeneralPlugin/Sources/AEGP_FileDialog.cpp new file mode 100644 index 00000000..0b0e4856 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_FileDialog.cpp @@ -0,0 +1,107 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include + +#include "AEGP_FileDialog.h" + +#include "AEGP_World.h" + +#include +#include + +__AEGP_PK_BEGIN + +#if defined(PK_MACOSX) + +//---------------------------------------------------------------------------- + +SMacFileDialogFilterData::SMacFileDialogFilterData(const CString desc, const CString type) + : m_Desc(desc) + , m_Type(type) +{ +} + +//---------------------------------------------------------------------------- + +SMacFileOpenData::SMacFileOpenData() +{ +} + +//---------------------------------------------------------------------------- + +SMacFileOpenData::~SMacFileOpenData() +{ +} + +//---------------------------------------------------------------------------- + +bool SMacFileOpenData::AddFilter(const CString &desc, const CString &type) +{ + if (!PK_VERIFY(m_Filters.PushBack(SMacFileDialogFilterData(desc, type)).Valid())) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool MacBasicFileOpen(SMacFileOpenData &data) +{ + TArray filters; + + for (u32 i = 0; i < data.m_Filters.Count(); ++i) + filters.PushBack(CFilePath::ExtractExtension(data.m_Filters[i].m_Type)); + + CString stringResult = OpenFileDialogMac(filters); + + if (!stringResult.Empty()) + { + data.m_Cb(stringResult); + return true; + } + return false; +} + +//---------------------------------------------------------------------------- + +#endif + +SFileDialog::SFileDialog() +{ + +} + +//---------------------------------------------------------------------------- + +bool SFileDialog::AddFilter(const CString &desc, const CString &type) +{ + if (!PK_VERIFY(m_Data.AddFilter(desc, type))) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool SFileDialog::IsCancelled() +{ + return m_Cancel; +} + +//---------------------------------------------------------------------------- + +bool SFileDialog::BasicFileOpen() +{ + m_Cancel = false; +#if defined(PK_WINDOWS) + HRESULT hr = WinBasicFileOpen(m_Data); + if (HRESULT_CODE(hr) == ERROR_CANCELLED) + m_Cancel = true; + return SUCCEEDED(hr); +#elif defined(PK_MACOSX) + return MacBasicFileOpen(m_Data); +#endif +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_FileDialogMac.mm b/AE_GeneralPlugin/Sources/AEGP_FileDialogMac.mm new file mode 100644 index 00000000..f6c45179 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_FileDialogMac.mm @@ -0,0 +1,66 @@ +#include "ae_precompiled.h" +#include "AEGP_FileDialogMac.h" + +#if defined(PK_OS_MACOSX) +#import + +#import +#import + +#include +#endif + +#include +#include + +__AEGP_PK_BEGIN + +#if defined(PK_OS_MACOSX) + +CString OpenFileDialogMac(const TArray &filters, const CString &defaultPathAndFile) +{ + TArray fileList; + + // Create a File Open Dialog class. + NSOpenPanel* openDlg = [NSOpenPanel openPanel]; + [openDlg setLevel:CGShieldingWindowLevel()]; + + // Set array of file types + NSMutableArray * fileTypesArray = [NSMutableArray array]; + for (unsigned int i = 0; i < filters.Count(); i++) + { + NSString * filt =[NSString stringWithUTF8String:filters[i].Data()]; + [fileTypesArray addObject:filt]; + } + + // Enable options in the dialog. + [openDlg setCanChooseFiles:YES]; + [openDlg setAllowedFileTypes:fileTypesArray]; + [openDlg setAllowsMultipleSelection:TRUE]; + + if (!defaultPathAndFile.Empty()) + { + [openDlg setDirectoryURL:[NSURL URLWithString:[NSString stringWithUTF8String:defaultPathAndFile.Data() ] ] ]; + } + + // Display the dialog box. If the OK pressed, + // process the files. + if ( [openDlg runModal] == NSModalResponseOK ) + { + // Gets list of all files selected + NSArray *files = [openDlg URLs]; + // Loop through the files and process them. + for (unsigned int i = 0; i < [files count]; i++ ) + { + // Do something with the filename. + fileList.PushBack(CString([[[files objectAtIndex:i] path] UTF8String])); + } + } + if (fileList.Empty()) + return CString(); + return fileList[0]; +} +#endif + + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_FileWatcher.cpp b/AE_GeneralPlugin/Sources/AEGP_FileWatcher.cpp new file mode 100644 index 00000000..f41c98f4 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_FileWatcher.cpp @@ -0,0 +1,113 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" +#include "AEGP_FileWatcher.h" + +__AEGP_PK_BEGIN +//---------------------------------------------------------------------------- + +bool CFileWatcher::CreateWatcherIFN() +{ + if (m_FileWatcher == null) + { + m_FileWatcher = CFileSystemWatcher::NewWatcher(); + if (!PK_VERIFY(m_FileWatcher != null)) + { + CLog::Log(PK_ERROR, "Could not create the file watcher"); + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +void CFileWatcher::RemoveWatchIFN() +{ + if (m_FileWatcher != null) + m_FileWatcher->RemoveWatch(m_PathToWatch); +} + +//---------------------------------------------------------------------------- + +CFileWatcher::CFileWatcher() +{ +} + +//---------------------------------------------------------------------------- + +CFileWatcher::~CFileWatcher() +{ + RemoveWatchIFN(); + m_FileWatcher = null; +} + +//---------------------------------------------------------------------------- + +void CFileWatcher::PauseFileWatcher() +{ + RemoveWatchIFN(); +} + +//---------------------------------------------------------------------------- + +void CFileWatcher::RestartFileWatcher() +{ + SetWatchPack(m_PathToWatch); +} + +//---------------------------------------------------------------------------- + +bool CFileWatcher::SetWatchPack(const CString &pathToWatch) +{ + CString purifiedPath = pathToWatch; + CFilePath::Purify(purifiedPath); + purifiedPath.AppendSlash(); + + RemoveWatchIFN(); + CreateWatcherIFN(); + + m_PathToWatch = pathToWatch; + m_FileWatcher->AddWatch(m_PathToWatch); + return true; +} + +//---------------------------------------------------------------------------- + +void CFileWatcher::SetNotifierAdd(void(*callback)(const CString &filePath)) +{ + CreateWatcherIFN(); + m_FileWatcher->m_NotifierAdd.Clear(); + m_FileWatcher->m_NotifierAdd += callback; +} + +//---------------------------------------------------------------------------- + +void CFileWatcher::SetNotifierRemove(void(*callback)(const CString &filePath)) +{ + CreateWatcherIFN(); + m_FileWatcher->m_NotifierRemove.Clear(); + m_FileWatcher->m_NotifierRemove += callback; +} + +//---------------------------------------------------------------------------- + +void CFileWatcher::SetNotifierModify(void(*callback)(const CString &filePath)) +{ + CreateWatcherIFN(); + m_FileWatcher->m_NotifierModify.Clear(); + m_FileWatcher->m_NotifierModify += callback; +} + +//---------------------------------------------------------------------------- + +void CFileWatcher::SetNotifierRename(void(*callback)(const CString &oldFilePath, const CString &newFilePath)) +{ + CreateWatcherIFN(); + m_FileWatcher->m_NotifierRename.Clear(); + m_FileWatcher->m_NotifierRename += callback; +} + +//---------------------------------------------------------------------------- +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_FrameCollector.cpp b/AE_GeneralPlugin/Sources/AEGP_FrameCollector.cpp new file mode 100644 index 00000000..b977c768 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_FrameCollector.cpp @@ -0,0 +1,45 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_FrameCollector.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +CFrameCollector::CFrameCollector() +{ +} + +//---------------------------------------------------------------------------- + +CFrameCollector::~CFrameCollector() +{ +} + +//---------------------------------------------------------------------------- + +bool CFrameCollector::EarlyCull(const CAABB &bbox) const +{ + // Can happen if bounds are not active + if (!bbox.IsFinite() || + !bbox.Valid()) + return false; + + if (m_CullingFrustums.Empty()) + return false; + + const u32 viewCount = m_CullingFrustums.Count(); + for (u32 iView = 0; iView < viewCount; ++iView) + { + if (m_CullingFrustums[iView].Touches(bbox)) + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_LayerHolder.cpp b/AE_GeneralPlugin/Sources/AEGP_LayerHolder.cpp new file mode 100644 index 00000000..77cfd4ac --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_LayerHolder.cpp @@ -0,0 +1,155 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include +#include "AEGP_LayerHolder.h" + +#include "AEGP_Scene.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +HBO_CLASS_DEFINITION_BEGIN(CGraphicOverride) + .HBO_FIELD_DEFINITION(RendererID) + .HBO_FIELD_DEFINITION(PropertyID) + .HBO_FIELD_DEFINITION(Value) +HBO_CLASS_DEFINITION_END + +CGraphicOverride::CGraphicOverride() + : HBO_CONSTRUCT(CGraphicOverride) + +{ +} + +//---------------------------------------------------------------------------- + +CGraphicOverride::~CGraphicOverride() +{ +} + +//---------------------------------------------------------------------------- + +bool CGraphicOverride::operator==(const CGraphicOverride &other) +{ + if (other.m_RendererID == m_RendererID && + other.m_PropertyID == m_PropertyID) + return true; + return false; +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +HBO_CLASS_DEFINITION_BEGIN(CLayerProperty) + .HBO_FIELD_DEFINITION(CompName) + .HBO_FIELD_DEFINITION(ID) + .HBO_FIELD_DEFINITION(RendererProperties) +HBO_CLASS_DEFINITION_END + +CLayerProperty::CLayerProperty() + : HBO_CONSTRUCT(CLayerProperty) +{ +} + +//---------------------------------------------------------------------------- + +CLayerProperty::~CLayerProperty() +{ +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +SLayerHolder::SLayerHolder() +{ + +} + +//---------------------------------------------------------------------------- + +SLayerHolder::~SLayerHolder() +{ + + +} +//---------------------------------------------------------------------------- + +bool SLayerHolder::Clear(SPBasicSuite* suite) +{ + AEGP_SuiteHandler suites(suite); + + bool result = true; + if (m_Scene->Quit() == false) + result = false; + m_Scene = null; + + for (s32 i = m_SPendingAttributes.Count() - 1; i >= 0; --i) + { + if (m_SPendingAttributes[i].m_AttributeEffectRef != null) + suites.EffectSuite4()->AEGP_DisposeEffect(m_SPendingAttributes[i].m_AttributeEffectRef); + m_SPendingAttributes[i].m_AttributeEffectRef = null; + m_SPendingAttributes[i].m_Desc->m_IsDeleted = true; + m_SPendingAttributes[i].m_Desc = null; + } + m_SPendingAttributes.Clear(); + + for (auto &it : m_DeletedAttributes) + { + if (it.m_AttributeEffectRef != null) + suites.EffectSuite4()->AEGP_DisposeEffect(it.m_AttributeEffectRef); + it.m_AttributeEffectRef = null; + it.m_Desc->m_IsDeleted = true; + it.m_Desc = null; + } + m_DeletedAttributes.Clear(); + + for (auto &it : m_SpawnedAttributes) + { + if (it.m_AttributeEffectRef != null) + suites.EffectSuite4()->AEGP_DisposeEffect(it.m_AttributeEffectRef); + it.m_AttributeEffectRef = null; + it.m_Desc->m_IsDeleted = true; + it.m_Desc = null; + } + m_SpawnedAttributes.Clear(); + + for (auto &it : m_SpawnedAttributesSampler) + { + if (it.m_AttributeEffectRef != null) + suites.EffectSuite4()->AEGP_DisposeEffect(it.m_AttributeEffectRef); + it.m_AttributeEffectRef = null; + it.m_Desc->m_IsDeleted = true; + it.m_Desc = null; + } + m_SpawnedAttributes.Clear(); + + for (auto &it : m_SPendingEmitters) + { + if (it.m_EffectHandle) + it.m_EffectHandle = null; + it.m_Desc->m_IsDeleted = true; + it.m_Desc = null; + } + m_SPendingEmitters.Clear(); + + if (m_SpawnedEmitter.m_EffectHandle) + m_SpawnedEmitter.m_EffectHandle = null; + m_SpawnedEmitter.m_Desc->m_IsDeleted = true; + m_SpawnedEmitter.m_Desc = null; + + m_EffectLayer = null; + m_CameraLayer = null; + + PK_SAFE_DELETE(m_BackdropAudioWaveform); + PK_SAFE_DELETE(m_BackdropAudioSpectrum); + return result; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_Log.cpp b/AE_GeneralPlugin/Sources/AEGP_Log.cpp new file mode 100644 index 00000000..f09a78db --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_Log.cpp @@ -0,0 +1,108 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_Log.h" +#include "AEGP_World.h" + +//Suite +#include +#include + +//AE +#include +#include +#include + +__AEGP_PK_BEGIN +//---------------------------------------------------------------------------- + +bool CAELog::s_PKState = false; +SAAEIOData *CAELog::s_IOData = null; + +//---------------------------------------------------------------------------- + +bool CAELog::LogErrorWindows(SAAEIOData *AAEData, const CString errorStr) +{ + PK_ASSERT(errorStr.Length() < 256); + + if (s_PKState) + CLog::Log(PK_ERROR, errorStr); + if (AAEData == null || AAEData->m_OutData == null) + return false; + AAEData->m_OutData->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + sprintf(AAEData->m_OutData->return_msg, "%s", errorStr.Data()); + + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + SPBasicSuite *basicSuite = instance.GetAESuites(); + + if (basicSuite) + { + AEGP_SuiteHandler suites(basicSuite); + + suites.UtilitySuite6()->AEGP_WriteToDebugLog("PopcornFX Plugin", "Error", errorStr.Data()); + suites.AdvAppSuite2()->PF_InfoDrawText("PopcornFX Plugin [ERROR]", errorStr.Data()); + } + return false; +} + +//---------------------------------------------------------------------------- + +bool CAELog::SetIOData(SAAEIOData *AAEData) +{ + s_IOData = AAEData; + return true; +} + +//---------------------------------------------------------------------------- + +void CAELog::ClearIOData() +{ + s_IOData = null; +} + +//---------------------------------------------------------------------------- + +bool CAELog::TryLogErrorWindows(const CString errorStr) +{ + if (s_IOData == null) + return false; + LogErrorWindows(s_IOData, errorStr); + return false; +} + +//---------------------------------------------------------------------------- + +void CAELog::SetPKLogState(bool state) +{ + s_PKState = state; +} + +//---------------------------------------------------------------------------- + +bool CAELog::TryLogInfoWindows(const CString infoStr) +{ + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + + if (s_PKState) + CLog::Log(PK_INFO, infoStr); + + SPBasicSuite *basicSuite = instance.GetAESuites(); + + if (basicSuite) + { + AEGP_SuiteHandler suites(basicSuite); + + suites.UtilitySuite6()->AEGP_ReportInfo(instance.GetPluginID(), infoStr.Data()); + + suites.UtilitySuite6()->AEGP_WriteToDebugLog("PopcornFX Plugin", "Info", infoStr.Data()); + + suites.AdvAppSuite2()->PF_InfoDrawText("PopcornFX Plugin [INFO]", infoStr.Data()); + } + return true; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_Main.cpp b/AE_GeneralPlugin/Sources/AEGP_Main.cpp new file mode 100644 index 00000000..1dcb2410 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_Main.cpp @@ -0,0 +1,475 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_Main.h" +#include "AEGP_World.h" +#include "AEGP_FileDialog.h" +#include "AEGP_PopcornFXPlugins.h" +#include "AEGP_Scene.h" +#include "AEGP_AEPKConversion.h" +#include "AEGP_Log.h" +#include "AEGP_VaultHandler.h" +#include + +//AE +#include +#include + +#include + +#include + +using namespace PopcornFX; +//---------------------------------------------------------------------------- + +static SPAPI A_Err InitializePopcornFXIFN(AAePk::SAAEIOData& AAEData) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().InitializeIFN(AAEData) == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err HandleNewEmitterEvent(AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().HandleNewEmitterEvent(AAEData, descriptor) == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err HandleDeleteEmitterEvent(AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().HandleDeleteEmitterEvent(AAEData, descriptor) == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI bool CheckEmitterValidity(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + bool ret = AEGPPk::CPopcornFXWorld::Instance().CheckEmitterValidity(AAEData, descriptor); + AEGPPk::CAELog::ClearIOData(); + return ret; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err UpdateScene(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().UpdateScene(AAEData, descriptor) == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err UpdateEmitter(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().UpdateEmitter(AAEData, descriptor) == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err DisplayMarketplacePanel(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + + AEGPPk::CPopcornFXWorld::Instance().LaunchEditorAsPopup(AAEData, descriptor); + + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err DisplayBrowseEffectPanel(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + + AEGPPk::SFileDialog cbData; + + cbData.AddFilter("PopcornFX effect file (*.pkfx)", "*.pkfx"); + + struct SFunctor + { + void Function(const PopcornFX::CString path) + { + AEGPPk::CPopcornFXWorld::Instance().SetSelectedEffectFromPath(m_Descriptor, path); + } + + AAePk::SEmitterDesc *m_Descriptor = null; + }; + + static SFunctor functor; + + functor.m_Descriptor = descriptor; + cbData.SetCallback(PopcornFX::FastDelegate(&functor, &SFunctor::Function)); + + if (!cbData.BasicFileOpen()) + { + AEGPPk::CAELog::ClearIOData(); + if (cbData.IsCancelled()) + return A_Err_NONE; + return A_Err_GENERIC; + } + AEGPPk::CAELog::ClearIOData(); + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err DisplayBrowseMeshDialog(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + + AEGPPk::SFileDialog cbData; + + cbData.AddFilter("Baked Mesh file (*.fbx)", "*.fbx"); + + struct SFunctor + { + void Function(const CString path) + { + if (m_Descriptor != null) + { + AEGPPk::CPopcornFXWorld &world = AEGPPk::CPopcornFXWorld::Instance(); + AEGPPk::SResourceBakeConfig bakeConfig; + + m_Descriptor->m_BackdropMesh.m_Path = world.GetVaultHandler().BakeResource(path, bakeConfig).Data(); + bakeConfig.m_IsSkeletalAnim = true; + world.GetVaultHandler().BakeResource(path, bakeConfig).Data(); + m_Descriptor->m_LoadBackdrop = true; + m_Descriptor->m_UpdateBackdrop = true; + } + } + + AAePk::SEmitterDesc* m_Descriptor = null; + }; + + static SFunctor functor; + + functor.m_Descriptor = descriptor; + cbData.SetCallback(PopcornFX::FastDelegate(&functor, &SFunctor::Function)); + + + AEGPPk::CPopcornFXWorld &world = AEGPPk::CPopcornFXWorld::Instance(); + AEGPPk::SLayerHolder *layer = world.GetLayerForSEmitterDesc(descriptor); + + if (layer) + { + AEGP_LayerH layerH = null; + AEGP_SuiteHandler suites(world.GetAESuites()); + PF_Err result = A_Err_NONE; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + if (!PK_VERIFY(result == A_Err_NONE)) + return A_Err_GENERIC; + if (layerH != null) + layer->m_EffectLayer = layerH; + if (!cbData.BasicFileOpen()) + { + AEGPPk::CAELog::ClearIOData(); + if (cbData.IsCancelled()) + return A_Err_NONE; + return A_Err_GENERIC; + } + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err DisplayBrowseEnvironmentMapDialog(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + AEGPPk::SFileDialog cbData; + cbData.AddFilter("Image file", "*.*"); + + struct SFunctor + { + void Function(const CString path) + { + if (m_Descriptor != null) + { + AEGPPk::CPopcornFXWorld &world = AEGPPk::CPopcornFXWorld::Instance(); + AEGPPk::SResourceBakeConfig bakeConfig; + + bakeConfig.m_StraightCopy = true; + m_Descriptor->m_BackdropEnvironmentMap.m_Path = world.GetVaultHandler().BakeResource(path, bakeConfig).Data(); + m_Descriptor->m_Update = true; + } + } + AAePk::SEmitterDesc* m_Descriptor = null; + }; + + static SFunctor functor; + + functor.m_Descriptor = descriptor; + cbData.SetCallback(PopcornFX::FastDelegate(&functor, &SFunctor::Function)); + + if (!cbData.BasicFileOpen()) + { + AEGPPk::CAELog::ClearIOData(); + if (cbData.IsCancelled()) + return A_Err_NONE; + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err ReimportEffect(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + if (descriptor == null || descriptor->m_PathSource.empty()) + return A_Err_NONE; + + AEGPPk::CAELog::SetIOData(&AAEData); + + PopcornFX::CString path = PopcornFX::CString(descriptor->m_PathSource.c_str()) / PopcornFX::CString(descriptor->m_Name.c_str()); + + path = CFilePath::StripExtension(path) + ".pkfx"; + + AEGPPk::CPopcornFXWorld::Instance().SetSelectedEffectFromPath(descriptor, path, true); + + AEGPPk::CPopcornFXWorld::Instance().InvalidateEmitterRender(AAEData, descriptor); + + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err Display_AttributeSampler_BrowseMeshDialog(AAePk::SAAEIOData &AAEData, AAePk::SAttributeSamplerDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + AEGPPk::SFileDialog cbData; + + if (descriptor->m_Type == AAePk::AttributeSamplerType_Geometry) + { + cbData.AddFilter("Mesh file (*.fbx)", "*.fbx"); + } + else if (descriptor->m_Type == AAePk::AttributeSamplerType_VectorField) + { + cbData.AddFilter("Baked Mesh file (*.fga)", "*.fga"); + } + else + return A_Err_NONE; + + struct SFunctor + { + AAePk::SAttributeSamplerDesc* m_Descriptor = null; + + void Function(const CString path) + { + if (m_Descriptor != null) + { + AEGPPk::SResourceBakeConfig bakeConfig; + + if (m_Descriptor->m_Type == AEGPPk::AttributeSamplerType_Animtrack) + { + bakeConfig.m_IsAnimTrack = true; + } + + AEGPPk::CPopcornFXWorld &world = AEGPPk::CPopcornFXWorld::Instance(); + m_Descriptor->m_ResourcePath = world.GetVaultHandler().BakeResource(path, bakeConfig).Data(); + + } + } + }; + + static SFunctor functor; + + functor.m_Descriptor = descriptor; + cbData.SetCallback(PopcornFX::FastDelegate(&functor, &SFunctor::Function)); + + if (!cbData.BasicFileOpen()) + { + AEGPPk::CAELog::ClearIOData(); + if (cbData.IsCancelled()) + return A_Err_NONE; + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err SetParametersIndexes(const int *indexes, AAePk::EPKChildPlugins plugin) +{ + AEGPPk::CPopcornFXWorld::Instance().SetParametersIndexes(indexes, plugin); + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err ShutdownPopcornFXIFN(AAePk::SAAEIOData &AAEData) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().ShutdownIFN() == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err SetDefaultLayerPosition(AAePk::SAAEIOData& AAEData, AEGP_LayerH layer) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().SetDefaultLayerPosition(AAEData, layer) == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static SPAPI A_Err MoveEffectIntoCurrentView(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + AEGPPk::CAELog::SetIOData(&AAEData); + if (AEGPPk::CPopcornFXWorld::Instance().MoveEffectIntoCurrentView(AAEData, descriptor) == false) + { + AEGPPk::CAELog::ClearIOData(); + return A_Err_GENERIC; + } + AEGPPk::CPopcornFXWorld::Instance().InvalidateEmitterRender(AAEData, descriptor); + AAEData.m_OutData->out_flags |= PF_OutFlag_FORCE_RERENDER | PF_OutFlag_REFRESH_UI; + + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +static PopcornFXSuite1 g_PopcornFXSuite = +{ + InitializePopcornFXIFN, + HandleNewEmitterEvent, + HandleDeleteEmitterEvent, + CheckEmitterValidity, + UpdateScene, + UpdateEmitter, + DisplayMarketplacePanel, + DisplayBrowseEffectPanel, + DisplayBrowseMeshDialog, + DisplayBrowseEnvironmentMapDialog, + ReimportEffect, + Display_AttributeSampler_BrowseMeshDialog, + ShutdownPopcornFXIFN, + SetParametersIndexes, + SetDefaultLayerPosition, + MoveEffectIntoCurrentView, +}; + +//---------------------------------------------------------------------------- + +A_Err EntryPointFunc( struct SPBasicSuite *pica_basicP, /* >> */ + A_long major_versionL, /* >> */ + A_long minor_versionL, /* >> */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_GlobalRefcon *global_refconP) /* << */ +{ + (void)global_refconP; + (void)minor_versionL; + (void)major_versionL; + + A_Err err = A_Err_NONE; + SPSuiteRef my_ref = 0; + AEGP_SuiteHandler suites(pica_basicP); + SuiteHelper panelSuite(pica_basicP); + SPSuitesSuite *suitesOfSuite = nullptr; + AEGP_Command command; + const A_u_char *commandName = (const A_u_char*)"PopcornFX"; + AEGPPk::CPopcornFXWorld &PKWorld = AEGPPk::CPopcornFXWorld::Instance(); + + *global_refconP = (AEGP_GlobalRefcon)&PKWorld; + + if (!PKWorld.Setup(pica_basicP, aegp_plugin_id)) + return A_Err_GENERIC; + + AEGP_RegisterSuite5 *registerSuite = suites.RegisterSuite5(); + if (registerSuite != NULL) + { + err |= registerSuite->AEGP_RegisterDeathHook(aegp_plugin_id, AEGPPk::CPopcornFXWorld::DeathHook, 0); + err |= registerSuite->AEGP_RegisterIdleHook(aegp_plugin_id, AEGPPk::CPopcornFXWorld::IdleHook, 0); + } + else + return A_Err_MISSING_SUITE; + + AEGP_CommandSuite1 *commandSuite = suites.CommandSuite1(); + if (commandSuite != NULL) + { + err |= commandSuite->AEGP_GetUniqueCommand(&command); + if (command != 0) + { + PKWorld.SetCommandHandle(command, (const char*)commandName); + err |= commandSuite->AEGP_InsertMenuCommand(command, (const A_char*)commandName, AEGP_Menu_WINDOW, AEGP_MENU_INSERT_SORTED); + } + } + else + return A_Err_MISSING_SUITE; + + err |= registerSuite->AEGP_RegisterCommandHook( aegp_plugin_id, + AEGP_HP_BeforeAE, + command, + &AEGPPk::CPopcornFXWorld::CommandHook, + (AEGP_CommandRefcon)(&PKWorld)); + err |= registerSuite->AEGP_RegisterUpdateMenuHook( aegp_plugin_id, + &AEGPPk::CPopcornFXWorld::UpdateMenuHook, + null); + err |= panelSuite->AEGP_RegisterCreatePanelHook( aegp_plugin_id, + commandName, + &AEGPPk::CPopcornFXWorld::CreatePanelHook, + (AEGP_CreatePanelRefcon)&PKWorld, + true); + + err |= pica_basicP->AcquireSuite(kSPSuitesSuite, kSPSuitesSuiteVersion, (const void **)&suitesOfSuite); + if (err == A_Err_NONE && suitesOfSuite) + { + err |= suitesOfSuite->AddSuite( kSPRuntimeSuiteList, + 0, + kPopcornFXSuite1, + kPopcornFXSuiteVersion1, + 1, + &g_PopcornFXSuite, + &my_ref); + err |= pica_basicP->ReleaseSuite(kSPSuitesSuite, kSPSuitesSuiteVersion); + } + return err; +} + +//---------------------------------------------------------------------------- diff --git a/AE_GeneralPlugin/Sources/AEGP_PackExplorer.cpp b/AE_GeneralPlugin/Sources/AEGP_PackExplorer.cpp new file mode 100644 index 00000000..5e7a3b0c --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_PackExplorer.cpp @@ -0,0 +1,124 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_PackExplorer.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +CPackExplorer::CPackExplorer(const CString &pack, IFileSystem *fileSystem) + : CFileDirectoryWalker(pack, IgnoreVirtualFS, fileSystem) + , m_Pack(pack) +{ +} + +//---------------------------------------------------------------------------- + +CPackExplorer::~CPackExplorer() +{ + m_Pack = null; +} + +//---------------------------------------------------------------------------- + +void CPackExplorer::Explore() +{ + if (!m_Pack.Empty()) + { + Walk(); + } +} + +//---------------------------------------------------------------------------- + +bool CPackExplorer::DirectoryNotifier(const CFilePack *pack, const char *fullPath, u32 directoryFirstCharPos) +{ + (void)directoryFirstCharPos; + (void)pack; + + const CString filename = CFilePath::ExtractFilename(fullPath); + + // go full recursive unless a hidden directory somehow ended up in the pack + return filename[0] != '.'; +} + +//---------------------------------------------------------------------------- + +void CPackExplorer::FileNotifier(const CFilePack *pack, const char *fullPath, u32 fileFirstCharPos) +{ + (void)fileFirstCharPos; + (void)pack; + + const char *extension = CFilePath::ExtractExtension(fullPath); + + // add the effect to the list + if (extension != null && !strcasecmp(extension, "pkfx")) + { + const CString effectPath = CFilePath::Relativize(m_Pack.Data(), fullPath); + + m_EffectPaths.PushBack(effectPath); + } +} + +//---------------------------------------------------------------------------- + +CBakedPackExplorer::CBakedPackExplorer(const CString &pack, IFileSystem *fileSystem) + : CFileDirectoryWalker(pack, IgnoreVirtualFS, fileSystem) + , m_Pack(pack) +{ +} + +//---------------------------------------------------------------------------- + +CBakedPackExplorer::~CBakedPackExplorer() +{ + m_Pack = null; +} + +//---------------------------------------------------------------------------- + +void CBakedPackExplorer::Explore() +{ + if (!m_Pack.Empty()) + { + Walk(); + } +} + +//---------------------------------------------------------------------------- + +bool CBakedPackExplorer::DirectoryNotifier(const CFilePack *pack, const char *fullPath, u32 directoryFirstCharPos) +{ + (void)directoryFirstCharPos; + (void)pack; + + const CString filename = CFilePath::ExtractFilename(fullPath); + + // go full recursive unless a hidden directory somehow ended up in the pack + return filename[0] != '.'; +} + +//---------------------------------------------------------------------------- + +void CBakedPackExplorer::FileNotifier(const CFilePack *pack, const char *fullPath, u32 fileFirstCharPos) +{ + (void)fileFirstCharPos; + (void)pack; + + const char *extension = CFilePath::ExtractExtension(fullPath); + + // add the effect to the list + if (extension != null && !strcasecmp(extension, "pkb")) + { + const CString effectPath = CFilePath::Relativize(m_Pack.Data(), fullPath); + + m_EffectPaths.PushBack(effectPath); + } +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_ParticleScene.cpp b/AE_GeneralPlugin/Sources/AEGP_ParticleScene.cpp new file mode 100644 index 00000000..ea69af9c --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_ParticleScene.cpp @@ -0,0 +1,134 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_ParticleScene.h" + +#include + +#include "AEGP_Scene.h" +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +void CAAEParticleScene::RayTracePacket( const Colliders::STraceFilter &traceFilter, + const Colliders::SRayPacket &packet, + const Colliders::STracePacket &results) +{ + (void)traceFilter; + PK_NAMEDSCOPEDPROFILE_C("CParticleSceneInterface: RayTracePacket", CFloat3(0.0f, 0.6f, 1.0f)); + // pre-conditions + PK_ASSERT(packet.m_RayOrigins_Aligned16.Count() == packet.m_RayDirectionsAndLengths_Aligned16.Count()); + PK_ASSERT(results.Count() == packet.m_RayOrigins_Aligned16.Count()); + + const s32 kMaskTrue = -1; + TStridedMemoryView enableMasks = packet.m_RayMasks_Aligned16; + if (enableMasks.Empty()) + enableMasks = TStridedMemoryView(&kMaskTrue, results.Count(), 0); + + if (!m_BackdropMeshes.Empty()) + { + // we've got a mesh to collide against. Store the previous ray lengths so we may + // detect which rays intersect the mesh: + PK_STACKALIGNEDMEMORYVIEW(float, prevHitTimes, results.Count(), 0x10); + Mem::Copy(prevHitTimes.Data(), results.m_HitTimes_Aligned16, results.Count() * sizeof(float)); + + const CFloat4x4 &meshXForms = m_BackdropMeshTransforms; + const CFloat4x4 meshXFormsInv = meshXForms.Inverse(); + + for (u32 i = 0; i < m_BackdropMeshes.Count(); ++i) + { + // trace the mesh: + m_BackdropMeshes[i]->TracePacket(CMeshNew::STraceFlags(), packet, results, &meshXForms, &meshXFormsInv); + + if (results.m_ContactObjects_Aligned16 != null) // the caller wants us to report contact objects + { + for (u32 j = 0; j < results.Count(); j++) + { + PK_ASSERT(results.m_HitTimes_Aligned16[j] <= prevHitTimes[j]); + + // if the hit time is different from the original hit-time, + // this ray has hit the mesh, set the contact object: + if (results.m_HitTimes_Aligned16[j] != prevHitTimes[j]) + results.m_ContactObjects_Aligned16[j] = CollidableObject::DEFAULT; + } + } + } + } +} + +//---------------------------------------------------------------------------- + +void CAAEParticleScene::ClearBackdropMesh() +{ + m_BackdropMeshes.Clear(); +} + +//---------------------------------------------------------------------------- + +void CAAEParticleScene::SetBackdropMeshTransform(const CFloat4x4 &transforms) +{ + m_BackdropMeshTransforms = transforms; +} + +//---------------------------------------------------------------------------- + +void CAAEParticleScene::SetBackdropMesh(const TResourcePtr &resourceMesh, const CFloat4x4 &transforms) +{ + m_BackdropMeshes.Clear(); + if (resourceMesh == null || resourceMesh->Empty()) + return; + for (const auto &staticBatch : resourceMesh->BatchList()) + { + m_BackdropMeshes.PushBack(staticBatch->RawMesh()); + } + m_BackdropMeshTransforms = transforms; +} + +//---------------------------------------------------------------------------- + +TMemoryView CAAEParticleScene::GetAudioSpectrum(CStringId channelGroup, u32 &outBaseCount) const +{ + PK_ASSERT(m_Parent != null); + SSamplerAudio *samplerAudio = m_Parent->GetAudioSamplerDescriptor(channelGroup, SSamplerAudio::SamplingType_Spectrum); + + if (samplerAudio == null) + return TMemoryView(); + + samplerAudio->m_SamplingType = SSamplerAudio::SamplingType_Spectrum; + + samplerAudio->BuildAudioPyramidIFN(); + + outBaseCount = samplerAudio->m_SampleCount; + if (samplerAudio->m_SampleCount == 0) + return TMemoryView(); + return TMemoryView(samplerAudio->m_WaveformPyramid.RawDataPointer(), samplerAudio->m_WaveformPyramid.Count()); +} + +//---------------------------------------------------------------------------- + +TMemoryView CAAEParticleScene::GetAudioWaveform(CStringId channelGroup, u32 &outBaseCount) const +{ + PK_ASSERT(m_Parent != null); + SSamplerAudio *samplerAudio = m_Parent->GetAudioSamplerDescriptor(channelGroup, SSamplerAudio::SamplingType_WaveForm); + + if (samplerAudio == null) + return TMemoryView(); + + samplerAudio->m_SamplingType = SSamplerAudio::SamplingType_WaveForm; + + samplerAudio->BuildAudioPyramidIFN(); + + outBaseCount = samplerAudio->m_SampleCount; + if (samplerAudio->m_SampleCount == 0) + return TMemoryView(); + return TMemoryView(samplerAudio->m_WaveformPyramid.RawDataPointer(), samplerAudio->m_WaveformPyramid.Count()); + +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_PopcornFXPlugins.cpp b/AE_GeneralPlugin/Sources/AEGP_PopcornFXPlugins.cpp new file mode 100644 index 00000000..c3efb2d3 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_PopcornFXPlugins.cpp @@ -0,0 +1,282 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_PopcornFXPlugins.h" + +#include +#include + +#define USE_COMPILER_BACKEND +#define USE_IMAGE_PLUGINS +#define USE_IMAGE_PLUGIN_TIFF +#define USE_IMAGE_PLUGIN_PKM +#define USE_IMAGE_PLUGIN_PVR +#define USE_FBXIMPORTER + +//------------------------------------------------------------------------------ +// +// toolkit to load/unload PKFX runtime plugins +// +//------------------------------------------------------------------------------ + +#ifdef PK_PLUGINS_STATIC +# if defined(USE_COMPILER_BACKEND) +PK_PLUGIN_DECLARE(CCompilerBackendCPU_VM); +# if defined(PK_PARTICLES_UPDATER_USE_D3D12) || defined(PK_PARTICLES_UPDATER_USE_D3D11) +PK_PLUGIN_DECLARE(CCompilerBackendGPU_D3D); +# endif +# endif + + +# if defined(USE_IMAGE_PLUGINS) +PK_PLUGIN_DECLARE(CImageDDSCodec); +PK_PLUGIN_DECLARE(CImagePNGCodec); +PK_PLUGIN_DECLARE(CImageTGACodec); +PK_PLUGIN_DECLARE(CImageJPEGCodec); +PK_PLUGIN_DECLARE(CImageHDRCodec); +# if defined(USE_IMAGE_PLUGIN_TIFF) +PK_PLUGIN_DECLARE(CImageTIFFCodec); +# endif +# if defined(USE_IMAGE_PLUGIN_PKM) +PK_PLUGIN_DECLARE(CImagePKMCodec); +# endif +# if defined(USE_IMAGE_PLUGIN_PVR) +PK_PLUGIN_DECLARE(CImagePVRCodec); +# endif +# endif + +# if defined(USE_FBXIMPORTER) +PK_PLUGIN_DECLARE(CMeshCodecFBX); +# endif + +# if defined(PK_DEBUG) +# define PK_PLUGIN_POSTFIX_BUILD "_D" +# else +# define PK_PLUGIN_POSTFIX_BUILD "" +# endif +# if defined(PK_WINDOWS) +# define PK_PLUGIN_POSTFIX_EXT ".dll" +# else +# define PK_PLUGIN_POSTFIX_EXT "" +# endif +#endif + +__AEGP_PK_BEGIN +//------------------------------------------------------------------------------ + +static u32 g_LoadedPlugins = 0; + +//----------------------------------------------------------------------------- +// +// Loads selected plugins +// +//----------------------------------------------------------------------------- + +bool PopcornRegisterPlugins(u32 selected /*= 0*/) +{ + PK_ASSERT(g_LoadedPlugins == 0); + + bool success = true; +#ifndef PK_PLUGINS_STATIC + // plugins are .dll + PopcornFX::CPluginManager::RegisterDirectory("Plugins", false); + +#else + // plugins are linked statically + if (selected & EPlugin_CompilerBackendVM) + { + const char *backendPath = "Plugins/CBCPU_VM" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *backend = StartupPlugin_CCompilerBackendCPU_VM(); + success &= (backend != null && PopcornFX::CPluginManager::PluginRegister(backend, true, backendPath)); + } +# if (PK_PARTICLES_UPDATER_USE_D3D12 != 0 || PK_PARTICLES_UPDATER_USE_D3D11 != 0) + if (selected & EPlugin_CompilerBackendD3D) + { + const char *backendPath = "Plugins/CBGPU_D3D" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *backend = StartupPlugin_CCompilerBackendGPU_D3D(); + success &= (backend != null && CPluginManager::PluginRegister(backend, true, backendPath)); + } +# endif +# ifdef USE_IMAGE_PLUGINS + if (selected & EPlugin_ImageCodecDDS) + { + const char *codecPathDDS = "Plugins/image_codec_dds" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecDDS = StartupPlugin_CImageDDSCodec(); + success &= (codecDDS != null && PopcornFX::CPluginManager::PluginRegister(codecDDS, true, codecPathDDS)); + } + + if (selected & EPlugin_ImageCodecPNG) + { + const char *codecPathPNG = "Plugins/image_codec_png" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecPNG = StartupPlugin_CImagePNGCodec(); + success &= (codecPNG != null && PopcornFX::CPluginManager::PluginRegister(codecPNG, true, codecPathPNG)); + } + + if (selected & EPlugin_ImageCodecJPG) + { + const char *codecPathJPG = "Plugins/image_codec_jpeg" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecJPG = StartupPlugin_CImageJPEGCodec(); + success &= (codecJPG != null && PopcornFX::CPluginManager::PluginRegister(codecJPG, true, codecPathJPG)); + } + + if (selected & EPlugin_ImageCodecTGA) + { + const char *codecPathTGA = "Plugins/image_codec_tga" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecTGA = StartupPlugin_CImageTGACodec(); + success &= (codecTGA != null && PopcornFX::CPluginManager::PluginRegister(codecTGA, true, codecPathTGA)); + } + + if (selected & EPlugin_ImageCodecHDR) + { + const char *codecPathHDR = "Plugins/image_codec_hdr" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecHDR = StartupPlugin_CImageHDRCodec(); + success &= (codecHDR != null && PopcornFX::CPluginManager::PluginRegister(codecHDR, true, codecPathHDR)); + } +# endif + +# if defined(USE_IMAGE_PLUGIN_TIFF) + if (selected & EPlugin_ImageCodecTIFF) + { + const char *codecPathTIFF = "Plugins/image_codec_tiff" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecTIFF = StartupPlugin_CImageTIFFCodec(); + success &= (codecTIFF != null && PopcornFX::CPluginManager::PluginRegister(codecTIFF, true, codecPathTIFF)); + } +# endif + +# if defined(USE_IMAGE_PLUGIN_PKM) + if (selected & EPlugin_ImageCodecPKM) + { + const char *codecPathPKM = "Plugins/image_codec_pkm" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecPKM = StartupPlugin_CImagePKMCodec(); + success &= (codecPKM != null && PopcornFX::CPluginManager::PluginRegister(codecPKM, true, codecPathPKM)); + } +# endif + +# if defined(USE_IMAGE_PLUGIN_PVR) + if (selected & EPlugin_ImageCodecPVR) + { + const char *codecPathPVR = "Plugins/image_codec_pvr" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codecPVR = StartupPlugin_CImagePVRCodec(); + success &= (codecPVR != null && PopcornFX::CPluginManager::PluginRegister(codecPVR, true, codecPathPVR)); + } +# endif + +# if defined(USE_FBXIMPORTER) + if (selected & EPlugin_MeshCodecFBX) + { + const char *codecPath = "Plugins/MeshCodecFBX" PK_PLUGIN_POSTFIX_BUILD PK_PLUGIN_POSTFIX_EXT; + IPluginModule *codec = StartupPlugin_CMeshCodecFBX(); + success &= (codec != null && PopcornFX::CPluginManager::PluginRegister(codec, true, codecPath)); + } +# endif +#endif + + g_LoadedPlugins = selected; + return success; +} + +//----------------------------------------------------------------------------- +// +// Unloads all plugins +// +//----------------------------------------------------------------------------- + +void PopcornUnregisterPlugins() +{ + // unregister plugins: +#ifdef PK_PLUGINS_STATIC + if (g_LoadedPlugins & EPlugin_CompilerBackendVM) + { + IPluginModule *backend = GetPlugin_CCompilerBackendCPU_VM(); + (backend != null && PopcornFX::CPluginManager::PluginRelease(backend)); + ShutdownPlugin_CCompilerBackendCPU_VM(); + } + +# if (PK_PARTICLES_UPDATER_USE_D3D12 != 0 || PK_PARTICLES_UPDATER_USE_D3D11 != 0) + if (g_LoadedPlugins & EPlugin_CompilerBackendD3D) + { + IPluginModule *backend = GetPlugin_CCompilerBackendGPU_D3D(); + (backend != null && PopcornFX::CPluginManager::PluginRelease(backend)); + ShutdownPlugin_CCompilerBackendGPU_D3D(); + } +# endif +# ifdef USE_IMAGE_PLUGINS + if (g_LoadedPlugins & EPlugin_ImageCodecDDS) + { + IPluginModule *codecDDS = GetPlugin_CImageDDSCodec(); + (codecDDS != null && PopcornFX::CPluginManager::PluginRelease(codecDDS)); + ShutdownPlugin_CImageDDSCodec(); + } + + if (g_LoadedPlugins & EPlugin_ImageCodecPNG) + { + IPluginModule *codecPNG = GetPlugin_CImagePNGCodec(); + (codecPNG != null && PopcornFX::CPluginManager::PluginRelease(codecPNG)); + ShutdownPlugin_CImagePNGCodec(); + } + + if (g_LoadedPlugins & EPlugin_ImageCodecJPG) + { + IPluginModule *codecJPG = GetPlugin_CImageJPEGCodec(); + (codecJPG != null && PopcornFX::CPluginManager::PluginRelease(codecJPG)); + ShutdownPlugin_CImageJPEGCodec(); + } + + if (g_LoadedPlugins & EPlugin_ImageCodecTGA) + { + IPluginModule *codecTGA = GetPlugin_CImageTGACodec(); + (codecTGA != null && PopcornFX::CPluginManager::PluginRelease(codecTGA)); + ShutdownPlugin_CImageTGACodec(); + } + + if (g_LoadedPlugins & EPlugin_ImageCodecHDR) + { + IPluginModule *codecHDR = GetPlugin_CImageHDRCodec(); + (codecHDR != null && PopcornFX::CPluginManager::PluginRelease(codecHDR)); + ShutdownPlugin_CImageHDRCodec(); + } +# endif + +# if defined(USE_IMAGE_PLUGIN_TIFF) + if (g_LoadedPlugins & EPlugin_ImageCodecTIFF) + { + IPluginModule *codecTIFF = GetPlugin_CImageTIFFCodec(); + (codecTIFF != null && PopcornFX::CPluginManager::PluginRelease(codecTIFF)); + ShutdownPlugin_CImageTIFFCodec(); + } +# endif + +# if defined(USE_IMAGE_PLUGIN_PKM) + if (g_LoadedPlugins & EPlugin_ImageCodecPKM) + { + IPluginModule *codecPKM = GetPlugin_CImagePKMCodec(); + (codecPKM != null && PopcornFX::CPluginManager::PluginRelease(codecPKM)); + ShutdownPlugin_CImagePKMCodec(); + } +# endif + +# if defined(USE_IMAGE_PLUGIN_PVR) + if (g_LoadedPlugins & EPlugin_ImageCodecPVR) + { + IPluginModule *codecPVR = GetPlugin_CImagePVRCodec(); + (codecPVR != null && PopcornFX::CPluginManager::PluginRelease(codecPVR)); + ShutdownPlugin_CImagePVRCodec(); + } +# endif + +# if defined(USE_FBXIMPORTER) + if (g_LoadedPlugins & EPlugin_MeshCodecFBX) + { + IPluginModule *codec = GetPlugin_CMeshCodecFBX(); + (codec != null && PopcornFX::CPluginManager::PluginRelease(codec)); + ShutdownPlugin_CMeshCodecFBX(); + } +# endif +#endif + g_LoadedPlugins = 0; +} + +//------------------------------------------------------------------------------ +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_RenderContext.cpp b/AE_GeneralPlugin/Sources/AEGP_RenderContext.cpp new file mode 100644 index 00000000..e5558e55 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_RenderContext.cpp @@ -0,0 +1,703 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_RenderContext.h" +#include "AEGP_AEPKConversion.h" + +#include "PopcornFX_Suite.h" + +//AAE +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//CreateInternalWindow +#if defined(PK_MACOSX) +# include +# include +# include +#else +# include +# include +#endif + +#include +#include +//RHI +#include +#include + +//D3D11 +#if (PK_BUILD_WITH_D3D11_SUPPORT != 0) +#include "RenderApi/AEGP_D3D11Context.h" +#endif +//D3D12 +#if (PK_BUILD_WITH_D3D12_SUPPORT != 0) +#include "RenderApi/AEGP_D3D12Context.h" +#endif +#if (PK_BUILD_WITH_METAL_SUPPORT != 0) +#include "RenderApi/AEGP_MetalContext.h" +#endif + +#include "RenderApi/AEGP_CopyPixels.h" + +//Samples +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +CAAEBaseContext *CAAERenderContext::m_AEGraphicContext = null; +Threads::CCriticalSection CAAERenderContext::m_AEGraphicContextLock; + +//---------------------------------------------------------------------------- + +CAAERenderContext::CAAERenderContext() +: m_WindowHandle(null) +, m_DeviceContext(null) +, m_Width(0) +, m_Height(0) +, m_Initialized(false) +, m_RHIRendering(null) +, m_ShaderLoader(null) +{ +} + +//---------------------------------------------------------------------------- + +CAAERenderContext::~CAAERenderContext() +{ + PKSample::SPassDescription::s_PassDescriptions.Clean(); +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::InitializeIFN(RHI::EGraphicalApi api, const CString &className) +{ + if (m_Initialized == true) + { + return true; + } + m_API = api; + + if (!CreateInternalWindowIFN(className)) + return false; + + PK_SCOPEDLOCK(m_AEGraphicContextLock); + if (m_AEGraphicContext == null) + { + switch (m_API) + { + #if (PK_BUILD_WITH_METAL_SUPPORT != 0) + case (RHI::GApi_Metal): + m_AEGraphicContext = PK_NEW(CAAEMetalContext); + break; + #endif + #if (PK_BUILD_WITH_D3D11_SUPPORT != 0) + case (RHI::GApi_D3D11): + m_AEGraphicContext = PK_NEW(CAAED3D11Context); + break; + #endif + #if (PK_BUILD_WITH_D3D12_SUPPORT != 0) + case (RHI::GApi_D3D12): + m_AEGraphicContext = PK_NEW(CAAED3D12Context); + break; + #endif + default: + CLog::Log(PK_ERROR, "No compatible API context could be created"); + PK_ASSERT_NOT_REACHED(); + return false; + break; + } + if (!PK_VERIFY(m_AEGraphicContext != null)) + return false; + if (!PK_VERIFY(m_AEGraphicContext->CreatePlatformContext(m_WindowHandle, m_DeviceContext))) + { + CLog::Log(PK_ERROR, "CreatePlatformContext failed"); + return false; + } + if (!PK_VERIFY(m_AEGraphicContext->InitIFN())) + { + CLog::Log(PK_ERROR, "Graphic context initialization failed"); + return false; + } + } + m_Initialized = true; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::Destroy() +{ + PK_SAFE_DELETE(m_RHIRendering); + PK_SAFE_DELETE(m_AEGraphicContext); + m_Initialized = false; + return true; +} + +//---------------------------------------------------------------------------- +// GETTER +//---------------------------------------------------------------------------- + +PKSample::CRHIParticleSceneRenderHelper *CAAERenderContext::GetCurrentSceneRenderer() +{ + PK_ASSERT(m_RHIRendering != null); + return m_RHIRendering; +} + +//---------------------------------------------------------------------------- + +CUint2 CAAERenderContext::GetViewportSize() const +{ + return CUint2{ m_Width, m_Height }; +} + +//---------------------------------------------------------------------------- + +void CAAERenderContext::LogGraphicsErrors() +{ + m_AEGraphicContext->LogApiError(); +} + +//---------------------------------------------------------------------------- + +CAAEBaseContext *CAAERenderContext::GetAEGraphicContext() +{ + return m_AEGraphicContext; +} + +//---------------------------------------------------------------------------- +// Setter +//---------------------------------------------------------------------------- + +void CAAERenderContext::SetShaderLoader(PKSample::CShaderLoader *shaderLoader) +{ + m_ShaderLoader = shaderLoader; +} + +//---------------------------------------------------------------------------- + +PKSample::CShaderLoader *CAAERenderContext::GetShaderLoader() +{ + return m_ShaderLoader; +} + +//---------------------------------------------------------------------------- + +void CAAERenderContext::SetPostFXOptions(PKSample::SParticleSceneOptions &postFXOptions) +{ + m_SceneOptions = postFXOptions; +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::SetAsCurrentContext() +{ + PK_ASSERT(m_DeviceContext != null); + + return m_AEGraphicContext->SetAsCurrent(m_DeviceContext); +} + +//---------------------------------------------------------------------------- + +//Used for IMGUI Context +bool CAAERenderContext::RenderFrameBegin(u32 width, u32 height) +{ + if (!PK_VERIFY(SetAsCurrentContext())) + return false; + if (m_Width != width || m_Height != height) + { + if (InitGraphicContext(m_Format, width, height) == false) + return false; + } + //Frame + return m_AEGraphicContext->BeginFrame(); +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::RenderFrameEnd() +{ + return m_AEGraphicContext->EndFrame(); +} + +//---------------------------------------------------------------------------- +// AEE Interface +//---------------------------------------------------------------------------- + +bool CAAERenderContext::InitGraphicContext(RHI::EPixelFormat rhiformat, u32 width, u32 height) +{ + PK_SCOPEDPROFILE(); + + // Force the format to 32bpc for precision issues: + rhiformat = RHI::EPixelFormat::FormatFloat32RGBA; + + bool updateRHISize = false; + if (m_Format != rhiformat || m_Width != width || m_Height != height) + updateRHISize = true; + m_Format = rhiformat; + m_Width = width; + m_Height = height; + + RHI::PApiManager apiManager = m_AEGraphicContext->GetApiManager(); + + if (!m_AEGraphicContext->CreateRenderTarget(m_Format, CUint3{ m_Width, m_Height, 1 })) + { + CLog::Log(PK_ERROR, "Graphic context CreateRenderTarget failed"); + return false; + } + + bool newRHIRendering = false; + if (m_RHIRendering == null) + { + m_RHIRendering = PK_NEW(PKSample::CRHIParticleSceneRenderHelper); + if (!PK_VERIFY(m_RHIRendering != null)) + return false; + if (!PK_VERIFY(m_ShaderLoader != null)) + { + CLog::Log(PK_ERROR, "Shader loader was not properly set on the render context"); + return false; + } + + if (!m_RHIRendering->Init( apiManager, m_ShaderLoader, Resource::DefaultManager(), + PKSample::CRHIParticleSceneRenderHelper::InitRP_All)) + { + CLog::Log(PK_ERROR, "RHIRendering Initialisation failed"); + return false; + } + newRHIRendering = true; + } + if (updateRHISize || newRHIRendering) + { + if (!m_RHIRendering->Resize(m_AEGraphicContext->GetCurrentSwapChain())) + { + CLog::Log(PK_ERROR, "Particle render scene Resize failed"); + return false; + } + if (!m_RHIRendering->SetupPostFX_Distortion(m_SceneOptions.m_Distortion, newRHIRendering)) + { + CLog::Log(PK_ERROR, "Particle render scene SetupPostFX_Distortion failed"); + return false; + } + if (!m_RHIRendering->SetupPostFX_ToneMapping(m_SceneOptions.m_ToneMapping, m_SceneOptions.m_Vignetting, true /*dithering*/, newRHIRendering, false)) + { + CLog::Log(PK_ERROR, "Particle render scene SetupPostFX_ToneMapping failed"); + return false; + } + if (!m_RHIRendering->SetupPostFX_Bloom(m_SceneOptions.m_Bloom, newRHIRendering, true)) + { + CLog::Log(PK_ERROR, "Particle render scene SetupPostFX_Bloom failed"); + return false; + } + if (!m_RHIRendering->SetupPostFX_FXAA(m_SceneOptions.m_FXAA, newRHIRendering, false)) + { + CLog::Log(PK_ERROR, "Particle render scene SetupPostFX_FXAA failed"); + return false; + } + if (!m_RHIRendering->SetupShadows()) + { + CLog::Log(PK_ERROR, "Particle render scene SetupShadows failed"); + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::AERenderFrameBegin(SAAEIOData &AAEData, bool getBackground /*=true*/) +{ + PK_SCOPEDPROFILE(); + PF_PixelFormat format = PF_PixelFormat_INVALID; + RHI::EPixelFormat rhiFormat = RHI::EPixelFormat::FormatUnknown; + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + PK_ASSERT(m_AEGraphicContext != null); + m_AEGraphicContext->SetAsCurrent(m_DeviceContext); + { + PK_NAMEDSCOPEDPROFILE("checkout_layer_pixels"); + AAEData.m_ExtraData.m_SmartRenderData->cb->checkout_layer_pixels(AAEData.m_InData->effect_ref, 0, &m_InputWorld); + if (!PK_VERIFY(m_InputWorld != null)) + { + CLog::Log(PK_ERROR, "Checkout AE input world failed"); + return false; + } + AAEData.m_ExtraData.m_SmartRenderData->cb->checkout_output(AAEData.m_InData->effect_ref, &m_OutputWorld); + if (!PK_VERIFY(m_OutputWorld != null)) + { + CLog::Log(PK_ERROR, "Checkout AE output world failed"); + ResetCheckedOutWorlds(AAEData); + return false; + } + } + + AAEData.m_WorldSuite->PF_GetPixelFormat(m_InputWorld, &format); + + rhiFormat = AAEToPK(format); + + u32 width = (u32)m_InputWorld->width; + u32 height = (u32)m_InputWorld->height; + + m_AAEFormat = format; + + if (m_Width != width || m_Height != height) + { + if (InitGraphicContext(rhiFormat, width, height) == false) + { + CLog::Log(PK_ERROR, "InitGraphicContext failed"); + ResetCheckedOutWorlds(AAEData); + return false; + } + } + + //Frame + if (!PK_VERIFY(m_AEGraphicContext->BeginFrame())) + { + CLog::Log(PK_ERROR, "Graphic context BeginFrame failed"); + ResetCheckedOutWorlds(AAEData); + return false; + } + + if (getBackground) + { + if (!GetCompositingBuffer(AAEData, suites, m_InputWorld, m_OutputWorld, format)) + { + CLog::Log(PK_ERROR, "GetCompositingBuffer failed"); + ResetCheckedOutWorlds(AAEData); + m_AEGraphicContext->EndFrame(); + return false; + } + } + else + m_RHIRendering->SetBackGroundTexture(null); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::AERenderFrameEnd(SAAEIOData &AAEData) +{ + PK_SCOPEDPROFILE(); + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + + m_AEGraphicContext->EndFrame(); + + if (m_InputWorld == null || m_OutputWorld == null) + { + ResetCheckedOutWorlds(AAEData); + return false; + } + RenderToSAAEWorld(AAEData, suites, m_InputWorld, m_OutputWorld, m_AAEFormat); + ResetCheckedOutWorlds(AAEData); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::RenderToSAAEWorld(SAAEIOData &AAEData, AEGP_SuiteHandler &suiteHandler, PF_EffectWorld *inputWorld, PF_EffectWorld *effectWorld, PF_PixelFormat format) +{ + PK_SCOPEDPROFILE(); + + u32 requiredBufferSize = GetPixelSizeFromPixelFormat(m_Format) * inputWorld->width * inputWorld->height; + if (m_DownloadBuffer == null || m_DownloadBufferSize < requiredBufferSize) + { + m_DownloadBufferSize = requiredBufferSize; + if (m_DownloadBuffer != null) + m_DownloadBuffer = null; + m_DownloadBuffer = CRefCountedMemoryBuffer::Alloc(requiredBufferSize); + PK_ASSERT(m_DownloadBuffer != null); + } + + if (!m_AEGraphicContext->FillRenderBuffer(m_DownloadBuffer, m_RHIRendering->GetFinalFrameBuffers(0), m_Format, m_Width, m_Height, m_Width)) + { + CLog::Log(PK_ERROR, "FillRenderBuffer failed"); + return false; + } + + + PF_Err res = PF_Err_NONE; + + switch (format) + { + case PF_PixelFormat_ARGB128: + { + PK_NAMEDSCOPEDPROFILE("CopyPixelOut32"); + SCopyPixel refcon = { m_DownloadBuffer, inputWorld, m_Gamma, m_IsOverride, m_AlphaValue }; + + res = suiteHandler.IterateFloatSuite1()->iterate( AAEData.m_InData, + 0, + inputWorld->height, + inputWorld, + null, + reinterpret_cast(&refcon), + CopyPixelOut32, + effectWorld); + break; + } + case PF_PixelFormat_ARGB64: + { + PK_NAMEDSCOPEDPROFILE("CopyPixelOut16"); + SCopyPixel refcon = { m_DownloadBuffer, inputWorld, m_Gamma, m_IsOverride, m_AlphaValue }; + + res = suiteHandler.Iterate16Suite1()->iterate( AAEData.m_InData, + 0, + inputWorld->height, + inputWorld, + null, + reinterpret_cast(&refcon), + CopyPixelOut16, + effectWorld); + break; + } + + case PF_PixelFormat_ARGB32: + { + PK_NAMEDSCOPEDPROFILE("CopyPixelOut8"); + SCopyPixel refcon = { m_DownloadBuffer, inputWorld, m_Gamma, m_IsOverride, m_AlphaValue }; + + res = suiteHandler.Iterate8Suite1()->iterate( AAEData.m_InData, + 0, + inputWorld->height, + inputWorld, + null, + reinterpret_cast(&refcon), + CopyPixelOut8, + effectWorld); + break; + } + default: + PK_ASSERT(true); + break; + } + + if (res != PF_Err_NONE) + { + AAEData.m_ReturnCode = res; + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::GetCompositingBuffer(SAAEIOData &AAEData, AEGP_SuiteHandler &suiteHandler, PF_EffectWorld *inputWorld, PF_EffectWorld *effectWorld, PF_PixelFormat format) +{ + PK_SCOPEDPROFILE(); + PF_Err res = PF_Err_NONE; + RHI::EPixelFormat rhiFormat = RHI::FormatFloat32RGBA; + + PF_Rect rect = inputWorld->extent_hint; + PF_Point origin; + + origin.h = (A_short)(AAEData.m_InData->output_origin_x); + origin.v = (A_short)(AAEData.m_InData->output_origin_y); + + // We always copy the pixels in 32 bpc + u32 requiredBufferSize = sizeof(CFloat4) * inputWorld->width * inputWorld->height; + if (m_UploadBuffer == null || m_UploadBufferSize < requiredBufferSize) + { + m_UploadBufferSize = requiredBufferSize; + m_UploadBuffer = CRefCountedMemoryBuffer::Alloc(requiredBufferSize); + PK_ASSERT(m_UploadBuffer != null); + } + void *srcBuffer = m_UploadBuffer->Data(); + + switch (format) + { + case PF_PixelFormat_ARGB128: + { + PK_NAMEDSCOPEDPROFILE("CopyPixelIn32_TryCatch"); + SCopyPixel refcon = { m_UploadBuffer, inputWorld, m_Gamma, m_IsOverride, m_AlphaValue }; + + try + { + PK_NAMEDSCOPEDPROFILE("CopyPixelIn32"); + res = suiteHandler.IterateFloatSuite1()->iterate_origin_non_clip_src(AAEData.m_InData, 0, inputWorld->height, inputWorld, &rect, &origin, + reinterpret_cast(&refcon), CopyPixelIn32, effectWorld); + } + catch (PF_Err& thrownErr) + { + res = thrownErr; + } + catch (...) + { + res = PF_Err_OUT_OF_MEMORY; + } + if (res == A_Err_NONE) + { + if (!m_AEGraphicContext->FillCompositingTexture(srcBuffer, rhiFormat, inputWorld->width, inputWorld->height, inputWorld->rowbytes / sizeof(PF_Pixel32))) + res = A_Err_GENERIC; + } + break; + } + case PF_PixelFormat_ARGB64: + { + PK_NAMEDSCOPEDPROFILE("CopyPixelIn16_TryCatch"); + SCopyPixel refcon = { m_UploadBuffer, inputWorld, m_Gamma, m_IsOverride, m_AlphaValue }; + + try + { + PK_NAMEDSCOPEDPROFILE("CopyPixelIn16"); + res = suiteHandler.Iterate16Suite1()->iterate_origin_non_clip_src(AAEData.m_InData, 0, inputWorld->height, inputWorld, &rect, &origin, + reinterpret_cast(&refcon), CopyPixelIn16, effectWorld); + } + catch (PF_Err& thrownErr) + { + res = thrownErr; + } + catch (...) + { + res = PF_Err_OUT_OF_MEMORY; + } + if (res == A_Err_NONE) + { + if (!m_AEGraphicContext->FillCompositingTexture(srcBuffer, rhiFormat, inputWorld->width, inputWorld->height, inputWorld->rowbytes / sizeof(PF_Pixel32))) + res = A_Err_GENERIC; + } + break; + } + + case PF_PixelFormat_ARGB32: + { + PK_NAMEDSCOPEDPROFILE("CopyPixelIn8_TryCatch"); + SCopyPixel refcon = { m_UploadBuffer, inputWorld, m_Gamma, m_IsOverride, m_AlphaValue }; + + try + { + PK_NAMEDSCOPEDPROFILE("CopyPixelIn8"); + res = suiteHandler.Iterate8Suite1()->iterate_origin_non_clip_src(AAEData.m_InData, 0, inputWorld->height, inputWorld, &rect, &origin, + reinterpret_cast(&refcon), CopyPixelIn8, effectWorld); + } + catch (PF_Err& thrownErr) + { + res = thrownErr; + } + catch (...) + { + res = PF_Err_OUT_OF_MEMORY; + } + if (res == A_Err_NONE) + { + if (!m_AEGraphicContext->FillCompositingTexture(srcBuffer, rhiFormat, inputWorld->width, inputWorld->height, inputWorld->rowbytes / sizeof(PF_Pixel32))) + res = A_Err_GENERIC; + } + break; + } + default: + break; + } + if (res) + { + AAEData.m_ReturnCode = res; + if (res == PF_Interrupt_CANCEL) + return false; + CLog::Log(PK_WARN, "Unknown error"); + return false; + } + + if (res == A_Err_NONE) + m_RHIRendering->SetBackGroundTexture(m_AEGraphicContext->GetCompositingTexture()); + + if (res != PF_Err_NONE) + { + AAEData.m_ReturnCode = res; + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +CUint2 CAAERenderContext::GetContextSize() +{ + return CUint2(m_Width, m_Height); +} + +//---------------------------------------------------------------------------- + +void CAAERenderContext::ResetCheckedOutWorlds(SAAEIOData &AAEData) +{ + AAEData.m_ExtraData.m_SmartRenderData->cb->checkin_layer_pixels(AAEData.m_InData->effect_ref, 0); + m_InputWorld = null; + m_OutputWorld = null; +} + +//---------------------------------------------------------------------------- + +bool CAAERenderContext::CreateInternalWindowIFN(const CString& className) +{ + if (m_WindowHandle != null) + return true; +#if defined(PK_MACOSX) + (void)className; + NSRect frameRect = NSMakeRect(100, 100 , 256, 256); + NSView *view = [[NSView alloc] initWithFrame:frameRect]; + [view setHidden:NO]; + [view setNeedsDisplay:YES]; + + NSWindow *myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(100,100,256,256) styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO]; + [myWindow setContentView:view]; + //[myWindow makeKeyAndOrderFront:self]; + + m_WindowHandle = (void*)myWindow; + m_DeviceContext = null; + return m_WindowHandle != null; +#else + MSG uMsg; + + ::memset(&uMsg, 0, sizeof(uMsg)); + + // tricky, windows needs a unique class name for each window instance + // to derive a unique name, a pointer to "this" is used + static std::atomic_int S_cnt; + std::stringstream ss; + + ss << " PK_Win_Class" << S_cnt.load(); + S_cnt++; + CString name = className + CString(ss.str().c_str()); + + WNDCLASSEX winClass; + ::memset(&winClass, 0, sizeof(winClass)); + winClass.lpszClassName = name.Data(); + winClass.cbSize = sizeof(WNDCLASSEX); + winClass.style = CS_HREDRAW | CS_VREDRAW; + winClass.lpfnWndProc = ::DefWindowProc; + winClass.hInstance = GetModuleHandle(null); + winClass.hCursor = ::LoadCursor(null, IDC_ARROW); + winClass.hbrBackground = (HBRUSH)::GetStockObject(BLACK_BRUSH); + + if (!(::RegisterClassEx(&winClass))) + { + return false; + } + + HWND hwnd = ::CreateWindowEx(WS_EX_APPWINDOW | WS_EX_WINDOWEDGE, + name.Data(), + "PopcornFX context", + 0, 0, + 0, 8, 8, + null, + null, + null, + null); + + PK_ASSERT(hwnd != null); + m_WindowHandle = (void*)hwnd; + m_DeviceContext = (void*)::GetDC(hwnd); + return m_WindowHandle != null && m_DeviceContext != null; +#endif +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_Scene.cpp b/AE_GeneralPlugin/Sources/AEGP_Scene.cpp new file mode 100644 index 00000000..76c71799 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_Scene.cpp @@ -0,0 +1,2057 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_Scene.h" + +#include "AEGP_World.h" +#include "AEGP_AEPKConversion.h" + +#include "AEGP_RenderContext.h" +#include "RenderApi/AEGP_BaseContext.h" +#include "RenderApi/AEGP_D3D12Context.h" +#include "RenderApi/AEGP_D3D11Context.h" + +#include "AEGP_Attribute.h" +#include "AEGP_Log.h" +#include "AEGP_PackExplorer.h" + +#include "AEGP_Main.h" +#include "AEGP_Attribute.h" + +#include "AEGP_AssetBaker.h" +#include "AEGP_SkinnedMeshInstance.h" +#include "AEGP_SkinnedMesh.h" + +#include + + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include // for Random::DefaultGenerator() +#include // for PRNG +#include // for CPlane in CParticleSceneBasic + +#include +#include + +#include + +#include +#include + +#include +#include + +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +struct SSimpleSceneDef +{ + CString m_EffectPath; + CString m_BackdropMeshPath; + + CUint3 m_SpawnGridResolution; // defined in side-up-forward coordinates + float m_SpawnGridRange; + + float m_RespawnDelay; + + bool m_Seeking = false; + bool m_Refresh = false; + struct + { + float m_Distance; + CFloat3 m_Angles; // { pitch, yaw, roll } + float m_Height; + } m_CameraStartParameters; +}; + +//---------------------------------------------------------------------------- + + +u32 CAAEScene::s_SceneID = 0; + +//---------------------------------------------------------------------------- + +CAAEScene::CAAEScene() +: m_EffectRef(null) +, m_EffectDesc(null) +, m_LayerHolder(null) +, m_EmitterDefaultPosition(CFloat3::ZERO) +, m_EmitterDefaultOrientation(CFloat3::ZERO) +, m_EmitterTransformType(ETransformType::ETransformType_3D) +, m_EmitterTransformsCurrent(CFloat4x4::IDENTITY) +, m_EmitterTransformsPrevious(CFloat4x4::IDENTITY) +, m_EmitterVelCurrent(CFloat3::ZERO) +, m_EmitterVelPrevious(CFloat3::ZERO) +, m_OriginViewport(CUint2::ZERO) +, m_Paused(false) +, m_AEEmitterPosition(CFloat3::ZERO) +, m_AEEmitterRotation(CFloat3::ZERO) +, m_AEEmitterSeed(0) +, m_AEViewMatrix(CFloat4x4::IDENTITY) +, m_AECameraPos(CFloat4::ZERO) +, m_AECameraZoom(1.0f) +, m_TeleportEmitter(false) +, m_FrameNumber(0) +, m_DT(0.0f) +, m_PreviousTimeSec(0.0f) +, m_CurrentTimeSec(0.0f) +, m_Initialized(false) +, m_FrameAbortedDuringSeeking(A_Err_NONE) +, m_Effect(null) +, m_EffectFile(null) +, m_EffectLastInstance(null) +, m_AttributesList(null) +, m_EmitterPositionNormalized_Debug(CFloat4::ZERO) +, m_LastInstanceXForms(CFloat4x4::IDENTITY) +, m_DCSortMethod(EDrawCallSortMethod::Sort_DrawCalls) +, m_SceneInfoConstantSet(null) +, m_SceneInfoConstantBuffer(null) +, m_LoadedPack(null) +, m_HBOContext(null) +, m_ParticleScene(null) +, m_ParticleMediumCollection(null) +, m_Stats_SimulationTime(0.0f) +, m_ViewSlotInMediumCollection(CGuid::INVALID) +, m_SkinnedMeshInstance(null) +, m_SkeletonState(null) +, m_ResourceManager(null) +, m_HasBoundBackdrop(false) +, m_IsWeightedSampling(false) +, m_ColorStreamID(0) +, m_WeightStreamID(0) +, m_ForceRestartSeeking(true) +{ + m_ID = s_SceneID++; +} + +//---------------------------------------------------------------------------- + +CAAEScene::~CAAEScene() +{ + Quit(); +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::Init(SAAEIOData &AAEData) +{ + if (AAEData.m_InData) + m_EffectRef = AAEData.m_InData->effect_ref; + else + m_EffectRef = null; + + m_ResourceManager = Resource::DefaultManager(); + if (!PK_VERIFY(m_ResourceManager != null)) + return CAELog::LogErrorWindows(&AAEData, "Could not allocate PopcornFX ResourceManager"); + if (m_HBOContext != null) + PK_SAFE_DELETE(m_HBOContext); + m_HBOContext = PK_NEW(HBO::CContext); + if (m_ParticleScene != null) + PK_SAFE_DELETE(m_ParticleScene); + m_ParticleScene = PK_NEW(CAAEParticleScene); + if (!PK_VERIFY(m_ParticleScene != null)) + return false; + m_ParticleScene->m_Parent = this; + //AAE INFO + SetWorldSize(AAEData); + // Medium collection + if (m_ParticleMediumCollection == null) + { + if (_SetupMediumCollection() == false) + return false; + } + + return true; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetWorldSize(SAAEIOData &AAEData) +{ + if (AAEData.m_InData) + { + m_SAAEWorldData.m_WorldWidth = (float)AAEData.m_InData->width; + m_SAAEWorldData.m_WorldHeight = (float)AAEData.m_InData->height; + m_SAAEWorldData.m_WorldOrigin = CFloat3{ m_SAAEWorldData.m_WorldWidth / 2, m_SAAEWorldData.m_WorldHeight / 2, 0 }; + } +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetEmitterPosition(const CFloat3 &position, ETransformType type) +{ + m_EmitterTransformType = type; + m_AEEmitterPosition = position; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetEmitterRotation(const CFloat3 &rotation) +{ + m_AEEmitterRotation = rotation; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetEmitterTeleport(bool teleport) +{ + m_TeleportEmitter = teleport; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetLayerHolder(SLayerHolder *parent) +{ + m_LayerHolder = parent; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetCameraViewMatrix(const CFloat4x4 &viewMatrix, const CFloat4 &pos, const float cameraZoom) +{ + m_AECameraZoom = cameraZoom; + m_AECameraPos = pos; + m_AEViewMatrix = viewMatrix; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::RefreshAssetList() +{ + m_LoadedPack = null; + PK_ASSERT(m_LayerHolder != null); + + if (m_LayerHolder->m_BakedPack == null) + return false; + + m_LoadedPack = m_LayerHolder->m_BakedPack; + return true; +} + +//---------------------------------------------------------------------------- + +SSamplerAudio *CAAEScene::GetAudioSamplerDescriptor(CStringId name, SSamplerAudio::SamplingType type) +{ + if (!name.Valid() || name.Empty()) + return null; + + for (u32 i = 0; i < m_ActiveAudioSamplers.Count(); ++i) + { + if (name == m_ActiveAudioSamplers[i]->m_Name && type == m_ActiveAudioSamplers[i]->m_SamplingType) + { + return m_ActiveAudioSamplers[i]; + } + } + for (u32 i = 0; i < m_ActiveAudioSamplers.Count(); ++i) + { + if (name == m_ActiveAudioSamplers[i]->m_Name && m_ActiveAudioSamplers[i]->m_SamplingType == SSamplerAudio::SamplingType::SamplingType_Unknown) + { + return m_ActiveAudioSamplers[i]; + } + } + for (u32 i = 0; i < m_ActiveAudioSamplers.Count(); ++i) + { + if (!m_ActiveAudioSamplers[i]->m_Name.Valid() || m_ActiveAudioSamplers[i]->m_Name.Empty()) + { + m_ActiveAudioSamplers[i]->m_Name = name; + return m_ActiveAudioSamplers[i]; + } + } + return null; +} +//---------------------------------------------------------------------------- + +bool CAAEScene::GetEmitterBounds(CAABB &bounds) +{ + if (m_EffectLastInstance == null) + return false; + const CParticleMediumCollection::SEffectMediums *mediums = m_ParticleMediumCollection->MapEffectMediumLookup(m_Effect.Get()); + + for (auto medium : mediums->m_Mediums) + { + bounds.Add(medium->ExactBounds()); + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::SetPack(PFilePack pack, bool unload) +{ + if (pack == null) + return false; + + ResetEffect(unload); + + m_LoadedPack = pack; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::SetSelectedEffect(CString name, bool refresh) +{ + if (name == null || name.Empty()) + return false; + CBakedPackExplorer packExplorer(m_LoadedPack->Path(), File::DefaultFileSystem()); + CString bakedName = CFilePath::StripExtension(name); + + bakedName += ".pkb"; + + packExplorer.Explore(); + TMemoryView effectPaths = packExplorer.EffectPaths(); + + if (effectPaths.IndexOf(bakedName).Valid()) + { + m_SelectedEffect = bakedName; + return SetupScene(false, refresh); + } + else + { + CAELog::TryLogInfoWindows("Trying to load " + bakedName + " Missing file in " + m_LoadedPack->Path() + " Reimport effect"); + } + return false; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetEffectDescriptor(SEmitterDesc *desc) +{ + m_EffectDesc = desc; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::SetupScene(bool seeking, bool refresh) +{ + m_PreviousTimeSec = 0.0f; + m_CurrentTimeSec = 0.0f; + m_DT = 0.0f; + + PK_ASSERT(m_ParticleMediumCollection != null); + m_ParticleMediumCollection->Clear(); + + SetEmitterTeleport(); + + SSimpleSceneDef def; + def.m_Seeking = seeking; + def.m_Refresh = refresh; + if (m_SelectedEffect == null) + { + if (!m_LayerHolder->m_SpawnedEmitter.m_Desc->m_PathSource.empty()) + CPopcornFXWorld::Instance().SetDestinationPackFromPath(*m_LayerHolder, CString(m_LayerHolder->m_SpawnedEmitter.m_Desc->m_PathSource.c_str())); + SetPack(m_LayerHolder->m_BakedPack, true); + SetEffectDescriptor(m_LayerHolder->m_SpawnedEmitter.m_Desc); + SetSelectedEffect(CString(m_LayerHolder->m_SpawnedEmitter.m_Desc->m_Name.c_str()), false); + } + def.m_EffectPath = m_SelectedEffect; + + if (!_LoadScene(def)) + return false; + CPopcornFXWorld::Instance().OnEndSetupScene(); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::Quit() +{ + m_EffectRef = null; + m_EffectDesc = null; + + m_LayerHolder = null; + if (m_EffectLastInstance != null) + { + // Not strictly necessary to -= the callback, the instance is getting destroyed anyway. + m_EffectLastInstance->m_DeathNotifier -= FastDelegate(this, &CAAEScene::_OnInstanceDeath); + //m_EffectLastInstance->KillImmediate(); + m_EffectLastInstance = null; + } + m_AttributesList = null; + + m_EffectPath = null; + if (m_Effect != null) + m_Effect = null; + if (m_EffectFile != null) + { + m_EffectFile->Unload(); + m_EffectFile = null; + } + + m_ActiveAudioSamplers.Clear(); + + m_ParticleRenderDataFactory.UpdateThread_Release(); + + if (m_SkinnedMeshInstance != null) + { + m_SkinnedMeshInstance->WaitAsyncUpdateSkin(); + m_SkinnedMeshInstance->ClearSkinnedMesh(); + } + m_SkinnedMeshInstance = null; + + m_DrawOutputs.Clear(); + m_SceneInfoConstantSet = null; + m_SceneInfoConstantBuffer = null; + + m_LoadedPack = null; + + PK_SAFE_DELETE(m_ParticleScene); + + if (m_Initialized) + { + m_FrameCollector.UpdateThread_UninstallFromMediumCollection(m_ParticleMediumCollection); + if (m_ParticleMediumCollection) + { + m_ParticleMediumCollection->Clear(); + PK_SAFE_DELETE(m_ParticleMediumCollection); + } + m_FrameCollector.DestroyBillboardingBatches(); + m_FrameCollector.UpdateThread_Destroy(); + } + + m_ResourceManager = null; + + for (u32 i = 0; i < m_OverridableProperties.Count(); ++i) + PK_SAFE_DELETE(m_OverridableProperties[i]); + m_OverridableProperties.Clean(); + + PK_SAFE_DELETE(m_HBOContext); + + m_Initialized = false; + return true; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::ShutdownPopcornFX() +{ + +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::Update(SAAEIOData &AAEData) +{ + PK_SCOPEDPROFILE(); + + if (m_LayerHolder == null || m_EffectDesc == null) //Waiting for AE to process new effects + return true; + + SetWorldSize(AAEData); + if (!PK_VERIFY(_LateInitializeIFN())) + return false; + + m_EffectRef = AAEData.m_InData->effect_ref; + + if (!m_Paused) + { + if (m_EffectLastInstance == null) + { + if (!SetupScene(false, false)) + return false; + } + } + /// Update ------------------------------------------------------------------------------------------ + if (!m_Paused) + { + PK_NAMEDSCOPEDPROFILE("Scene Update"); + _ExtractAEFrameInfo(AAEData); + m_FrameCollector.ReleaseRenderedFrame(); + m_FrameAbortedDuringSeeking = A_Err_NONE; + _FastForwardSimulation(AAEData, m_CurrentTimeSec + m_DT); + if (m_FrameAbortedDuringSeeking != A_Err_NONE) + { + AAEData.m_ReturnCode = m_FrameAbortedDuringSeeking; + m_ParticleMediumCollection->Clear(); + return true; + } + if (_CheckRenderAbort(&AAEData)) + { + m_ParticleMediumCollection->Clear(); + return true; + } + _CollectCurrentFrame(); + } + + _FillAdditionnalDataForRender(); + +#if _DEBUG + auto v = m_ParticleMediumCollection->Stats(); +#endif + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::UpdateAttributes(SLayerHolder *layer) +{ + PK_SCOPEDPROFILE(); + if (m_EffectLastInstance == null || layer == null) + return true; + + for (auto it = layer->m_SpawnedAttributes.Begin(); it != layer->m_SpawnedAttributes.End(); ++it) + { + SAttributeDesc *descriptor = static_cast(it->m_Desc); + if (descriptor == null) // Corrupt attribute on AE Side + it->m_Deleted = true; + else if (descriptor->m_IsDirty) + { + //Update Attributes Values +#if defined(PK_SCALE_DOWN) + if (descriptor->m_IsAffectedByScale) + { + void *attributeValue = descriptor->GetRawValue(); + CInt4 *intData = null; + CFloat4 *floatData = null; + + switch (descriptor->m_Type) + { + case (AttributeType_Int1): + case (AttributeType_Int2): + case (AttributeType_Int3): + case (AttributeType_Int4): + intData = static_cast(attributeValue); + *((CFloat4*)intData) /= layer->m_ScaleFactor; + break; + case (AttributeType_Float1): + case (AttributeType_Float2): + case (AttributeType_Float3): + case (AttributeType_Float4): + floatData = static_cast(attributeValue); + *floatData /= layer->m_ScaleFactor; + break; + default: + break; + } + if (!PK_VERIFY(m_EffectLastInstance->SetRawAttribute(descriptor->m_Name.data(), AttributeAAEToPK(descriptor->m_Type), attributeValue))) + return false; + } + else + { + if (!PK_VERIFY(m_EffectLastInstance->SetRawAttribute(descriptor->m_Name.data(), AttributeAAEToPK(descriptor->m_Type), descriptor->GetRawValue()))) + return false; + } +#else + if (!PK_VERIFY(m_EffectLastInstance->SetRawAttribute(descriptor->m_Name.data(), AttributeAAEToPK(descriptor->m_Type), descriptor->GetRawValue()))) + return false; +#endif + descriptor->m_IsDirty = false; + } + } + for (auto it = layer->m_SpawnedAttributesSampler.Begin(); it != layer->m_SpawnedAttributesSampler.End(); ++it) + { + SAttributeSamplerDesc *descriptor = static_cast(it->m_Desc); + if (descriptor == null) // Corrupt attribute on AE Side + it->m_Deleted = true; + + switch (descriptor->m_Type) + { + case AttributeSamplerType_Geometry: + _UpdateShapeSampler(*it, descriptor); + break; + case AttributeSamplerType_Text: + _UpdateTextSampler(*it, descriptor); + break; + case AttributeSamplerType_Image: + _UpdateImageSampler(*it, descriptor); + break; + case AttributeSamplerType_Audio: + _UpdateAudioSampler(*it, descriptor); + break; + case AttributeSamplerType_VectorField: + _UpdateVectorFieldSampler(*it, descriptor); + break; + default: + break; + } + if ((*it).m_PKDesc != null) + (*it).m_PKDesc->m_Dirty = false; + } + if (layer->m_BackdropAudioWaveform != null) + { + layer->m_BackdropAudioWaveform->m_BuiltThisFrame = false; + if (!PK_VERIFY(m_ActiveAudioSamplers.PushBack(layer->m_BackdropAudioWaveform).Valid())) + return false; + layer->m_BackdropAudioWaveform->m_Dirty = false; + } + if (layer->m_BackdropAudioSpectrum != null) + { + layer->m_BackdropAudioSpectrum->m_BuiltThisFrame = false; + if (!PK_VERIFY(m_ActiveAudioSamplers.PushBack(layer->m_BackdropAudioSpectrum).Valid())) + return false; + layer->m_BackdropAudioSpectrum->m_Dirty = false; + } + return true; +} + +//---------------------------------------------------------------------------- + +static CString _GetAnimPathFromMesh(const CResourceManager *resourceManager, const CString &meshPath) +{ + PK_ASSERT(resourceManager != null); + if (meshPath.Empty()) + return null; + + CString remappedPath = meshPath; + bool remappedPathNotVirtual = false; + resourceManager->RemapAndPurifyPathIFN(remappedPath, remappedPathNotVirtual); + PK_ASSERT(!remappedPathNotVirtual); + return CFilePath::StripExtension(remappedPath) + ".pksa"; +} + +//---------------------------------------------------------------------------- + +static bool _PreloadMeshResource(CResourceManager *resourceManager, const CString &path, TResourcePtr &dstMeshResource, PSkeletonState &dstBindPose) +{ + dstMeshResource = resourceManager->Load(path, false, SResourceLoadCtl(false, true)); + if (dstMeshResource == null) + { + CLog::Log(PK_ERROR, "Failed loading mesh resource \"%s\"", path.Data()); + return false; + } + + for (const auto &batch : dstMeshResource->BatchList()) + { + batch->RawMesh()->BuildTangentsIFN(); + } + + PSkeleton skeleton = dstMeshResource->Skeleton(); + if (skeleton != null) + { + dstBindPose = PK_NEW(CSkeletonState(skeleton)); + if (dstBindPose == null) + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::UpdateBackdropTransform(SEmitterDesc *desc) +{ + const CQuaternion quat = Transforms::Quaternion::FromEuler(CFloat3((float)desc->m_BackdropMesh.m_Rotation.x, (float)desc->m_BackdropMesh.m_Rotation.y, (float)desc->m_BackdropMesh.m_Rotation.z)); + const CFloat3 pos((float)desc->m_BackdropMesh.m_Position.x, (float)desc->m_BackdropMesh.m_Position.y, (float)desc->m_BackdropMesh.m_Position.z); + const CFloat4 scale((float)desc->m_BackdropMesh.m_Scale.x, (float)desc->m_BackdropMesh.m_Scale.y, (float)desc->m_BackdropMesh.m_Scale.z, 1.0f); + + m_BackdropData.m_MeshBackdropTransforms = Transforms::Matrix::FromQuaternion(quat, CFloat4(pos, 1.0f)); + m_BackdropData.m_MeshBackdropTransforms.Scale(scale); + if (desc->m_BackdropMesh.m_EnableCollisions) + m_ParticleScene->SetBackdropMeshTransform(m_BackdropData.m_MeshBackdropTransforms); +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::UpdateBackdrop(SLayerHolder *layer,SEmitterDesc *desc) +{ + if (!desc->m_BackdropMesh.m_Path.empty()) + { + const CQuaternion quat = Transforms::Quaternion::FromEuler(CFloat3((float)desc->m_BackdropMesh.m_Rotation.x, (float)desc->m_BackdropMesh.m_Rotation.y, (float)desc->m_BackdropMesh.m_Rotation.z)); + const CFloat3 pos((float)desc->m_BackdropMesh.m_Position.x, (float)desc->m_BackdropMesh.m_Position.y, (float)desc->m_BackdropMesh.m_Position.z); + const CFloat4 scale((float)desc->m_BackdropMesh.m_Scale.x, (float)desc->m_BackdropMesh.m_Scale.y, (float)desc->m_BackdropMesh.m_Scale.z, 1.0f); + + m_BackdropData.m_MeshBackdropTransforms = Transforms::Matrix::FromQuaternion(quat, CFloat4(pos, 1.0f)); + m_BackdropData.m_MeshBackdropTransforms.Scale(scale); + if (m_BackdropData.m_MeshBackdropTransforms == CFloat4x4::IDENTITY && desc->m_LoadBackdrop) + { + CPopcornFXWorld &pkfxWorld = CPopcornFXWorld::Instance(); + m_BackdropData.m_MeshBackdropTransforms = m_EmitterTransformsCurrent; + pkfxWorld.SetBackdropMeshDefaultTransform(layer); + } + + m_BackdropData.m_MeshMetalness = desc->m_BackdropMesh.m_Metalness; + m_BackdropData.m_MeshRoughness = desc->m_BackdropMesh.m_Roughness; + + m_BackdropData.m_ShowMesh = desc->m_BackdropMesh.m_EnableRendering; + } + if (!desc->m_BackdropEnvironmentMap.m_Path.empty()) + { + CFilePackPath filePackPath = CFilePackPath::FromPhysicalPath(desc->m_BackdropEnvironmentMap.m_Path.data(), File::DefaultFileSystem()); + + m_BackdropData.m_EnvironmentMapPath = filePackPath.Path(); + m_BackdropData.m_EnvironmentMapColor = CFloat3((float)desc->m_BackdropEnvironmentMap.m_Color.x, (float)desc->m_BackdropEnvironmentMap.m_Color.y, (float)desc->m_BackdropEnvironmentMap.m_Color.z); + m_BackdropData.m_EnvironmentMapIntensity = desc->m_BackdropEnvironmentMap.m_Intensity; + m_BackdropData.m_BackgroundUsesEnvironmentMap = desc->m_BackdropEnvironmentMap.m_EnableRendering; + m_BackdropData.m_EnvironmentMapAffectsAmbient = true; + } + else + { + m_BackdropData.m_EnvironmentMapPath = null; + } + + if (!desc->m_UpdateBackdrop && !desc->m_LoadBackdrop) + return true; + + desc->m_LoadBackdrop = false; + desc->m_UpdateBackdrop = false; + if (!desc->m_BackdropMesh.m_Path.empty()) + { + CFilePackPath filePackPath = CFilePackPath::FromPhysicalPath(desc->m_BackdropMesh.m_Path.data(), File::DefaultFileSystem()); + + m_BackdropData.m_MeshPath = filePackPath.Path(); + + _PreloadMeshResource(m_ResourceManager, m_BackdropData.m_MeshPath, m_ResourceMesh, m_SkeletonState); + + if (desc->m_BackdropMesh.m_EnableCollisions) + m_ParticleScene->SetBackdropMesh(m_ResourceMesh, m_BackdropData.m_MeshBackdropTransforms); + else + m_ParticleScene->ClearBackdropMesh(); + if (desc->m_BackdropMesh.m_EnableAnimations) + { + const CString animPath = (!m_BackdropData.m_MeshPath.Empty()) ? _GetAnimPathFromMesh(m_ResourceManager, m_BackdropData.m_MeshPath) : CString::EmptyString; + m_SkinnedMeshInstance = PK_NEW(CSkinnedMeshInstance); + if (!m_SkinnedMeshInstance->LoadSkinnedMeshIFN(m_ResourceMesh, EMeshChannels::Channel_Tangent | EMeshChannels::Channel_Velocity | EMeshChannels::Channel_Normal | EMeshChannels::Channel_Position, m_SkeletonState) || + !m_SkinnedMeshInstance->LoadAnimationIFN(m_HBOContext, animPath, false)) + m_SkinnedMeshInstance = null; + } + } + else + { + m_SkinnedMeshInstance = null; + m_SkeletonState = null; + m_BackdropData.m_MeshPath = ""; + m_ParticleScene->ClearBackdropMesh(); + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::Render(SAAEIOData &AAEData) +{ + if (_CheckRenderAbort(&AAEData)) + return true; + + CPopcornFXWorld &pkfxWorld = CPopcornFXWorld::Instance(); + + // our render specific context (one per thread) + PAAERenderContext currentRenderContext = pkfxWorld.GetCurrentRenderContext(); + if (!PK_VERIFY(currentRenderContext != null)) + return false; + + RHI::PApiManager apiManager = currentRenderContext->GetAEGraphicContext()->GetApiManager(); + + if (_CheckRenderAbort(&AAEData)) + return true; + + if (!(currentRenderContext->AERenderFrameBegin(AAEData, !m_BackdropData.m_BackgroundUsesEnvironmentMap))) + return true; + + if (_CheckRenderAbort(&AAEData)) + { + PK_VERIFY(currentRenderContext->AERenderFrameEnd(AAEData)); + return true; + } + + _RenderLastCollectedFrame(); + + // Update scene info + { + PKSample::Utils::SetupSceneInfoData(m_SceneInfoData, m_Camera, CCoordinateFrame::GlobalFrame()); + if (!PK_VERIFY(currentRenderContext->GetCurrentSceneRenderer()->SetSceneInfo(m_SceneInfoData, CCoordinateFrame::GlobalFrame()))) + { + PK_VERIFY(currentRenderContext->AERenderFrameEnd(AAEData)); + return false; + } + } + + //// Flush all graphical resources + PKSample::CRendererCacheInstance_UpdateThread::RenderThread_FlushAllResources(); + + PKSample::SParticleSceneOptions sceneOptions; + + AAEToPK(m_EffectDesc->m_Rendering, sceneOptions); + currentRenderContext->SetPostFXOptions(sceneOptions); + + currentRenderContext->SetBackgroundOptions(m_EffectDesc->m_IsAlphaBGOverride, m_EffectDesc->m_AlphaBGOverride); + + // Render ------------------------------------------------------------------------------------------ + { + PKSample::CRHIParticleSceneRenderHelper *renderHelper = currentRenderContext->GetCurrentSceneRenderer(); + CUint2 vpSize = currentRenderContext->GetViewportSize(); + // + PK_ASSERT(renderHelper != null); + PK_ASSERT(vpSize.x() != 0 || vpSize.y() != 0); + + RHI::PCommandBuffer preRenderCmdBuff = apiManager->CreateCommandBuffer(RHI::SRHIResourceInfos("PK-RHI Pre Render command buffer")); + RHI::PCommandBuffer postRenderCmdBuff = apiManager->CreateCommandBuffer(RHI::SRHIResourceInfos("PK-RHI Post Render command buffer")); + + renderHelper->SetupPostFX_Bloom(sceneOptions.m_Bloom, false, false); + renderHelper->SetupPostFX_Distortion(sceneOptions.m_Distortion, false); + renderHelper->SetupPostFX_ToneMapping(sceneOptions.m_ToneMapping, sceneOptions.m_Vignetting, sceneOptions.m_Dithering, false, false); + renderHelper->SetupPostFX_FXAA(sceneOptions.m_FXAA, false, false); + renderHelper->SetupShadows(); + renderHelper->SetCurrentPackResourceManager(m_ResourceManager); + renderHelper->SetBackdropInfo(m_BackdropData, ECoordinateFrame::Frame_User1); + + // Fill the command buffer + preRenderCmdBuff->Start(); + + if (!m_BackdropData.m_EnvironmentMapPath.Empty()) + { + renderHelper->GetEnvironmentMap().GenerateCubemap(preRenderCmdBuff); + + PKSample::SBackdropsData &data = renderHelper->GetBackDropsData(); + data.m_BackgroundUsesEnvironmentMap = m_BackdropData.m_BackgroundUsesEnvironmentMap; + data.m_EnvironmentMapAffectsAmbient = true; + } + + // Copy the particle count for the indirect draws: + PK_FOREACH(copy, m_DrawOutputs.m_CopyCommands) + { + if (!PK_VERIFY(preRenderCmdBuff->CopyBuffer(copy->m_SrcBuffer, copy->m_DstBuffer, copy->m_SrcOffset, copy->m_DstOffset, copy->m_SizeToCopy))) + { + CLog::Log(PK_ERROR, "preRenderCmdBuff->CopyBuffer() failed."); + PK_VERIFY(currentRenderContext->AERenderFrameEnd(AAEData)); + return false; + } + } + preRenderCmdBuff->SetViewport({ 0, 0 }, vpSize, { 0, 1 }); + preRenderCmdBuff->SetScissor({ 0, 0 }, vpSize); + + preRenderCmdBuff->Stop(); + apiManager->SubmitCommandBufferDirect(preRenderCmdBuff); + postRenderCmdBuff->Start(); + if (!PK_VERIFY(renderHelper->RenderScene(AAEToPK(m_EffectDesc->m_Rendering.m_Type), m_DrawOutputs, 0))) + { + CLog::Log(PK_ERROR, "renderHelper->RenderScene() failed."); + PK_VERIFY(currentRenderContext->AERenderFrameEnd(AAEData)); + return false; + } + + if (!PK_VERIFY(postRenderCmdBuff->Stop())) + { + CLog::Log(PK_ERROR, "postRenderCmdBuff->Stop() failed."); + PK_VERIFY(currentRenderContext->AERenderFrameEnd(AAEData)); + return false; + } + apiManager->SubmitCommandBufferDirect(postRenderCmdBuff); + if (!PK_VERIFY(currentRenderContext->AERenderFrameEnd(AAEData))) + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::ResetEffect(bool unload) +{ + bool hasUnloaded = false; + + m_EffectLastInstance = null; + if (m_ParticleMediumCollection != null) + m_ParticleMediumCollection->Clear(); + m_Effect = null; + if (unload && m_EffectFile != null) + { + m_EffectFile->Unload(); + hasUnloaded = true; + m_EffectFile = null; + } + return hasUnloaded; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::SetSkinnedBackdropParams(bool enabled, bool weightedSampling, u32 colorStreamID, u32 weightStreamID) +{ + bool update = false; + if (m_HasBoundBackdrop != enabled || m_IsWeightedSampling != weightedSampling || m_ColorStreamID != colorStreamID || m_WeightStreamID != weightStreamID) + update = true; + m_HasBoundBackdrop = enabled; + m_IsWeightedSampling = weightedSampling; + m_ColorStreamID = colorStreamID; + m_WeightStreamID = weightStreamID; + + if (update && m_SkinnedMeshInstance != null && m_ResourceMesh != null && m_ResourceMesh->BatchList().Count() > 0) + { + m_SkinnedMeshInstance->WaitAsyncUpdateSkin(); + + m_SkinnedMeshInstance->SetupAttributeSampler(m_ResourceMesh->BatchList()[0]->RawMesh(), + m_IsWeightedSampling, + m_ColorStreamID, + m_WeightStreamID); + } + +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::UpdateLight(SLayerHolder *layer) +{ + PK_ASSERT(layer != null); + PK_ASSERT(layer->m_SpawnedEmitter.m_Desc != null); + + SLightDesc &light = layer->m_SpawnedEmitter.m_Desc->m_Light; + + if (light.m_Internal) + { + if (m_BackdropData.m_Lights.Count() == 0) + { + m_BackdropData.m_Lights.Resize(2); + } + m_BackdropData.m_Lights[0].SetAmbient(AAEToPK(light.m_Ambient), light.m_Intensity); + m_BackdropData.m_Lights[1].SetDirectional(AAEToPK(light.m_Direction), AAEToPK(light.m_Color), light.m_Intensity); + } + if (!light.m_Internal) + { + TArray lights; + A_Time time; + + time.value = layer->m_CurrentTime; + time.scale = layer->m_TimeScale; + if (!CAEUpdater::GetLightsAtTime(layer, time, lights)) + return false; + + if (lights.Count() != m_BackdropData.m_Lights.Count()) + m_BackdropData.m_Lights.Resize(lights.Count()); + for (u32 i = 0; i < lights.Count(); ++i) + { + if (lights[i].m_Type == AEGP_LightType_PARALLEL) + { + m_BackdropData.m_Lights[i].SetDirectional(AAEToPK(lights[i].m_Direction), AAEToPK(lights[i].m_Color), lights[i].m_Intensity); + } + else if (lights[i].m_Type == AEGP_LightType_AMBIENT) + { + m_BackdropData.m_Lights[i].SetAmbient(AAEToPK(lights[i].m_Color), lights[i].m_Intensity); + } + else if (lights[i].m_Type == AEGP_LightType_SPOT) + { + m_BackdropData.m_Lights[i].SetSpot(AAEToPK(lights[i].m_Position), AAEToPK(lights[i].m_Direction), lights[i].m_Angle, lights[i].m_Feather, AAEToPK(lights[i].m_Color), lights[i].m_Intensity); + } + else if (lights[i].m_Type == AEGP_LightType_POINT) + { + m_BackdropData.m_Lights[i].SetPoint(AAEToPK(lights[i].m_Position), AAEToPK(lights[i].m_Color), lights[i].m_Intensity); + } + } + } + + return false; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_LateInitializeIFN() +{ + if (m_Initialized == true) + return true; + // Medium collection + if (m_ParticleMediumCollection == null) + { + if (_SetupMediumCollection() == false) + return false; + } + // Render data factory + { + CPopcornFXWorld &pkfxWorld = CPopcornFXWorld::Instance(); + + PK_SCOPEDLOCK(pkfxWorld.GetRenderLock()); + RHI::PApiManager apiManager = pkfxWorld.GetCurrentRenderContext()->GetAEGraphicContext()->GetApiManager(); + const RHI::SGPUCaps &caps = apiManager->GetApiContext()->m_GPUCaps; // We get the GPU caps to know what is supported by the GPU and fallback IFN + m_ParticleRenderDataFactory.UpdateThread_Initialize(apiManager->ApiName(), m_HBOContext, caps, Drawers::BillboardingLocation_CPU); + } + // Frame collector + { + const u32 enabledRenderers = (1U << ERendererClass::Renderer_Billboard) | (1U << ERendererClass::Renderer_Ribbon) | (1U << ERendererClass::Renderer_Mesh) | (1U << ERendererClass::Renderer_Light) | (1U << ERendererClass::Renderer_Triangle); + + // Initialize the frame collector with the factory and required renderers (see CPopcornScene::CollectCurrentFrame() for more detail) + CFrameCollector::SFrameCollectorInit init(&m_ParticleRenderDataFactory, enabledRenderers); + if (!m_FrameCollector.UpdateThread_Initialize(init)) + { + return CAELog::TryLogErrorWindows("Failed to initialize the frame collector."); + } + // Hook this frame collector to the medium collection. It will "listen" to each medium insertion (see rh_frame_collector.inl) + m_FrameCollector.UpdateThread_InstallToMediumCollection(m_ParticleMediumCollection); + + m_FrameCollector.SetDrawCallsSortMethod(m_DCSortMethod); + } + m_Initialized = true; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_SetupMediumCollection() +{ + PK_ASSERT(m_ParticleMediumCollection == null); + + CPopcornFXWorld &pkfxWorld = CPopcornFXWorld::Instance(); + + PK_SCOPEDLOCK(pkfxWorld.GetRenderLock()); + + PAAERenderContext renderContext = pkfxWorld.GetCurrentRenderContext(); + + CParticleUpdateManager_Auto *updateManager = null; + +#if PK_PARTICLES_UPDATER_USE_D3D12 != 0 + if (pkfxWorld.GetRenderApi() == RHI::GApi_D3D12) + updateManager = PopcornFX::CParticleUpdateManager_Auto::New(EGPUContext::ContextD3D12); +#endif + +#if PK_PARTICLES_UPDATER_USE_D3D11 != 0 + if (pkfxWorld.GetRenderApi() == RHI::GApi_D3D11) + updateManager = PopcornFX::CParticleUpdateManager_Auto::New(EGPUContext::ContextD3D11); +#endif + + m_ParticleMediumCollection = PK_NEW(CParticleMediumCollection(m_ParticleScene, updateManager)); + if (!PK_VERIFY(m_ParticleMediumCollection != null)) + return false; + + m_ViewSlotInMediumCollection = m_ParticleMediumCollection->RegisterView(); + if (!PK_VERIFY(m_ViewSlotInMediumCollection.Valid())) + return false; + + m_ParticleMediumCollection->m_OnUpdateComplete += FastDelegate(this, &CAAEScene::_OnUpdateComplete); + + m_ParticleMediumCollection->EnableBounds(true); + m_ParticleMediumCollection->EnableLocalizedPages(true, false); + +#if 0 +#if PK_PARTICLES_UPDATER_USE_D3D12 != 0 + if (pkfxWorld.GetRenderApi() == RHI::GApi_D3D12) + { + CAAED3D12Context *D3D12Context = static_cast(renderContext->GetAEGraphicContext()); + + if (D3D12Context != null) + { + m_OriginViewport = renderContext->GetContextSize(); + // Small struct describing the D3D12 device used to build command lists, the root signature and the callback for submitting tasks to the engine + // g_D3D12SerializeRootSignature is PFN_D3D12_SERIALIZE_ROOT_SIGNATURE + PopcornFX::SD3D12Context context(D3D12Context->m_D3D12Context->m_Device, D3D12Context->m_D3D12Context->m_SerializeRootSignatureFunc, PopcornFX::CParticleUpdateManager_D3D12::CbEnqueueTask(this, &CAAEScene::D3D12_EnqueueTask), D3D12_COMMAND_LIST_TYPE_DIRECT); + + if (updateManager->GetUpdateManager_GPU()->BindContext(context)) + { + // Enables GPU simulation but does not force it + + m_ParticleMediumCollection->SetSimDispatchMaskCallback(CParticleMediumCollection::CbSimDispatchMask(&SimDispatchMask)); + } + } + } +#endif + +#if PK_PARTICLES_UPDATER_USE_D3D11 != 0 + if (pkfxWorld.GetRenderApi() == RHI::GApi_D3D11) + { + CAAED3D11Context *D3D11Context = static_cast(renderContext->GetAEGraphicContext()); + + if (D3D11Context != null) + { + m_OriginViewport = renderContext->GetContextSize(); + PopcornFX::SD3D11Context context(D3D11Context->m_D3D11Context->m_Device, D3D11Context->m_D3D11Context->m_ImmediateDeviceContext); + + CParticleUpdateManager_D3D11 *updateManagerD3D11 = checked_cast(updateManager->GetUpdateManager_GPU()); + if (updateManagerD3D11) + { + updateManagerD3D11->SetOwner(m_ParticleMediumCollection); + if (!updateManagerD3D11->BindContext(context)) + { + return false; + } + } + } + } +#endif +#endif + return true; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_FastForwardSimulation(SAAEIOData &AAEData, float timeTarget) +{ + (void)AAEData; + + if (m_Effect == null) + { + m_FrameAbortedDuringSeeking = A_Err_GENERIC; + return; + } + if (!PK_VERIFY(m_ParticleMediumCollection != null)) + return; + + CTimer updateTimer; + + updateTimer.Start(); + + const float maxUpdateTime = 30.0f; + + if (!PK_VERIFY(m_Effect->FeatureFlagsAll() & SParticleDeclaration::FeatureFlag_Determinism)) // if at least one layer doesn't have the flag, fail. + CAELog::TryLogErrorWindows("Effect is baked with Determinism disabled."); + + ParticleToolbox::SSeekingContextNew seekingCtx(timeTarget, m_DT, m_DT, maxUpdateTime, 0.0f, m_Effect.Get(), m_EmitterTransformsCurrent); + + ParticleToolbox::SSeekingContextNew::SInstanceInfo instInfo; + PK_ASSERT(m_Effect != null); + instInfo.m_Effect = m_Effect.Get(); + instInfo.m_CurTransforms = m_EmitterTransformsCurrent; + instInfo.m_SpawnTime = 0.0f; + PK_VERIFY(seekingCtx.m_InstancesToSpawn.PushBack(instInfo).Valid()); + + seekingCtx.m_LoadAndRunEffectDelegate = FastDelegate(this, &CAAEScene::_SeekingLoadAndRunEffect); + seekingCtx.m_UpdateEffectDelegate = FastDelegate(this, &CAAEScene::_SeekingUpdateEffect); + seekingCtx.m_WaitForUpdateFenceDelegate = FastDelegate(this, &CAAEScene::_SeekingWaitForUpdateFence); + + seekingCtx.m_PrecisionEpsilon = m_DT / 10.0f; // Arbitrary value for precision issues + seekingCtx.m_ForceRestartWhenNoUpdateNeeded = true; // Restarts when the elapsed time is equal to the target time + seekingCtx.m_ForceRestartFromZero = m_ForceRestartSeeking; + + m_AAEDataForSeeking = &AAEData; + PF_PROGRESS(m_AAEDataForSeeking->m_InData, 0, 1000); + ParticleToolbox::SSeekingContextNew::SeekToTargetTime(seekingCtx, m_ParticleMediumCollection); + m_AAEDataForSeeking = null; + m_Stats_SimulationTime = (float)updateTimer.Stop(); +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_SeekingLoadAndRunEffect( CParticleMediumCollection *mediumCollection, + const CParticleEffect *effect, + const CFloat4x4 &transform, + float timeFromStartOfFrame, + float timeToEndOfFrame, + float elapsedTime) +{ + (void)timeFromStartOfFrame; + (void)timeToEndOfFrame; + (void)transform; + (void)effect; + (void)mediumCollection; + m_FrameAbortedDuringSeeking |= CAEUpdater::UpdateLayerAtTime(m_LayerHolder, elapsedTime, true); + SetupScene(true, false); + m_FrameAbortedDuringSeeking |= CAEUpdater::UpdateLayerAtTime(m_LayerHolder, elapsedTime, true); +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_SeekingUpdateEffect(float dt, float elapsedTime, float timeTarget, u32 curUpdateIdx, u32 totalUpdatesCount) +{ + (void)dt; + (void)elapsedTime; + (void)timeTarget; + + if (totalUpdatesCount != 0) + { + PF_Err res = PF_Err_NONE; + res = PF_PROGRESS(m_AAEDataForSeeking->m_InData, curUpdateIdx, totalUpdatesCount); + if (res != PF_Err_NONE) + { + m_AAEDataForSeeking->m_ReturnCode = res; + return false; + } + } + m_FrameAbortedDuringSeeking |= CAEUpdater::UpdateLayerAtTime(m_LayerHolder, elapsedTime, curUpdateIdx != totalUpdatesCount); + + if (m_SkinnedMeshInstance != null) + { + if (elapsedTime == 0.0f) + m_SkinnedMeshInstance->ResetAnimationCursor(); + const CFloat4x4 &backdropTransforms = (m_ParticleScene != null) ? m_ParticleScene->BackdropMeshTransforms() : CFloat4x4::IDENTITY; + m_SkinnedMeshInstance->SetBackdropXForms(backdropTransforms); + m_SkinnedMeshInstance->Update(dt); + m_SkinnedMeshInstance->StartAsyncUpdateSkin(dt); + m_SkinnedMeshInstance->WaitAsyncUpdateSkin(); + } + _UpdateCamera(); + _UpdateEmitter(dt); + _UpdateMediumCollectionView(); + return m_FrameAbortedDuringSeeking == A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_SeekingWaitForUpdateFence(CTimer *waitTimer, float customMaxUpdateTime) +{ + (void)waitTimer; + + const u32 kMaxWaitTimeMs = 100;//ms max wait time + const float kMaxUpdateTimeSecsSetting = 1000;//ms + bool updateInProgress = true; + float maxUpdateTimeSecs = customMaxUpdateTime >= 0.0f ? customMaxUpdateTime : kMaxUpdateTimeSecsSetting; + CTimer ignoreTimer; + + ignoreTimer.Start(); + ignoreTimer.Pause(); + while (updateInProgress) + { + updateInProgress = m_ParticleMediumCollection->UpdateFence(kMaxWaitTimeMs); + if (updateInProgress || maxUpdateTimeSecs <= 0.0f) + { + } + } + return true; +} + +//---------------------------------------------------------------------------- + +u32 CAAEScene::_PickNewEffectSeed() +{ + return (u32)m_AEEmitterSeed; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_UpdateShapeSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc *descriptor) +{ + if (!PK_VERIFY(descriptor != null) || + !PK_VERIFY(samplerData.m_PKDesc != null)) + return false; + + SSamplerShape *pkDesc = static_cast(samplerData.m_PKDesc); + SShapeSamplerDescriptor *aeDesc = static_cast(descriptor->m_Descriptor); + + if (aeDesc == null) + return false; + + pkDesc->UpdateShape(aeDesc); + + CParticleSamplerDescriptor_Shape_Default *shapeSmpDesc = null; + if (aeDesc->m_BindToBackdrop && m_SkinnedMeshInstance != null && m_SkinnedMeshInstance->m_ShapeDescOverride != null) + shapeSmpDesc = static_cast(m_SkinnedMeshInstance->m_ShapeDescOverride.Get()); + else + shapeSmpDesc = static_cast(pkDesc->m_SamplerDescriptor.Get()); + m_EffectLastInstance->SetAttributeSampler(descriptor->m_Name.data(), shapeSmpDesc); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_UpdateTextSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc *descriptor) +{ + if (!PK_VERIFY(descriptor != null) || + !PK_VERIFY(samplerData.m_PKDesc != null)) + return false; + SSamplerText *pkDesc = static_cast(samplerData.m_PKDesc); + STextSamplerDescriptor *aeDesc = static_cast(descriptor->m_Descriptor); + + if (aeDesc == null) + return false; + + pkDesc->UpdateText(aeDesc); + + CParticleSamplerDescriptor_Text_Default *textSmpDesc = static_cast(pkDesc->m_SamplerDescriptor.Get()); + + if (!PK_VERIFY(m_EffectLastInstance->SetAttributeSampler(descriptor->m_Name.data(), textSmpDesc))) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_UpdateImageSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc *descriptor) +{ + if (!PK_VERIFY(descriptor != null) || + !PK_VERIFY(samplerData.m_PKDesc != null)) + return false; + SSamplerImage *pkDesc = static_cast(samplerData.m_PKDesc); + SImageSamplerDescriptor *aeDesc = static_cast(descriptor->m_Descriptor); + + if (aeDesc == null) + return false; + if (pkDesc->m_Dirty) + { + pkDesc->UpdateImage(aeDesc); + } + + CParticleSamplerDescriptor_Image_Default *imageSmpDesc = static_cast(pkDesc->m_SamplerDescriptor.Get()); + + if (!PK_VERIFY(m_EffectLastInstance->SetAttributeSampler(descriptor->m_Name.data(), imageSmpDesc))) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_UpdateAudioSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc *descriptor) +{ + if (!PK_VERIFY(descriptor != null) || + !PK_VERIFY(samplerData.m_PKDesc != null)) + return false; + + SSamplerAudio *pkDesc = static_cast(samplerData.m_PKDesc); + + pkDesc->m_BuiltThisFrame = false; + m_ActiveAudioSamplers.PushBack(pkDesc); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_UpdateVectorFieldSampler(SPendingAttribute &samplerData, SAttributeSamplerDesc *descriptor) +{ + if (!PK_VERIFY(descriptor != null) || + !PK_VERIFY(samplerData.m_PKDesc != null)) + return false; + + SSamplerVectorField *pkDesc = static_cast(samplerData.m_PKDesc); + SVectorFieldSamplerDescriptor *aeDesc = static_cast(descriptor->m_Descriptor); + + if (aeDesc == null) + return false; + pkDesc->UpdateVectorField(aeDesc); + + CParticleSamplerDescriptor_VectorField_Grid *turbulenceSmpDesc = static_cast(pkDesc->m_SamplerDescriptor.Get()); + + if (!PK_VERIFY(m_EffectLastInstance->SetAttributeSampler(descriptor->m_Name.data(), turbulenceSmpDesc))) + return false; + + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_LoadScene(const SSimpleSceneDef &sceneDef) +{ + m_EffectLastInstance = null; + + if (!_LoadEffectIFN(sceneDef)) + return false; + + m_EffectLastInstance = _InstantiateEffect(); + PK_ASSERT(m_EffectLastInstance != null); + if (m_EffectLastInstance == null) // failed instantiating + return false; + m_EffectDesc->m_Name = sceneDef.m_EffectPath.Data(); + if (sceneDef.m_BackdropMeshPath.Data() != null) + m_EffectDesc->m_BackdropMesh.m_Path = sceneDef.m_BackdropMeshPath.Data(); + + if (m_SkinnedMeshInstance != null) + { + m_SkinnedMeshInstance->Update(0.0f); + m_SkinnedMeshInstance->StartAsyncUpdateSkin(0.0f); + m_SkinnedMeshInstance->WaitAsyncUpdateSkin(); + + m_SkinnedMeshInstance->SetupAttributeSampler(m_ResourceMesh->BatchList()[0]->RawMesh(), + m_IsWeightedSampling, + m_ColorStreamID, + m_WeightStreamID); + } + return true; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_CollectCurrentFrame() +{ + PK_SCOPEDPROFILE(); + m_FrameCollector.m_CullingFrustums = TMemoryView(m_Camera.ViewFrustum()); + + if (m_FrameCollector.UpdateThread_BeginCollectFrame()) + { + m_FrameCollector.UpdateThread_CollectFrame(m_ParticleMediumCollection); + } +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_RenderLastCollectedFrame() +{ + TSceneView view; + + CFloat4x4 matW2P = m_Camera.m_ViewInv;//AE Axis System + + matW2P.Axis(1) *= -1; //AE Y-down to PopcornFX Y-up + matW2P.Axis(2) *= -1; //AE Z-foward to PopcornFX Z-backward + view.m_InvViewMatrix = matW2P; + view.m_NeedsSortedIndices = true; + + m_FrameCollector.BuildNewFrame(m_FrameCollector.UpdateThread_GetLastCollectedFrame()); + m_DrawOutputs.Clear(); + + // Build necessary renderer caches + CPopcornFXWorld &pkfxWorld = CPopcornFXWorld::Instance(); + PAAERenderContext currentRenderContext = pkfxWorld.GetCurrentRenderContext(); + + m_ParticleRenderDataFactory.RenderThread_BuildPendingCaches(currentRenderContext->GetAEGraphicContext()->GetApiManager()); + + // Do not release last collected frame when billboarding is finished + // We release frame before updating the medium collection (avoids handling of special cases when sim is paused) + const bool releaseLastCollectedFrame = false; + + PKSample::SRenderContext context(PKSample::SRenderContext::EPass_RenderThread, currentRenderContext->GetAEGraphicContext()->GetApiManager()); + + if (m_FrameCollector.BeginCollectingDrawCalls(context, TMemoryView(view))) + m_FrameCollector.EndCollectingDrawCalls(context, m_DrawOutputs, releaseLastCollectedFrame); +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_UpdateEmitter(float dt) +{ + CQuaternion quat = Transforms::Quaternion::FromEuler(m_AEEmitterRotation); + + if (m_EmitterTransformType == ETransformType_2D) //If project coordinate to match 2D Widget + { + //normalize to -1;1 + const CFloat2 viewportDimensions = CFloat2(m_SAAEWorldData.m_WorldWidth, m_SAAEWorldData.m_WorldHeight); + const CFloat2 normalizedViewportCoords = (m_AEEmitterPosition.xy() / CFloat2(viewportDimensions)) * CFloat2(2, 2) - 1; + + const CFloat4x4 viewProj = m_Camera.m_View * m_Camera.m_Proj; + const CFloat4x4 viewProjInv = viewProj.Inverse(); + + const CFloat4 clipPos = CFloat4(normalizedViewportCoords, 0, 1); + const CFloat4 worldPosOnNearPlaneH = viewProjInv.TransformVector(clipPos); + const CFloat3 worldPosOnNearPlane = worldPosOnNearPlaneH.xyz() / worldPosOnNearPlaneH.w(); + const CFloat3 worldOrigin = m_Camera.m_View.Inverse().StrippedTranslations(); + const CFloat3 worldDirection = (worldPosOnNearPlane - worldOrigin).Normalized(); + + m_EmitterTransformsPrevious = m_EmitterTransformsCurrent; + m_EmitterTransformsCurrent = Transforms::Matrix::FromQuaternion(quat, CFloat4(worldOrigin + worldDirection * m_AEEmitterPosition.z(), 1.0f)); + } + else + { + CFloat3 pos(m_AEEmitterPosition.x(), m_AEEmitterPosition.y(), m_AEEmitterPosition.z()); + + m_EmitterTransformsPrevious = m_EmitterTransformsCurrent; + m_EmitterTransformsCurrent = Transforms::Matrix::FromQuaternion(quat, CFloat4(pos, 1.0f)); + } + if (m_TeleportEmitter == true) + { + m_EmitterTransformsPrevious = m_EmitterTransformsCurrent; + m_TeleportEmitter = false; + } + + m_EmitterVelPrevious = m_EmitterVelCurrent; + if (dt > 1.0e-6f) + { + const float invDt = PKRcp(dt); + const CFloat3 posDelta = m_EmitterTransformsCurrent.StrippedTranslations() - m_EmitterTransformsPrevious.StrippedTranslations(); + m_EmitterVelCurrent = posDelta * invDt; + } + + if (m_LayerHolder->m_SpawnedEmitter.m_Desc->m_SimStatePrev != m_LayerHolder->m_SpawnedEmitter.m_Desc->m_SimState) + { + if (m_LayerHolder->m_SpawnedEmitter.m_Desc->m_SimState) + m_EffectLastInstance = _InstantiateEffect(0, 0); + else if (m_EffectLastInstance != null) + m_EffectLastInstance->Stop(); + } +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_UpdateCamera() +{ + CFloat4 cameraPos = m_AECameraPos; + + m_Camera.m_View = m_AEViewMatrix ; + if (m_EmitterTransformType == ETransformType_2D)//If project coordinate to match 2D Widget + { + { + //normalize to -1;1 + m_EmitterPositionNormalized_Debug = CFloat4(cameraPos.x() - (m_SAAEWorldData.m_WorldWidth / 2.0f), + cameraPos.y() - (m_SAAEWorldData.m_WorldHeight / 2.0f), + cameraPos.z(), + 1.0f); + m_Camera.m_Position = m_EmitterPositionNormalized_Debug.xyz(); + } + + m_Camera.m_View.WAxis() = CFloat4(m_Camera.m_Position.x(), m_Camera.m_Position.y(), m_Camera.m_Position.z(), 1.0f); + } + else + m_Camera.m_Position = cameraPos.xyz(); + + if (m_SAAEWorldData.m_WorldWidth > 0 && m_SAAEWorldData.m_WorldHeight > 0) + { + if (m_EmitterTransformType == ETransformType_2D) + { + float ratio = Units::DegreesToRadians((((m_AECameraZoom) * 2.0f) / (m_SAAEWorldData.m_WorldWidth))); + float HFov = 2.0f * (1.0f / tan(ratio)); + + _SetProj(HFov, CFloat2(m_SAAEWorldData.m_WorldWidth, m_SAAEWorldData.m_WorldHeight), m_EffectDesc->m_Camera.m_Near, m_EffectDesc->m_Camera.m_Far); + } + else + { + double tanTheta = (((double)m_SAAEWorldData.m_WorldHeight) / (double)(2.0 * m_AECameraZoom)); + double halfFOV = Units::RadiansToDegrees(atan(tanTheta)); + float FOVDeg = (float)(halfFOV * 2.0); + + _SetProj(FOVDeg, CFloat2(m_SAAEWorldData.m_WorldWidth, m_SAAEWorldData.m_WorldHeight), m_EffectDesc->m_Camera.m_Near, m_EffectDesc->m_Camera.m_Far); + } + } + else + { + PK_ASSERT_NOT_REACHED(); + } + m_Camera.Update(); +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_UpdateMediumCollectionView() +{ + const CFloat4x4 matW2V = m_Camera.m_View; //AE Axis system + const CFloat4x4 matW2P = matW2V * m_Camera.m_Proj; //RHYUP + + PK_ASSERT(m_ViewSlotInMediumCollection.Valid()); + m_ParticleMediumCollection->UpdateView(m_ViewSlotInMediumCollection, matW2V, matW2P, m_Camera.m_WinSize); +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_OnUpdateComplete(CParticleMediumCollection *collection) +{ + (void)collection; + for (u32 i = 0; i < m_ActiveAudioSamplers.Count(); ++i) + { + m_ActiveAudioSamplers[i]->ReleaseAEResources(); + } + m_ActiveAudioSamplers.Clear(); +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_LoadEffectIFN(const SSimpleSceneDef &sceneDef) +{ + CPopcornFXWorld &world = CPopcornFXWorld::Instance(); + + if (m_LayerHolder->m_LayerProperty == null) + world.CreateLayerPropertyIFP(m_LayerHolder); + + if (m_Effect != null && sceneDef.m_Refresh == false) + return true; + + for (u32 i = 0; i < m_OverridableProperties.Count(); ++i) + PK_SAFE_DELETE(m_OverridableProperties[i]); + m_OverridableProperties.Clean(); + if (sceneDef.m_EffectPath == null) + { + CLog::Log(PK_ERROR, "empty effect path."); + return false; + } + + CLog::Log(PK_INFO, "Loading Effect : %s", sceneDef.m_EffectPath.Data()); + + IFileSystem *fileSystem = File::DefaultFileSystem(); + + // Method #1 for loading: Pass down your own memory buffer to the load function + u32 rawFileSize = 0; // will be filled by 'Bufferize' call below + u8 *rawFileBuffer = fileSystem->Bufferize(m_LoadedPack->Path() / sceneDef.m_EffectPath, &rawFileSize, true); + if (rawFileBuffer != null) + { + CConstMemoryStream memoryFileView(rawFileBuffer, rawFileSize); + + PBaseObjectFile objFile = m_HBOContext->LoadFileFromStream(memoryFileView, sceneDef.m_EffectPath); + + if (!PK_VERIFY(objFile != null)) + { + CLog::Log(PK_ERROR, "Loading file from stream failed: %s", sceneDef.m_EffectPath.Data()); + return false; + } + + if (m_LayerHolder->m_LayerProperty != null) + { + for (auto obj : objFile->ObjectList()) + { + PLayerCompileCache srcLayer = HBO::Cast(obj.Get()); + + if (srcLayer != null) + { + for (auto &srcRenderer : srcLayer->Renderers()) + { + for (u32 pidx = 0; pidx < srcRenderer->Properties().Count(); ++pidx) + { + CLayerCompileCacheRendererProperty *srcProp = srcRenderer->Properties()[pidx]; + + if (srcProp->PropertyType() == PropertyType_TexturePath) + { + SRendererProperties *prop = PK_NEW(SRendererProperties(srcProp->PropertyName(), srcProp->PropertyValueStr(), srcLayer->LayerName(), srcLayer->UID(), CStringId(m_EffectDesc->m_UUID.c_str()), srcRenderer->UID(), srcProp->UID())); + if (!PK_VERIFY(m_OverridableProperties.PushBack(prop).Valid())) + return false; + + for (u32 i = 0; i < m_LayerHolder->m_LayerProperty->RendererProperties().Count(); ++i) + { + if (srcRenderer->UID() == m_LayerHolder->m_LayerProperty->RendererProperties()[i]->RendererID() && + srcProp->UID() == m_LayerHolder->m_LayerProperty->RendererProperties()[i]->PropertyID()) + { + srcProp->SetPropertyValueStr(m_LayerHolder->m_LayerProperty->RendererProperties()[i]->Value()); + prop->m_Value = srcProp->PropertyValueStr(); + } + } + } + } + } + } + } + + if (m_EffectFile != null) + { + m_Effect = null; + m_EffectFile->Unload(); + m_EffectFile = null; + } + } + if (m_Effect == null) + m_Effect = CParticleEffect::Load(objFile); + + PK_FREE(rawFileBuffer); + + if (!PK_VERIFY(m_Effect != null)) + { + CLog::Log(PK_ERROR, "Failed loading effect \"%s\"", sceneDef.m_EffectPath.Data()); + return false; + } + if (!m_Effect->Install(m_ParticleMediumCollection)) + { + CLog::Log(PK_ERROR, "Failed Install effect \"%s\"", sceneDef.m_EffectPath.Data()); + return false; + } + m_AttributesList = m_Effect->AttributeFlatList().Get(); + if (!PK_VERIFY(m_AttributesList != null)) + { + CLog::Log(PK_WARN, "no attributes descriptor"); + return false; + } + if (!_RebuildAttributes(sceneDef)) + { + CLog::Log(PK_ERROR, "_RebuildAttributes failed"); + return false; + } + m_AttributesList = null; + } + + m_EffectPath = sceneDef.m_EffectPath; + return true; +} + +//---------------------------------------------------------------------------- + +PParticleEffectInstance CAAEScene::_InstantiateEffect() +{ + _UpdateCamera(); + _UpdateEmitter(m_DT); + return _InstantiateEffect(0, 0); +} + +//---------------------------------------------------------------------------- +// This version if 'InstantiateEffect' takes two time arguments to pinpoint with accuracy +// where during the frame the instantiation happened. If you don't care, just pass zero in both parameters. + +PParticleEffectInstance CAAEScene::_InstantiateEffect(float timeFromStartOfFrame, float timeToEndOfFrame) +{ + PK_ASSERT(m_Effect != null); + PK_ASSERT(timeFromStartOfFrame >= 0.0f); + PK_ASSERT(timeToEndOfFrame >= 0.0f); + + // CParticleEffect::Instantiate() returns an effect instance, registered into the specified medium collection + PParticleEffectInstance instance = m_Effect->Instantiate_AlreadyInstalled(m_ParticleMediumCollection); + + if (instance != null) + { + // The death notifier will be called as soon as the instance dies. See the comment above the 'm_DeathNotifier' member in + instance->m_DeathNotifier += FastDelegate(this, &CAAEScene::_OnInstanceDeath); + + instance->EnableSeed(true); + instance->Seed(m_LayerHolder->m_SpawnedEmitter.m_Desc->m_Seed); + + SEffectStartCtl effectStartCtl; + effectStartCtl.m_TimeFromStartOfFrame = timeFromStartOfFrame; + effectStartCtl.m_TimeToEndOfFrame = timeToEndOfFrame; + effectStartCtl.m_SpawnTransformsPack.m_WorldTr_Current = &m_EmitterTransformsCurrent; + effectStartCtl.m_SpawnTransformsPack.m_WorldTr_Previous = &m_EmitterTransformsPrevious; + effectStartCtl.m_SpawnTransformsPack.m_WorldVel_Current = &m_EmitterVelCurrent; + effectStartCtl.m_SpawnTransformsPack.m_WorldVel_Previous = &m_EmitterVelPrevious; + + // Start the instance. (Frame start/end times are optional, you can call 'instance->Start(xforms)' if you don't care) + instance->Start(effectStartCtl); + } + + return instance; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_OnInstanceDeath(const PParticleEffectInstance &instance) +{ + PK_ASSERT(instance != null); + // This callback will be called from worker threads + + // Not strictly necessary to -= the callback, the instance is getting destroyed anyway. + instance->m_DeathNotifier -= FastDelegate(this, &CAAEScene::_OnInstanceDeath); + if (instance == m_EffectLastInstance) + { + instance->KillImmediate(); + m_EffectLastInstance = null; + } +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_RebuildAttributes(const SSimpleSceneDef &sceneDef) +{ + (void)sceneDef; + + auto &attributeList = m_AttributesList->AttributeList(); + auto &samplerList = m_AttributesList->SamplerList(); + const u32 samplerCount = samplerList.Count(); + const u32 attrCount = attributeList.Count(); + + TArray attrOrder; + + for (u32 i = 0; i < attrCount; ++i) + { + CParticleAttributeDeclaration *attrDecl = attributeList[i]; + + PK_ASSERT(attrDecl != null); + + CString category = attrDecl->CategoryName().MapENG().ToAscii(); + SAttributeDesc *attrDesc = new SAttributeDesc(attrDecl->ExportedName().Data(), (const char*)category.Data(), AttributePKToAAE((EBaseTypeID)attrDecl->ExportedType()), AttributePKToAAE(attrDecl->GetEffectiveDataSemantic())); + + SAttributesContainer_SAttrib value = attrDecl->GetDefaultValue(); + SAttributesContainer_SAttrib valueMin = attrDecl->GetMinValue(); + SAttributesContainer_SAttrib valueMax = attrDecl->GetMaxValue(); + + attrDesc->m_HasMax = attrDecl->HasMax(); + attrDesc->m_HasMin = attrDecl->HasMin(); + EAttributeType type = attrDesc->m_Type; + if (type >= AttributeType_Bool1 && type <= AttributeType_Bool4) + { + attrDesc->SetValue(value.Get()); + attrDesc->SetDefaultValue(value.Get()); + attrDesc->SetMinValue(valueMin.Get()); + attrDesc->SetMaxValue(valueMax.Get()); + } + if (type >= AttributeType_Int1 && type <= AttributeType_Int4) + { + attrDesc->SetValue(value.Get()); + attrDesc->SetDefaultValue(value.Get()); + attrDesc->SetMinValue(valueMin.Get()); + attrDesc->SetMaxValue(valueMax.Get()); + } + if (type >= AttributeType_Float1 && type <= AttributeType_Float4) + { + attrDesc->SetValue(value.Get()); + attrDesc->SetDefaultValue(value.Get()); + attrDesc->SetMinValue(valueMin.Get()); + attrDesc->SetMaxValue(valueMax.Get()); + } + attrDesc->m_IsDefaultValue = true; + + if (!PK_VERIFY(attrOrder.PushBack(attrDesc).Valid())) + return false; + } + + for (u32 i = 0; i < samplerCount; ++i) + { + CParticleAttributeSamplerDeclaration *samplerDecl = samplerList[i]; + PK_ASSERT(samplerDecl != null); + + CString category = samplerDecl->CategoryName().MapENG().ToAscii(); + SAttributeSamplerDesc *smplrDesc = new SAttributeSamplerDesc(samplerDecl->ExportedName().Data(), (const char*)category.Data(), AttributeSamplerPKToAAE((SParticleDeclaration::SSampler::ESamplerType)samplerDecl->ExportedType())); + + switch (smplrDesc->m_Type) + { + case AttributeSamplerType_Geometry: + smplrDesc->m_Descriptor = new SShapeSamplerDescriptor(); + break; + case AttributeSamplerType_Text: + smplrDesc->m_Descriptor = new STextSamplerDescriptor(); + break; + case AttributeSamplerType_Image: + smplrDesc->m_Descriptor = new SImageSamplerDescriptor(); + break; + case AttributeSamplerType_Audio: + { + smplrDesc->m_Descriptor = new SAudioSamplerDescriptor(); + + CResourceDescriptor_Audio *nodeSamplerData = HBO::Cast(samplerDecl->AttribSamplerDefaultValue().Get()); + if (PK_VERIFY(nodeSamplerData != null)) + ((SAudioSamplerDescriptor*)smplrDesc->m_Descriptor)->m_ChannelGroup = nodeSamplerData->ChannelGroup().Data(); + break; + } + case AttributeSamplerType_VectorField: + smplrDesc->m_Descriptor = new SVectorFieldSamplerDescriptor(); + break; + default: + smplrDesc->m_Descriptor = null; + break; + } + if (smplrDesc->m_Descriptor) + smplrDesc->m_Descriptor->m_UsageFlags = samplerDecl->UsageFlags(); + + if (!PK_VERIFY(attrOrder.PushBack(smplrDesc).Valid())) + return false; + } + + typedef TArray::Iterator attrDescIt; + + struct SSortAttributesPolicy + { + PK_FORCEINLINE static bool Less(const attrDescIt &it0, const attrDescIt &it1) + { + int cmpCategoryRes = (*it0)->m_CategoryName.compare((*it1)->m_CategoryName); + + if (cmpCategoryRes < 0) + return true; + if (cmpCategoryRes > 0) + return false; + if (cmpCategoryRes == 0) + { + if ((*it0)->m_Name.compare((*it1)->m_Name) < 0) + return true; + else + return false; + } + return false; + } + + PK_FORCEINLINE static bool Equal(const attrDescIt &it0, const attrDescIt &it1) + { + int cmpCategoryRes = (*it0)->m_CategoryName.compare((*it1)->m_CategoryName); + int cmpNameRes = (*it0)->m_Name.compare((*it1)->m_Name); + return cmpCategoryRes == 0 && cmpNameRes == 0; + } + }; + + QuickSort(attrOrder.Begin(), attrOrder.End()); + + CPopcornFXWorld::Instance().HandleNewAttributes(attrOrder, m_EffectRef, m_LayerHolder, false); + return true; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_ExtractAEFrameInfo(SAAEIOData &AAEData) +{ + u32 targetFrame = AAEData.m_InData->current_time / AAEData.m_InData->local_time_step; + if (m_FrameNumber + 1 != targetFrame) + m_ForceRestartSeeking = true; + else + m_ForceRestartSeeking = false; + m_FrameNumber = targetFrame; + + m_DT = (float)((double)AAEData.m_InData->local_time_step / (double)AAEData.m_InData->time_scale); + m_PreviousTimeSec = m_CurrentTimeSec; + m_CurrentTimeSec = (float)((double)AAEData.m_InData->current_time / (double)AAEData.m_InData->time_scale); +} + +//---------------------------------------------------------------------------- + +bool CAAEScene::_CheckRenderAbort(SAAEIOData *AAEData) +{ + if (AAEData == null) + { + CLog::Log(PK_INFO, "RenderAbort"); + return true; + } + PF_Err res = PF_Err_NONE; + res = PF_ABORT(AAEData->m_InData); + if (res != PF_Err_NONE) + { + AAEData->m_ReturnCode = res; + CLog::Log(PK_INFO, "RenderAbort"); + return true; + } + return false; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_SetProj(float fovydegree, const CFloat2 &winDimPixel, float zNear, float zFar) +{ + float fX, fY; + + m_Camera.m_ProjNear = zNear; + m_Camera.m_ProjFar = zFar; + m_Camera.m_WinSize = winDimPixel; + if (m_EmitterTransformType == ETransformType_2D) + { + const float aspect = winDimPixel.y() / winDimPixel.x(); + fX = 1.f / tanf(Units::DegreesToRadians(fovydegree) * 0.5f); + fY = fX / aspect; + } + else + { + m_Camera.m_ProjFovy = fovydegree; + const float aspect = winDimPixel.x() / winDimPixel.y(); + fY = 1.f / tanf(Units::DegreesToRadians(fovydegree * 0.5f)); + fX = fY / aspect; + } + + const float kRcpRange = 1.0f / (zNear - zFar); + const float kA = (zFar + zNear) * kRcpRange; + const float kB = (zFar * zNear) * kRcpRange; + + RHI::EGraphicalApi api = CPopcornFXWorld::Instance().GetRenderApi(); + if (api == RHI::GApi_D3D11 || api == RHI::GApi_D3D12 || api == RHI::GApi_Metal) + { + // GApi_D3D11: GApi_D3D12 + m_Camera.m_Proj = CFloat4x4(fX, 0, 0, 0, + 0, -fY, 0, 0, + 0, 0, 0.5f * kA - 0.5f, -1, + 0, 0, kB, 0); + } + else + { + PK_ASSERT_NOT_REACHED_MESSAGE("No projection matrix for this API"); + } + + CFloat4x4 current2RHYUp = CFloat4x4::IDENTITY; + CCoordinateFrame::BuildTransitionFrame(CCoordinateFrame::GlobalFrame(), Frame_RightHand_Y_Up, current2RHYUp); + + m_Camera.m_Proj = current2RHYUp * m_Camera.m_Proj; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::_FillAdditionnalDataForRender() +{ + TArray &outSkinnedDatas = m_FXInstancesSkinnedData; + + outSkinnedDatas.Clear(); + + const PSkinnedMeshInstance instance = m_SkinnedMeshInstance; + if (instance == null) + return; + if (!PK_VERIFY(outSkinnedDatas.PushBack().Valid())) + { + outSkinnedDatas.Clear(); + return; + } + + SSkinnedDataSimple &skinnedDataSimple = outSkinnedDatas.Last(); + + skinnedDataSimple.m_Valid = (instance->m_SkinnedMesh != null && instance->m_SkinnedMesh->Valid() && instance->m_SkinnedMesh->HasGeometry()); + if (skinnedDataSimple.m_Valid) + { + if (!PK_VERIFY(skinnedDataSimple.m_SubMeshes.Resize(instance->m_SkinnedMesh->SubMeshCount()))) + { + skinnedDataSimple.m_SubMeshes.Clear(); + return; + } + for (u32 smidx = 0, smCount = instance->m_SkinnedMesh->SubMeshCount(); smidx < smCount; smidx++) + { + auto &submesh = skinnedDataSimple.m_SubMeshes[smidx]; + submesh.m_SubMeshID = smidx; + submesh.m_Positions = instance->m_SkinnedMesh->Positions(smidx); + submesh.m_Normals = instance->m_SkinnedMesh->Normals(smidx); + } + for (u32 smidx = 0; smidx < skinnedDataSimple.m_SubMeshes.Count(); smidx++) + { + auto &submesh = skinnedDataSimple.m_SubMeshes[smidx]; + if (submesh.m_Positions.Empty() && + submesh.m_Normals.Empty()) + skinnedDataSimple.m_SubMeshes.Remove(smidx--); + } + } + + if (!PK_VERIFY(m_BackdropData.m_FXInstancesSkinnedDatas.Resize(1))) + return; + + for (u32 iInstance = 0; iInstance < 1; ++iInstance) + { + const SSkinnedDataSimple &skinnedData = m_FXInstancesSkinnedData[iInstance]; + PKSample::SSkinnedMeshData &skinnedDataForRender = m_BackdropData.m_FXInstancesSkinnedDatas[iInstance]; + + skinnedDataForRender.m_Valid = false; + + if (!skinnedData.m_Valid || + skinnedData.m_SubMeshes.Empty() || + !PK_VERIFY(skinnedDataForRender.m_SubMeshes.Resize(skinnedData.m_SubMeshes.Count()))) + { + skinnedDataForRender.m_SubMeshes.Clear(); + continue; + } + + skinnedDataForRender.m_Valid = skinnedData.m_Valid; + + for (u32 smidx = 0; smidx < skinnedData.m_SubMeshes.Count(); smidx++) + { + const auto &submesh = skinnedData.m_SubMeshes[smidx]; + auto &submeshForRender = skinnedDataForRender.m_SubMeshes[smidx]; + + submeshForRender.m_SubMeshID = submesh.m_SubMeshID; + + // skinned data is 0x10 aligned, submeshForRender has same alignment as final vb so we can memcpy + const u32 posCount = submesh.m_Positions.Count(); + const u32 pnStride = sizeof(CFloat3); + const u32 posSizeInBytes = posCount * pnStride; + const u32 totalSizeInBytes = posSizeInBytes + submesh.m_Normals.Count() * pnStride; + PK_ASSERT(totalSizeInBytes > 0); + PK_ASSERT(posCount == submesh.m_Normals.Count() || submesh.m_Normals.Empty()); + if (!PK_VERIFY(submeshForRender.m_RawData.Resize(totalSizeInBytes))) + { + submeshForRender.m_RawData.Clear(); + continue; + } + + CFloat3 *dstData = reinterpret_cast(submeshForRender.m_RawData.RawDataPointer()); + TStridedMemoryView dstPositions(dstData, posCount, pnStride); + TStridedMemoryView dstNormals(dstData + posCount, posCount, pnStride); + + Mem::CopyStreamToStream(dstPositions, submesh.m_Positions); + Mem::CopyStreamToStream(dstNormals, submesh.m_Normals); + } + } +} + +//---------------------------------------------------------------------------- + +#if (PK_PARTICLES_UPDATER_USE_D3D12 != 0 || PK_PARTICLES_UPDATER_USE_D3D11 != 0) +bool CAAEScene::SimDispatchMask(const PopcornFX::CParticleDescriptor *descriptor, PopcornFX::SSimDispatchHint &outHint) +{ + const PopcornFX::SParticleDeclaration &decl = descriptor->ParticleDeclaration(); + // Tell PopcornFX Runtime that our code does not handle any of the following renderers on GPU: + // if a particle layer contain any of those, even if the simulation graph has compute shader bytecodes, it will fallback on CPU. + if (!decl.m_LightRenderers.Empty() || + !decl.m_SoundRenderers.Empty() || + !decl.m_RibbonRenderers.Empty() || + !decl.m_TriangleRenderers.Empty() || + !decl.m_DecalRenderers.Empty()) + { + outHint.m_AllowedDispatchMask &= ~(1 << PopcornFX::SSimDispatchHint::Location_GPU); // can't draw any of these on the GPU + } + // if we are allowed on GPU, prefer GPU, otherwise prefer CPU: + if (outHint.m_AllowedDispatchMask & (1 << PopcornFX::SSimDispatchHint::Location_GPU)) + outHint.m_PreferredDispatchMask = (1 << PopcornFX::SSimDispatchHint::Location_GPU); + else + outHint.m_PreferredDispatchMask = (1 << PopcornFX::SSimDispatchHint::Location_CPU); + return true; +} + +//---------------------------------------------------------------------------- + +void CAAEScene::D3D12_EnqueueTask(const PopcornFX::PParticleUpdaterTaskD3D12 &task) +{ + CPopcornFXWorld &pkfxWorld = CPopcornFXWorld::Instance(); + PAAERenderContext renderContext = pkfxWorld.GetCurrentRenderContext(); + CAAED3D12Context *D3D12Context = static_cast(renderContext->GetAEGraphicContext()); + + if (D3D12Context != null && D3D12Context->m_D3D12Context->m_CommandQueue != null) // Your ID3D12CommandQueue (can be D3D12_COMMAND_LIST_TYPE_DIRECT or D3D12_COMMAND_LIST_TYPE_COMPUTE) + task->Execute(D3D12Context->m_D3D12Context->m_CommandQueue); // Internally calls commandQueue->ExecuteCommandLists and fences +} +#endif + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_SkinnedMesh.cpp b/AE_GeneralPlugin/Sources/AEGP_SkinnedMesh.cpp new file mode 100644 index 00000000..74a3c7d1 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_SkinnedMesh.cpp @@ -0,0 +1,451 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" +#include "AEGP_SkinnedMesh.h" + +#include // for random XForms tests +#include // for 'Skin_PostProcess' +#include // for CMeshSurfaceSamplerStructuresRandom && CMeshVolumeSamplerStructuresRandom + +// For skinned mesh backdrops +#include +#include +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- +// +// Skinned mesh instance wrapper implementation +// +//---------------------------------------------------------------------------- + +CSkinnedMesh::CSkinnedMesh() + : m_SkinDt(0) + , m_FirstFrame(false) + , m_SamplingChannels(0) +{ +} + +//---------------------------------------------------------------------------- + +CSkinnedMesh::~CSkinnedMesh() +{ + Reset(); +} + +//---------------------------------------------------------------------------- + +void CSkinnedMesh::Reset() +{ + WaitAsyncUpdateSkin(); + + m_SubMeshes.Clear(); + + m_SkinDt = 0; + m_FirstFrame = 0; + m_SamplingChannels = 0; + + m_Timeline = CTimeline(); // must reset before clearing m_SkeletonState + m_SkeletonState = null; +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMesh::Init(const TResourcePtr &meshResource, u32 samplingChannels, const PSkeletonState &srcSkeletonState) +{ + const bool success = _Init_Impl(meshResource, samplingChannels, srcSkeletonState); + if (!success) + Reset(); + return success; +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMesh::_Init_Impl(const TResourcePtr &meshResource, u32 samplingChannels, const PSkeletonState &srcSkeletonState) +{ + WaitAsyncUpdateSkin(); + + m_FirstFrame = true; + m_SamplingChannels = samplingChannels; + + if (meshResource == null || srcSkeletonState == null) + return false; + + for (auto &mesh : m_SubMeshes) + { + mesh.m_SkeletalMesh = null; + mesh.m_SkeletonState = null; + } + + m_Timeline = CTimeline(); // must reset before clearing m_SkeletonState + m_SkeletonState = null; + + // create and copy skeleton state if necessary: + if (m_SkeletonState == null) + { + m_SkeletonState = PK_NEW(CSkeletonState); + if (m_SkeletonState == null) + return false; + } + + if (!m_SkeletonState->DeepCopy(*srcSkeletonState)) + return false; + + m_SkeletonState->SetTimeline(&m_Timeline); + + const u32 kLodLevel = 0; + TMemoryView batchList = meshResource->BatchList(kLodLevel); + if (!PK_VERIFY(m_SubMeshes.Resize(batchList.Count()))) + return false; + + for (u32 batchId = 0; batchId < m_SubMeshes.Count(); batchId++) + { + SSubMesh &mesh = m_SubMeshes[batchId]; + + // grab the desired skeletal mesh: + mesh.m_SkeletalMesh = batchList[batchId].Get(); + if (!PK_VERIFY(mesh.m_SkeletalMesh != null)) + return false; + + // FIXME: Handle when some submeshes aren't skinned + if (!mesh.m_SkeletalMesh->IsSkinned()) + { + mesh.m_SkeletalMesh = null; + mesh.m_SkeletonState = null; + continue; + } + + mesh.m_SkeletonState = m_SkeletonState; + + // grab the raw geometry: + const CMeshTriangleBatch &srcGeomBatch = mesh.m_SkeletalMesh->RawMesh()->TriangleBatch(); + const CMeshVStream &srcVStream = srcGeomBatch.m_VStream; + if (srcVStream.Empty()) + return false; + + // do we need to create or resize our locally skinned vertex streams? + if (mesh.m_RawSkinnedDataElementCount != srcVStream.VertexCount()) + { + // nedds initial alloc, or resize + const u32 vertexCount = srcVStream.VertexCount(); + const u32 offsetPos = 0; + const u32 offsetNor = Mem::Align(offsetPos + vertexCount * u32(sizeof(CFloat4))); // pad Positions & Normals to Float4 for fast aligned SIMD processing + const u32 offsetTan = Mem::Align(offsetNor + vertexCount * u32(sizeof(CFloat4))); + const u32 offsetOld = Mem::Align(offsetTan + vertexCount * u32(sizeof(CFloat4))); + const u32 offsetVel = Mem::Align(offsetOld + vertexCount * u32(sizeof(CFloat4))); + const u32 offsetEnd = Mem::Align(offsetVel + vertexCount * u32(sizeof(CFloat4))); + + const u32 totalStreamsFootprint = offsetEnd; + void *rawDataPtr = PK_REALLOC_ALIGNED(mesh.m_RawSkinnedData, totalStreamsFootprint, Memory::CacheLineSize); // alloc or grow existing buffer + if (rawDataPtr == null) + { + PK_FREE(mesh.m_RawSkinnedData); + mesh.m_RawSkinnedData = null; + mesh.m_Positions = TStridedMemoryView(); + mesh.m_Normals = TStridedMemoryView(); + mesh.m_Tangents = TStridedMemoryView(); + mesh.m_OldPositions = TStridedMemoryView(); + mesh.m_Velocities = TStridedMemoryView(); + return false; + } + + mesh.m_RawSkinnedDataElementCount = vertexCount; + mesh.m_RawSkinnedData = rawDataPtr; + + // build views into the memory we just (re)allocated: + mesh.m_Positions = TStridedMemoryView(static_cast(Mem::AdvanceRawPointer(mesh.m_RawSkinnedData, offsetPos)), vertexCount, sizeof(CFloat4)); + mesh.m_Normals = TStridedMemoryView(static_cast(Mem::AdvanceRawPointer(mesh.m_RawSkinnedData, offsetNor)), vertexCount, sizeof(CFloat4)); + mesh.m_Tangents = TStridedMemoryView(static_cast(Mem::AdvanceRawPointer(mesh.m_RawSkinnedData, offsetTan)), vertexCount, sizeof(CFloat4)); + mesh.m_OldPositions = TStridedMemoryView(static_cast(Mem::AdvanceRawPointer(mesh.m_RawSkinnedData, offsetOld)), vertexCount, sizeof(CFloat4)); + mesh.m_Velocities = TStridedMemoryView(static_cast(Mem::AdvanceRawPointer(mesh.m_RawSkinnedData, offsetVel)), vertexCount, sizeof(CFloat4)); + + mesh.m_SampleSourceOverride.m_PositionsOverride = TStridedMemoryView(); + mesh.m_SampleSourceOverride.m_NormalsOverride = TStridedMemoryView(); + mesh.m_SampleSourceOverride.m_TangentsOverride = TStridedMemoryView(); + mesh.m_SampleSourceOverride.m_VelocitiesOverride = TStridedMemoryView(); + } + + if (samplingChannels & Channel_Position) + mesh.m_SampleSourceOverride.m_PositionsOverride = mesh.m_Positions; + + if (samplingChannels & Channel_Velocity) + mesh.m_SampleSourceOverride.m_VelocitiesOverride = mesh.m_Velocities; + + if (samplingChannels & Channel_Normal) + mesh.m_SampleSourceOverride.m_NormalsOverride = mesh.m_Normals; + + if (samplingChannels & Channel_Tangent) + mesh.m_SampleSourceOverride.m_TangentsOverride = mesh.m_Tangents; + + PK_ASSERT(mesh.m_RawSkinnedData != null); + + // copy source vertex-buffer streams to dst + // Note: here we only copy the tangents. the 'w' components of the tangents will not be touched by the skinner, and have to be valid in the dst streams + // (this might change in the future, where no initial copy necessary at all) +#ifdef PK_SAMPLE_SKIN_TANGENTS + TStridedMemoryView srcVbTangents = srcVStream.Tangents(); + PK_ASSERT(srcVbTangents.Count() == srcVStream.VertexCount()); + PK_ASSERT(srcVbTangents.Count() == mesh.m_RawSkinnedDataElementCount); + PK_ASSERT(mesh.m_Tangents.Stride() == sizeof(CFloat4)); + + if (srcVbTangents.Stride() == mesh.m_Tangents.Stride()) + { + // common-case fast-path + Mem::Copy(mesh.m_Tangents.Data(), srcVbTangents.Data(), mesh.m_RawSkinnedDataElementCount * sizeof(CFloat4)); + } + else + { + // do a slow copy (should not happen, except if we've got AOS VBs (we shouldn't, skinner will take a monstruous perf hit) + for (u32 i = 0; i < mesh.m_RawSkinnedDataElementCount; i++) + mesh.m_Tangents[i] = srcVbTangents[i]; + } +#endif + } + + return true; +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMesh::Play(const PSkeletonAnimationInstance &animInstance) +{ + if (m_SkeletonState != null) + { + if (m_SkeletonState->__TMP_GORE_PlayAnim(animInstance) == null) // FIXME: gore + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +void CSkinnedMesh::Stop() +{ + if (m_SkeletonState != null) + m_SkeletonState->__TMP_GORE_StopAnim(); // FIXME: gore +} + +//---------------------------------------------------------------------------- + +void CSkinnedMesh::Update(float dt) +{ + m_Timeline.Update(dt); + if (m_SkeletonState != null) + m_SkeletonState->Update(dt); +} + +//---------------------------------------------------------------------------- + +#if 0 +void CSkinnedMesh::Render() +{ + m_Renderer.AnimMesh(m_Positions); + m_Renderer.Render(); +} +#endif + +//---------------------------------------------------------------------------- + +void CSkinnedMesh::StartAsyncUpdateSkin(float dt) +{ + if (m_SkeletonState == null) + return; + + const u32 samplingChannels = SamplingChannels(); + if (samplingChannels & Channel_Velocity) + m_SkinDt = dt; + + for (auto &mesh : m_SubMeshes) + { + if (mesh.Empty()) + continue; + + SSkinContext asyncSkinContext; + + const CMeshVStream *vStream = &mesh.m_SkeletalMesh->RawMesh()->TriangleBatch().m_VStream; + + asyncSkinContext.m_SkinningStreams = mesh.m_SkeletalMesh->m_OptimizedStreams; + + // Skinner always expects positions, even if the effect won't be sampling them + asyncSkinContext.m_SrcPositions = vStream->Positions(); + asyncSkinContext.m_DstPositions = mesh.m_Positions; + + // The rendering may need normals (in fact, the most of the cases) + //if (samplingChannels & Channel_Normal) + { + asyncSkinContext.m_SrcNormals = vStream->Normals(); + asyncSkinContext.m_DstNormals = mesh.m_Normals; + } + + // The rendering may need tangents (not for now, as skined mesh does not have normal-map) + // for tangents, they are in fact a CFloat4 stream, with the 'w' component containing a sign telling if the tangent basis is mirrored. + // we are only interested in skinning the float3 part, and we need to keep the 'w' component intact for correct tangent-space reconstruction in the shaders. + if (samplingChannels & Channel_Tangent) + { + asyncSkinContext.m_SrcTangents = vStream->Tangents(); + asyncSkinContext.m_DstTangents = mesh.m_Tangents; + } + + if (samplingChannels & Channel_Velocity) + { + // hook our pre-skin callback where we'll copy the positions to m_OldPositions so that the skin job can correctly + // differentiate the two and compute the instantaneous mesh surface velocities using 'asyncSkinContext.m_SrcDt' + asyncSkinContext.m_CustomProcess_PreSkin = SSkinContext::CbCustomProcess(&mesh, &SSubMesh::Skin_PreProcess); + asyncSkinContext.m_CustomProcess_PostSkin = SSkinContext::CbCustomProcess(&mesh, &SSubMesh::Skin_PostProcess); + } + + asyncSkinContext.m_SkinFlags = SkinFlags_UseMultipassSkinning; + // If you handle unskinned verts in the PostSkin pass, you can set the following flag, + // it'll avoid unnecessary copies in the skinner jobs: +// asyncSkinContext.m_SkinFlags = SkinFlags_DontCopyUnskinnedVerts; + + mesh.m_SkinDt = m_SkinDt; + mesh.m_FirstFrame = m_FirstFrame; + + CSkeletalSkinnerSimple::AsyncSkinStart(mesh.m_SkinUpdateContext, m_SkeletonState->View(), asyncSkinContext); + } +} + +//---------------------------------------------------------------------------- + +void CSkinnedMesh::SSubMesh::Skin_PreProcess(u32 vertexStart, u32 vertexCount, const SSkinContext &ctx) +{ + (void)ctx; + if (m_SkeletonState == null) + return; + + TStridedMemoryView src = m_Positions.Slice(vertexStart, vertexCount); + TStridedMemoryView dst = m_OldPositions.Slice(vertexStart, vertexCount); + + PK_ASSERT(src.Stride() == 0x10 && dst.Stride() == 0x10); + Mem::Copy(dst.Data(), src.Data(), dst.Count() * dst.Stride()); +} + +//---------------------------------------------------------------------------- + +void CSkinnedMesh::SSubMesh::Skin_PostProcess(u32 vertexStart, u32 vertexCount, const SSkinContext &ctx) +{ + if (m_SkeletonState == null) + return; + + PK_SCOPEDPROFILE(); // record this function in the visual profiler + + // compute instantaneous surface velocities IFN: + TStridedMemoryView vel = m_Velocities.Slice(vertexStart, vertexCount); + TStridedMemoryView posCur = ctx.m_DstPositions.Slice(vertexStart, vertexCount); + TStridedMemoryView posOld = m_OldPositions.Slice(vertexStart, vertexCount); + const float dt = m_SkinDt; + + const bool continuousAnim = true;//(m_Skeleton != null) && (m_Skeleton->LastUpdateFrameID() == m_LastSkinnedSkeletonFrameID + 1); + if ((m_FirstFrame || !continuousAnim) && !vel.Empty()) + { + Mem::Clear(vel.Data(), vel.CoveredBytes()); + + PK_ASSERT(posCur.Stride() == posOld.Stride()); + PK_ASSERT(posCur.Count() == posOld.Count()); + PK_ASSERT(posCur.CoveredBytes() == posOld.CoveredBytes()); + if (m_FirstFrame) + { + // Avoid glitches during the first frame: our old positions will be the bindpose, + // we don't want particles to lerp between bindpose and first real frame + Mem::Copy((void*)posOld.Data(), posCur.Data(), posOld.CoveredBytes()); + } + } + else if (!posCur.Empty() && !posOld.Empty() && !vel.Empty()) + { + PK_ASSERT(posCur.Stride() == 0x10); + PK_ASSERT(posOld.Stride() == 0x10); + PK_ASSERT(vel.Stride() == 0x10); + + CFloat3 * __restrict dstVel = vel.Data(); + const CFloat3 *dstVelEnd = Mem::AdvanceRawPointer(dstVel, vertexCount * 0x10); + const CFloat3 *srcPosCur = posCur.Data(); + const CFloat3 *srcPosOld = posOld.Data(); + + PK_ASSERT(Mem::IsAligned<0x10>(dstVel)); + PK_ASSERT(Mem::IsAligned<0x10>(dstVelEnd)); + PK_ASSERT(Mem::IsAligned<0x10>(srcPosCur)); + PK_ASSERT(Mem::IsAligned<0x10>(srcPosOld)); + + const SIMD::Float4 invDt = SIMD::Float4(1.0f / dt); + dstVelEnd = Mem::AdvanceRawPointer(dstVelEnd, -0x40); + while (dstVel < dstVelEnd) + { + const SIMD::Float4 pA0 = SIMD::Float4::LoadAligned16(srcPosOld, 0x00); + const SIMD::Float4 pA1 = SIMD::Float4::LoadAligned16(srcPosOld, 0x10); + const SIMD::Float4 pA2 = SIMD::Float4::LoadAligned16(srcPosOld, 0x20); + const SIMD::Float4 pA3 = SIMD::Float4::LoadAligned16(srcPosOld, 0x30); + const SIMD::Float4 pB0 = SIMD::Float4::LoadAligned16(srcPosCur, 0x00); + const SIMD::Float4 pB1 = SIMD::Float4::LoadAligned16(srcPosCur, 0x10); + const SIMD::Float4 pB2 = SIMD::Float4::LoadAligned16(srcPosCur, 0x20); + const SIMD::Float4 pB3 = SIMD::Float4::LoadAligned16(srcPosCur, 0x30); + const SIMD::Float4 v0 = (pB0 - pA0) * invDt; + const SIMD::Float4 v1 = (pB1 - pA1) * invDt; + const SIMD::Float4 v2 = (pB2 - pA2) * invDt; + const SIMD::Float4 v3 = (pB3 - pA3) * invDt; + v0.StoreAligned16(dstVel, 0x00); + v1.StoreAligned16(dstVel, 0x10); + v2.StoreAligned16(dstVel, 0x20); + v3.StoreAligned16(dstVel, 0x30); + + dstVel = Mem::AdvanceRawPointer(dstVel, 0x40); + srcPosCur = Mem::AdvanceRawPointer(srcPosCur, 0x40); + srcPosOld = Mem::AdvanceRawPointer(srcPosOld, 0x40); + } + dstVelEnd = Mem::AdvanceRawPointer(dstVelEnd, +0x40); + + while (dstVel < dstVelEnd) + { + const SIMD::Float4 pA = SIMD::Float4::LoadAligned16(srcPosOld); + const SIMD::Float4 pB = SIMD::Float4::LoadAligned16(srcPosCur); + const SIMD::Float4 v = (pB - pA) * invDt; + v.StoreAligned16(dstVel); + + dstVel = Mem::AdvanceRawPointer(dstVel, 0x10); + srcPosCur = Mem::AdvanceRawPointer(srcPosCur, 0x10); + srcPosOld = Mem::AdvanceRawPointer(srcPosOld, 0x10); + } + } +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMesh::WaitAsyncUpdateSkin() +{ + if (m_SkeletonState == null) + return true; + + for (auto &mesh : m_SubMeshes) + { + if (mesh.Empty()) + continue; + CAABB dummy; + if (!CSkeletalSkinnerSimple::AsyncSkinWait(mesh.m_SkinUpdateContext, &dummy, true)) + return false; + + if (mesh.m_FirstFrame && !mesh.m_Velocities.Empty()) + Mem::Clear(mesh.m_Velocities.Data(), mesh.m_Velocities.CoveredBytes()); + + mesh.m_FirstFrame = false; + } + + m_FirstFrame = false; + return true; +} + +//---------------------------------------------------------------------------- + +void CSkinnedMesh::ClearVelocities() +{ + for (auto &mesh : m_SubMeshes) + { + if (!mesh.Empty()) + Mem::Clear(mesh.m_Velocities.Data(), mesh.m_Velocities.CoveredBytes()); + } +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_SkinnedMeshInstance.cpp b/AE_GeneralPlugin/Sources/AEGP_SkinnedMeshInstance.cpp new file mode 100644 index 00000000..a2cb4370 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_SkinnedMeshInstance.cpp @@ -0,0 +1,261 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_SkinnedMeshInstance.h" +#include "AEGP_SkinnedMesh.h" + +#include +#include +#include +#include // for random XForms tests +#include // for 'Skin_PostProcess' +#include // for CMeshSurfaceSamplerStructuresRandom && CMeshVolumeSamplerStructuresRandom +// For skinned mesh backdrops +#include +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +CSkinnedMeshInstance::CSkinnedMeshInstance() + : m_SkeletonAnimationInstance(null) + , m_CurrentAnimationPath(CString::EmptyString) + , m_SkinnedMesh(null) + , m_CurMeshTransformScaled(CFloat4x4::IDENTITY) + , m_CurMeshTransform(CFloat4x4::IDENTITY) + , m_PrevMeshTransform(CFloat4x4::IDENTITY) +{ + +} + +//---------------------------------------------------------------------------- + +CSkinnedMeshInstance::~CSkinnedMeshInstance() +{ + if (m_SurfaceSamplingStruct != null) + PK_DELETE(m_SurfaceSamplingStruct); + if (m_VolumeSamplingStruct != null) + PK_DELETE(m_VolumeSamplingStruct); + + // order matters + m_SkeletonAnimationInstance = null; + m_SkinnedMesh = null; + +} + +//---------------------------------------------------------------------------- + +CSkinnedMeshInstance &CSkinnedMeshInstance::operator=(const CSkinnedMeshInstance &other) +{ + if (m_SurfaceSamplingStruct != null) + PK_SAFE_DELETE(m_SurfaceSamplingStruct); + if (m_VolumeSamplingStruct != null) + PK_SAFE_DELETE(m_VolumeSamplingStruct); + + m_CurrentAnimationPath = other.m_CurrentAnimationPath; + m_SkinnedMesh = other.m_SkinnedMesh; + m_ShapeDescOverride = other.m_ShapeDescOverride; + + m_CurMeshTransformScaled = other.m_CurMeshTransformScaled; + m_CurMeshTransform = other.m_CurMeshTransform; + m_PrevMeshTransform = other.m_PrevMeshTransform; + + PK_ASSERT(other.m_SurfaceSamplingStruct == null && + other.m_VolumeSamplingStruct == null); + return *this; +} + +//---------------------------------------------------------------------------- + +void CSkinnedMeshInstance::ResetXForms(const CFloat4x4 &backdropXForm) +{ + SetBackdropXForms(backdropXForm); + +} + +//---------------------------------------------------------------------------- + +void CSkinnedMeshInstance::SetBackdropXForms(const CFloat4x4 &backdropXForm) +{ + m_CurMeshTransform = backdropXForm; + m_PrevMeshTransform = backdropXForm; + m_CurMeshTransformScaled = m_CurMeshTransform; + + // Fix #5336: Scaled mesh backdrops also scale their sampled normals. Should not + // Here we need to remove the scale of the transforms and instead apply it in the mesh descriptor with 'SetScale' + const CFloat3 scale = m_CurMeshTransform.ScalingFactors(); + m_CurMeshTransform.RemoveScale(); + m_PrevMeshTransform.RemoveScale(); + + // Apply scale + if (m_ShapeDescOverride != null) + { + CParticleSamplerDescriptor_Shape_Default *def = checked_cast(m_ShapeDescOverride.Get()); + if (PK_VERIFY(def->m_Shape != null && def->m_Shape->ShapeType() == CShapeDescriptor::ShapeMesh)) + { + CShapeDescriptor_Mesh *shapeDescMesh = const_cast(checked_cast(def->m_Shape.Get())); + if (PK_VERIFY(shapeDescMesh != null)) + shapeDescMesh->SetScale(scale); + } + } +} + +//---------------------------------------------------------------------------- + +void CSkinnedMeshInstance::ResetAnimationCursor() +{ + if (m_SkeletonAnimationInstance != null) + m_SkeletonAnimationInstance->SeekTo(0.0f); +} + +//---------------------------------------------------------------------------- + +void CSkinnedMeshInstance::Update(float dt) +{ + if (m_SkinnedMesh != null) + m_SkinnedMesh->Update(dt); +} + +//---------------------------------------------------------------------------- + +void CSkinnedMeshInstance::StartAsyncUpdateSkin(float dt) +{ + if (m_SkinnedMesh != null) + m_SkinnedMesh->StartAsyncUpdateSkin(dt); +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMeshInstance::WaitAsyncUpdateSkin() +{ + if (m_SkinnedMesh != null) + return m_SkinnedMesh->WaitAsyncUpdateSkin(); + return true; +} + +//---------------------------------------------------------------------------- + +void CSkinnedMeshInstance::ClearSkinnedMesh() +{ + m_SkeletonAnimationInstance = null; + if (m_SkinnedMesh != null) + m_SkinnedMesh->Reset(); +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMeshInstance::LoadSkinnedMeshIFN(const TResourcePtr &meshResource, u32 samplingChannels, const PSkeletonState &scrSkeletonState) +{ + m_SkeletonAnimationInstance = null; + if (meshResource == null) + { + if (m_SkinnedMesh != null) + m_SkinnedMesh->Reset(); + return true; + } + + if (m_SkinnedMesh == null) + { + m_SkinnedMesh = PK_NEW(CSkinnedMesh); + if (m_SkinnedMesh == null) + return false; + } + + if (!m_SkinnedMesh->Init(meshResource, samplingChannels, scrSkeletonState)) + { + m_SkinnedMesh->Reset(); + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMeshInstance::LoadAnimationIFN(HBO::CContext *context, const CString &pksaPath, bool forceReload) +{ + m_SkeletonAnimationInstance = null; + if (m_SkinnedMesh == null || !m_SkinnedMesh->HasGeometry()) + return true; + + if (pksaPath.Empty()) + { + m_SkeletonAnimationInstance = null; + m_CurrentAnimationPath = null; + m_SkinnedMesh->Stop(); + return true; + } + + if (m_SkeletonAnimationInstance == null || m_CurrentAnimationPath != pksaPath) // if not already loaded or different anim + { + m_SkeletonAnimationInstance = CSkeletonAnimationInstance::NewInstance(context, pksaPath, m_SkinnedMesh->SkeletonState().Get(), forceReload); + if (m_SkeletonAnimationInstance == null) + { + CLog::Log(PK_ERROR, "failed loading animation"); + m_SkinnedMesh->Stop(); + return false; + } + + m_CurrentAnimationPath = pksaPath; + } + + // reset playback parameters + m_SkeletonAnimationInstance->SetPlaybackMode(CSkeletonAnimationInstance::Playback_Loop); + m_SkeletonAnimationInstance->SeekTo(0.0f); + m_SkeletonAnimationInstance->SetSpeed(1.0f); + m_SkinnedMesh->Play(m_SkeletonAnimationInstance); + return true; +} + +//---------------------------------------------------------------------------- + +bool CSkinnedMeshInstance::SetupAttributeSampler(CMeshNew *srcMesh, bool weightedSampling, u32 weightedSamplingColorStreamId, u32 weightedSamplingChannelId) +{ + PK_ASSERT(m_SkinnedMesh != null); + CShapeDescriptor_Mesh *shapeDescMesh = PK_NEW(CShapeDescriptor_Mesh); + if (!PK_VERIFY(shapeDescMesh != null)) + return false; + + SSamplerSourceOverride *samplerSourceOverride = null; + const u32 samplingSubMeshId = 0; + if (samplingSubMeshId < m_SkinnedMesh->SubMeshCount()) + samplerSourceOverride = m_SkinnedMesh->SamplerSourceOverride(samplingSubMeshId); + shapeDescMesh->SetMesh(srcMesh, samplerSourceOverride); + + shapeDescMesh->SetScale(m_CurMeshTransformScaled.ScalingFactors()); + + if (weightedSampling) + { + if (m_SurfaceSamplingStruct == null) + m_SurfaceSamplingStruct = PK_NEW(CMeshSurfaceSamplerStructuresRandom); + if (m_SurfaceSamplingStruct != null) + srcMesh->SetupSurfaceSamplingAccelStructs(weightedSamplingColorStreamId, weightedSamplingChannelId, *m_SurfaceSamplingStruct); + + if (m_VolumeSamplingStruct == null) + m_VolumeSamplingStruct = PK_NEW(CMeshVolumeSamplerStructuresRandom); + if (m_VolumeSamplingStruct != null) + srcMesh->SetupVolumeSamplingAccelStructs(*m_VolumeSamplingStruct); + + shapeDescMesh->SetSamplingStructs(m_SurfaceSamplingStruct, m_VolumeSamplingStruct); + } + + PParticleSamplerDescriptor_Shape_Default desc = PK_NEW(CParticleSamplerDescriptor_Shape_Default(shapeDescMesh)); + if (!PK_VERIFY(desc != null)) + { + PK_DELETE(shapeDescMesh); + return false; + } + desc->m_Angular_Velocity = &CFloat3::ZERO; + desc->m_Linear_Velocity = &CFloat3::ZERO; + desc->m_WorldTr_Current = &m_CurMeshTransform; + desc->m_WorldTr_Previous = &m_PrevMeshTransform; + m_ShapeDescOverride = desc; + return true; + +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_System.cpp b/AE_GeneralPlugin/Sources/AEGP_System.cpp new file mode 100644 index 00000000..5c3291c4 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_System.cpp @@ -0,0 +1,276 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- + +#include "ae_precompiled.h" +#include "AEGP_System.h" +#include "AEGP_Define.h" + +#if defined(PK_WINDOWS) +#include "AEGP_WinSystem.h" +#endif + +#include "pk_toolkit/include/pk_toolkit_process.h" + +#if defined(PK_WINDOWS) +# include + +#elif defined(PK_LINUX) || defined(PK_MACOSX) +# include +# include +# include +#endif + +#if defined(PK_LINUX) +# include +#elif defined(PK_MACOSX) +# include +#endif + +#include "AEGP_Log.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- +// HardwareID +//---------------------------------------------------------------------------- + +u16 CSystemHelper::_GetMacHash() +{ + u16 hash = 0; + + //for (const QNetworkInterface &interface : QNetworkInterface::allInterfaces()) + //{ + // if (interface.isValid() && !interface.flags().testFlag(QNetworkInterface::IsLoopBack)) + // { + // const QStringList macAddr = interface.hardwareAddress().split(":"); + // + // for (int i = 0; i < macAddr.length(); ++i) + // hash += (macAddr[i].toInt() << ((i & 1) * 8)); + // } + //} + + return hash; +} + +//---------------------------------------------------------------------------- + +#if defined(PK_LINUX) +static void _getCpuid(u32 *p, u32 ax) +{ + __asm __volatile + ("movl %%ebx, %%esi\n\t" + "cpuid\n\t" + "xchgl %%ebx, %%esi" + : "=a" (p[0]), "=S" (p[1]), + "=c" (p[2]), "=d" (p[3]) + : "0" (ax) + ); +} +#endif + +//---------------------------------------------------------------------------- + +u16 CSystemHelper::_GetCPUHash() +{ + u16 hash = 0; + +#if defined(PK_WINDOWS) + int cpuinfo[4] = { 0, 0, 0, 0 }; + + __cpuid(cpuinfo, 0); + + u16 *ptr = (u16*)(&cpuinfo[0]); + for (u32 i = 0; i < 8; i++) + hash += ptr[i]; + +#elif defined(PK_LINUX) + + u32 cpuinfo[4] = { 0, 0, 0, 0 }; + + _getCpuid(cpuinfo, 0); + + u32 *ptr = (&cpuinfo[0]); + + for (u32 i = 0; i < 4; i++) + hash += (ptr[i] & 0xFFFF) + (ptr[i] >> 16); + +#elif defined(PK_MACOSX) + + const NXArchInfo *info = NXGetLocalArchInfo(); + + hash += u16(info->cputype); + hash += u16(info->cpusubtype); + +#else + PK_ASSERT_NOT_REACHED(); +#endif + + return hash; +} + +//---------------------------------------------------------------------------- + +const char *CSystemHelper::_GetMachineName() +{ +#if defined(PK_WINDOWS) + static char computerName[1024]; + DWORD size = 1024; + + GetComputerName(computerName, &size); + + return computerName; + +#elif defined(PK_LINUX) || defined(PK_MACOSX) + static struct utsname u; + + if (uname(&u) < 0) + return "unknown"; + + return u.nodename; +#else + PK_ASSERT_NOT_REACHED(); +#endif +} + +//---------------------------------------------------------------------------- + +static const u16 kSmearMask[3] = { 0x4e25, 0xf4a1, 0x5437 }; + +//---------------------------------------------------------------------------- + +void CSystemHelper::_Smear(u16 *id) +{ + for (u32 i = 0; i < 3; i++) + { + for (u32 j = i; j < 3; j++) + { + if (i != j) + id[i] ^= id[j]; + } + } + + for (u32 i = 0; i < 3; i++) + id[i] ^= kSmearMask[i]; +} + +//---------------------------------------------------------------------------- + +void CSystemHelper::_Unsmear(u16 *id) +{ + for (u32 i = 0; i < 3; i++) + id[i] ^= kSmearMask[i]; + + for (u32 i = 0; i < 3; i++) + { + for (u32 j = 0; j < i; j++) + { + if (i != j) + id[2 - i] ^= id[2 - j]; + } + } +} + +//---------------------------------------------------------------------------- + +u16 *CSystemHelper::_ComputeSystemUniqueId() +{ + static u16 id[3]; + static bool computed = false; + + if (!computed) + { + id[0] = _GetCPUHash(); + id[2] = _GetMacHash(); + id[1] = id[0] + id[2]; + + _Smear(id); + + computed = true; + } + + return id; +} + +//---------------------------------------------------------------------------- + +const CString CSystemHelper::GetUniqueHardwareID() +{ + CString hId; + + u16 *id = _ComputeSystemUniqueId(); + for (u32 i = 0; i < 3; i++) + hId += CString::Format("%04x", id[i]); + + return hId.ToUppercase(); +} + +//---------------------------------------------------------------------------- + +const CString CSystemHelper::GetUniqueHardwareIDForHuman() +{ + CString hId = _GetMachineName(); + + u16 *id = _ComputeSystemUniqueId(); + for (u32 i = 0; i < 3; i++) + hId += CString::Format("-%04x", id[i]); + + return hId.ToUppercase(); +} + +bool CSystemHelper::LaunchEditorAsPopup() +{ + SEngineVersion version{ PK_VERSION_MAJOR, PK_VERSION_MINOR, PK_VERSION_PATCH, PK_VERSION_REVID }; +#if defined(PK_WINDOWS) + SEditorExecutable application = CWinSystemHelper::GetMatchingEditor(version); +#else + SEditorExecutable application; +#endif + if (application.m_BinaryPath.Empty()) + { + return CAELog::TryLogErrorWindows("No installed versions of the PopcornFX editor were found\nPlease visit: https://auth.popcornfx.com/ws/latest?channel=pkfx-stable&v=2 and download the latest PopcornFX editor"); + } + + CProcess process; + + TArray commandline; + + if (!commandline.PushBack("--aeass").Valid()) + return false; + if (!commandline.PushBack("toto").Valid()) + return false; + if (!process.Start(application.m_BinaryPath, commandline, true)) + { + return CAELog::TryLogErrorWindows("No installed versions of the PopcornFX editor were found\nPlease visit: https://auth.popcornfx.com/ws/latest?channel=pkfx-stable&v=2 and download the latest PopcornFX editor"); + } + CString output; + +#if defined(PK_WINDOWS) + TArray errorIgnoreList; + errorIgnoreList.PushBack(ERROR_NO_MORE_FILES); +#endif + + process.WaitForExit(); + + output = process.GetProcessStandardOutput(); + if (output != null && !output.Empty()) + { + CLog::Log(PK_INFO, "%s", output.Data()); + output.Clear(); + } + else + { +#if defined(PK_WINDOWS) + CString errorstr = CWinSystemHelper::GetLastErrorAsString(errorIgnoreList); + if (!errorstr.Empty()) + { + CLog::Log(PK_INFO, "%s", errorstr.Data()); + return false; + } +#endif + } + return true; +} + +//---------------------------------------------------------------------------- +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_UpdateAEState.cpp b/AE_GeneralPlugin/Sources/AEGP_UpdateAEState.cpp new file mode 100644 index 00000000..392d0dac --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_UpdateAEState.cpp @@ -0,0 +1,1233 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_UpdateAEState.h" + +#include "AEGP_World.h" +#include "AEGP_LayerHolder.h" +#include "AEGP_AEPKConversion.h" + +#include + +#include + +__AEGP_PK_BEGIN + + +int CAEUpdater::s_AttributeIndexes[__Attribute_Parameters_Count]; +int CAEUpdater::s_EmitterIndexes[__Effect_Parameters_Count]; +int CAEUpdater::s_SamplerIndexes[__AttributeSamplerType_Parameters_Count]; + +//---------------------------------------------------------------------------- + +CAEUpdater::CAEUpdater() +{ +} + +//---------------------------------------------------------------------------- + +CAEUpdater::~CAEUpdater() +{ +} + +//---------------------------------------------------------------------------- + +A_Err CAEUpdater::UpdateLayerAtTime(SLayerHolder *targetLayer, float time, bool isSeeking /*=false*/) +{ + s32 targetTime = (s32)(time * (float)targetLayer->m_TimeScale); + s32 toEndOfFrame = targetTime % targetLayer->m_TimeStep; + A_Time AETime; + + if (targetTime < 0) + AETime.value = 0; + else if ((u32)toEndOfFrame > (targetLayer->m_TimeStep / 2)) + AETime.value = targetTime + (targetLayer->m_TimeStep - toEndOfFrame); // Round to next frame + else + AETime.value = targetTime - toEndOfFrame; // Round to previous frame + AETime.scale = targetLayer->m_TimeScale; + return _UpdateLayerAtTime(targetLayer, AETime, isSeeking); +} + +//---------------------------------------------------------------------------- + +A_Err CAEUpdater::_UpdateLayerAtTime(SLayerHolder *targetLayer, A_Time &AETime, bool isSeeking /*=false*/) +{ + PK_ASSERT(targetLayer != null); + + PK_SCOPEDPROFILE(); + + A_Err frameAborted = A_Err_NONE; + CFloat4x4 viewMatrix; + CFloat4 cameraPos; + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + + float cameraZoom = 0.f; + GetCameraViewMatrixAtTime(targetLayer, viewMatrix, cameraPos, AETime, cameraZoom); + targetLayer->m_Scene->SetCameraViewMatrix(viewMatrix, cameraPos, cameraZoom); + + A_long effectCount = 0; + + frameAborted |= suites.EffectSuite4()->AEGP_GetLayerNumEffects(targetLayer->m_EffectLayer, &effectCount); + + for (A_long j = effectCount - 1; j >= 0; --j) + { + AEGP_EffectRefH effectRef = null; + AEGP_InstalledEffectKey installedKey; + + frameAborted |= suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(PKFXWorld.GetPluginID(), targetLayer->m_EffectLayer, j, &effectRef); + frameAborted |= suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(effectRef, &installedKey); + + if (installedKey == PKFXWorld.GetPluginEffectKey(EPKChildPlugins::EMITTER)) + { + frameAborted |= _UpdateEmitterAtTime(targetLayer, effectRef, AETime, isSeeking); + if (frameAborted != A_Err_NONE) + return frameAborted; + } + else if (installedKey == PKFXWorld.GetPluginEffectKey(EPKChildPlugins::ATTRIBUTE)) + { + CStringId id = PKFXWorld.GetAttributeID(effectRef); + if (targetLayer->m_SpawnedAttributes.Contains(id)) + { + SPendingAttribute *attribute = targetLayer->m_SpawnedAttributes[id]; + + PK_ASSERT(attribute != null); + frameAborted |= _UpdateAttributeAtTime(targetLayer, attribute, effectRef, AETime, isSeeking); + if (frameAborted != A_Err_NONE) + return frameAborted; + } + } + else if (installedKey == PKFXWorld.GetPluginEffectKey(EPKChildPlugins::SAMPLER)) + { + CStringId id = PKFXWorld.GetAttributeSamplerID(effectRef); + if (targetLayer->m_SpawnedAttributesSampler.Contains(id)) + { + SPendingAttribute *smplr = targetLayer->m_SpawnedAttributesSampler[id]; + + PK_ASSERT(smplr != null); + PK_ASSERT(smplr->m_Desc != null); + + SAttributeSamplerDesc *samplerDescriptor = static_cast(smplr->m_Desc); + + if (smplr->m_PKDesc == null) + { + switch (samplerDescriptor->m_Type) + { + case AttributeSamplerType_Geometry: + smplr->m_PKDesc = PK_NEW(SSamplerShape); + break; + case AttributeSamplerType_Text: + smplr->m_PKDesc = PK_NEW(SSamplerText); + break; + case AttributeSamplerType_Image: + smplr->m_PKDesc = PK_NEW(SSamplerImage); + break; + case AttributeSamplerType_Audio: + { + SSamplerAudio *sampler = PK_NEW(SSamplerAudio); + smplr->m_PKDesc = sampler; + sampler->m_Name = CStringId(((SAudioSamplerDescriptor*)samplerDescriptor->m_Descriptor)->m_ChannelGroup.c_str()); + break; + } + case AttributeSamplerType_VectorField: + smplr->m_PKDesc = PK_NEW(SSamplerVectorField); + break; + default: + break; + } + } + PK_ASSERT(smplr->m_PKDesc != null); + frameAborted |= _UpdateSamplerAtTime(targetLayer, smplr, effectRef, AETime, isSeeking); + if (frameAborted != A_Err_NONE) + return frameAborted; + } + } + frameAborted |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + if (!PK_VERIFY(frameAborted == A_Err_NONE)) + return frameAborted; + if (!targetLayer->m_Scene->UpdateAttributes(targetLayer)) + return A_Err_GENERIC; + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +bool CAEUpdater::GetCameraViewMatrixAtTime(SLayerHolder *layer, CFloat4x4 &view, CFloat4 &pos, A_Time &AETime, float &cameraZoom) +{ + PK_SCOPEDPROFILE(); + + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + AEGP_LayerH camera_layerH = null; + A_Matrix4 matrix; + PF_Err result = A_Err_NONE; + CFloat4x4 viewMatrix = CFloat4x4::IDENTITY; + SEmitterDesc *emitter = layer->m_SpawnedEmitter.m_Desc; + + camera_layerH = layer->m_CameraLayer; + if (!result && camera_layerH) + { + result |= suites.LayerSuite5()->AEGP_GetLayerToWorldXform(camera_layerH, &AETime, &matrix); + if (!result) + { + emitter->m_Camera.m_AECameraPresent = true; + AEGP_StreamVal stream_val; + AEFX_CLR_STRUCT(stream_val); + + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(camera_layerH, + AEGP_LayerStream_ZOOM, + AEGP_LTimeMode_CompTime, + &AETime, + FALSE, + &stream_val, + null); + cameraZoom = (float)stream_val.one_d; + AAEToPK(matrix, viewMatrix); + + pos = viewMatrix.WAxis(); +#if defined(PK_SCALE_DOWN) + pos.xyz() = pos.xyz() / layer->m_ScaleFactor; + viewMatrix.WAxis() = pos; +#endif + viewMatrix.Invert(); + view = viewMatrix; + } + } + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAEUpdater::_SetupAudioSampler(SLayerHolder *targetLayer, AEGP_LayerIDVal layerID, A_Time &AETime, SSamplerAudio *samplerAudio, bool isSeeking) +{ + (void)isSeeking; + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + A_Err frameAborted = A_Err_NONE; + + if (layerID != AEGP_LayerIDVal_NONE) + { + AEGP_LayerH layer; + AEGP_CompH compH; + AEGP_ItemH layerItem = null; + AEGP_SoundDataFormat soundFormat; + AEGP_SoundDataH soundData = null; + A_Time duration; + A_Time layerTime; + + frameAborted |= suites.LayerSuite5()->AEGP_GetLayerParentComp(targetLayer->m_EffectLayer, &compH); + frameAborted |= suites.LayerSuite7()->AEGP_GetLayerFromLayerID(compH, layerID, &layer); + frameAborted |= suites.LayerSuite5()->AEGP_GetLayerSourceItem(layer, &layerItem); + frameAborted |= suites.LayerSuite5()->AEGP_ConvertCompToLayerTime(layer, &AETime, &layerTime); + + if (layerItem == null) + return false; + + soundFormat.encoding = AEGP_SoundEncoding_FLOAT; + soundFormat.num_channelsL = 1; + soundFormat.sample_rateF = 48000.0; + + // We compute the expected timestep to get 2048 values (We are using 2x the number of samples in the PopcornFX editor to get proper spectrum analysis): + A_FpLong secondsToSample = 2048.0 / soundFormat.sample_rateF; + + duration.value = static_cast(secondsToSample * static_cast(targetLayer->m_TimeScale)) + 1; + duration.scale = targetLayer->m_TimeScale; + frameAborted |= suites.RenderSuite5()->AEGP_RenderNewItemSoundData(layerItem, &layerTime, &duration, &soundFormat, null, null, &soundData); + + if (soundData != null) + { + void *audioSamples; + A_long numSamples = 0; + + frameAborted |= suites.SoundDataSuite1()->AEGP_LockSoundDataSamples(soundData, &audioSamples); + frameAborted |= suites.SoundDataSuite1()->AEGP_GetNumSamples(soundData, &numSamples); + + if (!PK_VERIFY(frameAborted == A_Err_NONE)) + { + frameAborted |= suites.SoundDataSuite1()->AEGP_UnlockSoundDataSamples(soundData); + frameAborted |= suites.SoundDataSuite1()->AEGP_DisposeSoundData(soundData); + } + else + { + samplerAudio->m_SoundData = soundData; + // Align to the previous power of 2: + const int alignedSampleCount = 1 << IntegerTools::Log2(numSamples); + samplerAudio->m_InputSampleCount = alignedSampleCount; + samplerAudio->m_Waveform = (float*)audioSamples; + samplerAudio->m_Dirty = true; + return true; + } + } + } + samplerAudio->m_SoundData = null; + samplerAudio->m_InputSampleCount = 0; + samplerAudio->m_Waveform = null; + return false; +} + +//---------------------------------------------------------------------------- + +A_Err CAEUpdater::_UpdateSamplerAtTime(SLayerHolder *targetLayer, SPendingAttribute *sampler, AEGP_EffectRefH effectRef, A_Time &AETime, bool isSeeking /*=false*/) +{ + if (sampler == null || sampler->m_Desc == null) + return A_Err_NONE; + PK_SCOPEDPROFILE(); + A_Err frameAborted = A_Err_NONE; + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + SAttributeSamplerDesc *samplerDescriptor = static_cast(sampler->m_Desc); + SBaseSamplerDescriptor *AEdescriptor = samplerDescriptor->m_Descriptor; + SSamplerBase *PKdescriptor = sampler->m_PKDesc; + + if (!PK_VERIFY(AEdescriptor != null)) + return A_Err_GENERIC; + + switch (samplerDescriptor->m_Type) + { + case AttributeSamplerType_Geometry: + { + SShapeSamplerDescriptor *shapeDescriptor = static_cast(AEdescriptor); + ESamplerShapeType shapeType; + double value; + double dimension[3] = { 0.0, 0.0, 0.0 }; + + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Shapes, effectRef, AETime, value); + shapeType = (ESamplerShapeType)(int)(value - 1); // Because AE Popup are weird. + + if (shapeType == SamplerShapeType_Box) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Box_Size_X, effectRef, AETime, dimension[0]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Box_Size_Y, effectRef, AETime, dimension[1]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Box_Size_Z, effectRef, AETime, dimension[2]); + } + else if (shapeType == SamplerShapeType_Sphere) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Sphere_Radius, effectRef, AETime, dimension[0]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Sphere_InnerRadius, effectRef, AETime, dimension[1]); + } + else if (shapeType == SamplerShapeType_Ellipsoid) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Ellipsoid_Radius, effectRef, AETime, dimension[0]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Ellipsoid_InnerRadius, effectRef, AETime, dimension[1]); + } + else if (shapeType == SamplerShapeType_Cylinder) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Cylinder_Radius, effectRef, AETime, dimension[0]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Cylinder_Height, effectRef, AETime, dimension[1]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Cylinder_InnerRadius, effectRef, AETime, dimension[2]); + } + else if (shapeType == SamplerShapeType_Capsule) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Capsule_Radius, effectRef, AETime, dimension[0]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Capsule_Height, effectRef, AETime, dimension[1]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Capsule_InnerRadius, effectRef, AETime, dimension[2]); + } + else if (shapeType == SamplerShapeType_Cone) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Cone_Radius, effectRef, AETime, dimension[0]); + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Cone_Height, effectRef, AETime, dimension[1]); + } + else if (shapeType == SamplerShapeType_Mesh) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Mesh_Scale, effectRef, AETime, dimension[0]); + } + shapeDescriptor->m_Type = shapeType; + shapeDescriptor->m_Dimension[0] = (float)dimension[0]; + shapeDescriptor->m_Dimension[1] = (float)dimension[1]; + shapeDescriptor->m_Dimension[2] = (float)dimension[2]; + if (shapeType == SamplerShapeType_Mesh) + { + if (shapeDescriptor->m_Path.compare(samplerDescriptor->m_ResourcePath)) + { + shapeDescriptor->m_Path = samplerDescriptor->m_ResourcePath; + PKdescriptor->m_Dirty = true; + } + + double doubleValue; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Mesh_Bind_Backdrop, effectRef, AETime, doubleValue); + shapeDescriptor->m_BindToBackdrop = (bool)doubleValue; + if (shapeDescriptor->m_BindToBackdrop) + { + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_Weighted_Enabled, effectRef, AETime, doubleValue); + shapeDescriptor->m_WeightedSampling = (bool)doubleValue; + + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_ColorStreamID, effectRef, AETime, doubleValue); + shapeDescriptor->m_ColorStreamID = (unsigned int)doubleValue; + + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_WeightStreamID, effectRef, AETime, doubleValue); + shapeDescriptor->m_WeightStreamID = (unsigned int)doubleValue; + } + targetLayer->m_Scene->SetSkinnedBackdropParams(shapeDescriptor->m_BindToBackdrop, shapeDescriptor->m_WeightedSampling, shapeDescriptor->m_ColorStreamID, shapeDescriptor->m_WeightStreamID); + + } + else + PKdescriptor->m_Dirty = true; + break; + } + case AttributeSamplerType_Text: + { + STextSamplerDescriptor *textDesc = static_cast(AEdescriptor); + + AEGP_LayerIDVal layerID; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Pick, effectRef, AETime, layerID); + + if (layerID != AEGP_LayerIDVal_NONE) + { + AEGP_LayerH textLayer; + AEGP_CompH compH; + + frameAborted |= suites.LayerSuite5()->AEGP_GetLayerParentComp(targetLayer->m_EffectLayer, &compH); + frameAborted |= suites.LayerSuite7()->AEGP_GetLayerFromLayerID(compH, layerID, &textLayer); + + AEGP_StreamValue2 streamValue; + AEGP_StreamType streamType; + AEGP_ObjectType layerType; + AEGP_StreamRefH textStream = null; + + frameAborted |= suites.LayerSuite8()->AEGP_GetLayerObjectType(textLayer, &layerType); + if (!PK_VERIFY(frameAborted == A_Err_NONE) || layerType != AEGP_ObjectType_TEXT) + break; + + frameAborted |= suites.StreamSuite5()->AEGP_GetNewLayerStream(PKFXWorld.GetPluginID(), textLayer, AEGP_LayerStream_SOURCE_TEXT, &textStream); + frameAborted |= suites.StreamSuite5()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), textStream, AEGP_LTimeMode_LayerTime, &AETime, TRUE, &streamValue); + frameAborted |= suites.StreamSuite2()->AEGP_GetStreamType(textStream, &streamType); + if (!PK_VERIFY(frameAborted == A_Err_NONE) || streamType != AEGP_StreamType_TEXT_DOCUMENT) + break; + + AEGP_MemHandle textHandle = null; + frameAborted |= suites.TextDocumentSuite1()->AEGP_GetNewText(PKFXWorld.GetPluginID(), streamValue.val.text_documentH, &textHandle); + + aechar_t *retrievedText; + CString text = ""; + + if (textHandle != null) + { + frameAborted |= suites.MemorySuite1()->AEGP_LockMemHandle(textHandle, reinterpret_cast(&retrievedText)); + + WCharToCString(retrievedText, &text); + + frameAborted |= suites.MemorySuite1()->AEGP_UnlockMemHandle(textHandle); + frameAborted |= suites.MemorySuite1()->AEGP_FreeMemHandle(textHandle); + + textDesc->m_Data = text.Data(); + PKdescriptor->m_Dirty = true; + } + frameAborted |= suites.StreamSuite5()->AEGP_DisposeStreamValue(&streamValue); + frameAborted |= suites.StreamSuite5()->AEGP_DisposeStream(textStream); + } + else + textDesc->m_Data = ""; + break; + } + case AttributeSamplerType_Image: + { + SSamplerImage *pkImageDesc = static_cast(PKdescriptor); + + if (!PK_VERIFY(pkImageDesc != null)) + break; + + double boolValue; + bool sampleOnSeek = false, sampleOnce = false; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Sample_Once, effectRef, AETime, boolValue); + sampleOnce = (bool)boolValue; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Sample_Seeking, effectRef, AETime, boolValue); + sampleOnSeek = (bool)boolValue; + + double intValue; + int downSampleX; + int downSampleY; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Sample_Downsampling_X, effectRef, AETime, intValue); + downSampleX = (int)intValue; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Sample_Downsampling_Y, effectRef, AETime, intValue); + downSampleY = (int)intValue; + + if ((!sampleOnSeek && isSeeking) || + (sampleOnce && pkImageDesc->m_TextureData != null && pkImageDesc->m_TextureData->DataSizeInBytes() != 0)) + { + pkImageDesc->m_Dirty = false; + break; + } + + AEGP_LayerIDVal layerID; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Pick, effectRef, AETime, layerID); + + if (layerID != AEGP_LayerIDVal_NONE) + { + AEGP_LayerH imageLayer; + AEGP_CompH compH; + AEGP_LayerRenderOptionsH renderOptions = null; + AEGP_WorldType worldType = AEGP_WorldType_NONE; + AEGP_FrameReceiptH inputFrame = null; + AEGP_WorldH inputworld = null; + A_Time layerDuration, layerInPoint; + + frameAborted |= suites.LayerSuite5()->AEGP_GetLayerParentComp(targetLayer->m_EffectLayer, &compH); + frameAborted |= suites.LayerSuite7()->AEGP_GetLayerFromLayerID(compH, layerID, &imageLayer); + + frameAborted |= suites.LayerSuite8()->AEGP_GetLayerInPoint(imageLayer, AEGP_LTimeMode_CompTime, &layerInPoint); + frameAborted |= suites.LayerSuite8()->AEGP_GetLayerDuration(imageLayer, AEGP_LTimeMode_CompTime, &layerDuration); + + if (!PK_VERIFY(frameAborted == A_Err_NONE)) + return frameAborted; + + double aeTime = (double)AETime.value / (double)AETime.scale; + double layInPtTime = (double)layerInPoint.value / (double)layerInPoint.scale; + double layDurTime = (double)layerDuration.value / (double)layerDuration.scale; + + if ((aeTime >= layInPtTime) && + (aeTime < (layInPtTime + layDurTime))) + { + A_Time layerTime; + + layerTime.scale = AETime.scale; + layerTime.value = AETime.value - layerInPoint.value; + frameAborted |= suites.LayerRenderOptionsSuite2()->AEGP_NewFromLayer(PKFXWorld.GetPluginID(), imageLayer, &renderOptions); + frameAborted |= suites.LayerRenderOptionsSuite2()->AEGP_GetWorldType(renderOptions, &worldType); + + frameAborted |= suites.LayerRenderOptionsSuite2()->AEGP_SetTime(renderOptions, layerTime); + + frameAborted |= suites.LayerRenderOptionsSuite2()->AEGP_SetDownsampleFactor(renderOptions, (A_short)downSampleX, (A_short)downSampleY); + + if (frameAborted != A_Err_NONE) + return frameAborted; + + // This fails if the frame is cancelled: + frameAborted |= suites.RenderSuite5()->AEGP_RenderAndCheckoutLayerFrame(renderOptions, null, null, &inputFrame); + + if (frameAborted != A_Err_NONE) + return frameAborted; + + frameAborted |= suites.RenderSuite5()->AEGP_GetReceiptWorld(inputFrame, &inputworld); + if (inputworld != null) + { + A_long width, height; + A_u_long rowbyte; + + frameAborted |= suites.WorldSuite3()->AEGP_GetSize(inputworld, &width, &height); + frameAborted |= suites.WorldSuite3()->AEGP_GetRowBytes(inputworld, &rowbyte); + + if (worldType == AEGP_WorldType_32) + { + PF_Pixel32 *worldData = null; + + pkImageDesc->m_PixelFormat = CImage::EFormat::Format_Fp32RGBA; + pkImageDesc->m_Width = width; + pkImageDesc->m_Height = height; + pkImageDesc->m_SizeInBytes = width * height * sizeof(PF_Pixel32); + pkImageDesc->m_TextureData = CRefCountedMemoryBuffer::AllocAligned(pkImageDesc->m_SizeInBytes, 0x10); + + frameAborted |= suites.WorldSuite3()->AEGP_GetBaseAddr32(inputworld, &worldData); + + if (worldData != null) + { + //input is ARGB; + u8 *sptr = (u8*)worldData; + u8 *dptr = (u8*)pkImageDesc->m_TextureData->Data(); + + for (s32 i = 0; i < height; ++i) + { + for (s32 j = 0; j < width; ++j) + { + PF_Pixel32 *dst = (PF_Pixel32*)&(dptr[j * sizeof(PF_Pixel32) + i * width * sizeof(PF_Pixel32)]); + PF_Pixel32 *src = (PF_Pixel32*)&(sptr[j * sizeof(PF_Pixel32) + i * rowbyte]); + + CFloat4 value = CFloat4(PKSample::ConvertSRGBToLinear(CFloat3(src->red, src->green, src->blue)), src->alpha); + + value = PKSaturate(value); + + /*0*/dst->alpha = value.x(); + /*1*/dst->red = value.y(); + /*2*/dst->green = value.z(); + /*3*/dst->blue = value.w(); + } + } + } + } + else if (worldType == AEGP_WorldType_16) + { + PF_Pixel16 *worldData = null; + + pkImageDesc->m_PixelFormat = CImage::EFormat::Format_Fp16RGBA; + pkImageDesc->m_Width = width; + pkImageDesc->m_Height = height; + pkImageDesc->m_SizeInBytes = width * height * sizeof(PF_Pixel16); + pkImageDesc->m_TextureData = CRefCountedMemoryBuffer::AllocAligned(pkImageDesc->m_SizeInBytes, 0x10); + + frameAborted |= suites.WorldSuite3()->AEGP_GetBaseAddr16(inputworld, &worldData); + + if (worldData != null) + { + //input is ARGB; + u8 *sptr = (u8*)worldData; + u8 *dptr = (u8*)pkImageDesc->m_TextureData->Data(); + + for (s32 i = 0; i < height; ++i) + { + for (s32 j = 0; j < width; ++j) + { + PF_Pixel16 *dst = (PF_Pixel16*)&(dptr[j * sizeof(PF_Pixel16) + i * width * sizeof(PF_Pixel16)]); + PF_Pixel16 *src = (PF_Pixel16*)&(sptr[j * sizeof(PF_Pixel16) + i * rowbyte]); + + CFloat4 value = CFloat4(PKSample::ConvertSRGBToLinear(CFloat3(src->red, src->green, src->blue)), src->alpha); + + value = PKSaturate(value); + /*0*/dst->alpha = (A_u_short)value.x(); + /*1*/dst->red = (A_u_short)value.y(); + /*2*/dst->green = (A_u_short)value.z(); + /*3*/dst->blue = (A_u_short)value.w(); + } + } + } + } + else if (worldType == AEGP_WorldType_8) + { + PF_Pixel8 *worldData = null; + + pkImageDesc->m_PixelFormat = CImage::EFormat::Format_BGRA8; + pkImageDesc->m_Width = width; + pkImageDesc->m_Height = height; + pkImageDesc->m_SizeInBytes = width * height * sizeof(PF_Pixel8); + pkImageDesc->m_TextureData = CRefCountedMemoryBuffer::AllocAligned(pkImageDesc->m_SizeInBytes, 0x10); + + frameAborted |= suites.WorldSuite3()->AEGP_GetBaseAddr8(inputworld, &worldData); + + if (worldData != null) + { + //input is ARGB; + u8 *sptr = (u8*)worldData; + u8 *dptr = (u8*)pkImageDesc->m_TextureData->Data(); + + for (s32 i = 0; i < height; ++i) + { + for (s32 j = 0; j < width; ++j) + { + PF_Pixel8 *dst = (PF_Pixel8*)&(dptr[j * sizeof(PF_Pixel8) + i * width * sizeof(PF_Pixel8)]); + PF_Pixel8 *src = (PF_Pixel8*)&(sptr[j * sizeof(PF_Pixel8) + i * rowbyte]); + + CUbyte4 value = CUbyte4(/*PKSample::ConvertSRGBToLinear*/(CUbyte3(src->blue, src->green, src->red)), src->alpha); + + value = PKClamp(value, CUbyte4::ZERO, CUbyte4(255)); + /*0*/dst->alpha = value.x(); + /*1*/dst->red = value.y(); + /*2*/dst->green = value.z(); + /*3*/dst->blue = value.w(); + } + } + } + } + } + + frameAborted |= suites.RenderSuite5()->AEGP_CheckinFrame(inputFrame); + frameAborted |= suites.LayerRenderOptionsSuite2()->AEGP_Dispose(renderOptions); + } + else if (pkImageDesc->m_Width != 1 || pkImageDesc->m_Height != 1) + { + pkImageDesc->m_PixelFormat = CImage::EFormat::Format_BGRA8; + pkImageDesc->m_Width = 1; + pkImageDesc->m_Height = 1; + pkImageDesc->m_SizeInBytes = sizeof(PF_Pixel8); + pkImageDesc->m_TextureData = CRefCountedMemoryBuffer::AllocAligned(pkImageDesc->m_SizeInBytes, 0x10); + + u8 *dptr = (u8*)pkImageDesc->m_TextureData->Data(); + PF_Pixel8 *dst = (PF_Pixel8*)&(dptr[0]); + /*0*/dst->alpha = 0; + /*1*/dst->red = 0; + /*2*/dst->green = 0; + /*3*/dst->blue = 0; + } + + if (!PK_VERIFY(frameAborted == A_Err_NONE)) + break; + pkImageDesc->m_Dirty = true; + } + else if (pkImageDesc->m_Width != 1 || pkImageDesc->m_Height != 1) + { + pkImageDesc->m_PixelFormat = CImage::EFormat::Format_BGRA8; + pkImageDesc->m_Width = 1; + pkImageDesc->m_Height = 1; + pkImageDesc->m_SizeInBytes = sizeof(PF_Pixel8); + pkImageDesc->m_TextureData = CRefCountedMemoryBuffer::AllocAligned(pkImageDesc->m_SizeInBytes, 0x10); + + u8 *dptr = (u8*)pkImageDesc->m_TextureData->Data(); + PF_Pixel8 *dst = (PF_Pixel8*)&(dptr[0]); + /*0*/dst->alpha = 0; + /*1*/dst->red = 0; + /*2*/dst->green = 0; + /*3*/dst->blue = 0; + + pkImageDesc->m_Dirty = true; + } + break; + } + case AttributeSamplerType_Audio: + { + SSamplerAudio *pkAudioDesc = static_cast(PKdescriptor); + + if (!PK_VERIFY(pkAudioDesc != null)) + break; + + double value; + bool sampleOnSeek = false; + + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Sample_Seeking, effectRef, AETime, value); + sampleOnSeek = (bool)value; + + if ((!sampleOnSeek && isSeeking)) + { + pkAudioDesc->m_Dirty = false; + break; + } + AEGP_LayerIDVal layerID; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Layer_Pick, effectRef, AETime, layerID); + _SetupAudioSampler(targetLayer, layerID, AETime, pkAudioDesc, isSeeking); + break; + } + case AttributeSamplerType_VectorField: + { + SVectorFieldSamplerDescriptor *vfDescriptor = static_cast(AEdescriptor); + { + AEGP_StreamRefH streamHandler; + AEGP_StreamValue2 value; + + frameAborted |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, AttributeSamplerType_Parameters_VectorField_Position, &streamHandler); + AEFX_CLR_STRUCT(value); + frameAborted |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + vfDescriptor->m_Position = A_FloatPoint3{ value.val.three_d.x, value.val.three_d.y, value.val.three_d.z }; + frameAborted |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + frameAborted |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + } + double value; + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_VectorField_Strength, effectRef, AETime, value); + vfDescriptor->m_Strength = (float)value; + + frameAborted |= _GetParamsStreamValueAtTime(AttributeSamplerType_Parameters_VectorField_Interpolation, effectRef, AETime, value); + EInterpolationType interpolation = (EInterpolationType)(int)value; + if (vfDescriptor->m_Interpolation != interpolation) + { + vfDescriptor->m_Interpolation = interpolation; + vfDescriptor->m_ResourceUpdate = true; + } + + std::string vectorfieldPath = samplerDescriptor->m_ResourcePath.c_str(); + if (vectorfieldPath != vfDescriptor->m_Path) + vfDescriptor->m_Path = vectorfieldPath; + PKdescriptor->m_Dirty = true; + break; + } + default: + break; + } + return frameAborted; +} + +//---------------------------------------------------------------------------- + +A_Err CAEUpdater::_UpdateAttributeAtTime(SLayerHolder *targetLayer, SPendingAttribute *attribute, AEGP_EffectRefH effectRef, A_Time &AETime, bool isSeeking /*=false*/) +{ + PK_SCOPEDPROFILE(); + (void)targetLayer; + (void)isSeeking; + + A_Err result = A_Err_NONE; + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + + if (attribute->m_Desc && attribute->m_Desc->m_IsAttribute) + { + SAttributeDesc *desc = static_cast(attribute->m_Desc); + if (desc->m_AttributeSemantic == AttributeSemantic_Color) + { + float floatValues[4]; + + AEGP_StreamRefH streamHandler; + AEGP_StreamValue2 value; + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, Attribute_Parameters_Color_RGB, &streamHandler); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + floatValues[0] = (float)value.val.color.redF; + floatValues[1] = (float)value.val.color.greenF; + floatValues[2] = (float)value.val.color.blueF; + + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + + if (desc->m_Type == AttributeType_Float4 || + desc->m_Type == AttributeType_Int4) + { + double floatValue; + result |= _GetParamsStreamValueAtTime(Attribute_Parameters_Color_A, effectRef, AETime, floatValue); + floatValues[3] = (float)(floatValue / 100.0f); + } + if (desc->m_Type >= AttributeType_Int1 && desc->m_Type <= AttributeType_Int4) + { + for (u32 i = 0; i < 4; ++i) + floatValues[i] *= 255; + } + desc->SetValue(&floatValues); + } + else + { + switch (desc->m_Type) + { + case AttributeType_Bool1: + case AttributeType_Bool2: + case AttributeType_Bool3: + case AttributeType_Bool4: + { + bool boolValues[4]; + for (s32 i = 0; i < (desc->m_Type + 1) - AttributeType_Bool1; ++i) + { + double boolValue; + + result |= _GetParamsStreamValueAtTime(AttributeType_Bool1 + i, effectRef, AETime, boolValue); + boolValues[i] = (bool)boolValue; + } + desc->SetValue(&boolValues); + break; + } + case AttributeType_Int1: + case AttributeType_Int2: + case AttributeType_Int3: + case AttributeType_Int4: + { + int intValues[4]; + for (s32 i = 0; i < (desc->m_Type + 1) - AttributeType_Int1; ++i) + { + double intValue; + + result |= _GetParamsStreamValueAtTime(AttributeType_Int1 + i, effectRef, AETime, intValue); + intValues[i] = (int)intValue; + } + desc->SetValue(&intValues); + break; + } + case AttributeType_Float1: + case AttributeType_Float2: + case AttributeType_Float3: + case AttributeType_Float4: + { + float floatValues[4]; + for (s32 i = 0; i < (desc->m_Type + 1) - AttributeType_Float1; ++i) + { + double floatValue; + + result |= _GetParamsStreamValueAtTime(AttributeType_Float1 + i, effectRef, AETime, floatValue); + floatValues[i] = (float)floatValue; + } + desc->SetValue(&floatValues); + break; + } + default: + break; + } + } + } + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return result; +} + + +//---------------------------------------------------------------------------- + +A_Err CAEUpdater::_UpdateEmitterAtTime(SLayerHolder *layer, AEGP_EffectRefH effectRef, A_Time &AETime, bool isSeeking) +{ + PK_SCOPEDPROFILE(); + (void)isSeeking; + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + A_Err result = A_Err_NONE; + AEGP_StreamRefH streamHandler; + AEGP_StreamValue2 value; + SPendingEmitter &emitter = layer->m_SpawnedEmitter; + + if (!PK_VERIFY(effectRef != null)) + { + return A_Err_GENERIC; + } + { //Emitter + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_TransformType], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_TransformType = ((ETransformType)(int)value.val.one_d); + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + + if (emitter.m_Desc->m_TransformType == ETransformType_3D) + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Position], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_Position = A_FloatPoint3{ value.val.three_d.x, value.val.three_d.y, value.val.three_d.z }; +#if defined(PK_SCALE_DOWN) + emitter.m_Desc->m_Position.x = emitter.m_Desc->m_Position.x / layer->m_ScaleFactor; + emitter.m_Desc->m_Position.y = emitter.m_Desc->m_Position.y / layer->m_ScaleFactor; + emitter.m_Desc->m_Position.z = emitter.m_Desc->m_Position.z / layer->m_ScaleFactor; +#endif + layer->m_Scene->SetEmitterPosition(AAEToPK(emitter.m_Desc->m_Position), emitter.m_Desc->m_TransformType); + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + else if (emitter.m_Desc->m_TransformType == ETransformType_2D) + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Position_2D], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + + emitter.m_Desc->m_Position.x = value.val.two_d.x; + emitter.m_Desc->m_Position.y = value.val.two_d.y; + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Position_2D_Distance], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + + emitter.m_Desc->m_Position.z = value.val.one_d; + layer->m_Scene->SetEmitterPosition(AAEToPK(emitter.m_Desc->m_Position), emitter.m_Desc->m_TransformType); + } + } + { + float rotation[3]; + for (u32 i = 0; i < 3; ++i) + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Rotation_X + i], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + rotation[i] = (float)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + emitter.m_Desc->m_Rotation = A_FloatPoint3{ rotation[0], rotation[1], rotation[2] }; + layer->m_Scene->SetEmitterRotation(AngleAAEToPK(emitter.m_Desc->m_Rotation)); + } + } + + { //Camera + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Camera], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Camera_Near], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_Camera.m_Near = (float)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Camera_Far], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_Camera.m_Far = (float)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + + //Background Override + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Background_Toggle], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_IsAlphaBGOverride = (bool)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Background_Opacity], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_AlphaBGOverride = (float)value.val.one_d / 100.0f; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + { //BackdropMesh + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_BackdropMesh_Enable_Rendering], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_BackdropMesh.m_EnableRendering = (int)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_BackdropMesh_Enable_Collisions], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_BackdropMesh.m_EnableCollisions = (int)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_BackdropMesh_Enable_Animation], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_BackdropMesh.m_EnableAnimations = (int)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + + if (emitter.m_Desc->m_BackdropMesh.m_EnableCollisions) + { + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_BackdropMesh_Position], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_BackdropMesh.m_Position = A_FloatPoint3{ value.val.three_d.x, value.val.three_d.y, value.val.three_d.z }; +#if defined(PK_SCALE_DOWN) + emitter.m_Desc->m_BackdropMesh.m_Position.x = emitter.m_Desc->m_BackdropMesh.m_Position.x / layer->m_ScaleFactor; + emitter.m_Desc->m_BackdropMesh.m_Position.y = emitter.m_Desc->m_BackdropMesh.m_Position.y / layer->m_ScaleFactor; + emitter.m_Desc->m_BackdropMesh.m_Position.z = emitter.m_Desc->m_BackdropMesh.m_Position.z / layer->m_ScaleFactor; +#endif + layer->m_Scene->UpdateBackdropTransform(emitter.m_Desc); + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + { + float rotation[3]; + for (u32 i = 0; i < 3; ++i) + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_BackdropMesh_Rotation_X + i], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + rotation[i] = DegToRad((float)value.val.one_d); + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + emitter.m_Desc->m_BackdropMesh.m_Rotation = A_FloatPoint3{ rotation[0], rotation[1], rotation[2] }; + } + { + float scale[3]; + for (u32 i = 0; i < 3; ++i) + { + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_BackdropMesh_Scale_X + i], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, true, &value); + PK_ASSERT(result == A_Err_NONE); + scale[i] = (float)value.val.one_d; + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + emitter.m_Desc->m_BackdropMesh.m_Scale = A_FloatPoint3{ scale[0], scale[1], scale[2] }; + } + } + result |= suites.StreamSuite3()->AEGP_GetNewEffectStreamByIndex(PKFXWorld.GetPluginID(), effectRef, s_EmitterIndexes[Effect_Parameters_Simulation_State], &streamHandler); + PK_ASSERT(result == A_Err_NONE); + AEFX_CLR_STRUCT(value); + result |= suites.StreamSuite3()->AEGP_GetNewStreamValue(PKFXWorld.GetPluginID(), streamHandler, AEGP_LTimeMode_CompTime, &AETime, false, &value); + PK_ASSERT(result == A_Err_NONE); + emitter.m_Desc->m_SimStatePrev = emitter.m_Desc->m_SimState; + emitter.m_Desc->m_SimState = (int)value.val.one_d; + + result |= suites.StreamSuite3()->AEGP_DisposeStreamValue(&value); + PK_ASSERT(result == A_Err_NONE); + result |= suites.StreamSuite3()->AEGP_DisposeStream(streamHandler); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE) + return result; + } + + // Update audio backdrop: + AEGP_LayerIDVal layerID; + CAEUpdater::_GetParamsStreamValueAtTime(s_EmitterIndexes[Effect_Parameters_Audio], effectRef, AETime, layerID); + + if (layer->m_BackdropAudioSpectrum == null) + layer->m_BackdropAudioSpectrum = PK_NEW(SSamplerAudio); + if (layer->m_BackdropAudioWaveform == null) + layer->m_BackdropAudioWaveform = PK_NEW(SSamplerAudio); + + if (!_SetupAudioSampler(layer, layerID, AETime, layer->m_BackdropAudioSpectrum, isSeeking)) + PK_SAFE_DELETE(layer->m_BackdropAudioSpectrum); + if (!_SetupAudioSampler(layer, layerID, AETime, layer->m_BackdropAudioWaveform, isSeeking)) + PK_SAFE_DELETE(layer->m_BackdropAudioWaveform); + if (!PK_VERIFY(result == A_Err_NONE)) + return result; + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +bool CAEUpdater::GetLightsAtTime(SLayerHolder *layer, A_Time &AETime, TArray &lights) +{ + CPopcornFXWorld &PKFXWorld = CPopcornFXWorld::Instance(); + AEGP_SuiteHandler suites(PKFXWorld.GetAESuites()); + A_Err result = A_Err_NONE; + AEGP_CompH compH = null; + AEGP_LayerH layerH = null; + A_long layerNbr = 0; + + A_Boolean layerActive = false; + + result |= suites.LayerSuite5()->AEGP_GetLayerParentComp(layer->m_EffectLayer, &compH); + result |= suites.LayerSuite5()->AEGP_GetCompNumLayers(compH, &layerNbr); + + for (s32 i = 0; i < layerNbr; ++i) + { + AEGP_ObjectType layerType = AEGP_ObjectType_NONE; + + result |= suites.LayerSuite5()->AEGP_GetCompLayerByIndex(compH, i, &layerH); + result |= suites.LayerSuite5()->AEGP_GetLayerObjectType(layerH, &layerType); + + result |= suites.LayerSuite5()->AEGP_IsVideoActive(layerH, AEGP_LTimeMode_CompTime, &AETime, &layerActive); + if (layerType == AEGP_ObjectType_LIGHT && layerActive == (A_Boolean)TRUE) + { + SLightDesc light; + AEGP_LightType type; + AEGP_StreamVal streamValColor, streamValIntensity; + + result |= suites.LightSuite2()->AEGP_GetLightType(layerH, &type); + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_COLOR, AEGP_LTimeMode_CompTime, &AETime, false, &streamValColor, null); + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_INTENSITY, AEGP_LTimeMode_CompTime, &AETime, false, &streamValIntensity, null); + + light.m_Type = type; + light.m_Color.x = streamValColor.color.redF; + light.m_Color.y = streamValColor.color.greenF; + light.m_Color.z = streamValColor.color.blueF; + light.m_Intensity = (float)(streamValIntensity.one_d) / 100.0f; + + if (light.m_Type == AEGP_LightType_PARALLEL) + { + AEGP_StreamVal streamValPos, streamValAnchor; + + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_POSITION, AEGP_LTimeMode_CompTime, &AETime, false, &streamValPos, null); + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_ANCHORPOINT, AEGP_LTimeMode_CompTime, &AETime, false, &streamValAnchor, null); + + CFloat3 direction = { (float)(streamValAnchor.three_d.x - streamValPos.three_d.x), (float)(streamValAnchor.three_d.y - streamValPos.three_d.y), (float)(streamValAnchor.three_d.z - streamValPos.three_d.z) }; + direction.Normalize(); + light.m_Direction = PKToAAE(direction); + } + else if (light.m_Type == AEGP_LightType_SPOT) + { + AEGP_StreamVal streamValPos, streamValAnchor, streamValConeAngle, streamValConeFeather; + + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_POSITION, AEGP_LTimeMode_CompTime, &AETime, false, &streamValPos, null); + CFloat3 position = { (float)(streamValPos.three_d.x), (float)(streamValPos.three_d.y), (float)(streamValPos.three_d.z) }; + light.m_Position = PKToAAE(position); +#if defined(PK_SCALE_DOWN) + light.m_Position.x = light.m_Position.x / layer->m_ScaleFactor; + light.m_Position.y = light.m_Position.y / layer->m_ScaleFactor; + light.m_Position.z = light.m_Position.z / layer->m_ScaleFactor; +#endif + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_ANCHORPOINT, AEGP_LTimeMode_CompTime, &AETime, false, &streamValAnchor, null); + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_CONE_ANGLE, AEGP_LTimeMode_CompTime, &AETime, false, &streamValConeAngle, null); + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_CONE_FEATHER, AEGP_LTimeMode_CompTime, &AETime, false, &streamValConeFeather, null); + + CFloat3 direction = { (float)(streamValAnchor.three_d.x - streamValPos.three_d.x), (float)(streamValAnchor.three_d.y - streamValPos.three_d.y), (float)(streamValAnchor.three_d.z - streamValPos.three_d.z) }; + direction.Normalize(); + light.m_Direction = PKToAAE(direction); + + light.m_Angle = (float)streamValConeAngle.one_d; + light.m_Feather = (float)(streamValConeFeather.one_d / 100.0f); + } + else if (light.m_Type == AEGP_LightType_POINT) + { + AEGP_StreamVal streamValPos; + result |= suites.StreamSuite2()->AEGP_GetLayerStreamValue(layerH, AEGP_LayerStream_POSITION, AEGP_LTimeMode_CompTime, &AETime, false, &streamValPos, null); + + CFloat3 position = { (float)(streamValPos.three_d.x), (float)(streamValPos.three_d.y), (float)(streamValPos.three_d.z) }; + light.m_Position = PKToAAE(position); +#if defined(PK_SCALE_DOWN) + light.m_Position.x = light.m_Position.x / layer->m_ScaleFactor; + light.m_Position.y = light.m_Position.y / layer->m_ScaleFactor; + light.m_Position.z = light.m_Position.z / layer->m_ScaleFactor; +#endif + } + if (!lights.PushBack(light).Valid()) + return false; + } + } + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return true; +} + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_VaultHandler.cpp b/AE_GeneralPlugin/Sources/AEGP_VaultHandler.cpp new file mode 100644 index 00000000..896827c6 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_VaultHandler.cpp @@ -0,0 +1,492 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_VaultHandler.h" + +#include "AEGP_FileWatcher.h" +#include "AEGP_World.h" +#include "AEGP_AEPKConversion.h" +#include "AEGP_Log.h" + +#include "AEGP_AssetBaker.h" + +#if defined(PK_WINDOWS) +# include +#endif + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +__AEGP_PK_BEGIN +//---------------------------------------------------------------------------- + +const char *CVaultHandler::k_VaultFolderMainName = "Persistant Studios/AfterEffects/Vault"; +const char *CVaultHandler::k_VaultFolderAssetsName = "Assets"; +const char *CVaultHandler::k_VaultFolderCacheName = "Cache"; +const char *CVaultHandler::k_VaultFolderLogsName = "Logs"; + +//---------------------------------------------------------------------------- + +CVaultHandler::CVaultHandler() +{ +} + +//---------------------------------------------------------------------------- + +CVaultHandler::~CVaultHandler() +{ +} + +//---------------------------------------------------------------------------- + +bool CVaultHandler::InitializeIFN() +{ + if (m_Initialized == true) + return true; + m_Initialized = true; + + m_InternalPack = File::DefaultFileSystem()->MountPack(CPopcornFXWorld::Instance().GetInternalPackPath()); + + if (!PK_VERIFY(_SetupVault())) + return false; + + CString logPath = m_VaultPathLogs / "popcorn.htm"; + + m_AELogFileListener = PK_NEW(CLogListenerFile(logPath.Data(), "popcorn-engine logfile"); + CLog::AddGlobalListener(m_AELogFileListener)); + +#if 0 + m_FileWatcher = PK_NEW(CFileWatcher()); + if (!PK_VERIFY(m_FileWatcher != null)) + return false; + m_FileWatcher->SetNotifierAdd(&CVaultHandler::FileAdded); + m_FileWatcher->SetNotifierRemove(&CVaultHandler::FileRemoved); + m_FileWatcher->SetNotifierModify(&CVaultHandler::FileChanged); + m_FileWatcher->SetNotifierRename(&CVaultHandler::FileRenamed); + + bool watchPackSucceed = m_FileWatcher->SetWatchPack(""); + + if (!watchPackSucceed) + return false; +#endif + return false; +} + +//---------------------------------------------------------------------------- + +bool CVaultHandler::ShutdownIFN() +{ + if (m_Initialized == false) + return true; + if (m_AELogFileListener != null) + { + CLog::RemoveGlobalListener(m_AELogFileListener); + m_AELogFileListener = null; + } + + return true; +} + +//---------------------------------------------------------------------------- + +void CVaultHandler::FileAdded(const CString &path) +{ + (void)path; +} + +//---------------------------------------------------------------------------- + +void CVaultHandler::FileRemoved(const CString &path) +{ + (void)path; +} + +//---------------------------------------------------------------------------- + +void CVaultHandler::FileChanged(const CString &path) +{ + (void)path; +} + +//---------------------------------------------------------------------------- + +void CVaultHandler::FileChangedRelativePath(const CString &path) +{ + (void)path; +} + +//---------------------------------------------------------------------------- + +void CVaultHandler::FileRenamed(const CString &oldPath, const CString &newPath) +{ + (void)oldPath; + (void)newPath; +} + +//---------------------------------------------------------------------------- + +bool CVaultHandler::IsBakedAssetLatestVersion(const CString &srcPath, const CString &dstPath) +{ + IFileSystem *fs = File::DefaultFileSystem(); + + if (!fs->Exists(dstPath, true)) + return false; + + SFileTimes srcTimes, dstTimes; + + fs->Timestamps(srcPath, srcTimes, true); + fs->Timestamps(dstPath, dstTimes, true); + + if (srcTimes.m_LastWriteTime > dstTimes.m_LastWriteTime) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CVaultHandler::LoadEffectIntoVault(const CString &srcPackPath, CString &effectPath, const CString &pkprojPath, bool &refresh) +{ + IFileSystem *fs = File::DefaultFileSystem(); + //Check if pack exist in cache + + PFilePack dstPack = GetVaultPackFromPath(srcPackPath); + CString dstPackPath = dstPack->Path(); + CString bakedName = CFilePath::StripExtension(effectPath) + ".pkb"; + CString sourceName = CFilePath::StripExtension(effectPath) + ".pkfx"; + CString sourcePath = srcPackPath / sourceName; + + if (!fs->Exists(dstPackPath, true)) + { + if (!fs->CreateDirectoryChainIFN(dstPackPath, true)) + return false; + } + if (!refresh) + { + if (IsBakedAssetLatestVersion(sourcePath, dstPackPath / bakedName)) + return true; + } + + TArray effectsPath; + + CEffectBaker baker; + + baker.Initialize(srcPackPath, dstPackPath, pkprojPath); + + CString rootDir = baker.GetSourcePackRootPath(); + if (!rootDir.Empty() && sourceName.StartsWith(rootDir)) + { + sourceName = sourceName.Extract(rootDir.Length() + 1, sourceName.Length()); + effectPath = sourceName; + } + effectsPath.PushBack(sourceName); + + baker.ReimportAssets(effectsPath); + baker.ClearBakedPaths(); + + while (baker.PopFileChanges() != 0) + { + } + baker.Clear(); + refresh = true; + return true; +} + +//---------------------------------------------------------------------------- + +CString CVaultHandler::ImportResource(const CString resourcePath) +{ + IFileSystem *fs = File::DefaultFileSystem(); + CString filename = CFilePath::ExtractFilename(resourcePath); + CString sourcePath = resourcePath; + CString targetPath = m_VaultPathAssets / filename; + + if (IsBakedAssetLatestVersion(resourcePath, targetPath)) + return targetPath; + CFilePath::Purify(sourcePath); + if (!PK_VERIFY(fs->FileCopy(sourcePath, targetPath, true))) + return null; + return targetPath; +} + +//---------------------------------------------------------------------------- + +CString CVaultHandler::BakeVectorField(const CString resourcePath, const CString targetPath, const SResourceBakeConfig &config) +{ + (void)config; + IFileSystem *fs = File::DefaultFileSystem(); + CFilePackPath filePackPath = CFilePackPath::FromPhysicalPath(resourcePath, fs); + + PFilePack srcPack = null; + if (filePackPath.Empty()) + { + srcPack = fs->MountPack(CFilePath::StripFilename(resourcePath)); + filePackPath = CFilePackPath::FromPhysicalPath(resourcePath, fs); + } + if (!filePackPath.Empty()) + { + TArray effectsPath; + + effectsPath.PushBack(CFilePath::ExtractFilename(resourcePath)); + + CEffectBaker baker; + + baker.Initialize(filePackPath.Pack()->Path(), m_VaultPathAssets, ""); + baker.ReimportAssets(effectsPath, false); + baker.ClearBakedPaths(); + + while (baker.PopFileChanges() != 0) + { + } + baker.Clear(); + } + if (srcPack != null) + fs->UnmountPack(srcPack.Get()); + return targetPath; +} + +//---------------------------------------------------------------------------- + +CString CVaultHandler::BakeMesh(const CString resourcePath, const CString targetPath, const SResourceBakeConfig &config) +{ + IFileSystem *fs = File::DefaultFileSystem(); + CFilePackPath filePackPath = CFilePackPath::FromPhysicalPath(resourcePath, fs); + bool unload = false; + CString targetExtension = ".pkmm"; + + PFilePack srcPack = null; + if (filePackPath.Empty()) + { + srcPack = fs->MountPack(CFilePath::StripFilename(resourcePath)); + filePackPath = CFilePackPath::FromPhysicalPath(resourcePath, fs); + unload = true; + } + if (!filePackPath.Empty()) + { + class CMeshCodecMessageStreamBaker : public CMeshCodecMessageStream + { + virtual void NotifyProgressMessage(const CString &msg) override // called from time to time to tell what's being loaded + { + (void)msg; +#ifdef PK_DEBUG + printf(" Mesh Importer log: %s\n", msg.Data()); // only display these in debug +#endif + }; + virtual void NotifyError(const CString &msg) override { printf(" Mesh Importer ERROR: %s\n", msg.Data()); } + virtual void NotifyWarning(const CString &msg) override { printf(" Mesh Importer WARNING: %s\n", msg.Data()); } + }; + CMessageStream outBakeReport; + CMeshCodecMessageStreamBaker notifier; + SMeshImportSettings importSettings; + + importSettings.m_ImportGeometry = true; + + importSettings.m_ImportSkeleton = true; + if (config.m_IsAnimTrack) + { + importSettings.m_ImportAnimation = true; + importSettings.m_ImportSkeleton = false; + targetExtension = ".pkan"; + } + if (config.m_IsSkeletalAnim) + { + importSettings.m_ImportAnimation = true; + importSettings.m_ImportSkeleton = true; + targetExtension = ".pksa"; + } + importSettings.m_WriteAccelSampling = true; + importSettings.m_WriteAccelUV2PC = true; + importSettings.m_WriteKdTree = true; + importSettings.m_Positions = SVStreamCode::Type_F32; + importSettings.m_Normals = SVStreamCode::Type_F32; + importSettings.m_Tangents = SVStreamCode::Type_F32; + importSettings.m_Texcoords = SVStreamCode::Type_F32; + + importSettings.m_RemapToZero = true; + + importSettings.m_ResourcePath = filePackPath.Path(); + importSettings.m_ResourceManager = Resource::DefaultManager(); + + PMeshImportOut outFbxImport = CResourceMesh::ImportFromFile(notifier, outBakeReport, &importSettings); + + if (outFbxImport != null) + { + if (!outFbxImport->Write(fs, targetPath + ".pkmm", targetPath + ".pkan", targetPath + ".pksa", outBakeReport)) + CLog::Log(PK_ERROR, "The fbx import failed"); + } + } + if (unload) + fs->UnmountPack(srcPack.Get()); + return targetPath + targetExtension; +} + +//---------------------------------------------------------------------------- + +CString CVaultHandler::CopyResource(const CString resourcePath) +{ + IFileSystem *fs = File::DefaultFileSystem(); + CString filename = CFilePath::ExtractFilename(resourcePath); + CString extension = CFilePath::ExtractExtension(filename); + CString targetPath = m_VaultPathAssets / filename;; + CString sourcePath = resourcePath; + + + if (IsBakedAssetLatestVersion(resourcePath, targetPath)) + return targetPath; + CFilePath::Purify(sourcePath); + if (!PK_VERIFY(fs->FileCopy(sourcePath, targetPath, true))) + return null; + return targetPath; +} + +//---------------------------------------------------------------------------- + +CString CVaultHandler::BakeResource(const CString resourcePath, const SResourceBakeConfig &config) +{ + IFileSystem *fs = File::DefaultFileSystem(); + CString filename = CFilePath::ExtractFilename(resourcePath); + CString extension = CFilePath::ExtractExtension(filename); + CString sourcePath = resourcePath; + + CFilePath::StripExtensionInPlace(filename); + + CString targetPath = m_VaultPathAssets / filename; + + if (!config.m_StraightCopy && extension.Compare("fbx", CaseInsensitive)) + { + CString targetExt = ".pkmm"; + if (config.m_IsAnimTrack) + targetExt = ".pkan"; + if (config.m_IsSkeletalAnim) + targetExt = ".pksa"; + if (IsBakedAssetLatestVersion(resourcePath, targetPath + targetExt)) + return targetPath + targetExt; + + return BakeMesh(resourcePath, targetPath, config); + } + if (!config.m_StraightCopy && extension.Compare("fga", CaseInsensitive)) + { + targetPath += ".pkvf"; + if (IsBakedAssetLatestVersion(resourcePath, targetPath)) + return targetPath; + + return BakeVectorField(resourcePath, targetPath, config); + } + else //Wildcard + { + targetPath += "." + extension; + + if (IsBakedAssetLatestVersion(resourcePath, targetPath)) + return targetPath; + CFilePath::Purify(sourcePath); + if (!PK_VERIFY(fs->FileCopy(sourcePath, targetPath, true))) + return null; + } + return targetPath; +} + +//---------------------------------------------------------------------------- + +PFilePack CVaultHandler::GetVaultPackFromPath(CString path) +{ + PK_ASSERT(path != null); + PK_ASSERT(!path.Empty()); + + IFileSystem *fs = File::DefaultFileSystem(); + + CString packName = CFilePath::ExtractFilename(path); + + u32 pathHash = (u32)std::hash{}(path.Data()); + CString vaultPath = m_VaultPathCache / packName + CString::Format("_%u", pathHash); + + if (fs->Exists(vaultPath, true)) + { + return fs->MountPack(vaultPath); + } + + fs->CreateDirectoryChainIFN(vaultPath, true); + + return fs->MountPack(vaultPath); +} + +//---------------------------------------------------------------------------- + +bool CVaultHandler::_SetupVault() +{ + CString localPathString; +#if defined(PK_WINDOWS) + + aechar_t *userFolder = null; + HRESULT result = 0; + + result = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, (PWSTR*)&userFolder); + if (FAILED(result)) + return false; + WCharToCString(userFolder, &localPathString); + CoTaskMemFree(static_cast(userFolder)); + +#elif defined(PK_MACOSX) + const char *homeFolder = getenv("HOME"); + if (!PK_VERIFY(homeFolder != null)) + return false; + localPathString = CString(homeFolder) / "Library" / "Application Support"; +#endif + CFilePath::Purify(localPathString); + + IFileSystem *fs = File::DefaultFileSystem(); + + m_VaultPathRoot = localPathString + "/"+ k_VaultFolderMainName; + m_VaultPathAssets = m_VaultPathRoot + "/" + k_VaultFolderAssetsName; + m_VaultPathCache = m_VaultPathRoot + "/" + k_VaultFolderCacheName; + m_VaultPathLogs = m_VaultPathRoot + "/" + k_VaultFolderLogsName; + + if (!fs->CreateDirectoryChainIFN(m_VaultPathRoot, true) || + !fs->CreateDirectoryChainIFN(m_VaultPathAssets, true) || + !fs->CreateDirectoryChainIFN(m_VaultPathCache, true) || + !fs->CreateDirectoryChainIFN(m_VaultPathLogs, true)) + return false; + + class CPKFolderWalker : public CFileDirectoryWalker + { + public: + TArray m_Folders; + + CPKFolderWalker(const CString &rootDir) + : CFileDirectoryWalker(rootDir, IgnoreVirtualFS) + { + } + + virtual bool DirectoryNotifier(const CFilePack *, const char *fullPath, u32 ) override + { + m_Folders.PushBack(fullPath); + return false; + } + + }; + + CPKFolderWalker walker(m_VaultPathCache); + + walker.Walk(); + + for (u32 i = 0; i < walker.m_Folders.Count(); ++i) + { + fs->MountPack(walker.m_Folders[i]); + } + + fs->MountPack(m_VaultPathAssets); + return true; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AEGP_WinFileDialog.cpp b/AE_GeneralPlugin/Sources/AEGP_WinFileDialog.cpp new file mode 100644 index 00000000..3c79070c --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_WinFileDialog.cpp @@ -0,0 +1,183 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include + +#if defined(PK_WINDOWS) + +#include "AEGP_WinFileDialog.h" + +#include +#include + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include "AEGP_World.h" + +//---------------------------------------------------------------------------- + +class CDialogEventHandler : public IFileDialogEvents, + public IFileDialogControlEvents +{ +public: + // IUnknown methods + IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv) + { +#pragma warning(disable:4838) + static const QITAB qit[] = { + QITABENT(CDialogEventHandler, IFileDialogEvents), + QITABENT(CDialogEventHandler, IFileDialogControlEvents), + { 0 }, + }; + return QISearch(this, qit, riid, ppv); + +#pragma warning(default:4838) + } + + IFACEMETHODIMP_(ULONG) AddRef() + { + return InterlockedIncrement(&_cRef); + } + + IFACEMETHODIMP_(ULONG) Release() + { + long cRef = InterlockedDecrement(&_cRef); + if (!cRef) + delete this; + return cRef; + } + + // IFileDialogEvents methods + IFACEMETHODIMP OnFileOk(IFileDialog *) { return S_OK; }; + IFACEMETHODIMP OnFolderChange(IFileDialog *) { return S_OK; }; + IFACEMETHODIMP OnFolderChanging(IFileDialog *, IShellItem *) { return S_OK; }; + IFACEMETHODIMP OnHelp(IFileDialog *) { return S_OK; }; + IFACEMETHODIMP OnSelectionChange(IFileDialog *) { return S_OK; }; + IFACEMETHODIMP OnShareViolation(IFileDialog *, IShellItem *, FDE_SHAREVIOLATION_RESPONSE *) { return S_OK; }; + IFACEMETHODIMP OnTypeChange(IFileDialog *) { return S_OK; }; + IFACEMETHODIMP OnOverwrite(IFileDialog *, IShellItem *, FDE_OVERWRITE_RESPONSE *) { return S_OK; }; + + // IFileDialogControlEvents methods + IFACEMETHODIMP OnItemSelected(IFileDialogCustomize *, DWORD, DWORD) { return S_OK; }; + IFACEMETHODIMP OnButtonClicked(IFileDialogCustomize *, DWORD) { return S_OK; }; + IFACEMETHODIMP OnCheckButtonToggled(IFileDialogCustomize *, DWORD, BOOL) { return S_OK; }; + IFACEMETHODIMP OnControlActivating(IFileDialogCustomize *, DWORD) { return S_OK; }; + + CDialogEventHandler() : _cRef(1) { }; +private: + ~CDialogEventHandler() { }; + long _cRef; +}; + +//---------------------------------------------------------------------------- + +// Instance creation helper +HRESULT CDialogEventHandler_CreateInstance(REFIID riid, void **ppv) +{ + *ppv = NULL; + CDialogEventHandler *pDialogEventHandler = new (std::nothrow) CDialogEventHandler(); + HRESULT hr = pDialogEventHandler ? S_OK : E_OUTOFMEMORY; + if (SUCCEEDED(hr)) + { + hr = pDialogEventHandler->QueryInterface(riid, ppv); + pDialogEventHandler->Release(); + } + return hr; +} + +//---------------------------------------------------------------------------- + +HRESULT WinBasicFileOpen(SWinFileOpenData &data) +{ + IFileDialog *pfd = NULL; + AEGP_SuiteHandler suites(AEGPPk::CPopcornFXWorld::Instance().GetAESuites()); + HWND winHandle = null; + + suites.UtilitySuite6()->AEGP_GetMainHWND(&winHandle); + + HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, + NULL, + CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&pfd)); + if (SUCCEEDED(hr)) + { + IFileDialogEvents *pfde = NULL; + hr = CDialogEventHandler_CreateInstance(IID_PPV_ARGS(&pfde)); + if (SUCCEEDED(hr)) + { + DWORD dwCookie; + hr = pfd->Advise(pfde, &dwCookie); + if (SUCCEEDED(hr)) + { + DWORD dwFlags; + hr = pfd->GetOptions(&dwFlags); + if (SUCCEEDED(hr)) + { + hr = pfd->SetOptions(dwFlags | FOS_FORCEFILESYSTEM); + if (SUCCEEDED(hr)) + { + TArray filters; + for (u32 i = 0; i < data.m_Filters.Count(); i++) + filters.PushBack(data.m_Filters[i].m_Spec); + + hr = pfd->SetFileTypes(filters.Count(), filters.RawDataPointer()); + if (SUCCEEDED(hr)) + { + hr = pfd->SetFileTypeIndex(0); + if (SUCCEEDED(hr)) + { + hr = pfd->SetDefaultExtension(L"*.pkproj"); + if (SUCCEEDED(hr)) + { + hr = pfd->Show(winHandle); + if (SUCCEEDED(hr)) + { + IShellItem *psiResult; + hr = pfd->GetResult(&psiResult); + if (SUCCEEDED(hr)) + { + wchar_t *pszFilePath = NULL; + hr = psiResult->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); + if (SUCCEEDED(hr)) + { + char result[1024]; + CString stringResult; + wcstombs(result, pszFilePath, 1024); + stringResult = result; + + data.m_Cb(stringResult); + } + psiResult->Release(); + } + } + } + } + } + } + } + pfd->Unadvise(dwCookie); + } + pfde->Release(); + } + pfd->Release(); + } + return hr; +} + +//---------------------------------------------------------------------------- + +#endif diff --git a/AE_GeneralPlugin/Sources/AEGP_WinSystem.cpp b/AE_GeneralPlugin/Sources/AEGP_WinSystem.cpp new file mode 100644 index 00000000..3f44a946 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_WinSystem.cpp @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include + +#include "AEGP_WinSystem.h" +#include "PopcornFX_Suite.h" + +#include "AEGP_System.h" + +#include + +#if defined(PK_WINDOWS) + +#include +#include +#include +#include +#include +#include +#include +#include + + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +CString CWinSystemHelper::GetLastErrorAsString() +{ + TArray error; + return GetLastErrorAsString(error); +} + +//---------------------------------------------------------------------------- + +CString CWinSystemHelper::GetLastErrorAsString(TArray &ignore) +{ + //Get the error message ID, if any. + DWORD errorMessageID = ::GetLastError(); + if (errorMessageID == 0 || ignore.Contains(errorMessageID)) + return CString(); + + LPSTR messageBuffer = nullptr; + + //Ask Win32 to give us the string version of that message ID. + //The parameters we pass in, tell Win32 to create the buffer that holds the message for us (because we don't yet know how long the message string will be). + size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL); + + //Copy the error message into a std::string. + CString message(messageBuffer, (u32)size); + + //Free the Win32's string's buffer. + LocalFree(messageBuffer); + + return message; +} + +//---------------------------------------------------------------------------- + +CString CWinSystemHelper::_GetWindowsInstallDir() +{ + CString appFolderPath; + + aechar_t dstPath[MAX_PATH]; + if (::ExpandEnvironmentStringsW(L"%ProgramW6432%", (LPWSTR)dstPath, PK_ARRAY_COUNT(dstPath)) != 0) + { + std::string dest; + dstPath[PK_ARRAY_COUNT(dstPath) - 1] = 0; + WCharToString(dstPath, &dest); + appFolderPath = dest.c_str(); + appFolderPath = appFolderPath + (appFolderPath.EndsWith("/") ? "" : "/") + "Persistant Studios/"; + } + return appFolderPath; +} + +//---------------------------------------------------------------------------- + +TArray CWinSystemHelper::_FindInstalledVersions(const CString &baseSearchPath) +{ + WIN32_FIND_DATA ffd; + TCHAR szDir[MAX_PATH]; + HANDLE hFind = INVALID_HANDLE_VALUE; + DWORD dwError = 0; + + // we expect 'baseSearchPath' to be the root 'Persistant Studios' install dir, + // inside which are located PopcornFX editor executables of the form 'PopcornFX-X.Y/Binaries_Release/PK-Editor.exe' + TArray paths; + + // Prepare string for use with FindFile functions. First, copy the + // string to a buffer, then append '\*' to the directory name. + StringCchCopy(szDir, MAX_PATH, baseSearchPath.Data()); + StringCchCat(szDir, MAX_PATH, TEXT("\\*")); + + // Find the first file in the directory. + hFind = FindFirstFile(szDir, &ffd); + + if (INVALID_HANDLE_VALUE == hFind) + { + CString error = GetLastErrorAsString(); + CLog::Log(PK_ERROR, "%s", error.Data()); + return paths; + } + + // List all the files in the directory with some info about them. + do + { + if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + const CString entryName = ffd.cFileName; + if (entryName.StartsWith("PopcornFX-")) + { + const CString editorVersionDir = baseSearchPath + entryName; + const CString editorExecPathV2 = editorVersionDir + "/bin/PK-Editor.exe"; + const CString editorExecPathUn = editorVersionDir + "/Uninstall.exe"; + + DWORD dwAttrib = GetFileAttributes(TEXT(editorExecPathV2.Data())); + if (dwAttrib != INVALID_FILE_ATTRIBUTES) + { + const SDllVersion version = PKTKGetFileVersionInfo(editorExecPathV2.Data()); + if (!paths.PushBack(SEditorExecutable(editorExecPathV2, "", SEngineVersion(version.Major, version.Minor, version.Patch, version.RevID))).Valid()) + { + CLog::Log(PK_ERROR, "TArray Alloc Failed"); + return paths; + } + + } + } + } + } while (FindNextFile(hFind, &ffd) != 0); + + dwError = GetLastError(); + if (dwError != ERROR_NO_MORE_FILES) + { + CString error = GetLastErrorAsString(); + CLog::Log(PK_ERROR, "%s", error.Data()); + } + + FindClose(hFind); + return paths; +} + +//---------------------------------------------------------------------------- + +SEditorExecutable CWinSystemHelper::GetMatchingEditor(const SEngineVersion &version) +{ + PK_ASSERT(version.Major() == 2); + + CGuid bestVerPatch; + CGuid bestVer; + + TArray execList = _FindInstalledVersions(_GetWindowsInstallDir()); + for (u32 i = 0; i < execList.Count(); i++) + { + const SEditorExecutable &execVer = execList[i]; + + if (execVer.m_Version.Equal_IgnoreRevID(version)) + { + // Exact version, always the best option. + // This assumes there's always a single version installed at the same patch, + // and there can't be multiple versions with the same major.minor.patch version. + // Otherwise, when there are multiple similar versions installed, + // it'll take the first one in the list. Do we care? + // Do we want to handle that better and actually return the one with + // the closest revid ? + CLog::Log(PK_INFO, "Running exact match editor : %s", execVer.m_BinaryPath.Data()); + return execVer; // Exact version + } + if (execVer.m_Version.Equal_IgnorePatch(version)) + { + // Within the same minor version, this is the best candidate + if (!bestVerPatch.Valid()) + bestVerPatch = i; + else + { + const u32 patchPrev = execList[bestVerPatch].m_Version.Patch(); + const u32 patchNew = execVer.m_Version.Patch(); + { + if (patchNew >= patchPrev) + bestVerPatch = i; + } + } + } + else if (execVer.m_Version >= version) + { + // Minor version higher than project + if (!bestVer.Valid()) + bestVer = i; + else + { + if (execVer.m_Version < execList[bestVer].m_Version) // if it's closer to the target project version + bestVer = i; + } + } + } + if (bestVerPatch.Valid()) + return execList[bestVerPatch]; + if (bestVer.Valid()) + return execList[bestVer]; + + SEditorExecutable ret; +#if _DEBUG + ret.m_BinaryPath = "%PK_SDK_ROOT%\\Tools\\Poped\\build_vs2019\\PK-Editor_d.exe"; +#else + ret.m_BinaryPath = "%PK_SDK_ROOT%\\Tools\\Poped\\build_vs2019\\PK-Editor_r.exe"; +#endif + CLog::Log(PK_INFO, "Running default path dev: %s", ret.m_BinaryPath.Data()); + return ret; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif // PK_WINDOWS diff --git a/AE_GeneralPlugin/Sources/AEGP_World.cpp b/AE_GeneralPlugin/Sources/AEGP_World.cpp new file mode 100644 index 00000000..2786e0ae --- /dev/null +++ b/AE_GeneralPlugin/Sources/AEGP_World.cpp @@ -0,0 +1,2674 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" + +#include "AEGP_World.h" + +#include "AEGP_PopcornFXPlugins.h" +#include "AEGP_Scene.h" +#include "AEGP_AEPKConversion.h" + +#include "AEGP_AssetBaker.h" +#include "AEGP_Log.h" + +//Suite +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +//StartUp Runtime +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // for PRNG +#include // for CPlane in CParticleSceneBasic + +#include +#include + +//RHI +#include +#include +#include +//Sample +#include +#include + +#include + +//AE +#include +#include + +#include "AEGP_LayerHolder.h" +#include "AEGP_UpdateAEState.h" + +#include "Panels/AEGP_PanelQT.h" + +#include "AEGP_System.h" + +#include +#include + +#include + +//---------------------------------------------------------------------------- + +PK_LOG_MODULE_DECLARE(); + +template <> +const A_char* SuiteTraits::i_name = kAEGPPanelSuite; +template <> +const int32_t SuiteTraits::i_version = kAEGPPanelSuiteVersion1; + +template <> +const A_char* SuiteTraits::i_name = kPFAppSuite; +template <> +const int32_t SuiteTraits::i_version = kPFAppSuiteVersion4; + +//---------------------------------------------------------------------------- + +__AEGP_PK_BEGIN + +//TODO OS Specific code +static PAAERenderContext s_AAEThreadRenderContexts = null; +static PKSample::CShaderLoader *s_ShaderLoader = null; + +//---------------------------------------------------------------------------- + +const char *SAEPreferenciesKeys::GetGraphicsApiAsCharPtr(EApiValue value) +{ + return kApiNames[value]; + +} + +//---------------------------------------------------------------------------- + +const char *SAEPreferenciesKeys::GetGraphicsApiAsCharPtr(RHI::EGraphicalApi value) +{ + return GetGraphicsApiAsCharPtr(RHIApiToAEApi(value)); +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +HBO_CLASS_DEFINITION_BEGIN(CAEPProjectProperties) + .HBO_FIELD_DEFINITION(ProjectName) + .HBO_FIELD_DEFINITION(LayerProperties) +HBO_CLASS_DEFINITION_END + +CAEPProjectProperties::CAEPProjectProperties() + : HBO_CONSTRUCT(CAEPProjectProperties) +{ +} + +//---------------------------------------------------------------------------- + +CAEPProjectProperties::~CAEPProjectProperties() +{ +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +CPopcornFXWorld *CPopcornFXWorld::m_Instance = null; + +CPopcornFXWorld::CPopcornFXWorld() + : m_Initialized(false) + , m_AAETreadID(0) + , m_GraphicsApi(RHI::GApi_Null) + , m_AELogFileListener(null) +{ +} + +//---------------------------------------------------------------------------- + +CPopcornFXWorld::~CPopcornFXWorld() +{ + if (s_AAEThreadRenderContexts != null) + { + s_AAEThreadRenderContexts->Destroy(); + s_AAEThreadRenderContexts = null; + } + PK_SAFE_DELETE(s_ShaderLoader); +} + +//---------------------------------------------------------------------------- + +CPopcornFXWorld &CPopcornFXWorld::Instance() +{ + if (CPopcornFXWorld::m_Instance == null) + { + m_Instance = new CPopcornFXWorld(); + } + return *m_Instance; +} + +//---------------------------------------------------------------------------- + +static Threads::PAbstractPool _CreateCustomThreadPool() +{ + bool success = true; + CThreadManager::EPriority workersPriority = CThreadManager::Priority_High; + PWorkerThreadPool pool = PK_NEW(CWorkerThreadPool); + + if (PK_VERIFY(pool != null)) + { + // Let the OS shedule our workers + // leave 2 core for main thread and render thread + u32 processorCount = PKMin(PKMax(CPU::Caps().ProcessAffinity().NumBitsSet(), (u32)4) - (u32)3, (u32)12); + + CPopcornFXWorld::Instance().SetWorkerCount(processorCount); + success = pool->AddFullAffinityWorkers(processorCount, CPU::Caps().ProcessAffinity(), workersPriority); + + if (!success) + return null; + + pool->StartWorkers(); + } + return pool; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::Setup(SPBasicSuite *pica_basicP, AEGP_PluginID id) +{ + PK_SCOPEDLOCK(m_Lock); + m_AEGPID = id; + m_Suites = pica_basicP; + + AEGP_SuiteHandler suites(m_Suites); + A_Err err = A_Err_NONE; + // AE SETUP + { + AEGP_InstalledEffectKey key = AEGP_InstalledEffectKey_NONE; + u32 effectInstalled; + A_char effectName[AEGP_MAX_EFFECT_MATCH_NAME_SIZE] = { '\0' }; + u32 pluginsFound = 0; + + suites.EffectSuite4()->AEGP_GetNumInstalledEffects((A_long*)&effectInstalled); + + for (u32 i = 0; i < effectInstalled; ++i) + { + suites.EffectSuite4()->AEGP_GetNextInstalledEffect(key, &key); + suites.EffectSuite4()->AEGP_GetEffectMatchName(key, effectName); + + if (strcmp(effectName, "ADBE PopcornFX Emitter") == 0) + { + m_PKInstalledPluginKeys[EPKChildPlugins::EMITTER] = key; + ++pluginsFound; + } + else if (strcmp(effectName, "ADBE PopcornFX Attribute") == 0) + { + m_PKInstalledPluginKeys[EPKChildPlugins::ATTRIBUTE] = key; + ++pluginsFound; + } + else if (strcmp(effectName, "ADBE PopcornFX Sampler") == 0) + { + m_PKInstalledPluginKeys[EPKChildPlugins::SAMPLER] = key; + ++pluginsFound; + } + + if (pluginsFound == EPKChildPlugins::_PLUGIN_COUNT) + break; + } + PK_RELEASE_ASSERT(pluginsFound == EPKChildPlugins::_PLUGIN_COUNT); + } + + //POPCORN FX INIT + SDllVersion engineVersion; + CPKKernel::Config configKernel; + + configKernel.m_CreateThreadPool = &_CreateCustomThreadPool; + + if (engineVersion.Major != PK_VERSION_MAJOR || engineVersion.Minor != PK_VERSION_MINOR) + { + PK_ASSERT_NOT_REACHED(); + } + + if (!CPKKernel::Startup(engineVersion, configKernel) || + !CPKBaseObject::Startup(engineVersion, CPKBaseObject::Config()) || + !CPKEngineUtils::Startup(engineVersion, CPKEngineUtils::Config()) || + !CPKCompiler::Startup(engineVersion, CPKCompiler::Config()) || + !CPKGeometrics::Startup(engineVersion, CPKGeometrics::Config()) || + !CPKImaging::Startup(engineVersion, CPKImaging::Config()) || + !CPKParticles::Startup(engineVersion, CPKParticles::Config()) || + !ParticleToolbox::Startup() || + !CPKRHI::Startup(engineVersion, CPKRHI::Config()) || + !CPKRenderHelpers::Startup(engineVersion, CPKRenderHelpers::Config()) || + !CPKSample::Startup(engineVersion, CPKSample::Config()) || // Only necessary if your engine links/relies on PKSample + !PK_VERIFY(Kernel::CheckStaticConfigFlags(Kernel::g_BaseStaticConfig, SKernelConfigFlags()))) + { + return false; + } + + PK_LOG_MODULE_INIT_START; + + CAEPProjectProperties::RegisterHandler(); + CLayerProperty::RegisterHandler(); + CGraphicOverride::RegisterHandler(); + CEditorAssetEffect::RegisterHandler(); + + PK_LOG_MODULE_INIT_END; + + CAELog::SetPKLogState(true); + +#if 0 + _GetAEPath(AEGP_GetPathTypes_PLUGIN, m_PluginPath); < --Not implemented by AE +#endif + if (!PK_VERIFY(_GetAEPath(AEGP_GetPathTypes_USER_PLUGIN, m_UserPluginPath)) || + !PK_VERIFY(_GetAEPath(AEGP_GetPathTypes_ALLUSER_PLUGIN, m_AllUserPluginPath)) || + !PK_VERIFY(_GetAEPath(AEGP_GetPathTypes_APP, m_AEPath))) + return false; + + CFilePath::Purify(m_AEPath); + + CCoordinateFrame::SetupFrame(ECoordinateFrame::Frame_User1, EAbsoluteAxis::Axis_Right, EAbsoluteAxis::Axis_Down, EAbsoluteAxis::Axis_Forward); + CCoordinateFrame::SetGlobalFrame(ECoordinateFrame::Frame_User1); + + if (!PK_VERIFY(PopcornRegisterPlugins(EPlugin_Default | EPlugin_MeshCodecFBX) == true)) + return CAELog::TryLogErrorWindows("Could not load PopcornFX plugins"); + + AEGP_PersistentBlobH blobH = NULL; + AEGP_PersistentDataSuite4 *persistentDataSuite = suites.PersistentDataSuite4(); + + if (persistentDataSuite != null) + { + err |= persistentDataSuite->AEGP_GetApplicationBlob(AEGP_PersistentType_MACHINE_SPECIFIC, &blobH); + if (err == A_Err_NONE && blobH != null) + { + u32 targetApi; +#if defined(PK_WINDOWS) + A_long defaultApi = EApiValue::D3D11; +#elif defined(PK_MACOSX) + A_long defaultApi = EApiValue::Metal; +#endif + err |= persistentDataSuite->AEGP_GetLong(blobH, + SAEPreferenciesKeys::kSection, + SAEPreferenciesKeys::kApi, + defaultApi, + (A_long*)&targetApi); + if (err == A_Err_NONE) + { + m_GraphicsApi = AEApiToRHIApi(static_cast(targetApi)); + } + } + } + if (!PK_VERIFY(err == A_Err_NONE)) + return false; + + CPanelBaseGUI *panel = CPanelBaseGUI::GetInstance(); + if (!PK_VERIFY(panel->InitializeIFN())) + return false; + + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::FetchAEProject() +{ + AEGP_SuiteHandler suites(m_Suites); + A_Err err = A_Err_NONE; + A_long numProj = 0; + + err |= suites.ProjSuite6()->AEGP_GetNumProjects(&numProj); + + if (numProj > 0) + { + AEGP_ProjectH projPH; + + err |= suites.ProjSuite6()->AEGP_GetProjectByIndex(0, &projPH); + + if (err == A_Err_NONE && projPH != null) + { + AEGP_MemHandle handle; + aechar_t *retrievedPath; + CString path = ""; + + err |= suites.ProjSuite6()->AEGP_GetProjectPath(projPH, &handle); + err |= suites.MemorySuite1()->AEGP_LockMemHandle(handle, reinterpret_cast(&retrievedPath)); + + WCharToCString(retrievedPath, &path); + + err |= suites.MemorySuite1()->AEGP_UnlockMemHandle(handle); + err |= suites.MemorySuite1()->AEGP_FreeMemHandle(handle); + if (path != null) + { + m_AEProjectFilename = CFilePath::ExtractFilename(path.Data()); + CFilePath::StripExtensionInPlace(m_AEProjectFilename); + path = CFilePath::StripFilename(path.Data()); + CFilePath::Purify(path); + bool newPath = false; + + //Create log file in AEP directory + if (m_AEProjectPath != path) + { + newPath = true; + m_AEProjectPath = path; + + CString logPath = path / "popcorn.htm"; + + if (m_AELogFileListener != null) + { + CLog::RemoveGlobalListener(m_AELogFileListener); + m_AELogFileListener = null; + } + m_AELogFileListener = PK_NEW(CLogListenerFile(path.Data(), "popcorn-engine logfile"); + CLog::AddGlobalListener(m_AELogFileListener)); + } + //CreateINF Project conf file or reload it if AEP changed + if (m_ProjectConfFile == null || newPath) + { + IFileSystem *fileSystem = File::DefaultFileSystem(); + + if (m_ProjectPack != null) + fileSystem->UnmountPack(m_ProjectPack.Get()); + if (m_ProjectConfFile != null) + { + m_ProjectConfFile->Unload(); + for (auto *layers : m_Layers) + layers->m_LayerProperty = null; + } + + CString projectPropFilename = m_AEProjectFilename + ".pkbo"; + + m_ProjectPack = fileSystem->MountPack(path); + m_ProjectConfFile = HBO::g_Context->LoadFile_AndCreateIFN_Pure(projectPropFilename.View(), false); + + } + if (m_ProjectConfFile != null) + { + PAEPProjectProperties projectProp = m_ProjectConfFile->FindFirstOf(); + + if (projectProp != null) + { + if (!projectProp->ProjectName().Compare(m_AEProjectFilename))//project change: unload file and let the next frame recreate it + { + m_ProjectConfFile->Unload(); + m_ProjectConfFile = null; + } + } + else //or a new project + { + projectProp = HBO::g_Context->NewObject(m_ProjectConfFile.Get()); + projectProp->SetProjectName(m_AEProjectFilename); + + WriteProjectFileModification(); + } + m_ProjectProperty = projectProp; + } + } + } + } + if (!PK_VERIFY(err == A_Err_NONE)) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::_GetAEPath(AEGP_GetPathTypes type, CString &dst) +{ + AEGP_MemHandle handle; + A_Err err = A_Err_NONE; + aechar_t *retrievedPath; + AEGP_SuiteHandler suites(m_Suites); + + err = suites.UtilitySuite6()->AEGP_GetPluginPaths(m_AEGPID, type, &handle); + if (!PK_VERIFY(err == A_Err_NONE)) + return false; + suites.MemorySuite1()->AEGP_LockMemHandle(handle, reinterpret_cast(&retrievedPath)); + + dst.Clear(); + WCharToCString(retrievedPath, &dst); + + err |= suites.MemorySuite1()->AEGP_UnlockMemHandle(handle); + err |= suites.MemorySuite1()->AEGP_FreeMemHandle(handle); + + if (!PK_VERIFY(err == A_Err_NONE)) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetCommandHandle(AEGP_Command &command, const char *name) +{ + m_CommandName = name; + m_Command = command; + return true; +} + +//---------------------------------------------------------------------------- + +AEGP_PluginID CPopcornFXWorld::GetPluginID() +{ + return m_AEGPID; +} + +//---------------------------------------------------------------------------- + +SPBasicSuite *CPopcornFXWorld::GetAESuites() +{ + return m_Suites; +} + +//---------------------------------------------------------------------------- + +RHI::EGraphicalApi CPopcornFXWorld::GetRenderApi() +{ + PK_ASSERT(m_GraphicsApi != RHI::GApi_Null); + return m_GraphicsApi; +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::SetRenderApi(EApiValue AEGraphicsApi) +{ + A_Err err = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + AEGP_PersistentBlobH blobH = NULL; + AEGP_PersistentDataSuite4 *persistentDataSuite = suites.PersistentDataSuite4(); + + if (persistentDataSuite != null) + { + err |= persistentDataSuite->AEGP_GetApplicationBlob(AEGP_PersistentType_MACHINE_SPECIFIC, &blobH); + if (err == A_Err_NONE && blobH != null) + { + err |= persistentDataSuite->AEGP_SetLong(blobH, + SAEPreferenciesKeys::kSection, + SAEPreferenciesKeys::kApi, + (A_long)AEGraphicsApi); + PK_ASSERT(err == A_Err_NONE); + } + } + CAELog::TryLogInfoWindows("Graphics Api changed, restart After Effects to apply change."); +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::InitializeIFN(SAAEIOData &AAEData) +{ + (void)AAEData; + FetchAEProject(); + if (m_Initialized == true) + return true; + PK_SCOPEDLOCK(m_Lock); + + m_ClassName = "PKPluginInterface"; + + m_VaultHandler.InitializeIFN(); + m_Initialized = true; + for (u32 i = 0; i < __Effect_Parameters_Count; ++i) + CAEUpdater::s_EmitterIndexes[i] = i; + for (u32 i = 0; i < __Attribute_Parameters_Count; ++i) + CAEUpdater::s_AttributeIndexes[i] = i; + for (u32 i = 0; i < __AttributeSamplerType_Parameters_Count; ++i) + CAEUpdater::s_SamplerIndexes[i] = i; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::ShutdownIFN() +{ + bool result = true; + + m_VaultHandler.ShutdownIFN(); + { + PK_SCOPEDLOCK(m_Lock); + if (m_Panel) + { + m_Panel->DestroyInstance(); + m_Panel = null; + } + + for (s32 j = m_Layers.Count() - 1; j >= 0; --j) + { + SLayerHolder &layer = *m_Layers[j]; + + result = layer.Clear(m_Suites); + PK_ASSERT(result); + PK_DELETE(m_Layers[j]); + } + m_Layers.Clear(); + HBO::g_Context->UnloadAllFiles(); + + CAAEScene::ShutdownPopcornFX(); + m_Suites = null; + if (m_AAETreadID.Count() != 0) + { + for (u32 i = 0; i < m_AAETreadID.Count(); ++i) + { + PopcornFX::CThreadManager::UnsafeUnregisterUserThread(m_AAETreadID[i]); + } + m_AAETreadID.Clear(); + } + if (m_AELogFileListener != null) + { + CLog::RemoveGlobalListener(m_AELogFileListener); + m_AELogFileListener = null; + } + IFileSystem *fileSystem = File::DefaultFileSystem(); + if (PK_VERIFY(fileSystem != null)) + fileSystem->UnmountAllPacks(); + m_Initialized = false; + } + delete m_Instance; + + PopcornUnregisterPlugins(); + CAELog::SetPKLogState(false); + + PK_LOG_MODULE_RELEASE_START; + + CAEPProjectProperties::UnregisterHandler(); + CLayerProperty::UnregisterHandler(); + CGraphicOverride::UnregisterHandler(); + CEditorAssetEffect::UnregisterHandler(); + + PK_LOG_MODULE_RELEASE_END; + + CPKSample::Shutdown(); + CPKRenderHelpers::Shutdown(); + CPKRHI::Shutdown(); + ParticleToolbox::Shutdown(); + CPKParticles::Shutdown(); + CPKImaging::Shutdown(); + CPKGeometrics::Shutdown(); + CPKCompiler::Shutdown(); + CPKEngineUtils::Shutdown(); + CPKBaseObject::Shutdown(); + CPKKernel::Shutdown(); + return result; +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::SetProfilingState(bool state) +{ +#if (KR_PROFILER_ENABLED != 0) + Profiler::CProfiler *profiler = Profiler::MainEngineProfiler(); + if (profiler == null) + return; + profiler->GrabCallstacks(false); + profiler->Activate(state); + profiler->Reset(); + + if (!state) + { + CString path = m_VaultHandler.VaultPathRoot() / "profilerReport.pkpr"; + CDynamicMemoryStream stream = CDynamicMemoryStream(); + Profiler::CProfilerReport report; + profiler->BuildReport(&report); + Profiler::WriteProfileReport(report, stream); + FILE *f = fopen(path.Data(), "wb"); + if (f != null) + { + u32 size = 0; + u8 *buffer = stream.ExportDataAndClose(size); + fwrite(buffer, size, 1, f); + fclose(f); + PK_FREE(buffer); + } + else + CLog::Log(PK_ERROR, "Failed to write profile report to %s", path.Data()); + stream.Close(); + } +#endif +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::SetParametersIndexes(const int *indexes, EPKChildPlugins plugin) +{ + if (plugin == EPKChildPlugins::EMITTER) + { + for (u32 i = 0; i < __Effect_Parameters_Count; ++i) + { + CAEUpdater::s_EmitterIndexes[i] = indexes[i]; + PK_ASSERT(CAEUpdater::s_EmitterIndexes[i] >= 0); + } + } + else if (plugin == EPKChildPlugins::ATTRIBUTE) + { + for (u32 i = 0; i < __Attribute_Parameters_Count; ++i) + { + CAEUpdater::s_AttributeIndexes[i] = indexes[i]; + PK_ASSERT(CAEUpdater::s_AttributeIndexes[i] >= 0); + } + } + else if (plugin == EPKChildPlugins::SAMPLER) + { + for (u32 i = 0; i < __AttributeSamplerType_Parameters_Count; ++i) + { + CAEUpdater::s_SamplerIndexes[i] = indexes[i]; + PK_ASSERT(CAEUpdater::s_SamplerIndexes[i] >= 0); + } + } +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetDefaultLayerPosition(SAAEIOData& AAEData, AEGP_LayerH layer) +{ + if (layer == null) + return false; + + AEGP_SuiteHandler suites(m_Suites); + A_Err result = A_Err_NONE; + AEGP_StreamRefH stream = null; + A_Time time; + + time.value = AAEData.m_InData->current_time; + time.scale = AAEData.m_InData->time_scale; + + result |= suites.StreamSuite2()->AEGP_GetNewLayerStream(m_AEGPID, layer, AEGP_LayerStream_POSITION, &stream); + if (result != A_Err_NONE || stream == null) + return false; + + AEGP_StreamValue value; + + result |= suites.StreamSuite2()->AEGP_GetNewStreamValue(m_AEGPID, stream, AEGP_LTimeMode_LayerTime, &time, false, &value); + if (result != A_Err_NONE) + return false; + value.val.three_d.x = AAEData.m_InData->width / 2.0f; + value.val.three_d.y = AAEData.m_InData->height / 2.0f; + + result |= suites.StreamSuite2()->AEGP_SetStreamValue(m_AEGPID, stream, &value); + if (result != A_Err_NONE) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::MoveEffectIntoCurrentView(SAAEIOData &AAEData, SEmitterDesc *descriptor) +{ + SLayerHolder *layer = GetLayerForSEmitterDesc(descriptor); + + if (layer == null && layer->m_SpawnedEmitter.m_Desc == null) + return false; + + CAABB bounds; + CFloat4x4 view; + CFloat4 pos; + float zoom; + A_Time AETime; + + AETime.scale = AAEData.m_InData->time_scale; + AETime.value = AAEData.m_InData->current_time; + if (!layer->m_Scene->GetEmitterBounds(bounds) || + !CAEUpdater::GetCameraViewMatrixAtTime(layer, view, pos, AETime, zoom)) + return false; + + + CFloat3 forward = view.Inverse().StrippedZAxis().Normalized(); + + float extends = bounds.Extent().HighestComponent(); + CFloat3 newPos = pos.xyz() + forward * (extends * 2.0f); + + AEGP_SuiteHandler suites(m_Suites); + A_Err result = A_Err_NONE; + AEGP_StreamRefH streamPos = null; + AEGP_EffectRefH effectRef = null; + + result = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AEGPID, AAEData.m_InData->effect_ref, &effectRef); + if (result != A_Err_NONE || effectRef == null) + return false; + + result |= suites.StreamSuite5()->AEGP_GetNewEffectStreamByIndex(m_AEGPID, effectRef, CAEUpdater::s_EmitterIndexes[Effect_Parameters_Position], &streamPos); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE || streamPos == null) + { + return false; + } + AEGP_StreamValue2 value; + result |= suites.StreamSuite5()->AEGP_GetNewStreamValue(m_AEGPID, streamPos, AEGP_LTimeMode_LayerTime, &AETime, false, &value); + if (result != A_Err_NONE) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + value.val.three_d.x = newPos.x(); + value.val.three_d.y = newPos.y(); + value.val.three_d.z = newPos.z(); + result |= suites.StreamSuite5()->AEGP_SetStreamValue(m_AEGPID, streamPos, &value); + if (result != A_Err_NONE) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + result |= suites.StreamSuite5()->AEGP_DisposeStreamValue(&value); + result |= suites.StreamSuite5()->AEGP_DisposeStream(streamPos); + + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::IdleUpdate() +{ + if (m_Initialized == false) + return false; + + PK_SCOPEDPROFILE(); + + AEGP_SuiteHandler suites(m_Suites); + AEGP_EffectSuite4 *effectSuite = suites.EffectSuite4(); + A_Err result = A_Err_NONE; + bool updateEmitterPanel = false; + + if (effectSuite == null) + return false; + + CAELog::ClearIOData(); + FetchAEProject(); + + CString compositionName; + + GetMostRecentCompName(compositionName); + if (m_MostRecentCompName != compositionName) + { + if (m_Panel) + m_Panel->UpdateScenesModel(); + m_MostRecentCompName = compositionName; + } + for (s32 l = m_Layers.Count() - 1; l >= 0; --l) + { + SLayerHolder &layer = *m_Layers[l]; + + if (!layer.m_LayerLock.TryLock()) + continue; + + A_long count = 0; + u32 emitterCount = 0; + + if (layer.m_SpawnedEmitter.m_Desc != null) + { + result = effectSuite->AEGP_GetLayerNumEffects(layer.m_EffectLayer, &count); + if (result != A_Err_NONE) + { + CLog::Log(PK_INFO, "AEGP_GetLayerNumEffects failed"); + layer.m_LayerLock.Unlock(); + continue; + } + + //Start the fuckery to handle Layer deletion + AEGP_CompH compH; + AEGP_LayerIDVal layerID; + AEGP_LayerH layerFromComp; + result = suites.LayerSuite5()->AEGP_GetLayerParentComp(layer.m_EffectLayer, &compH); + if (result != A_Err_NONE) + { + CLog::Log(PK_INFO, "AEGP_GetLayerNumEffects failed"); + layer.m_LayerLock.Unlock(); + continue; + } + result = suites.LayerSuite7()->AEGP_GetLayerID(layer.m_EffectLayer, &layerID); + result = suites.LayerSuite7()->AEGP_GetLayerFromLayerID(compH, layerID, &layerFromComp); + if (result != A_Err_NONE) //Layer is deleted but still on the undo stack + { + updateEmitterPanel = layer.m_Deleted != true ? true : updateEmitterPanel; + layer.m_Deleted = true; + } + else + { + updateEmitterPanel = layer.m_Deleted != false ? true : updateEmitterPanel; + layer.m_Deleted = false; + } + + for (A_long j = count - 1; j >= 0; --j) + { + AEGP_EffectRefH effectRef = null; + AEGP_InstalledEffectKey installedKey; + + result = suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(m_AEGPID, layer.m_EffectLayer, j, &effectRef); + result = suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(effectRef, &installedKey); + + if (!PK_VERIFY(result == A_Err_NONE)) + { + CLog::Log(PK_INFO, "AEGP_GetLayerEffectByIndex failed"); + layer.m_LayerLock.Unlock(); + continue; + } + if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::ATTRIBUTE]) + { + } + else if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::EMITTER]) + { + emitterCount += 1; + if (layer.m_ForceRender) + { + layer.m_ForceRender = false; + if (!InvalidateEmitterRender(&layer, effectRef)) + { + layer.m_LayerLock.Unlock(); + return false; + } + } + } + result = suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + if (emitterCount == 0) + { + layer.Clear(m_Suites); + m_Layers.RemoveElement(&layer); + layer.m_LayerLock.Unlock(); + PK_DELETE(&layer); + updateEmitterPanel = true; + continue; + } + } + if (_ExecClearAttributes(&layer) != 0) //Clear attribute did work, give time to AE to reorder internals. + { + layer.m_LayerLock.Unlock(); + continue; + } + + if (_ExecSPendingEmitters(&layer) < 0) + { + updateEmitterPanel = true; + layer.m_LayerLock.Unlock(); + continue; + } + + if (_ExecSPendingAttributes(&layer) < 0) + { + layer.m_LayerLock.Unlock(); + continue; + } + + layer.m_LayerLock.Unlock(); + } + { + PK_SCOPEDLOCK(m_UIEventLock); + for (u32 i = 0; i < m_UIEvents.Count(); ++i) + { + SUIEvent *event = m_UIEvents[i]; + + event->Exec(); + PK_DELETE(event); + } + m_UIEvents.Clear(); + } + if (m_Panel != null) + { + if (updateEmitterPanel) + m_Panel->UpdateScenesModel(); + } +#if defined(PK_MACOSX) + if (m_Panel != null) + m_Panel->IdleUpdate(); +#endif + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::HandleNewEmitterEvent(AAePk::SAAEIOData &AAEData, SEmitterDesc *desc) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + AEGP_LayerH layerH; + A_long dstID = 0, existingID; + s32 existingLayerID = -1; + + FetchAEProject(); + PK_SCOPEDLOCK(m_Lock); + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + result |= suites.LayerSuite8()->AEGP_GetLayerID(layerH, &dstID); + + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + + for (u32 i = 0; i < m_Layers.Count(); ++i) + { + result |= suites.LayerSuite8()->AEGP_GetLayerID(m_Layers[i]->m_EffectLayer, &existingID); + if (dstID == existingID) + { + existingLayerID = i; + break; + } + } + SLayerHolder *layerHolder = null; + + if (existingLayerID >= 0) + { + layerHolder = m_Layers[existingLayerID]; + layerHolder->m_Scene->Quit(); + layerHolder->m_Scene = null; + } + else + { + layerHolder = PK_NEW(SLayerHolder); + if (!PK_VERIFY(m_Layers.PushBack(layerHolder).Valid())) + return false; + existingLayerID = m_Layers.Count() - 1; + } + if (!PK_VERIFY(layerHolder != null)) + return false; + + layerHolder->m_EffectLayer = layerH; + layerHolder->ID = existingLayerID; + + if (!SetLayerName(layerHolder)) + return false; + if (!SetLayerCompName(layerHolder)) + return false; + CreateLayerPropertyIFP(layerHolder); + + layerHolder->m_Scene = PK_NEW(CAAEScene); + if (!PK_VERIFY(layerHolder->m_Scene != null)) + return false; + layerHolder->m_Scene->SetLayerHolder(layerHolder); + layerHolder->m_ViewMatrix = CFloat4x4::IDENTITY; + layerHolder->m_CameraPos = CFloat4::ZERO; + layerHolder->m_CurrentTime = AAEData.m_InData->current_time; + layerHolder->m_TimeScale = AAEData.m_InData->time_scale; + layerHolder->m_TimeStep = AAEData.m_InData->local_time_step; + + if (layerHolder->m_Scene->Init(AAEData) == false) + return false; + layerHolder->m_Scene->SetEffectDescriptor(desc); + if (layerHolder->m_SpawnedEmitter.m_Desc != null) + { + layerHolder->m_SpawnedEmitter.m_EffectHandle = AAEData.m_InData->effect_ref; + layerHolder->m_SpawnedEmitter.m_Desc = desc; + } + else + { + if (!layerHolder->m_SPendingEmitters.PushBack(SPendingEmitter{ AAEData.m_InData->effect_ref, desc }).Valid()) + return false; + } + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::HandleDeleteEmitterEvent(AAePk::SAAEIOData &AAEData, SEmitterDesc *desc) +{ + (void)AAEData; + + SLayerHolder *layer = GetLayerForSEmitterDesc(desc); + + if (layer) + { + layer->Clear(m_Suites); + + u32 idx = m_Layers.IndexOf(layer); + m_Layers.Remove(idx); + + PK_DELETE(layer); + if (m_Panel != null) + m_Panel->UpdateScenesModel(); + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::HandleNewAttributeEvent(PF_ProgPtr &effectRef, SAttributeDesc *desc, bool asyncMerge /*= true*/, SLayerHolder *layer /*=null*/) +{ + (void)asyncMerge; + AEGP_SuiteHandler suites(m_Suites); + + PK_SCOPEDLOCK(m_Lock); + + if (layer == null) + { + PK_ASSERT(false); + return false; + } + if (layer != null) + { + CStringId id = GetAttributeID(desc); + if (layer->m_SpawnedAttributes.Contains(id)) + { + SPendingAttribute *attr = layer->m_SpawnedAttributes[id]; + attr->m_ParentEffectPtr = effectRef; + + if (attr->m_Desc != null) + { + *(attr->m_Desc) = *desc; + delete (desc); + } + else + { + attr->m_Desc = desc; + } + } + else //Not yet spawned in AE, must do an async merge due to SDK limitations. + { + if (!PK_VERIFY(layer->m_SPendingAttributes.PushBack(SPendingAttribute(effectRef, desc, null)).Valid())) + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::HandleNewAttributeSamplerEvent(PF_ProgPtr &effectRef, SAttributeSamplerDesc *desc, bool asyncMerge, SLayerHolder *layer) +{ + (void)asyncMerge; + AEGP_SuiteHandler suites(m_Suites); + + PK_SCOPEDLOCK(m_Lock); + + if (layer == null) + { + PK_ASSERT(false); + return false; + } + + if (layer != null) + { + CStringId id = GetAttributeID(desc); + if (layer->m_SpawnedAttributesSampler.Contains(id)) + { + SPendingAttribute *attr = layer->m_SpawnedAttributesSampler[id]; + attr->m_ParentEffectPtr = effectRef; + if (attr->m_Desc != null) + { + SAttributeSamplerDesc *descriptor = static_cast(attr->m_Desc); + if (descriptor->m_Descriptor != null) + { + delete(descriptor->m_Descriptor); + descriptor->m_Descriptor = null; + attr->m_Desc->m_IsDeleted = true; + } + *(static_cast(attr->m_Desc)) = *(static_cast(desc)); + delete (desc); + } + else + { + attr->m_Desc = desc; + } + } + else //Not yet spawned in AE, must do an async merge due to SDK limitations. + { + if (!PK_VERIFY(layer->m_SPendingAttributes.PushBack(SPendingAttribute(effectRef, desc, null)).Valid())) + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::HandleNewAttributes(TArray &attributes, PF_ProgPtr &effectRef, SLayerHolder *layer, bool asyncMerge) +{ + for (u32 i = 0; i < attributes.Count(); ++i) + { + attributes[i]->m_Order = attributes.Count() - i - 1; + if (attributes[i]->m_IsAttribute == true) + HandleNewAttributeEvent(effectRef, static_cast(attributes[i]), asyncMerge, layer); + else + HandleNewAttributeSamplerEvent(effectRef, static_cast(attributes[i]), asyncMerge, layer); + + } + return true; +} + +//---------------------------------------------------------------------------- + +SLayerHolder *CPopcornFXWorld::GetLayerForSEmitterDesc(SEmitterDesc *desc) +{ + return GetLayerForSEmitterDescID(CStringId(desc->m_UUID.c_str())); +} + +//---------------------------------------------------------------------------- + +SLayerHolder *CPopcornFXWorld::GetLayerForSEmitterDescID(CStringId id) +{ + for (u32 i = 0; i < m_Layers.Count(); ++i) + { + SLayerHolder &layer = *m_Layers[i]; + if (layer.m_SpawnedEmitter.m_Desc && CStringId(layer.m_SpawnedEmitter.m_Desc->m_UUID.c_str()) == id) + { + return &layer; + } + } + return null; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::CheckEmitterValidity(AAePk::SAAEIOData &AAEData, AAePk::SEmitterDesc *descriptor) +{ + (void)AAEData; + SLayerHolder *layer = GetLayerForSEmitterDesc(descriptor); + + if (layer == null) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::UpdateScene(SAAEIOData &AAEData, SEmitterDesc *desc) +{ + PK_SCOPEDPROFILE(); + if (!InitializeIFN(AAEData)) + return false; + if (m_Layers.Count() == 0) + return true; + if (!PopcornFX::CCurrentThread::IsRegistered()) + { + if (!m_AAETreadID.PushBack(PopcornFX::CCurrentThread::RegisterUserThread()).Valid()) + return false; + } + + SLayerHolder *layer = GetLayerForSEmitterDesc(desc); + AEGP_SuiteHandler suites(m_Suites); + PF_Err result = A_Err_NONE; + A_Time AETime; + + if (layer == null) + return true; + + PK_SCOPEDLOCK(layer->m_LayerLock); + + layer->m_CurrentTime = AAEData.m_InData->current_time; + layer->m_TimeScale = AAEData.m_InData->time_scale; + //Sync Params with current frame + result |= suites.PFInterfaceSuite1()->AEGP_ConvertEffectToCompTime(AAEData.m_InData->effect_ref, layer->m_CurrentTime, layer->m_TimeScale, &AETime); + + AEGP_LayerH cameraLayer = null; + + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectCamera(AAEData.m_InData->effect_ref, &AETime, &cameraLayer); + layer->m_CameraLayer = cameraLayer; + if (desc->m_Name.empty()) + return true; + + A_long dstID = 0; + result |= suites.LayerSuite8()->AEGP_GetLayerID(layer->m_EffectLayer, &dstID); + +#if 1 // Fix for copy paste break everything... + + if (desc->m_LayerID != dstID) + { + AEGP_LayerH layerH = null; + result |= suites.PFInterfaceSuite1()->AEGP_GetEffectLayer(AAEData.m_InData->effect_ref, &layerH); + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + + if (layerH != null) + { + desc->m_LayerID = dstID; + layer->m_EffectLayer = layerH; + + A_long count = 0; + result |= suites.EffectSuite4()->AEGP_GetLayerNumEffects(layer->m_EffectLayer, &count); + + for (A_long j = count - 1; j >= 0; --j) + { + bool disposeEffect = true; + AEGP_EffectRefH effectRef = null; + AEGP_InstalledEffectKey installedKey; + + result |= suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(m_AEGPID, layer->m_EffectLayer, j, &effectRef); + result |= suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(effectRef, &installedKey); + + if (!PK_VERIFY(result == A_Err_NONE)) + { + return false; + } + if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::ATTRIBUTE]) + { + CStringId id = GetAttributeID(effectRef); + if (layer->m_SpawnedAttributes.Contains(id)) + { + SPendingAttribute *attribute = layer->m_SpawnedAttributes[id]; + + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attribute->m_AttributeEffectRef); + attribute->m_AttributeEffectRef = effectRef; + disposeEffect = false; + } + } + else if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::SAMPLER]) + { + CStringId id = GetAttributeSamplerID(effectRef); + if (layer->m_SpawnedAttributesSampler.Contains(id)) + { + SPendingAttribute *sampler = layer->m_SpawnedAttributesSampler[id]; + + result |= suites.EffectSuite4()->AEGP_DisposeEffect(sampler->m_AttributeEffectRef); + sampler->m_AttributeEffectRef = effectRef; + disposeEffect = false; + } + } + else if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::EMITTER]) + { + if (m_Panel) + { + m_Panel->UpdateScenesModel(); + } + } + if (disposeEffect) + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + } + } +#endif + layer->m_SpawnedEmitter.m_EffectHandle = AAEData.m_InData->effect_ref; + +#if TEST_COLOR_PROFILE & 0 + AEGP_CompH compH; + AEGP_ColorProfileP colorProfile; + A_FpShort gamma; + + result |= suites.LayerSuite5()->AEGP_GetLayerParentComp(layer->m_EffectLayer, &compH); + result |= suites.ColorSettingsSuite2()->AEGP_GetNewWorkingSpaceColorProfile(m_AEGPID, compH, &colorProfile); + result |= suites.ColorSettingsSuite2()->AEGP_GetColorProfileApproximateGamma(colorProfile, &gamma); + + //AEGP_MemHandle iccProfile = null; + //result |= suites.ColorSettingsSuite2()->AEGP_GetNewICCProfileFromColorProfile(m_AEGPID, colorProfile, &iccProfile); + //result |= suites.MemorySuite1()->AEGP_FreeMemHandle(iccProfile); + result |= suites.ColorSettingsSuite2()->AEGP_DisposeColorProfile(colorProfile); + +#endif + PAAEScene scene = layer->m_Scene; + + scene->SetLayerHolder(layer); +#if defined (PK_SCALE_DOWN) + layer->m_ScaleFactor = desc->m_ScaleFactor; +#endif + scene->UpdateLight(layer); + scene->UpdateBackdrop(layer, desc); + { + PK_SCOPEDLOCK(GetRenderLock()); + scene->Update(AAEData); + if (AAEData.m_ReturnCode == A_Err_NONE) + { + scene->Render(AAEData); + } + } + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::UpdateEmitter(SAAEIOData &AAEData, SEmitterDesc *desc) +{ + (void)AAEData; + (void)desc; + + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::InvalidateEmitterRender(SLayerHolder *layer , AEGP_EffectRefH effectRef) +{ + if (layer == null) + return false; + + A_Err result = A_Err_NONE; + + AEGP_SuiteHandler suites(m_Suites); + AEGP_StreamRefH streamRef = null; + + A_Time AETime; + + AETime.scale = layer->m_TimeScale; + AETime.value = 0; + + result |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AEGPID, effectRef, CAEUpdater::s_EmitterIndexes[Effect_Parameters_Refresh_Render], &streamRef); + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + + AEGP_StreamValue value; + + result |= suites.StreamSuite2()->AEGP_GetNewStreamValue(m_AEGPID, streamRef, AEGP_LTimeMode_LayerTime, &AETime, TRUE, &value); + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + + value.val.one_d = (int)(value.val.one_d + 1) % 100; + + result |= suites.StreamSuite2()->AEGP_SetStreamValue(m_AEGPID, streamRef, &value); + result |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::InvalidateEmitterRender(SAAEIOData &AAEData, SEmitterDesc *desc) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + AEGP_EffectRefH effectRef = null; + + result = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AEGPID, AAEData.m_InData->effect_ref, &effectRef); + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + bool ret = InvalidateEmitterRender(GetLayerForSEmitterDesc(desc) , effectRef); + + result = suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return ret; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::LaunchEditorAsPopup(AAePk::SAAEIOData &AAEData, SEmitterDesc *desc) +{ + (void)AAEData; + (void)desc; + return CSystemHelper::LaunchEditorAsPopup(); +} + +//---------------------------------------------------------------------------- + +A_Err CPopcornFXWorld::DeathHook(AEGP_GlobalRefcon pluginRefCon, AEGP_DeathRefcon refCon) +{ + (void)refCon; + (void)pluginRefCon; + + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + const A_u_char *commandName = (const A_u_char*)"PopcornFX"; + A_Err result = PF_Err_NONE; + SuiteHelper panelSuite(instance.m_Suites); + + result |= panelSuite->AEGP_UnRegisterCreatePanelHook(commandName); + + instance.ShutdownIFN(); + + if (!PK_VERIFY(result == A_Err_NONE)) + return result; + return result; +} + +//---------------------------------------------------------------------------- + +A_Err CPopcornFXWorld::IdleHook(AEGP_GlobalRefcon pluginRefCon, AEGP_IdleRefcon refCon, A_long *maxSleep) +{ + (void)maxSleep; + (void)refCon; + (void)pluginRefCon; + + A_Err err = A_Err_NONE; + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + + instance.IdleUpdate(); + return err; +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::CreatePanel(AEGP_PlatformViewRef container, AEGP_PanelH panelH, AEGP_PanelFunctions1 *outFunctionTable, AEGP_PanelRefcon *outRefcon) +{ + (void)container; + (void)panelH; + (void)outFunctionTable; + (void)outRefcon; + + CPanelBaseGUI *panel = CPanelBaseGUI::GetInstance(); + + panel->CreatePanel(m_Suites, panelH, container, outFunctionTable); + *outRefcon = reinterpret_cast(panel); +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::Command( AEGP_Command command, + AEGP_HookPriority hookPriority, + A_Boolean alreadyHandled, + A_Boolean *handledP) +{ + (void)handledP; + (void)alreadyHandled; + (void)hookPriority; + + if (command == m_Command) + { + SuiteHelper panelSuites(m_Suites); + + A_Boolean shown = false; + A_Boolean topLevel = false; + + panelSuites->AEGP_IsShown((const A_u_char*)m_CommandName.Data(), &shown, &topLevel); + if (!shown || !topLevel) + panelSuites->AEGP_ToggleVisibility((const A_u_char*)m_CommandName.Data()); + *handledP = true; + } +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::UpdateMenu(AEGP_WindowType activeWindow) +{ + (void)activeWindow; + + SuiteHelper panelSuites(m_Suites); + AEGP_SuiteHandler suites(m_Suites); + + suites.CommandSuite1()->AEGP_EnableCommand(m_Command); + + A_Boolean thumbIsShown = false; + A_Boolean panelIsFront = false; + + panelSuites->AEGP_IsShown((const A_u_char*)m_CommandName.Data(), &thumbIsShown, &panelIsFront); + suites.CommandSuite1()->AEGP_CheckMarkMenuCommand(m_Command, thumbIsShown && panelIsFront); +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::ClearAttributesAndSamplers(SLayerHolder *layer) +{ + PK_ASSERT(layer != null); + + AEGP_SuiteHandler suites(m_Suites); + + for (auto it = layer->m_SpawnedAttributes.Begin(); it != layer->m_SpawnedAttributes.End(); ++it) + { + layer->m_DeletedAttributes.Insert(it.Key(), *it); + it->m_AttributeEffectRef = null; + } + layer->m_SpawnedAttributes.Clear(); + for (auto it = layer->m_SpawnedAttributesSampler.Begin(); it != layer->m_SpawnedAttributesSampler.End(); ++it) + { + layer->m_DeletedAttributesSampler.Insert(it.Key(), *it); + it->m_AttributeEffectRef = null; + } + layer->m_SpawnedAttributesSampler.Clear(); +} + +//---------------------------------------------------------------------------- + +CStringId CPopcornFXWorld::GetAEEffectID(AEGP_EffectRefH &effect, s32 paramIdx) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + AEGP_StreamRefH streamRef = null; + AEGP_MemHandle nameHandle; + + result |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AEGPID, effect, paramIdx, &streamRef); + if (!PK_VERIFY(result == A_Err_NONE)) + return CStringId::Null; + + result |= suites.StreamSuite5()->AEGP_GetStreamName(m_AEGPID, streamRef, false, &nameHandle); + if (!PK_VERIFY(result == A_Err_NONE)) + return CStringId::Null; + result |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + if (!PK_VERIFY(result == A_Err_NONE)) + return CStringId::Null; + streamRef = null; + + aechar_t *wname; + CString name; + + result |= suites.MemorySuite1()->AEGP_LockMemHandle(nameHandle, reinterpret_cast(&wname)); + if (!PK_VERIFY(result == A_Err_NONE)) + return CStringId::Null; + WCharToCString(wname, &name); + + result |= suites.MemorySuite1()->AEGP_UnlockMemHandle(nameHandle); + result |= suites.MemorySuite1()->AEGP_FreeMemHandle(nameHandle); + + if (!PK_VERIFY(result == A_Err_NONE)) + return CStringId::Null; + if (!PK_VERIFY(name.Length() != 0)) + return CStringId::Null; + return CStringId(name.Data()); +} + +//---------------------------------------------------------------------------- + +CStringId CPopcornFXWorld::GetAttributeID(AEGP_EffectRefH &effect) +{ + return GetAEEffectID(effect, Attribute_Parameters_Infernal_Name); +} + +//---------------------------------------------------------------------------- + +CStringId CPopcornFXWorld::GetAttributeSamplerID(AEGP_EffectRefH &effect) +{ + return GetAEEffectID(effect, AttributeSamplerType_Parameters_Infernal_Name); +} + +//---------------------------------------------------------------------------- + +CStringId CPopcornFXWorld::GetAttributeID(SAttributeBaseDesc *desc) +{ + return CStringId(desc->GetAttributePKKey().data()); +} + +//---------------------------------------------------------------------------- + +s32 CPopcornFXWorld::_ExecSPendingEmitters(SLayerHolder *layer) +{ + PK_SCOPEDPROFILE(); + s32 emittersCount = 0; + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + + for (s32 i = layer->m_SPendingEmitters.Count() - 1; i >= 0; --i) + { + A_long count; + SPendingEmitter &emitter = layer->m_SPendingEmitters[i]; + AEGP_LayerFlags flags = AEGP_LayerFlag_NONE; + + result |= suites.LayerSuite8()->AEGP_GetLayerFlags(layer->m_EffectLayer, &flags); + if ((flags & AEGP_LayerFlag_LOCKED) != AEGP_LayerFlag_NONE) + continue; + + result |= suites.EffectSuite4()->AEGP_GetLayerNumEffects(layer->m_EffectLayer, &count); + + for (A_long j = count - 1; j >= 0; --j) + { + AEGP_EffectRefH effectRef = null; + AEGP_InstalledEffectKey installedKey; + PAAEScene scene = layer->m_Scene; + A_Time fake_timeT = { 0, 100 }; + bool releaseEffectHandle = true; + + result |= suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(m_AEGPID, layer->m_EffectLayer, j, &effectRef); + result |= suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(effectRef, &installedKey); + + if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::EMITTER]) + { + if (_SetupAutoRender(effectRef) == false) + return -1; + + layer->m_SpawnedEmitter = emitter; + scene->SetEmitterTeleport(); + scene->SetEmitterPosition(AAEToPK(emitter.m_Desc->m_Position), emitter.m_Desc->m_TransformType); + scene->SetEmitterRotation(AngleAAEToPK(emitter.m_Desc->m_Rotation)); + + if (!emitter.m_Desc->m_PathSource.empty()) + SetDestinationPackFromPath(*layer, CString(emitter.m_Desc->m_PathSource.c_str())); + + bool forceRefresh = false; + if (!emitter.m_Desc->m_PathSource.empty()) + { + CString sourcePackPath(emitter.m_Desc->m_PathSource.data()); + if (!CFilePath::IsAbsolute(emitter.m_Desc->m_PathSource.data())) + sourcePackPath = m_AEProjectPath / sourcePackPath; + + CFilePath::Purify(sourcePackPath); + CProjectSettingsFinder walker(sourcePackPath); + walker.Walk(); + + CString effectName = emitter.m_Desc->m_Name.data(); + if (!m_VaultHandler.LoadEffectIntoVault(sourcePackPath, effectName, walker.ProjectSettingsPath(), forceRefresh)) + return false; + emitter.m_Desc->m_Name = effectName.Data(); + } + scene->RefreshAssetList(); + scene->SetLayerHolder(layer); + scene->SetPack(layer->m_BakedPack, forceRefresh); + scene->SetSelectedEffect(CString(emitter.m_Desc->m_Name.c_str()), forceRefresh); + result |= suites.EffectSuite4()->AEGP_EffectCallGeneric(m_AEGPID, effectRef, &fake_timeT, PF_Cmd_COMPLETELY_GENERAL, emitter.m_Desc); + + SGetEmitterInfos infos; + + result |= suites.EffectSuite4()->AEGP_EffectCallGeneric(m_AEGPID, effectRef, &fake_timeT, PF_Cmd_COMPLETELY_GENERAL, &infos); + + CLog::Log(PK_INFO, "%s", infos.m_PathSource); + } + if (releaseEffectHandle) + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + ++emittersCount; + } + layer->m_SPendingEmitters.Clear(); + + if (!PK_VERIFY(result == A_Err_NONE)) + return -1; + return emittersCount; +} + +//---------------------------------------------------------------------------- + +s32 CPopcornFXWorld::_ExecClearAttributes(SLayerHolder *layer) +{ + PK_SCOPEDPROFILE(); + s32 count = 0; + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + A_long effectCount = 0; + + PK_ASSERT(layer->m_EffectLayer != null); + + result |= suites.EffectSuite4()->AEGP_GetLayerNumEffects(layer->m_EffectLayer, &effectCount); + + for (A_long j = effectCount - 1; j >= 0; --j) + { + AEGP_EffectRefH effectRef = null; + AEGP_InstalledEffectKey installedKey; + + result |= suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(m_AEGPID, layer->m_EffectLayer, j, &effectRef); + result |= suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(effectRef, &installedKey); + + if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::ATTRIBUTE]) + { + CStringId id = GetAttributeID(effectRef); + + if (layer->m_DeletedAttributes.Contains(id)) + { + SPendingAttribute *attr = layer->m_DeletedAttributes[id]; + + if (!_ExecDeleteAttribute(attr, effectRef)) + result |= A_Err_GENERIC; + ++count; + } + else if (layer->m_SpawnedAttributes.Contains(id)) + { + SPendingAttribute *attr = layer->m_SpawnedAttributes[id]; + + if (attr->m_Deleted) + { + if (!_ExecDeleteAttribute(attr, effectRef)) + result |= A_Err_GENERIC; + layer->m_SpawnedAttributes.Remove(id); + } + } + } + else if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::SAMPLER]) + { + CStringId id = GetAttributeSamplerID(effectRef); + + if (layer->m_DeletedAttributesSampler.Contains(id)) + { + SPendingAttribute *attr = layer->m_DeletedAttributesSampler[id]; + + if (!_ExecDeleteAttributeSampler(attr, effectRef)) + result |= A_Err_GENERIC; + ++count; + } + else if (layer->m_SpawnedAttributesSampler.Contains(id)) + { + SPendingAttribute *attr = layer->m_SpawnedAttributesSampler[id]; + + if (attr->m_Deleted) + { + if (!_ExecDeleteAttributeSampler(attr, effectRef)) + result |= A_Err_GENERIC; + layer->m_SpawnedAttributesSampler.Remove(id); + } + } + } + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + layer->m_DeletedAttributes.Clear(); + layer->m_DeletedAttributesSampler.Clear(); + + if (!PK_VERIFY(result == A_Err_NONE)) + return -1; + return count; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::_ExecDeleteAttribute(SPendingAttribute *attribute, AEGP_EffectRefH &effectRef) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + + if (attribute->m_Desc) + attribute->m_Desc->m_IsDeleted = true; + + if (attribute->m_AttributeEffectRef != null) + { + A_Time fake_timeT = { 0, 100 }; + result |= suites.EffectSuite4()->AEGP_EffectCallGeneric(m_AEGPID, attribute->m_AttributeEffectRef, &fake_timeT, PF_Cmd_COMPLETELY_GENERAL, attribute->m_Desc); + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attribute->m_AttributeEffectRef); + attribute->m_AttributeEffectRef = null; + } + result |= suites.EffectSuite4()->AEGP_DeleteLayerEffect(effectRef); + + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return result == A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::_ExecDeleteAttributeSampler(SPendingAttribute *attribute, AEGP_EffectRefH &effectRef) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + + if (attribute->m_Desc) + attribute->m_Desc->m_IsDeleted = true; + + if (attribute->m_AttributeEffectRef != null) + { + A_Time fake_timeT = { 0, 100 }; + result |= suites.EffectSuite4()->AEGP_EffectCallGeneric(m_AEGPID, attribute->m_AttributeEffectRef, &fake_timeT, PF_Cmd_COMPLETELY_GENERAL, attribute->m_Desc); + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attribute->m_AttributeEffectRef); + attribute->m_AttributeEffectRef = null; + PK_SAFE_DELETE(attribute->m_PKDesc); + } + result |= suites.EffectSuite4()->AEGP_DeleteLayerEffect(effectRef); + + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return result == A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +s32 CPopcornFXWorld::_ExecSPendingAttributes(SLayerHolder *layer) +{ + PK_SCOPEDPROFILE(); + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + A_Time fake_timeT = { 0, 100 }; + u32 spawned = 0; + + PK_ASSERT(layer != null); + + for (s32 i = layer->m_SPendingAttributes.Count() - 1; i >= 0 ; --i) + { + SPendingAttribute &attribute = layer->m_SPendingAttributes[i]; + CStringId id = GetAttributeID(layer->m_SPendingAttributes[i].m_Desc); + A_long count; + bool allreadySpawned = false; + + result |= suites.EffectSuite4()->AEGP_GetLayerNumEffects(layer->m_EffectLayer, &count); + + for (A_long j = count - 1; j >= 0; --j) + { + AEGP_EffectRefH attributeRef = null; + AEGP_InstalledEffectKey installedKey; + PAAEScene scene = layer->m_Scene; + + result |= suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(m_AEGPID, layer->m_EffectLayer, j, &attributeRef); + result |= suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(attributeRef, &installedKey); + + if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::ATTRIBUTE]) + { + CStringId spawnedID = GetAttributeID(attributeRef); + + if (spawnedID.ToString() == "AttributeName") //Default value, leave time to after effects to get its thing together. + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attributeRef); + return 0; + } + if (spawnedID == id) + { + attribute.m_AttributeEffectRef = attributeRef; + + if (layer->m_SpawnedAttributes.Contains(id)) + { + if (layer->m_SpawnedAttributes[id]->m_AttributeEffectRef) + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attributeRef); + if (layer->m_SpawnedAttributes[id]->m_Desc) + delete layer->m_SpawnedAttributes[id]->m_Desc; + layer->m_SpawnedAttributes[id]->m_Desc = attribute.m_Desc; + } + else + layer->m_SpawnedAttributes.Insert(id, attribute); + layer->m_SPendingAttributes[i].m_AttributeEffectRef = null; + PK_ASSERT(attribute.m_Desc != null); + + result |= suites.EffectSuite4()->AEGP_EffectCallGeneric(m_AEGPID, layer->m_SpawnedAttributes[id]->m_AttributeEffectRef, &fake_timeT, PF_Cmd_COMPLETELY_GENERAL, attribute.m_Desc); + + layer->m_SPendingAttributes.Remove(i); + allreadySpawned = true; + break; + } + } + else if (installedKey == m_PKInstalledPluginKeys[EPKChildPlugins::SAMPLER]) + { + CStringId spawnedID = GetAttributeSamplerID(attributeRef); + + if (spawnedID.ToString() == "AttributeSamplerName") //Default value, leave time to after effects to get it's thing together. + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attributeRef); + return 0; + } + if (spawnedID == id) + { + attribute.m_AttributeEffectRef = attributeRef; + + if (layer->m_SpawnedAttributesSampler.Contains(id)) + { + if (layer->m_SpawnedAttributesSampler[id]->m_AttributeEffectRef) + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attributeRef); + if (layer->m_SpawnedAttributesSampler[id]->m_Desc) + delete layer->m_SpawnedAttributesSampler[id]->m_Desc; + layer->m_SpawnedAttributesSampler[id]->m_Desc = attribute.m_Desc; + } + else + layer->m_SpawnedAttributesSampler.Insert(id, attribute); + layer->m_SPendingAttributes[i].m_AttributeEffectRef = null; + + PK_ASSERT(attribute.m_Desc != null); + + result |= suites.EffectSuite4()->AEGP_EffectCallGeneric(m_AEGPID, layer->m_SpawnedAttributesSampler[id]->m_AttributeEffectRef, &fake_timeT, PF_Cmd_COMPLETELY_GENERAL, attribute.m_Desc); + allreadySpawned = true; + layer->m_SPendingAttributes.Remove(i); + break; + } + } + result |= suites.EffectSuite4()->AEGP_DisposeEffect(attributeRef); + } + if (allreadySpawned) + continue; + + + if ((attribute.m_Desc->m_IsAttribute && layer->m_SpawnedAttributes.Contains(id)) || + (!attribute.m_Desc->m_IsAttribute && layer->m_SpawnedAttributesSampler.Contains(id))) + continue; + + AEGP_EffectRefH effectRef = null; + + AEGP_LayerFlags flags = AEGP_LayerFlag_NONE; + result |= suites.LayerSuite8()->AEGP_GetLayerFlags(layer->m_EffectLayer, &flags); + + if (attribute.m_Desc->m_IsAttribute) + result |= suites.EffectSuite4()->AEGP_ApplyEffect(m_AEGPID, layer->m_EffectLayer, m_PKInstalledPluginKeys[EPKChildPlugins::ATTRIBUTE], &effectRef); + else + result |= suites.EffectSuite4()->AEGP_ApplyEffect(m_AEGPID, layer->m_EffectLayer, m_PKInstalledPluginKeys[EPKChildPlugins::SAMPLER], &effectRef); + if (result != A_Err_NONE || effectRef == null) + return count; + result |= suites.EffectSuite4()->AEGP_ReorderEffect(effectRef, layer->m_SPendingAttributes[i].m_Desc->m_Order); + result |= suites.EffectSuite4()->AEGP_EffectCallGeneric(m_AEGPID, effectRef, &fake_timeT, PF_Cmd_COMPLETELY_GENERAL, layer->m_SPendingAttributes[i].m_Desc); + attribute.m_AttributeEffectRef = effectRef; + + if (attribute.m_Desc->m_IsAttribute) + layer->m_SpawnedAttributes.Insert(id, attribute); + else + layer->m_SpawnedAttributesSampler.Insert(id, attribute); + attribute.m_AttributeEffectRef = null; + spawned += 1; + } +#if _DEBUG + for (u32 i = 0; i < layer->m_SPendingAttributes.Count(); ++i) + { + PK_ASSERT(!layer->m_SPendingAttributes[i].m_AttributeEffectRef); + } +#endif + layer->m_SPendingAttributes.Clear(); + + if (!PK_VERIFY(result == A_Err_NONE)) + return -1; + return spawned; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::_SetupAutoRender(AEGP_EffectRefH &effect) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + AEGP_StreamRefH streamRef = null; + AEGP_AddKeyframesInfoH KeyFrameOperationHandle; + A_Time start, end; + A_long outIndex; + AEGP_StreamValue2 keyValue; + + result |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AEGPID, effect, CAEUpdater::s_EmitterIndexes[Effect_Parameters_Infernal_Autorender], &streamRef); + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + start.value = 0; + start.scale = 1; + PK_TODO("Handle Max time correctly"); + end.value = 1000; + end.scale = 1; + + result |= suites.KeyframeSuite4()->AEGP_StartAddKeyframes(streamRef, &KeyFrameOperationHandle); + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + if (KeyFrameOperationHandle) + { + //Start + result |= suites.KeyframeSuite4()->AEGP_AddKeyframes(KeyFrameOperationHandle, AEGP_LTimeMode_CompTime, &start, &outIndex); + //End + result |= suites.KeyframeSuite4()->AEGP_AddKeyframes(KeyFrameOperationHandle, AEGP_LTimeMode_CompTime, &end, &outIndex); + result |= suites.KeyframeSuite4()->AEGP_EndAddKeyframes(true, KeyFrameOperationHandle); + } + keyValue.streamH = streamRef; + keyValue.val.one_d = 0; + result |= suites.KeyframeSuite4()->AEGP_SetKeyframeValue(streamRef, 0, &keyValue); + keyValue.val.one_d = 1000; + result |= suites.KeyframeSuite4()->AEGP_SetKeyframeValue(streamRef, 1, &keyValue); + result |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + streamRef = null; + if (!PK_VERIFY(result == A_Err_NONE)) + return false; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetDestinationPackFromPath(SLayerHolder &layer, const CString &packPath) +{ + if (packPath.Empty()) + return false; + CString absolutePath = packPath; + if (!CFilePath::IsAbsolute(packPath)) + { + absolutePath = m_AEProjectPath / absolutePath; + CFilePath::Purify(absolutePath); + } + + layer.m_BakedPack = m_VaultHandler.GetVaultPackFromPath(absolutePath); + PK_ASSERT(layer.m_BakedPack != null); + return true; +} + +//---------------------------------------------------------------------------- + +CString CPopcornFXWorld::GetInternalPackPath() +{ + return GetResourcesPath() + "PopcornFXInternals"; +} + +//---------------------------------------------------------------------------- + +CString CPopcornFXWorld::GetResourcesPath() +{ +#if defined(PK_WINDOWS) + return GetPluginInstallationPath(); +#elif defined(PK_MACOSX) + return GetPluginInstallationPath() + "AE_GeneralPlugin.plugin/Contents/Resources/"; +#endif +} + +//---------------------------------------------------------------------------- + +CString CPopcornFXWorld::GetPluginVersion() const +{ + CString version = PK_VERSION_CURRENT_STRING; + return version; +} + +//---------------------------------------------------------------------------- + +AEGP_InstalledEffectKey CPopcornFXWorld::GetPluginEffectKey(EPKChildPlugins type) const +{ + return m_PKInstalledPluginKeys[type]; +} + +//---------------------------------------------------------------------------- + +CString CPopcornFXWorld::GetPluginInstallationPath() +{ + return m_AEPath / "Plug-ins/PopcornFX/"; +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::RefreshAssetList() +{ + for (u32 i = 0; i < m_Layers.Count(); ++i) + { + PAAEScene scene = m_Layers[i]->m_Scene; + scene->RefreshAssetList(); + } +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetSelectedEffectFromPath(SEmitterDesc *desc, CString path, bool forceReload) +{ + CFilePath::Purify(path); + + //Doesn't work with absolute path + //if (!CFilePath::IsValidPath(path)) + // return false; + + CString root = CFilePath::StripFilename(path); + CString pkprojPath = ""; + + if (!CFilePath::IsAbsolute(root)) + { + root = m_AEProjectPath / root; + CFilePath::Purify(root); + } + if (!CFilePath::IsAbsolute(path)) + { + path = m_AEProjectPath / path; + CFilePath::Purify(path); + } + + while (root != "") + { + CProjectSettingsFinder walker(root); + + walker.Walk(); + + if (!walker.ProjectSettingsPath().Empty()) + { + pkprojPath = walker.ProjectSettingsPath(); + + root = CFilePath::StripFilename(pkprojPath); + CLog::Log(PK_INFO, "Pkproj found"); + break; + } + CFilePath::StripFilenameInPlace(root); + } + if (!root.Empty()) + { + CString effectPath; + + effectPath = CFilePath::Relativize(root.Data(), path.Data()); + + TArray unload; + bool needUnload = true; + for (u32 i = 0; i < m_Layers.Count(); ++i) + { + if (m_Layers[i]->m_SpawnedEmitter.m_Desc == null) + continue; + if (effectPath.Compare(m_Layers[i]->m_SpawnedEmitter.m_Desc->m_Name.c_str(), CaseInsensitive) == true) + { + if (!PK_VERIFY(unload.PushBack(m_Layers[i]).Valid())) + return false; + PK_SCOPEDLOCK(m_Layers[i]->m_LayerLock); + needUnload = m_Layers[i]->m_Scene->ResetEffect(needUnload); + } + } + PK_ASSERT(effectPath != null); + bool needRefresh = forceReload; + if (!m_VaultHandler.LoadEffectIntoVault(root, effectPath, pkprojPath, needRefresh)) + return false; + + CString pathDest = (m_VaultHandler.VaultPathCache() / CFilePath::ExtractFilename(root)).Data(); + + for (u32 i = 0; i < unload.Count(); ++i) + { + SLayerHolder *layer = unload[i]; + + if (layer != null) + { + CString relativeSrcPath = CFilePath::Relativize(m_AEProjectPath.Data(), root.Data()); + + desc->m_PathSource = !relativeSrcPath.Empty() ? relativeSrcPath.Data() : root.Data(); + desc->m_ReloadEffect = forceReload; + SetSelectedEffect(layer, effectPath); + } + } + SLayerHolder *layer = GetLayerForSEmitterDesc(desc); + if (layer != null && !unload.Contains(layer)) + { + if (layer != null) + { + CString relativeSrcPath = CFilePath::Relativize(m_AEProjectPath.Data(), root.Data()); + + desc->m_PathSource = !relativeSrcPath.Empty() ? relativeSrcPath.Data() : root.Data(); + desc->m_ReloadEffect = forceReload; + SetSelectedEffect(layer, effectPath); + } + } + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetSelectedEffectAsync(SLayerHolder *targetLayer, CString &name) +{ + PK_ASSERT(targetLayer != null); + + PK_SCOPEDLOCK(m_UIEventLock); + + SUIEventString *event = PK_NEW(SUIEventString); + + event->m_TargetLayer = targetLayer; + event->m_Cb = FastDelegate(this, &CPopcornFXWorld::SetSelectedEffect); + event->m_Data = name; + + return m_UIEvents.PushBack(event).Valid(); +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetEffectDefaultTransform(SLayerHolder *layer, const CFloat3 &position, const CFloat3 &rotation) +{ + (void)rotation; + if (layer == null) + return false; + + AEGP_SuiteHandler suites(m_Suites); + A_Err result = A_Err_NONE; + A_Time time; + + time.value = 0; + time.scale = layer->m_TimeScale; + + A_long effectCount = 0; + result |= suites.EffectSuite4()->AEGP_GetLayerNumEffects(layer->m_EffectLayer, &effectCount); + + for (A_long j = effectCount - 1; j >= 0; --j) + { + AEGP_EffectRefH effectRef = null; + AEGP_InstalledEffectKey installedKey; + + result |= suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(m_AEGPID, layer->m_EffectLayer, j, &effectRef); + result |= suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(effectRef, &installedKey); + + if (installedKey == GetPluginEffectKey(EPKChildPlugins::EMITTER)) + { + CFloat4x4 viewMatrix; + CFloat4 cameraPos; + float cameraZoom = 0.f; + + CAEUpdater::GetCameraViewMatrixAtTime(layer, viewMatrix, cameraPos, time, cameraZoom); + + CFloat3 forward = viewMatrix.Inverse().StrippedZAxis().Normalized(); + + CFloat3 emitterPos = cameraPos.xyz() + forward * position.Length(); + + AEGP_StreamRefH streamPos = null; + result |= suites.StreamSuite5()->AEGP_GetNewEffectStreamByIndex(m_AEGPID, effectRef, CAEUpdater::s_EmitterIndexes[Effect_Parameters_Position], &streamPos); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE || streamPos == null) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + AEGP_StreamValue2 value; + result |= suites.StreamSuite5()->AEGP_GetNewStreamValue(m_AEGPID, streamPos, AEGP_LTimeMode_LayerTime, &time, false, &value); + if (result != A_Err_NONE) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + value.val.three_d.x = emitterPos.x(); + value.val.three_d.y = emitterPos.y(); + value.val.three_d.z = emitterPos.z(); + result |= suites.StreamSuite5()->AEGP_SetStreamValue(m_AEGPID, streamPos, &value); + if (result != A_Err_NONE) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + result |= suites.StreamSuite5()->AEGP_DisposeStreamValue(&value); + result |= suites.StreamSuite5()->AEGP_DisposeStream(streamPos); + } + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + + } + return true; +} + + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetBackdropMeshDefaultTransform(SLayerHolder *layer) +{ + if (layer == null) + return false; + + AEGP_SuiteHandler suites(m_Suites); + A_Err result = A_Err_NONE; + A_Time time; + + time.value = 0; + time.scale = layer->m_TimeScale; + + A_long effectCount = 0; + result |= suites.EffectSuite4()->AEGP_GetLayerNumEffects(layer->m_EffectLayer, &effectCount); + + for (A_long j = effectCount - 1; j >= 0; --j) + { + AEGP_EffectRefH effectRef = null; + AEGP_InstalledEffectKey installedKey; + + result |= suites.EffectSuite4()->AEGP_GetLayerEffectByIndex(m_AEGPID, layer->m_EffectLayer, j, &effectRef); + result |= suites.EffectSuite4()->AEGP_GetInstalledKeyFromLayerEffect(effectRef, &installedKey); + + if (installedKey == GetPluginEffectKey(EPKChildPlugins::EMITTER)) + { + A_FloatPoint3 emitterPos = layer->m_SpawnedEmitter.m_Desc->m_Position; + + AEGP_StreamRefH streamPos = null; + result |= suites.StreamSuite5()->AEGP_GetNewEffectStreamByIndex(m_AEGPID, effectRef, CAEUpdater::s_EmitterIndexes[Effect_Parameters_BackdropMesh_Position], &streamPos); + PK_ASSERT(result == A_Err_NONE); + if (result != A_Err_NONE || streamPos == null) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + AEGP_StreamValue2 value; + result |= suites.StreamSuite5()->AEGP_GetNewStreamValue(m_AEGPID, streamPos, AEGP_LTimeMode_LayerTime, &time, false, &value); + if (result != A_Err_NONE) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + value.val.three_d.x = emitterPos.x; + value.val.three_d.y = emitterPos.y; + value.val.three_d.z = emitterPos.z; + result |= suites.StreamSuite5()->AEGP_SetStreamValue(m_AEGPID, streamPos, &value); + if (result != A_Err_NONE) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + return false; + } + result |= suites.StreamSuite5()->AEGP_DisposeStreamValue(&value); + result |= suites.StreamSuite5()->AEGP_DisposeStream(streamPos); + } + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetSelectedEffect(SLayerHolder *layer, CString &fileName) +{ + if (layer != null) + { + PK_SCOPEDLOCK(layer->m_LayerLock); + SEmitterDesc *desc = layer->m_SpawnedEmitter.m_Desc; + CString name = CFilePath::StripExtension(fileName); + if (desc) + { + bool setTransform = false; + CString oldName = CFilePath::StripExtension(CString(desc->m_Name.c_str())); + if (!name.Compare(oldName)) + { + setTransform = true; + ClearAttributesAndSamplers(layer); + if (layer->m_LayerProperty != null) + { + CLayerProperty::_TypeOfRendererProperties overrides = layer->m_LayerProperty->RendererProperties(); + + overrides.Clear(); + layer->m_LayerProperty->SetRendererProperties(overrides); + } + } + + SetDestinationPackFromPath(*layer, layer->m_SpawnedEmitter.m_Desc->m_PathSource.data()); + if (!layer->m_Scene->SetPack(layer->m_BakedPack, desc->m_ReloadEffect)) + return false; + + //Set Default Effect position according to the Editor + { + //Load Editor information into the effect + if (setTransform) + { + IFileSystem *fileSystem = File::DefaultFileSystem(); + CString pkboPath = layer->m_BakedPack->Path() / name + ".pkbo"; + u32 rawFileSize = 0; + u8 *rawFileBuffer = fileSystem->Bufferize(pkboPath, &rawFileSize, true); + if (rawFileBuffer != null) + { + CConstMemoryStream memoryFileView(rawFileBuffer, rawFileSize); + + PBaseObjectFile pkboFile = layer->m_Scene->GetContext()->LoadFileFromStream(memoryFileView, pkboPath); + PEditorAssetEffect editorProp = pkboFile->FindFirstOf(); + + CFloat3 emitterDefaultPosition = -editorProp->StartCameraPosition(); + CFloat3 emitterDefaultOrientation = -editorProp->StartCameraOrientation(); + + SetEffectDefaultTransform(layer, emitterDefaultPosition, emitterDefaultOrientation); + } + } + } + + + if (!layer->m_Scene->SetSelectedEffect(fileName, desc->m_ReloadEffect)) + return false; + + desc->m_Name = fileName.Data(); + desc->m_Update = true; + return true; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +// - OpenGL resources are restricted per thread, mimicking the OGL driver +// - The filter will eliminate all TLS (Thread Local Storage) at PF_Cmd_GLOBAL_SETDOWN +PAAERenderContext CPopcornFXWorld::GetCurrentRenderContext() +{ + // Lazy init: + if (s_AAEThreadRenderContexts == null) + { + s_AAEThreadRenderContexts = PK_NEW(CAAERenderContext); + s_ShaderLoader = PK_NEW(PKSample::CShaderLoader); + + if (!PK_VERIFY(s_AAEThreadRenderContexts != null && s_ShaderLoader != null)) + return null; + + s_AAEThreadRenderContexts->SetShaderLoader(s_ShaderLoader); + + if (!PK_VERIFY(s_AAEThreadRenderContexts->InitializeIFN(GetRenderApi(), CString::Format("PopcornFXRendering")))) + return null; + } + return s_AAEThreadRenderContexts; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetPanelInstance(CPanelBaseGUI *panel) +{ + m_Panel = panel; + return true; +} + +//---------------------------------------------------------------------------- + +A_Err CPopcornFXWorld::CreatePanelHook( AEGP_GlobalRefcon pluginRefconP, + AEGP_CreatePanelRefcon refconP, + AEGP_PlatformViewRef container, + AEGP_PanelH panelH, + AEGP_PanelFunctions1 *outFunctionTable, + AEGP_PanelRefcon *outRefcon) +{ + (void)pluginRefconP; + (void)refconP; + + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + + instance.CreatePanel(container, panelH, outFunctionTable, outRefcon); + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +A_Err CPopcornFXWorld::CommandHook( AEGP_GlobalRefcon plugin_refconP, + AEGP_CommandRefcon refconP, + AEGP_Command command, + AEGP_HookPriority hook_priority, + A_Boolean already_handledB, + A_Boolean *handledPB) +{ + (void)refconP; + (void)plugin_refconP; + + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + + instance.Command(command, hook_priority, already_handledB, handledPB); + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +A_Err CPopcornFXWorld::UpdateMenuHook(AEGP_GlobalRefcon pluginRefconP, + AEGP_UpdateMenuRefcon refconP, + AEGP_WindowType activeWindow) +{ + (void)refconP; + (void)pluginRefconP; + + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + + instance.UpdateMenu(activeWindow); + return A_Err_NONE; +} + +//---------------------------------------------------------------------------- + +void CPopcornFXWorld::OnEndSetupScene() +{ + if (m_Panel) + { + m_Panel->UpdateScenesModel(); + } +} + +const PBaseObjectFile &CPopcornFXWorld::GetProjectConfFile() +{ + return m_ProjectConfFile; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::GetMostRecentCompName(CString &compName) +{ + AEGP_SuiteHandler suites(m_Suites); + AEGP_CompH compH = null; + AEGP_ItemH itemH = null; + AEGP_MemHandle memH = null; + aechar_t *compositionNameAE = null; + CString compositionName = ""; + PF_Err result = A_Err_NONE; + result |= suites.CompSuite11()->AEGP_GetMostRecentlyUsedComp(&compH); + if (result != A_Err_NONE) + return false; + if (compH != null) + { + result |= suites.CompSuite11()->AEGP_GetItemFromComp(compH, &itemH); + if (result != A_Err_NONE) + return false; + result |= suites.ItemSuite9()->AEGP_GetItemName(m_AEGPID, itemH, &memH); + + result |= suites.MemorySuite1()->AEGP_LockMemHandle(memH, reinterpret_cast(&compositionNameAE)); + + WCharToCString(compositionNameAE, &compositionName); + + result |= suites.MemorySuite1()->AEGP_UnlockMemHandle(memH); + result |= suites.MemorySuite1()->AEGP_FreeMemHandle(memH); + + compName = compositionName; + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetLayerName(SLayerHolder *layer) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + AEGP_ItemH itemH = null; + AEGP_MemHandle memH = null; + aechar_t *layerNameAE = null; + CString layerName = ""; + + result |= suites.LayerSuite8()->AEGP_GetLayerSourceItem(layer->m_EffectLayer, &itemH); + if (result != A_Err_NONE) + return false; + + result |= suites.ItemSuite9()->AEGP_GetItemName(m_AEGPID, itemH, &memH); + if (result != A_Err_NONE) + return false; + + result |= suites.MemorySuite1()->AEGP_LockMemHandle(memH, reinterpret_cast(&layerNameAE)); + if (result != A_Err_NONE) + return false; + + WCharToCString(layerNameAE, &layerName); + + result |= suites.MemorySuite1()->AEGP_UnlockMemHandle(memH); + if (result != A_Err_NONE) + return false; + result |= suites.MemorySuite1()->AEGP_FreeMemHandle(memH); + if (result != A_Err_NONE) + return false; + + layer->m_LayerName = layerName; + + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetLayerCompName(SLayerHolder *layer) +{ + A_Err result = A_Err_NONE; + AEGP_SuiteHandler suites(m_Suites); + AEGP_CompH compH = null; + AEGP_ItemH itemH = null; + AEGP_MemHandle memH = null; + aechar_t *compositionNameAE = null; + CString compositionName = ""; + result |= suites.LayerSuite5()->AEGP_GetLayerParentComp(layer->m_EffectLayer, &compH); + if (result != A_Err_NONE) + return false; + result |= suites.CompSuite11()->AEGP_GetItemFromComp(compH, &itemH); + if (result != A_Err_NONE) + return false; + result |= suites.ItemSuite9()->AEGP_GetItemName(m_AEGPID, itemH, &memH); + if (result != A_Err_NONE) + return false; + result |= suites.MemorySuite1()->AEGP_LockMemHandle(memH, reinterpret_cast(&compositionNameAE)); + if (result != A_Err_NONE) + return false; + WCharToCString(compositionNameAE, &compositionName); + + result |= suites.MemorySuite1()->AEGP_UnlockMemHandle(memH); + if (result != A_Err_NONE) + return false; + result |= suites.MemorySuite1()->AEGP_FreeMemHandle(memH); + if (result != A_Err_NONE) + return false; + layer->m_CompositionName = compositionName; + if (m_MostRecentCompName != compositionName) + { + if (m_Panel) + m_Panel->UpdateScenesModel(); + m_MostRecentCompName = compositionName; + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::CreateLayerPropertyIFP(SLayerHolder *layer) +{ + if (m_ProjectProperty == null) + return false; + + // Go through all objects in file: + for (const auto &obj : m_ProjectProperty->LayerProperties()) + { + if (obj->ID() == layer->ID && + obj->CompName() == layer->m_CompositionName) + layer->m_LayerProperty = obj.Get(); + + } + if (layer->m_LayerProperty == null) + { + CAEPProjectProperties::_TypeOfLayerProperties LayerProps = m_ProjectProperty->LayerProperties(); + PLayerProperty prop = m_ProjectProperty->File()->Context()->NewObject(m_ProjectConfFile.Get()); + + if (!LayerProps.PushBack(prop).Valid()) + return false; + layer->m_LayerProperty = prop; + + prop->SetCompName(layer->m_CompositionName); // Useless ? + prop->SetID(layer->ID); + + m_ProjectProperty->SetLayerProperties(LayerProps); + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::SetResourceOverride(CStringId layerID, u32 rdrID, u32 propID, const CString &value) +{ + IFileSystem *fileSystem = File::DefaultFileSystem(); + SLayerHolder *layerHolder = GetLayerForSEmitterDescID(layerID); + + if (layerHolder == null || layerHolder->m_LayerProperty == null) + return false; + + PK_SCOPEDLOCK(layerHolder->m_LayerLock); + CLayerProperty::_TypeOfRendererProperties overrides = layerHolder->m_LayerProperty->RendererProperties(); + CGraphicOverride *existingOverride = null; + bool updated = false; + for (const auto &entry : overrides) + { + if (entry->RendererID() == rdrID && entry->PropertyID() == propID) + { + existingOverride = entry.Get(); + if (value.Empty()) + { + overrides.RemoveElementFromRawPointerInArray_AndKeepOrder(&entry); + layerHolder->m_LayerProperty->SetRendererProperties(overrides); + updated = true; + } + break; + } + } + + if (!value.Empty()) + { + AEGPPk::SResourceBakeConfig bakeConfig; + bakeConfig.m_StraightCopy = true; + CString virtualPath = fileSystem->PhysicalToVirtual(value); + if (virtualPath == null) //Not in loaded packs, bake into resources folder + { + virtualPath = fileSystem->PhysicalToVirtual(GetVaultHandler().BakeResource(value, bakeConfig)); + } + if (existingOverride != null) + { + if (!existingOverride->Value().Compare(virtualPath)) + { + existingOverride->SetValue(virtualPath); + updated = true; + } + } + else + { + PGraphicOverride prop = m_ProjectProperty->File()->Context()->NewObject(m_ProjectConfFile.Get()); + + prop->SetRendererID(rdrID); + prop->SetPropertyID(propID); + prop->SetValue(virtualPath); + + if (!overrides.PushBack(prop).Valid()) + return false; + + layerHolder->m_LayerProperty->SetRendererProperties(overrides); + updated = true; + } + } + if (updated) + { + layerHolder->m_ForceRender = true; + WriteProjectFileModification(); + layerHolder->m_Scene->SetupScene(true, true); + + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CPopcornFXWorld::WriteProjectFileModification() +{ + if (m_ProjectConfFile == null) + return false; + IFileSystem *fs = File::DefaultFileSystem(); + + if (fs->Exists(m_AEProjectPath, true)) + { + if (!PK_VERIFY(HBO::g_Context->WriteFile(m_ProjectConfFile.Get(), m_ProjectConfFile->Path()))) + return false; + } + return true; +} + +//---------------------------------------------------------------------------- +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/AE_GeneralPlugin.plugin-Info.plist b/AE_GeneralPlugin/Sources/AE_GeneralPlugin.plugin-Info.plist new file mode 100644 index 00000000..129eef34 --- /dev/null +++ b/AE_GeneralPlugin/Sources/AE_GeneralPlugin.plugin-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleExecutable + Main + CFBundleIdentifier + com.PersistantStudio.PopcornFX.Main + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + AE_GeneralPlugin + CFBundlePackageType + AEgx + CFBundleSignature + FXTC + LSRequiresCarbon + + NSAppleScriptEnabled + No + NSHumanReadableCopyright + © PersistantStudio PopcornFX + + diff --git a/AE_GeneralPlugin/Sources/AE_GeneralPlugin_PiPL.r b/AE_GeneralPlugin/Sources/AE_GeneralPlugin_PiPL.r new file mode 100644 index 00000000..bb8ce5ab --- /dev/null +++ b/AE_GeneralPlugin/Sources/AE_GeneralPlugin_PiPL.r @@ -0,0 +1,41 @@ +#include "AEConfig.h" +#include "AE_EffectVers.h" + +#ifndef AE_OS_WIN + #include +#endif + +resource 'PiPL' (16000) { + { /* array properties: 7 elements */ + /* [1] */ + Kind { + AEGP + }, + /* [2] */ + Name { + "PopcornFX" + }, + /* [3] */ + Category { + "Particle Plugin" + }, + /* [4] */ + Version { + 65536 + }, + /* [5] */ +#ifdef AE_OS_WIN + #ifdef AE_PROC_INTELx64 + CodeWin64X86 {"EntryPointFunc"}, + #else + CodeWin32X86 {"EntryPointFunc"}, + #endif +#else + #ifdef AE_OS_MAC + CodeMachOPowerPC {"EntryPointFunc"}, + CodeMacIntel32 {"EntryPointFunc"}, + CodeMacIntel64 {"EntryPointFunc"}, + #endif +#endif + } +}; diff --git a/AE_GeneralPlugin/Sources/Panels/AEGP_GraphicalResourcesTreeModel.cpp b/AE_GeneralPlugin/Sources/Panels/AEGP_GraphicalResourcesTreeModel.cpp new file mode 100644 index 00000000..fa26bb72 --- /dev/null +++ b/AE_GeneralPlugin/Sources/Panels/AEGP_GraphicalResourcesTreeModel.cpp @@ -0,0 +1,931 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include + +#include "Panels/AEGP_GraphicalResourcesTreeModel.h" +#include "AEGP_World.h" +#include "AEGP_Scene.h" +#include "AEGP_LayerHolder.h" +#include "AEGP_AEPKConversion.h" + +#include + +#include + +//---------------------------------------------------------------------------- + +__AEGP_PK_BEGIN + +const QSize kGraphicResourceThumbSize = QSize(35, 35); +const QSize kResetButtonSize = QSize(16, 16); + +//---------------------------------------------------------------------------- + +CGraphicResetButtonView::CGraphicResetButtonView() +{ + m_Pixmap = QPixmap(":/icons/reset.png"); +} + +//---------------------------------------------------------------------------- + +void CGraphicResetButtonView::paint(QPainter *painter, const QRect &rect, const QPalette &palette, bool hover) const +{ + (void)palette; + (void)hover; + const QRect displayRect = QRect(QPoint(rect.x(), rect.y()), sizeHint()).adjusted(1, 1, -1, -1); + painter->drawPixmap(displayRect, m_Pixmap); +} + +//---------------------------------------------------------------------------- + +QSize CGraphicResetButtonView::sizeHint() const +{ + return kResetButtonSize + QSize(2, 2); +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +CGraphicResourceView::CGraphicResourceView() + : m_Type(CGraphicResourceView::ViewType::ViewType_Effect) +{ + +} + +//---------------------------------------------------------------------------- + +CGraphicResourceView::CGraphicResourceView(CGraphicResourceView::ViewType type) + : m_Type(type) +{ + +} + +//---------------------------------------------------------------------------- + +CGraphicResourceView::CGraphicResourceView(CGraphicResourceView::ViewType type, const QPixmap &pixmap) + : m_Type(type) + , m_Pixmap(pixmap) +{ + +} + +//---------------------------------------------------------------------------- + +static s32 _Align(s32 v, s32 alignment) +{ + return v - v % alignment; +} + +//---------------------------------------------------------------------------- + +static void _DrawCheckerboard( QPainter &painter, const QRect &displayRect, const QRect &visibleRect, + const QColor &baseColor, const QColor &alternateColor, s32 patternSize) +{ + PK_ASSERT(patternSize > 0); + const s32 offsetX = displayRect.left(); + const s32 offsetY = displayRect.top(); + for (s32 py = visibleRect.top(), stopY = visibleRect.bottom(); py <= stopY; ) + { + const s32 startY = py; + const s32 endY = PKMin(stopY + 1, _Align(startY - offsetY + patternSize, patternSize) + offsetY); + for (s32 px = visibleRect.left(), stopX = visibleRect.right(); px <= stopX; ) + { + const s32 startX = px; + const s32 endX = PKMin(stopX + 1, _Align(startX - offsetX + patternSize, patternSize) + offsetX); + + const s32 tileIdX = (px - offsetX) / patternSize; + const s32 tileIdY = (py - offsetY) / patternSize; + const bool evenTile = ((tileIdX ^ tileIdY) & 1) != 0; + + const QRect tileRect(startX, startY, endX - startX, endY - startY); + const QColor tileColor = evenTile ? baseColor : alternateColor; + painter.fillRect(tileRect, tileColor); + + px = endX; + } + py = endY; + } +} + +void CGraphicResourceView::paint(QPainter *painter, const QRect &rect, const QPalette &palette, bool hover) const +{ + (void)palette; + + if (m_Type == ViewType::ViewType_PathResource) + { + if (hover) + { + QPixmap pix = QPixmap(sizeHint()); + pix.fill(QColor(255, 255, 255, 128)); + const QRect displayRect = QRect(QPoint(rect.x(), rect.y()), sizeHint()); + painter->drawPixmap(displayRect, pix); + } + + // Display a checkerboard background + const QColor chkColorA = QColor(0x30, 0x30, 0x30, 0xFF); + const QColor chkColorB = QColor(0x40, 0x40, 0x40, 0xFF); + const QRect displayRect = QRect(QPoint(rect.x(), rect.y()), sizeHint()).adjusted(1, 1, -1, -1); + const QRect visibleRect = displayRect & rect; + + _DrawCheckerboard(*painter, displayRect, visibleRect, chkColorA, chkColorB, 5); + + painter->drawPixmap(displayRect, m_Pixmap); + } +} + +//---------------------------------------------------------------------------- + +QSize CGraphicResourceView::sizeHint() const +{ + if (m_Type == ViewType::ViewType_PathResource) + return kGraphicResourceThumbSize + QSize(2, 2); + + return 0.1f/*PaintingScaleFactor*/ * QSize(1, 1); +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +void CGraphicResourceDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + if (index.data().canConvert()) + { + CGraphicResourceView item = qvariant_cast(index.data()); + item.paint(painter, option.rect, option.palette, option.state & QStyle::State_MouseOver); + } + if (index.data().canConvert()) + { + CGraphicResetButtonView item = qvariant_cast(index.data()); + item.paint(painter, option.rect, option.palette, option.state & QStyle::State_MouseOver); + } + else + { + //Remove Selected and MouseOver state for visual + QStyleOptionViewItem modifiedOption = option; + modifiedOption.state &= ~QStyle::State_Selected; + modifiedOption.state &= ~QStyle::State_MouseOver; + modifiedOption.state &= ~QStyle::State_HasFocus; + + QStyledItemDelegate::paint(painter, modifiedOption, index); + } +} + +//---------------------------------------------------------------------------- + +QSize CGraphicResourceDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + if (index.data().canConvert()) + { + CGraphicResourceView item = qvariant_cast(index.data()); + return item.sizeHint(); + } + return QStyledItemDelegate::sizeHint(option, index); +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem::CGraphicalResourcesTreeItem() + : m_ParentItem(null) +{ +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem::CGraphicalResourcesTreeItem(const QVector &data, CGraphicalResourcesTreeItem *parentItem) + : m_ItemData(data) + , m_ParentItem(parentItem) +{ +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem::~CGraphicalResourcesTreeItem() +{ + qDeleteAll(m_ChildItems); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeItem::AppendChild(CGraphicalResourcesTreeItem *child) +{ + m_ChildItems.append(child); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeItem::InsertChild(CGraphicalResourcesTreeItem *child, int index) +{ + m_ChildItems.insert(index, child); +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem *CGraphicalResourcesTreeItem::Child(int row) +{ + if (row < 0 || row >= m_ChildItems.size()) + return nullptr; + return m_ChildItems.at(row); +} + +//---------------------------------------------------------------------------- + +int CGraphicalResourcesTreeItem::ChildCount() const +{ + return m_ChildItems.count(); +} + +//---------------------------------------------------------------------------- + +int CGraphicalResourcesTreeItem::ColumnCount() const +{ + return m_ItemData.count(); +} + +//---------------------------------------------------------------------------- + +QVariant CGraphicalResourcesTreeItem::Data(int column) const +{ + //Crash on close + if (column < 0 || column >= m_ItemData.size()) + return QVariant(); + return m_ItemData.at(column); +} + +//---------------------------------------------------------------------------- + +int CGraphicalResourcesTreeItem::Row() const +{ + if (m_ParentItem) + return m_ParentItem->m_ChildItems.indexOf(const_cast(this)); // yuck, ugly + + return 0; +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem *CGraphicalResourcesTreeItem::ParentItem() +{ + return m_ParentItem; +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeItem::ClearChildren() +{ + qDeleteAll(m_ChildItems); + m_ChildItems.clear(); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeItem::RemoveChild(int index) +{ + delete m_ChildItems[index]; + m_ChildItems.remove(index); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeItem::RemoveChildren(int from, int count) +{ + for (int i = from; i < from + count; ++i) + delete m_ChildItems[i]; + m_ChildItems.remove(from, count); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeItem::SetData(int column, const QVariant &data) +{ + if (column < 0 || column >= m_ItemData.size()) + return; + m_ItemData[column] = data; +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeModel::CGraphicalResourcesTreeModel(QObject *parent) + : QAbstractItemModel(parent) + , m_RootItem(null) +{ + m_RootItem = new CGraphicalResourcesTreeItem({ tr("Layer"), tr("Path"), QVariant::fromValue(CGraphicResourceView(CGraphicResourceView::ViewType::ViewType_Effect)), tr("") }); +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeModel::~CGraphicalResourcesTreeModel() +{ + if (m_RootItem) + delete m_RootItem; +} + +//---------------------------------------------------------------------------- + +QVariant CGraphicalResourcesTreeModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role != Qt::DisplayRole) + return QVariant(); + + CGraphicalResourcesTreeItem *item = static_cast(index.internalPointer()); + + return item->Data(index.column()); +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem *CGraphicalResourcesTreeModel::Item(const QModelIndex &index) const +{ + if (!index.isValid()) + return null; + + CGraphicalResourcesTreeItem *item = static_cast(index.internalPointer()); + + return item; +} + +//---------------------------------------------------------------------------- + +QModelIndex CGraphicalResourcesTreeModel::Index(CGraphicalResourcesTreeItem *item) const +{ + if (item == m_RootItem) + return QModelIndex(); + + return index(item->Row(), 0, Index(item->ParentItem())); +} + +//---------------------------------------------------------------------------- + +Qt::ItemFlags CGraphicalResourcesTreeModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::NoItemFlags; + + return QAbstractItemModel::flags(index); +} + +//---------------------------------------------------------------------------- + +QVariant CGraphicalResourcesTreeModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) + return m_RootItem->Data(section); + + return QVariant(); +} + +//---------------------------------------------------------------------------- + +QModelIndex CGraphicalResourcesTreeModel::index(int row, int column, const QModelIndex &parent) const +{ + if (!hasIndex(row, column, parent)) + return QModelIndex(); + + CGraphicalResourcesTreeItem *parentItem; + + if (!parent.isValid()) + parentItem = m_RootItem; + else + parentItem = static_cast(parent.internalPointer()); + + CGraphicalResourcesTreeItem *childItem = parentItem->Child(row); + if (childItem) + return createIndex(row, column, childItem); + return QModelIndex(); +} + +//---------------------------------------------------------------------------- + +QModelIndex CGraphicalResourcesTreeModel::parent(const QModelIndex &index) const +{ + if (!index.isValid()) + return QModelIndex(); + + CGraphicalResourcesTreeItem *childItem = static_cast(index.internalPointer()); + if (childItem == m_RootItem) + return QModelIndex(); + + CGraphicalResourcesTreeItem *parentItem = childItem->ParentItem(); + + if (parentItem == m_RootItem) + return QModelIndex(); + + return createIndex(parentItem->Row(), 0, parentItem); +} + +//---------------------------------------------------------------------------- + +int CGraphicalResourcesTreeModel::rowCount(const QModelIndex &parent) const +{ + CGraphicalResourcesTreeItem *parentItem; + if (parent.column() > 0) + return 0; + + if (!parent.isValid()) + parentItem = m_RootItem; + else + parentItem = static_cast(parent.internalPointer()); + + return parentItem->ChildCount(); +} + +//---------------------------------------------------------------------------- + +int CGraphicalResourcesTreeModel::columnCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return static_cast(parent.internalPointer())->ColumnCount(); + return m_RootItem->ColumnCount(); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeModel::UpdateModel() +{ + if (m_RootItem == null) + return; + + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + CString compositionName = ""; + + if (!instance.GetMostRecentCompName(compositionName)) + return; + + const bool reset = compositionName != m_CompositionName; + + m_CompositionName = compositionName; + if (!reset) + _UpdateModel(); + else + _ResetModel(); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeModel::_UpdateModel() +{ + _UnflagUpdated(m_RootItem); + + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + TArray &layers = instance.GetLayers(); + u32 effectCount = 0; + + for (u32 i = 0; i < layers.Count(); ++i) + { + PK_SCOPEDLOCK(layers[i]->m_LayerLock); + + if (layers[i]->m_Deleted == true) + continue; + if (layers[i]->m_SpawnedEmitter.m_Desc != null) + { + if (layers[i]->m_CompositionName != m_CompositionName) + continue; + + const QString layerName(layers[i]->m_LayerName.Data()); + const QString emitterName(layers[i]->m_SpawnedEmitter.m_Desc->m_Name.c_str()); + const CStringId emitterUID = CStringId(layers[i]->m_SpawnedEmitter.m_Desc->m_UUID.c_str()); + + if (emitterName.isEmpty()) + continue; + + // Find effect or create it + CGraphicalResourcesTreeItem *effect = _FindChild(m_RootItem, emitterUID.Id()); + + if (effect == null) + { + beginInsertRows(Index(m_RootItem), effectCount, effectCount); + effect = _CreateEffect(layerName, emitterName, emitterUID.Id()); + m_RootItem->InsertChild(effect, effectCount); + endInsertRows(); + } + else + { + // Update effect data + effect->SetData(0, layerName); + effect->SetData(1, emitterName); + } + effect->SetUpdated(true); + effectCount++; + + // Add properties + TArray &renderers = layers[i]->m_Scene->GetRenderers(); + THashMap effectLayers; + + for (u32 iRenderer = 0; iRenderer < renderers.Count(); ++iRenderer) + { + // Find effect layer or create it + const QString effectLayerName = renderers[iRenderer]->m_EffectLayerName.Data(); + const u32 effectLayerUID = renderers[iRenderer]->m_EffectLayerUID; + CGraphicalResourcesTreeItem *effectLayer = _FindChild(effect, effectLayerUID); + + if (effectLayer == null) + { + beginInsertRows(Index(effect), effectLayers.Count(), effectLayers.Count()); + effectLayer = _CreateEffectLayer(effectLayerName, effectLayerUID, effect); + effect->InsertChild(effectLayer, effectLayers.Count()); + endInsertRows(); + } + else + { + // Update effect layer data + effectLayer->SetData(0, effectLayerName); + } + effectLayer->SetUpdated(true); + + u32* propertyCount = effectLayers.Find(effectLayer); + if (propertyCount == null) + propertyCount = effectLayers.Insert(effectLayer, u32(0)); + + // Find renderer property or create it + const u32 propertyUID = renderers[iRenderer]->m_PropertyUID; + CGraphicalResourcesTreeItem *property = _FindChild(effectLayer, propertyUID); + + if (property == null) + { + beginInsertRows(Index(effectLayer), *propertyCount, *propertyCount); + property = _CreateRenderer(renderers[iRenderer], effectLayer); + effectLayer->InsertChild(property, *propertyCount); + endInsertRows(); + } + else + { + // Update property data + property->SetData(0, QString(renderers[iRenderer]->m_Name.Data())); + + const QString newPath = renderers[iRenderer]->m_Value.Data(); + if (property->Data(1) != newPath) + { + QPixmap pix; + if (!_LoadImageThumbnail(renderers[iRenderer]->m_Value, &pix)) + { + pix = QPixmap(kGraphicResourceThumbSize); + pix.fill(QColor(255, 0, 0, 128)); + + } + + property->SetData(1, newPath); + property->SetData(2, QVariant::fromValue(CGraphicResourceView(CGraphicResourceView::ViewType::ViewType_PathResource, pix))); + } + property->SetLayerID(renderers[iRenderer]->m_LayerID); + property->SetRendererID(renderers[iRenderer]->m_RendererUID); + } + property->SetUpdated(true); + *propertyCount++; + } + } + } + + _RemoveOldItems(m_RootItem); +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeModel::_ResetModel() +{ + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + TArray &layers = instance.GetLayers(); + + beginResetModel(); + + if (m_RootItem->ChildCount() != 0) + m_RootItem->ClearChildren(); + + for (u32 i = 0; i < layers.Count(); ++i) + { + PK_SCOPEDLOCK(layers[i]->m_LayerLock); + + if (layers[i]->m_SpawnedEmitter.m_Desc != null) + { + if (layers[i]->m_CompositionName != m_CompositionName) + continue; + + const QString layerName(layers[i]->m_LayerName.Data()); + const QString emitterName(layers[i]->m_SpawnedEmitter.m_Desc->m_Name.c_str()); + const CStringId emitterUID = CStringId(layers[i]->m_SpawnedEmitter.m_Desc->m_UUID.c_str()); + + if (emitterName.isEmpty()) + continue; + + CGraphicalResourcesTreeItem *effect = _CreateEffect(layerName, emitterName, emitterUID.Id()); + + m_RootItem->AppendChild(effect); + + TArray &renderers = layers[i]->m_Scene->GetRenderers(); + for (u32 iRenderer = 0; iRenderer < renderers.Count(); ++iRenderer) + { + const QString effectLayerName = renderers[iRenderer]->m_EffectLayerName.Data(); + const u32 effectLayerUID = renderers[iRenderer]->m_EffectLayerUID; + CGraphicalResourcesTreeItem *effectLayer = _FindChild(effect, effectLayerUID); + + if (effectLayer == null) + { + effectLayer = _CreateEffectLayer(effectLayerName, effectLayerUID, effect); + effect->AppendChild(effectLayer); + } + + CGraphicalResourcesTreeItem *rdr = _CreateRenderer(renderers[iRenderer], effectLayer); + effectLayer->AppendChild(rdr); + } + } + } + endResetModel(); + +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem *CGraphicalResourcesTreeModel::_CreateEffect(const QString &layerName, const QString &emitterName, u32 uid) +{ + QVector effectData; + effectData.append(layerName); + effectData.append(emitterName); + effectData.append(QVariant::fromValue(CGraphicResourceView(CGraphicResourceView::ViewType::ViewType_Effect))); + effectData.append(QString("")); + + CGraphicalResourcesTreeItem *effect = new CGraphicalResourcesTreeItem(effectData, m_RootItem); + + effect->SetID(uid); + + return effect; +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem *CGraphicalResourcesTreeModel::_CreateEffectLayer(const QString &layerName, u32 uid, CGraphicalResourcesTreeItem *effect) +{ + QVector effectData; + effectData.append(layerName); + effectData.append(QString("")); + effectData.append(QVariant::fromValue(CGraphicResourceView(CGraphicResourceView::ViewType::ViewType_Layer))); + effectData.append(QString("")); + + CGraphicalResourcesTreeItem *layer = new CGraphicalResourcesTreeItem(effectData, effect); + + layer->SetID(uid); + + return layer; +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem *CGraphicalResourcesTreeModel::_CreateRenderer(SRendererProperties *renderer, CGraphicalResourcesTreeItem *layer) +{ + QPixmap pix; + + if (!_LoadImageThumbnail(renderer->m_Value, &pix)) + { + pix = QPixmap(kGraphicResourceThumbSize); + pix.fill(QColor(255, 0, 0, 128)); + } + + QVector rdrData; + rdrData << QString(renderer->m_Name.Data()); + rdrData << QString(renderer->m_Value.Data()); + rdrData << QVariant::fromValue(CGraphicResourceView(CGraphicResourceView::ViewType::ViewType_PathResource, pix)); + rdrData << QVariant::fromValue(CGraphicResetButtonView()); + + CGraphicalResourcesTreeItem *rdr = new CGraphicalResourcesTreeItem(rdrData, layer); + + rdr->SetLayerID(renderer->m_LayerID); + rdr->SetRendererID(renderer->m_RendererUID); + rdr->SetID(renderer->m_PropertyUID); + + return rdr; +} + +//---------------------------------------------------------------------------- + +CGraphicalResourcesTreeItem *CGraphicalResourcesTreeModel::_FindChild(CGraphicalResourcesTreeItem *parent, u32 childId) +{ + for (int i = 0; i < parent->ChildCount(); ++i) + { + CGraphicalResourcesTreeItem *item = parent->Child(i); + if (item->GetID() == childId) + return item; + } + return null; +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeModel::_UnflagUpdated(CGraphicalResourcesTreeItem* parent) +{ + + for (int i = 0; i < parent->ChildCount(); ++i) + { + CGraphicalResourcesTreeItem *item = parent->Child(i); + item->SetUpdated(false); + _UnflagUpdated(item); + } +} + +//---------------------------------------------------------------------------- + +void CGraphicalResourcesTreeModel::_RemoveOldItems(CGraphicalResourcesTreeItem* parent) +{ + QModelIndex parentIndex = Index(parent); + + for (int i = 0; i < parent->ChildCount(); ) + { + CGraphicalResourcesTreeItem *item = parent->Child(i); + if (!item->GetUpdated()) + { + beginRemoveRows(parentIndex, i, i); + parent->RemoveChild(i); + endRemoveRows(); + } + else + { + _RemoveOldItems(item); + ++i; + } + } +} + +//---------------------------------------------------------------------------- + +bool CGraphicalResourcesTreeModel::_LoadImageThumbnail(const CString &path, QPixmap *outThumbnail) +{ + const float dpr = 1.0f;// : MaxDevicePixelRatio(); + const QSize size = kGraphicResourceThumbSize * dpr; + + CResourceManager *resourceManager = Resource::DefaultManager(); + + if (!PK_VERIFY(outThumbnail != null)) + return false; + + if (!resourceManager->FileController()->Exists(path, false)) + return false; + + PImage resource; + const TResourcePtr resourcePtr = resourceManager->Load(path, false, SResourceLoadCtl(false, true)); + if (resourcePtr == null || resourcePtr->Empty()) + return false; + resource = resourcePtr.operator->(); + + if (resource == null) + return false; + + PK_ASSERT(!resource->m_Frames.Empty()); + const CImageFrame &frame = resource->m_Frames.First(); + PK_ASSERT(!frame.m_Mipmaps.Empty()); + const CImageMap &map = frame.m_Mipmaps.First(); + + CImageSurface surface(map, resource->m_Format); + QImage::Format targetFormat; + + switch (surface.m_Format) + { + case CImage::Format_BGR8: + targetFormat = QImage::Format_RGB888; + break; + case CImage::Format_BGRA8: + targetFormat = QImage::Format_RGBA8888; + break; + default: + targetFormat = QImage::Format_RGBA8888; + if (!PK_VERIFY(surface.Convert(CImage::Format_BGRA8))) + return false; + break; + } + + // Note: we do this analysis & alpha-patching before downscaling, as Qt will + // trash the RGB colors when downscaling with an alpha set to zero, for some reason... + if (targetFormat == QImage::Format_RGBA8888) + { + bool isFullyTransparent = false; + { + CUbyte4 *texels = surface.m_RawBuffer->Data(); + const CUbyte4 *texelsStop = texels + surface.m_Dimensions.x() * surface.m_Dimensions.y(); + + SIMD::Float4 texelORx4 = SIMD::Float4::Zero(); + texelsStop -= 4; + while (texels <= texelsStop) + { + texelORx4 |= SIMD::Float4::LoadAligned16(texels); + texels += 4; + } + texelsStop += 4; + + const u32 texelOR32 = texelORx4.x().AsUint() | texelORx4.y().AsUint() | texelORx4.z().AsUint() | texelORx4.w().AsUint(); + CUbyte4 texelOR = *reinterpret_cast(&texelOR32); + while (texels < texelsStop) + { + texelOR |= *texels; + texels++; + } + + isFullyTransparent = (texelOR.w() == 0); + } + + // Fix #3945: Editor propertygrid: Some cubemaps do not show-up in asset-picker preview + // Fix #4133: Content browser: Some cubemap thumbnails do not appear + if (isFullyTransparent || + (resource->m_Flags & CImage::Flag_Cubemap)) + { + // When it's a cubemap, we're only displaying part of it, and in perhaps 99+% of cases, even if the + // image format has alpha, we don't want to display alpha. (envmaps, cubemap backdrops) + // And in practise there are quite a bit of cubemaps grabbed from the web that have a BGRA8 format + // with zero alpha. Here, for preview purposes & practical reasons, force the alpha channel to 0xFF: + + CUbyte4 *texels = surface.m_RawBuffer->Data(); + const CUbyte4 *texelsStop = texels + surface.m_Dimensions.x() * surface.m_Dimensions.y(); + + const SIMD::Float4 kFullAlpha = SIMD::Float4::FromConstInt<0xFF000000>(); + texelsStop -= 4; + while (texels <= texelsStop) + { + (SIMD::Float4::LoadAligned16(texels) | kFullAlpha).StoreAligned16(texels); + texels += 4; + } + texelsStop += 4; + while (texels < texelsStop) + { + texels->w() = 0xFF; + texels++; + } + } + } + + const CUint3 &dim = surface.m_Dimensions; + const u32 channelCount = CImage::GetFormatChannelCount(surface.m_Format); + if (!PK_VERIFY(QImage::toPixelFormat(targetFormat).channelCount() == channelCount) || + !PK_VERIFY(dim.AxialProduct() * channelCount * sizeof(uchar) <= surface.m_RawBuffer->DataSizeInBytes())) + return false; + + QImage dstImage; + if (PK_VERIFY(All(dim > CUint3(0)))) + { + const u32 bytesPerLine = dim.x() * channelCount; + QImage srcImage = QImage(surface.m_RawBuffer->Data(), dim.x(), dim.y(), bytesPerLine, targetFormat).rgbSwapped(); + + const u64 fixedPoint = dim.y() * u64(size.height()); + const u64 fixedPointRatioSrc = (dim.x() * fixedPoint) / dim.y(); + const u64 fixedPointRatioDst = (size.width() * fixedPoint) / size.height(); + + if (fixedPointRatioSrc == fixedPointRatioDst) + { + dstImage = srcImage.scaled(size.width(), size.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + } + else if (fixedPointRatioSrc != fixedPointRatioDst) + { + if (dim.y() == 1) + { + // We have a 1D texture, probably a gradient + dstImage = srcImage.scaled(size.width(), size.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + } + else + { + u32 dstPadW = 0; + u32 dstPadH = 0; + u32 dstW = 0; + u32 dstH = 0; + + // fixedPointRatioSrc > fixedPointRatioDst : pad along y (top & bottom) + // fixedPointRatioSrc < fixedPointRatioDst : pad along x (left & right) + + if (fixedPointRatioSrc > fixedPointRatioDst) + { + dstW = size.width(); // dim.x() * size.width() / dim.x(); + dstH = PKMax(1U, dim.y() * size.height() / dim.x()); + dstPadH = (size.height() - dstH) / 2; + } + else + { + dstW = PKMax(1U, dim.x() * size.width() / dim.y()); + dstH = size.height(); // dim.y() * size.height() / dim.y(); + dstPadW = (size.width() - dstW) / 2; + } + + // First do a smooth downscale. QPainter::drawImage() does a fast downscale. + // We want the higher quality box-scale for proper thumbnail display: + QImage scaledImage = srcImage.scaled(dstW, dstH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + dstImage = QImage(size.width(), size.height(), srcImage.format()); + dstImage.fill(Qt::transparent); + + QPainter p(&dstImage); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.drawImage(QRect(dstPadW, dstPadH, dstW, dstH), scaledImage); + } + } + } + + *outThumbnail = QPixmap::fromImage(dstImage); + outThumbnail->setDevicePixelRatio(dpr); + + return true; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/Panels/AEGP_PanelQT.cpp b/AE_GeneralPlugin/Sources/Panels/AEGP_PanelQT.cpp new file mode 100644 index 00000000..71e60b95 --- /dev/null +++ b/AE_GeneralPlugin/Sources/Panels/AEGP_PanelQT.cpp @@ -0,0 +1,736 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include + +#include "Panels/AEGP_PanelQT.h" + +#include "RenderApi/AEGP_BaseContext.h" +#include "AEGP_RenderContext.h" + +#include "AEGP_World.h" +#include "AEGP_Scene.h" +#include "AEGP_PackExplorer.h" + +#include "AEGP_AssetBaker.h" + +#include "AEGP_Log.h" +//Suite +#include + +//AE +#include +#include + +#include +#include + +#include "Panels/AEGP_GraphicalResourcesTreeModel.h" +#include "AEGP_AEPKConversion.h" + +#include "AEGP_FileDialog.h" + +#if defined(PK_WINDOWS) +#include +#include +#endif + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +template +PK_FORCEINLINE void safe_delete(_Type * & ptr) +{ + if (ptr != null) + { + delete ptr; + ptr = null; + } +} + +//---------------------------------------------------------------------------- + +#if defined(PK_WINDOWS) +const char OSWndObjectProperty[] = "CPanelPopcornFX_PlatPtr"; +#endif + +CPanelBaseGUI *CPanelBaseGUI::m_Instance = null; + +//---------------------------------------------------------------------------- + +QPanelAppSignalSink::QPanelAppSignalSink(QApplication *app, QObject *parent) + : QObject(parent) + , m_App(app) +{ +} + +//---------------------------------------------------------------------------- + +void QPanelAppSignalSink::DoExit() +{ + m_App->exit(); +} + +//---------------------------------------------------------------------------- + +QPanel::QPanel(QPanelAppSignalSink* appSignal, QApplication *application, QObject *parent /*= null*/) + : QObject(parent) + , m_AppSignal(appSignal) + , m_App(application) +{ + m_TreeModel = new CGraphicalResourcesTreeModel(); + m_TreeModel->UpdateModel(); + + QObject::connect(appSignal, &QPanelAppSignalSink::OnWindowHandlerChanged, this, &QPanel::_SetWindow); + QObject::connect(appSignal, &QPanelAppSignalSink::OnWindowSizeChanged, this, &QPanel::_SetGeometry); + QObject::connect(appSignal, &QPanelAppSignalSink::OnRenderersChanged, this, &QPanel::_UpdateModel); +} + +//---------------------------------------------------------------------------- + +QPanel::~QPanel() +{ + safe_delete(m_TreeModel); + safe_delete(m_Widget); + safe_delete(m_Window); +} + +//---------------------------------------------------------------------------- + +void QPanel::_CreateWindowContent() +{ + QVBoxLayout *container = new QVBoxLayout(); + container->setMargin(0); + m_Widget->setLayout(container); + + QTabWidget *tab = new QTabWidget(); + container->addWidget(tab); + + QWidget *rendererTab = new QWidget(); + { + QVBoxLayout *layout = new QVBoxLayout(); + layout->setMargin(0); + + QTreeView *view = new QTreeView(); + + view->setItemDelegate(new CGraphicResourceDelegate()); + + // this line cause the error "QObject::~QObject: Timers cannot be stopped from another thread" when the application quit. + // this is a known issue + // see here : https://forum.qt.io/topic/128256/timers-cannot-be-stopped-from-a-different-thread/6 + // and here : https://lists.qt-project.org/pipermail/development/2021-May/041517.html + view->setModel(m_TreeModel); + view->setColumnWidth(2, 35); + + QObject::connect(view, &QTreeView::clicked, m_TreeModel, [this](const QModelIndex &index) + { + QModelIndex targetIndex; + targetIndex = index; + + QVariant variant = this->m_TreeModel->data(targetIndex, Qt::DisplayRole); + + if (variant.canConvert()) + { + CGraphicalResourcesTreeItem *item = this->m_TreeModel->Item(targetIndex); + CGraphicResourceView view = qvariant_cast(variant); + if (view.Type() == CGraphicResourceView::ViewType::ViewType_PathResource) + { + AEGPPk::SFileDialog cbData; + +#if !defined(PK_MACOSX) + // Filter *.* not working on MacOS + cbData.AddFilter("Image file (*.*)", "*.*"); +#endif + struct SFunctor + { + void Function(const CString path) + { + if (m_Item != null) + { + m_Item->SetData(1, QString(path.Data())); + + AEGPPk::CPopcornFXWorld &world = AEGPPk::CPopcornFXWorld::Instance(); + if (!world.SetResourceOverride(m_Item->GetLayerID(), m_Item->GetRendererID(), m_Item->GetID(), path)) + { + CLog::Log(PK_ERROR, "Set resource override failed"); + return; + } + } + } + + CGraphicalResourcesTreeItem* m_Item = null; + }; + + static SFunctor functor; + + functor.m_Item = item; + cbData.SetCallback(FastDelegate(&functor, &SFunctor::Function)); + + cbData.BasicFileOpen(); + } + } + else if (variant.canConvert()) + { + CGraphicalResourcesTreeItem *item = this->m_TreeModel->Item(targetIndex); + + AEGPPk::CPopcornFXWorld &world = AEGPPk::CPopcornFXWorld::Instance(); + world.SetResourceOverride(item->GetLayerID(), item->GetRendererID(), item->GetID(), ""); + } + }); + + layout->addWidget(view); + + rendererTab->setLayout(layout); + } + tab->addTab(rendererTab, "Renderers"); + + QWidget *settingsTab = new QWidget(tab); + { + QVBoxLayout *layout = new QVBoxLayout(); + + QGridLayout *Glayout = new QGridLayout(); + Glayout->setColumnStretch(0, 1); + { + QString message = "Graphical API"; + QLabel *label = new QLabel(message); + Glayout->addWidget(label, 0, 0); + + QComboBox *graphicCombo = new QComboBox(); + + RHI::EGraphicalApi currentApi = AEGPPk::CPopcornFXWorld::Instance().GetRenderApi(); + EApiValue selectedAPI = RHIApiToAEApi(currentApi); + u32 selectedAPIIndex = 0; + for (u32 i = 0; i < PK_ARRAY_COUNT(SAEPreferenciesKeys::kSupportedAPIs); ++i) + { + if (selectedAPI == SAEPreferenciesKeys::kSupportedAPIs[i]) + selectedAPIIndex = i; + const char *apiStr = SAEPreferenciesKeys::GetGraphicsApiAsCharPtr(SAEPreferenciesKeys::kSupportedAPIs[i]); + graphicCombo->insertItem(i, apiStr); + } + graphicCombo->setCurrentIndex(selectedAPIIndex); + QObject::connect(graphicCombo, QOverload::of(&QComboBox::currentIndexChanged), [](int value) { AEGPPk::CPopcornFXWorld::Instance().SetRenderApi(SAEPreferenciesKeys::kSupportedAPIs[value]); }); + Glayout->addWidget(graphicCombo, 0, 1); + } + layout->addLayout(Glayout); + +#if defined(PK_DEBUG) + { + QString messageButton = "Reload CSS"; + QPushButton *button = new QPushButton(messageButton); + QObject::connect(button, &QPushButton::released, [this]() + { + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + QString path = instance.GetPluginInstallationPath().Data() + QString("/Stylesheet.qss"); + QFile file(path); + + if (!file.open(QFile::ReadOnly)) + return false; + QString styleSheet = QLatin1String(file.readAll()); + m_App->setStyleSheet(styleSheet); + return true; + }); + layout->addWidget(button); + } + + { + QString messageButton = "Profile"; + QCheckBox *button = new QCheckBox(messageButton); + QObject::connect(button, &QCheckBox::stateChanged, [this](int state) + { + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + + instance.SetProfilingState(state != 0); + }); + layout->addWidget(button); + } +#endif + + settingsTab->setLayout(layout); + } + tab->addTab(settingsTab, "Settings"); +} + +//---------------------------------------------------------------------------- + +void QPanel::_SetWindow(WId wid) +{ + m_PendingWindowHandle = wid; +} + +//---------------------------------------------------------------------------- + +void QPanel::_SetGeometry(const QRect &windowRect) +{ + if (m_PendingWindowHandle != 0) + { + safe_delete(m_Widget); + safe_delete(m_Window); + + m_Widget = new QWidget(null, Qt::FramelessWindowHint); + + _CreateWindowContent(); +#if defined(PK_WINDOWS) + m_Widget->setProperty("_q_embedded_native_parent_handle", QVariant(m_PendingWindowHandle)); +#else + //Create internal window + m_Widget->winId(); + m_Window = QWindow::fromWinId(m_PendingWindowHandle); + m_Widget->windowHandle()->setParent(m_Window); +#endif + } + +#if defined(PK_MACOSX) + (void)windowRect; + if (m_Window != null) + { + // In the Qt documentation of QWindow::fromWinId this is not advised to observe state changes like this + // Do it like this for mac anyway since it's working but this should be changed + // https://doc.qt.io/qt-5/qwindow.html#fromWinId + QRect newRect = QRect(0, 0, m_Window->geometry().width(), m_Window->geometry().height()); + if (m_Widget != null && m_Widget->geometry() != newRect) + m_Widget->setGeometry(newRect); + } +#else + if (m_Widget != null && m_Widget->geometry() != windowRect) + m_Widget->setGeometry(windowRect); +#endif + + if (m_PendingWindowHandle != 0) + { + m_Widget->show(); + m_PendingWindowHandle = 0; + } +} + +//---------------------------------------------------------------------------- + +void QPanel::_UpdateModel() +{ + if (m_TreeModel != null) + m_TreeModel->UpdateModel(); +} + +//---------------------------------------------------------------------------- + +CPanelApp::CPanelApp() +{ +} + +//---------------------------------------------------------------------------- + +CPanelApp::~CPanelApp() +{ + PK_ASSERT(m_QApp == null); + PK_ASSERT(m_AppSignalSink == null); + PK_ASSERT(m_Panel == null); +} + +//---------------------------------------------------------------------------- + +bool CPanelApp::Startup() +{ + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + +#if defined(PK_MACOSX) + QApplication::setAttribute(Qt::AA_MacPluginApplication, true); + CString QTPath = instance.GetPluginInstallationPath() / "AE_GeneralPlugin.plugin/Contents/PlugIns"; +#else + CString QTPath = instance.GetPluginInstallationPath() / "popcornfx.qt"; +#endif + + CLog::Log(PK_INFO, "path: %s", QTPath.Data()); + + char *argv[] = { (char *)"", (char *)"-platformpluginpath", QTPath.RawDataForWriting(), null }; + int argc = sizeof(argv) / sizeof(char*) - 1; + + m_QApp = new QApplication(argc, argv); + if (!PK_VERIFY(m_QApp != null)) + { + CLog::Log(PK_ERROR, "Could not initialize Qt"); + return false; + } + +#if defined(PK_MACOSX) + m_EventLoop = new QEventLoop(); + if (!PK_VERIFY(m_EventLoop != null)) + { + CLog::Log(PK_ERROR, "Could not initialize Qt Event Loop"); + return false; + } +#endif + + qRegisterMetaType("WId"); + + m_AppSignalSink = new QPanelAppSignalSink(m_QApp); + if (m_AppSignalSink == null) + { + CLog::Log(PK_ERROR, "Could not initialize Qt signal sink"); + Shutdown(); + return false; + } + QObject::connect(m_AppSignalSink, &QPanelAppSignalSink::OnExit, m_AppSignalSink, &QPanelAppSignalSink::DoExit, Qt::QueuedConnection); + + if (!QResource::registerResource(QString(instance.GetResourcesPath().Data()) + "Resources.rcc")) + { + CLog::Log(PK_ERROR, "Could not load Resources.rcc"); + PK_ASSERT_NOT_REACHED(); + } + + QFile stylesheetFile(QString(instance.GetResourcesPath().Data()) + "/Stylesheet.qss"); + if (!stylesheetFile.open(QFile::ReadOnly)) + { + CLog::Log(PK_ERROR, "Could not load Stylesheet.qss"); + PK_ASSERT_NOT_REACHED(); + } + + QString styleSheet = QLatin1String(stylesheetFile.readAll()); + m_QApp->setStyleSheet(styleSheet); + + m_Panel = new QPanel(m_AppSignalSink, m_QApp); + if (!PK_VERIFY(m_Panel != null)) + { + CLog::Log(PK_ERROR, "Could not initialize Qt panel"); + Shutdown(); + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +void CPanelApp::LaunchApp() +{ +#if defined(PK_WINDOWS) + m_QApp->exec(); +#else + OnWindowSizeChanged(QRect(0, 0, 0, 0)); + m_EventLoop->processEvents(); +#endif +} + +//---------------------------------------------------------------------------- + +void CPanelApp::Shutdown() +{ +#if defined(PK_MACOSX) + if (m_QApp != null) + m_QApp->quit(); + safe_delete(m_EventLoop); +#endif + safe_delete(m_Panel); + safe_delete(m_AppSignalSink); + safe_delete(m_QApp); +} + +//---------------------------------------------------------------------------- + +void CPanelApp::OnWindowHandlerChanged(WId wid) +{ + if (PK_VERIFY(m_AppSignalSink != null)) + Q_EMIT m_AppSignalSink->OnWindowHandlerChanged(wid); +} + +//---------------------------------------------------------------------------- + +void CPanelApp::OnWindowSizeChanged(const QRect &rect) +{ + if (PK_VERIFY(m_AppSignalSink != null)) + Q_EMIT m_AppSignalSink->OnWindowSizeChanged(rect); +} + +//---------------------------------------------------------------------------- + +void CPanelApp::OnRenderersChanged() +{ + if (PK_VERIFY(m_AppSignalSink != null)) + Q_EMIT m_AppSignalSink->OnRenderersChanged(); +} + +//---------------------------------------------------------------------------- + +void CPanelApp::OnExit() +{ + if (PK_VERIFY(m_AppSignalSink != null)) + Q_EMIT m_AppSignalSink->OnExit(); +} + +//---------------------------------------------------------------------------- +#if defined(PK_WINDOWS) + +CAsynchronousJob_QtThread::CAsynchronousJob_QtThread() +{ +} + +//---------------------------------------------------------------------------- + +CAsynchronousJob_QtThread::~CAsynchronousJob_QtThread() +{ +} + +//---------------------------------------------------------------------------- + +void CAsynchronousJob_QtThread::ImmediateExecute() +{ + if (!m_App.Startup()) + { + m_Initialized.Trigger(); + m_Exited.Trigger(); + return; + } + + m_Initialized.Trigger(); + + m_App.LaunchApp(); + + // VMN: Locking operation on my pc. + //m_App.Shutdown(); + + m_Exited.Trigger(); +} + +#endif +//---------------------------------------------------------------------------- + +CPanelBaseGUI::CPanelBaseGUI() +#if defined(PK_WINDOWS) + : m_Task(null) +#endif +{ +} + +//---------------------------------------------------------------------------- + +CPanelBaseGUI::~CPanelBaseGUI() +{ +#if defined(PK_WINDOWS) + if (m_Task != null) + { + m_Task->App().OnExit(); + m_Task->m_Exited.Wait(); + } +#else + m_App.Shutdown(); +#endif +} + +//---------------------------------------------------------------------------- + +CPanelBaseGUI *CPanelBaseGUI::GetInstance() +{ + if (m_Instance == null) + { + m_Instance = new CPanelBaseGUI(); + } + return m_Instance; +} + +//---------------------------------------------------------------------------- + +bool CPanelBaseGUI::DestroyInstance() +{ + if (m_Instance) + delete m_Instance; + m_Instance = null; + return true; +} + +//---------------------------------------------------------------------------- + +bool CPanelBaseGUI::InitializeIFN() +{ + if (!m_Initialized) + { + AAePk::SAAEIOData AAEData{ PF_Cmd_ABOUT, null, null, null, null }; + CPopcornFXWorld &instance = AEGPPk::CPopcornFXWorld::Instance(); + if (!instance.InitializeIFN(AAEData)) + return false; + instance.SetPanelInstance(this); + +#if defined(PK_WINDOWS) + m_Task = PK_NEW(CAsynchronousJob_QtThread()); + if (!PK_VERIFY(m_Task != null)) + return false; + m_Task->AddToPool(Scheduler::ThreadPool()); + Scheduler::ThreadPool()->KickTasks(true); + m_Task->m_Initialized.Wait(); +#else + m_App.Startup(); +#endif + + m_Initialized = true; + } + return true; +} + +//---------------------------------------------------------------------------- +#if defined(PK_MACOSX) +void CPanelBaseGUI::IdleUpdate() +{ + PK_ASSERT(m_Initialized); + + m_App.LaunchApp(); +} +#endif +//---------------------------------------------------------------------------- + +bool CPanelBaseGUI::CreatePanel(SPBasicSuite *spbP, AEGP_PanelH panelH, AEGP_PlatformViewRef platformWindowRef, AEGP_PanelFunctions1 *outFunctionTable) +{ + PK_ASSERT(m_Initialized); + + m_BasicSuite = spbP; + (void)panelH; + outFunctionTable->DoFlyoutCommand = _DoFlyoutCommand; + outFunctionTable->GetSnapSizes = _GetSnapSizes; + outFunctionTable->PopulateFlyout = _PopulateFlyout; + + { +#if defined(PK_WINDOWS) + m_Task->App().OnWindowHandlerChanged((WId)platformWindowRef); +#else + m_App.OnWindowHandlerChanged((WId)platformWindowRef); +#endif + +#if defined(PK_WINDOWS) + _SetWindowHandle((HWND)platformWindowRef); +#endif + } + return true; +} + +//---------------------------------------------------------------------------- + +void CPanelBaseGUI::SetGeometry(const QRect &rect) +{ + PK_ASSERT(m_Initialized); +#if defined(PK_WINDOWS) + m_Task->App().OnWindowSizeChanged(rect); +#else + m_App.OnWindowSizeChanged(rect); +#endif +} + +//---------------------------------------------------------------------------- + +void CPanelBaseGUI::UpdateScenesModel() +{ + PK_ASSERT(m_Initialized); +#if defined(PK_WINDOWS) + m_Task->App().OnRenderersChanged(); +#else + m_App.OnRenderersChanged(); +#endif +} + +//---------------------------------------------------------------------------- + +void CPanelBaseGUI::GetSnapSizes(A_LPoint *snapSizes, A_long *numSizesP) +{ + snapSizes[0].x = 100; + snapSizes[0].y = 100; + snapSizes[1].x = 200; + snapSizes[1].y = 400; + *numSizesP = 2; +} + +//---------------------------------------------------------------------------- + +void CPanelBaseGUI::PopulateFlyout(AEGP_FlyoutMenuItem *itemsP, A_long *in_out_numItemsP) +{ + (void)itemsP; + (void)in_out_numItemsP; +} + +//---------------------------------------------------------------------------- + +void CPanelBaseGUI::DoFlyoutCommand(AEGP_FlyoutMenuCmdID commandID) +{ + (void)commandID; +} + +//---------------------------------------------------------------------------- + +A_Err CPanelBaseGUI::_GetSnapSizes(AEGP_PanelRefcon refcon, A_LPoint *snapSizes, A_long *numSizesP) +{ + reinterpret_cast(refcon)->GetSnapSizes(snapSizes, numSizesP); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +A_Err CPanelBaseGUI::_PopulateFlyout(AEGP_PanelRefcon refcon, AEGP_FlyoutMenuItem *itemsP, A_long * in_out_numItemsP) +{ + reinterpret_cast(refcon)->PopulateFlyout(itemsP, in_out_numItemsP); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +A_Err CPanelBaseGUI::_DoFlyoutCommand(AEGP_PanelRefcon refcon, AEGP_FlyoutMenuCmdID commandID) +{ + reinterpret_cast(refcon)->DoFlyoutCommand(commandID); + return PF_Err_NONE; +} + +#if defined(PK_WINDOWS) + +LRESULT CALLBACK CPanelBaseGUI::StaticOSWindowWndProc( HWND hWnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + CPanelBaseGUI* platPtr = reinterpret_cast(::GetProp(hWnd, OSWndObjectProperty)); + if (platPtr) + { + return platPtr->OSWindowWndProc(hWnd, message, wParam, lParam); + } + else + { + return DefWindowProc(hWnd, message, wParam, lParam); + } +} + +//---------------------------------------------------------------------------- + +LRESULT CPanelBaseGUI::OSWindowWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + PK_SCOPEDLOCK(m_HandleLock); + + bool eventHandled = false; + + if (m_WindowHandle == hwnd) // Filter events that are not for our window + { + RECT rect; + GetClientRect(hwnd, &rect); + + u32 width = rect.right - rect.left; + u32 height = rect.bottom - rect.top; + + SetGeometry(QRect(rect.left, rect.top, width, height)); + + eventHandled = true; + } + + if (m_WindowProc && !eventHandled) + return CallWindowProc(m_WindowProc, hwnd, message, wParam, lParam); + else + return DefWindowProc(hwnd, message, wParam, lParam); +} + +//---------------------------------------------------------------------------- + +void CPanelBaseGUI::_SetWindowHandle(HWND hwnd) +{ + PK_SCOPEDLOCK(m_HandleLock); + + m_WindowHandle = hwnd; + m_WindowProc = (WindowProc)GetWindowLongPtrA(m_WindowHandle, GWLP_WNDPROC); + SetWindowLongPtrA(m_WindowHandle, GWLP_WNDPROC, (LONG_PTR)CPanelBaseGUI::StaticOSWindowWndProc); + ::SetProp(m_WindowHandle, OSWndObjectProperty, (HANDLE)this); +} + +#endif // defined(PK_WINDOWS) + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/RenderApi/AEGP_BaseContext.cpp b/AE_GeneralPlugin/Sources/RenderApi/AEGP_BaseContext.cpp new file mode 100644 index 00000000..24801ae2 --- /dev/null +++ b/AE_GeneralPlugin/Sources/RenderApi/AEGP_BaseContext.cpp @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" +#include "RenderApi/AEGP_BaseContext.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +CAAEBaseContext::CAAEBaseContext() + : m_ApiManager(null) + , m_ApiContext(null) + , m_CompositingTexture(null) +{ + +} + +//---------------------------------------------------------------------------- + +CAAEBaseContext::~CAAEBaseContext() +{ + PK_SAFE_DELETE(m_ApiContext); + m_ApiManager = null; + m_CompositingTexture = null; +} + +//---------------------------------------------------------------------------- + +RHI::PApiManager CAAEBaseContext::GetApiManager() +{ + PK_ASSERT(m_ApiManager != null); + return m_ApiManager; +} + +//---------------------------------------------------------------------------- + +RHI::SApiContext *CAAEBaseContext::GetApiContext() +{ + PK_ASSERT(m_ApiContext != null); + return m_ApiContext; +} + +//---------------------------------------------------------------------------- + +RHI::PTexture CAAEBaseContext::GetCompositingTexture() +{ + PK_ASSERT(m_CompositingTexture != null); + return m_CompositingTexture; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END diff --git a/AE_GeneralPlugin/Sources/RenderApi/AEGP_CopyPixels.cpp b/AE_GeneralPlugin/Sources/RenderApi/AEGP_CopyPixels.cpp new file mode 100644 index 00000000..62a1b9de --- /dev/null +++ b/AE_GeneralPlugin/Sources/RenderApi/AEGP_CopyPixels.cpp @@ -0,0 +1,193 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" +#include "RenderApi/AEGP_CopyPixels.h" + +//Samples +#include +#include + +#include "AEGP_AEPKConversion.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +CFloat4 Pixel32ToCFloat4(const PF_Pixel32 &pxl) +{ + return CFloat4(pxl.red, pxl.green, pxl.blue, pxl.alpha); +} + +//---------------------------------------------------------------------------- + +CFloat4 Pixel16ToCFloat4(const PF_Pixel16 &pxl) +{ + CFloat4 pxlValue( static_cast(pxl.red), + static_cast(pxl.green), + static_cast(pxl.blue), + static_cast(pxl.alpha)); + return pxlValue / CFloat4(static_cast(0x7FFF)); +} + +//---------------------------------------------------------------------------- + +CFloat4 Pixel8ToCFloat4(const PF_Pixel8 &pxl) +{ + CFloat4 pxlValue( static_cast(pxl.red), + static_cast(pxl.green), + static_cast(pxl.blue), + static_cast(pxl.alpha)); + return pxlValue / CFloat4(static_cast(0xFF)); +} + +//---------------------------------------------------------------------------- + +PF_Pixel32 CFloat4ToPixel32(const CFloat4 &pxl) +{ + PF_Pixel32 out = {}; + out.red = pxl.x(); + out.green = pxl.y(); + out.blue = pxl.z(); + out.alpha = pxl.w(); + return out; +} + +//---------------------------------------------------------------------------- + +PF_Pixel16 CFloat4ToPixel16(const CFloat4 &pxl) +{ + PF_Pixel16 out = {}; + out.red = static_cast(pxl.x() * static_cast(0x7FFF)); + out.green = static_cast(pxl.y() * static_cast(0x7FFF)); + out.blue = static_cast(pxl.z() * static_cast(0x7FFF)); + out.alpha = static_cast(pxl.w() * static_cast(0x7FFF)); + return out; +} + +//---------------------------------------------------------------------------- + +PF_Pixel8 CFloat4ToPixel8(const CFloat4 &pxl) +{ + PF_Pixel8 out = {}; + out.red = static_cast(pxl.x() * static_cast(0xFF)); + out.green = static_cast(pxl.y() * static_cast(0xFF)); + out.blue = static_cast(pxl.z() * static_cast(0xFF)); + out.alpha = static_cast(pxl.w() * static_cast(0xFF)); + return out; +} + +//---------------------------------------------------------------------------- + +PF_Err CopyPixelIn32( void *refcon, + A_long x, + A_long y, + PF_Pixel32 *inP, + PF_Pixel32 *) +{ + SCopyPixel *thiS = reinterpret_cast(refcon); + CFloat4 *outP = Mem::AdvanceRawPointer(thiS->m_BufferPtr->Data(), sizeof(CFloat4) * y * thiS->m_InputWorld->width + x * sizeof(CFloat4)); + CFloat4 value = Pixel32ToCFloat4(*inP); + + value.xyz() = PKSample::ConvertSRGBToLinear(value.xyz()); + value = PKSaturate(value); + *outP = value; + if (thiS->m_IsAlphaOverride) + outP->w() = static_cast(thiS->m_AlphaOverrideValue); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CopyPixelIn16( void *refcon, + A_long x, + A_long y, + PF_Pixel16 *inP, + PF_Pixel16 *) +{ + SCopyPixel *thiS = reinterpret_cast(refcon); + CFloat4 *outP = Mem::AdvanceRawPointer(thiS->m_BufferPtr->Data(), sizeof(CFloat4) * y * thiS->m_InputWorld->width + x * sizeof(CFloat4)); + CFloat4 value = Pixel16ToCFloat4(*inP); + + value.xyz() = PKSample::ConvertSRGBToLinear(value.xyz()); + value = PKSaturate(value); + *outP = value; + if (thiS->m_IsAlphaOverride) + outP->w() = static_cast(thiS->m_AlphaOverrideValue); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CopyPixelIn8( void *refcon, + A_long x, + A_long y, + PF_Pixel8 *inP, + PF_Pixel8 *) +{ + SCopyPixel *thiS = reinterpret_cast(refcon); + CFloat4 *outP = Mem::AdvanceRawPointer(thiS->m_BufferPtr->Data(), sizeof(CFloat4) * y * thiS->m_InputWorld->width + x * sizeof(CFloat4)); + CFloat4 value = Pixel8ToCFloat4(*inP); + + value.xyz() = PKSample::ConvertSRGBToLinear(value.xyz()); + value = PKSaturate(value); + *outP = value; + if (thiS->m_IsAlphaOverride) + outP->w() = static_cast(thiS->m_AlphaOverrideValue); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CopyPixelOut32( void *refcon, + A_long x, + A_long y, + PF_Pixel32 *, + PF_Pixel32 *outP) +{ + SCopyPixel *thiS = reinterpret_cast(refcon); + const u32 size = sizeof(CFloat4); + const CFloat4 *inP = Mem::AdvanceRawPointer(thiS->m_BufferPtr->Data(), size * y * thiS->m_InputWorld->width + x * size); + CFloat4 value = CFloat4(PKSample::ConvertLinearToSRGB(inP->xyz()), inP->w()); + value = PKSaturate(value); + *outP = CFloat4ToPixel32(value); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CopyPixelOut16( void *refcon, + A_long x, + A_long y, + PF_Pixel16 *, + PF_Pixel16 *outP) +{ + SCopyPixel *thiS = reinterpret_cast(refcon); + const u32 size = sizeof(CFloat4); + const CFloat4 *inP = Mem::AdvanceRawPointer(thiS->m_BufferPtr->Data(), size * y * thiS->m_InputWorld->width + x * size); + CFloat4 value = CFloat4(PKSample::ConvertLinearToSRGB(inP->xyz()), inP->w()); + value = PKSaturate(value); + *outP = CFloat4ToPixel16(value); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- + +PF_Err CopyPixelOut8( void *refcon, + A_long x, + A_long y, + PF_Pixel8 *, + PF_Pixel8 *outP) +{ + SCopyPixel *thiS = reinterpret_cast(refcon); + const u32 size = sizeof(CFloat4); + const CFloat4 *inP = Mem::AdvanceRawPointer(thiS->m_BufferPtr->Data(), size * y * thiS->m_InputWorld->width + x * size); + CFloat4 value = CFloat4(PKSample::ConvertLinearToSRGB(inP->xyz()), inP->w()); + value = PKSaturate(value); + *outP = CFloat4ToPixel8(value); + return PF_Err_NONE; +} + +//---------------------------------------------------------------------------- +__AEGP_PK_END + diff --git a/AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D11Context.cpp b/AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D11Context.cpp new file mode 100644 index 00000000..f86b54c6 --- /dev/null +++ b/AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D11Context.cpp @@ -0,0 +1,506 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" +#include "RenderApi/AEGP_D3D11Context.h" + +#if (PK_BUILD_WITH_D3D11_SUPPORT != 0) + +#include +#include +#include +#include + +#include + +#include + +#include + +#include "AEGP_World.h" +#include "RenderApi/AEGP_CopyTask.h" + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +struct SD3D11PlatformContext +{ + IDXGIFactory1 *m_Factory; + IDXGIAdapter1 *m_HardwareAdapter; + + TArray m_SwapChains; + +#if USE_DEBUG_DXGI + IDXGIDebug *m_Debug; +#endif + + PFN_D3D11_CREATE_DEVICE m_CreateDeviceFunc; + HMODULE m_D3DModule; + HMODULE m_DXGIModule; + + bool m_Initialized = false; + + SD3D11PlatformContext() + : m_Factory(null) + , m_HardwareAdapter(null) +#if USE_DEBUG_DXGI + , m_Debug(null) +#endif + , m_D3DModule(0) + , m_DXGIModule(0) + { + } + + ~SD3D11PlatformContext() + { + if (m_Factory != null) + m_Factory->Release(); + if (m_HardwareAdapter != null) + m_HardwareAdapter->Release(); + PK_FOREACH(swapChain, m_SwapChains) + { + if (PK_VERIFY(*swapChain != null)) + (*swapChain)->Release(); + } +#if USE_DEBUG_DXGI + if (m_Debug) + { + m_Debug->ReportLiveObjects(DXGI_DEBUG_ALL, DXGI_DEBUG_RLO_ALL); + m_Debug->Release(); + } +#endif + if (m_D3DModule != null) + FreeLibrary(m_D3DModule); + if (m_DXGIModule != null) + FreeLibrary(m_DXGIModule); + } +}; + +//---------------------------------------------------------------------------- + +CAAED3D11Context::CAAED3D11Context() + : m_Texture(null) + , m_StagingTexture(null) +{ + m_D3D11Manager = PK_NEW(RHI::CD3D11ApiManager); + m_D3D11Context = PK_NEW(RHI::SD3D11BasicContext); + m_ApiManager = m_D3D11Manager; + m_ApiContext = m_D3D11Context; + + if (m_Context == null) + m_Context = (PK_NEW(SD3D11PlatformContext)); +} + +//---------------------------------------------------------------------------- + +CAAED3D11Context::~CAAED3D11Context() +{ + if (m_Texture != null) + { + m_Texture->Release(); + m_Texture = null; + } + if (m_StagingTexture != null) + { + m_StagingTexture->Release(); + m_StagingTexture = null; + } + m_D3D11Context->m_SwapChainRenderTargets.Clear(); + if (m_D3D11Context->m_ImmediateDeviceContext != null) + { + m_D3D11Context->m_ImmediateDeviceContext->Release(); + m_D3D11Context->m_ImmediateDeviceContext = null; + } + if (m_D3D11Context->m_Device != null) + { + m_D3D11Context->m_Device->Release(); + m_D3D11Context->m_Device = null; + } + + PK_SAFE_DELETE(m_Context); + PK_SAFE_DELETE(m_D3D11Context); + + m_D3D11Manager = null; + m_ApiContext = null; + m_ApiManager = null; + + m_Tasks.Clear(); + +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::InitIFN() +{ + if (m_Initialized) + return true; + m_Initialized = true; + + m_WorkerCount = CPopcornFXWorld::Instance().GetWorkerCount() + 1; + m_Tasks.Resize(m_WorkerCount); + + m_ApiManager->InitApi(m_ApiContext); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::BeginFrame() +{ + m_ApiManager->BeginFrame(0); + LogApiError(); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::EndFrame() +{ + LogApiError(); + + m_ApiManager->EndFrame(); + + HRESULT hr = 0; + if (m_Context->m_SwapChains.Count() > 0) + { + hr = m_Context->m_SwapChains[0]->Present(0, 0); + if (FAILED(hr)) + return false; + if (hr == DXGI_ERROR_DEVICE_RESET || + hr == DXGI_ERROR_DEVICE_REMOVED) + return false; + if (hr == DXGI_STATUS_OCCLUDED) + return true; + } + return PK_D3D11_OK(hr); +} + +//---------------------------------------------------------------------------- + +void CAAED3D11Context::LogApiError() +{ +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::CreatePlatformContext(void *winHandle, void *deviceContext) +{ + (void)winHandle; + + HDC hdc = (HDC)deviceContext; + + int PixelFormat; + PIXELFORMATDESCRIPTOR pfd; + + ::ZeroMemory(&pfd, sizeof(pfd)); + + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW; // | PFD_DOUBLEBUFFER; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 32; + pfd.cDepthBits = 8; + + PixelFormat = ChoosePixelFormat(hdc, &pfd); + if (PixelFormat == 0) + return false; + if (!SetPixelFormat(hdc, PixelFormat, &pfd)) + return false; + + if (m_Context == null) + return false; + if (m_Context->m_Initialized) + return true; + + m_D3D11Context->m_Api = RHI::GApi_D3D11; + m_D3D11Context->m_SwapChainCount = 0; + + if (!_LoadDynamicLibrary()) + return false; + + // try grabbing CreateDXGIFactory1: + typedef HRESULT(WINAPI *FnCreateDXGIFactory1)(REFIID riid, _COM_Outptr_ void **ppFactory); + + FnCreateDXGIFactory1 fnCreateDXGIFactory1 = (FnCreateDXGIFactory1)::GetProcAddress(m_Context->m_DXGIModule, "CreateDXGIFactory1"); + // if not found, this is not fatal, it will fallback (ie: on vista & xp) + if (fnCreateDXGIFactory1 == null) + { + CLog::Log(PK_INFO, "DXGI API 'CreateDXGIFactory1' not found, cannot create D3D11 context."); + return false; + } + m_Context->m_Initialized = true; + return PK_D3D11_OK(fnCreateDXGIFactory1(IID_PPV_ARGS(&m_Context->m_Factory))) && _CreateDevice(); +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::CreateRenderTarget(RHI::EPixelFormat format, CUint3 size) +{ + RHI::PD3D11RenderTarget rt = PK_NEW(RHI::CD3D11RenderTarget(RHI::SRHIResourceInfos("Render Target"))); + ID3D11Texture2D *texture2D = null; + D3D11_TEXTURE2D_DESC texDesc = {}; + + texDesc.Width = size.x(); + texDesc.Height = size.y(); + texDesc.MipLevels = 1; + texDesc.ArraySize = 1; + texDesc.Format = RHI::D3DConversion::PopcornToD3DPixelFormat(format); + texDesc.SampleDesc.Count = 1; + texDesc.Usage = D3D11_USAGE_DEFAULT; + texDesc.BindFlags = D3D11_BIND_RENDER_TARGET; + + if (PK_D3D11_FAILED(m_D3D11Context->m_Device->CreateTexture2D(&texDesc, null, &texture2D))) + return false; + texture2D->AddRef(); + rt->D3D11SetRenderTarget(texture2D, format, size.xy(), true, null, RHI::SampleCount1); + + if (m_Texture != null) + { + m_Texture->Release(); + m_Texture = null; + } + + m_Texture = texture2D; + + if (m_D3D11Context->m_SwapChainCount != 0) + { + m_D3D11Context->m_SwapChainRenderTargets.Clear(); + m_D3D11Manager->SwapChainRemoved(0); + } + + m_D3D11Context->m_SwapChainRenderTargets.PushBack(rt); + m_D3D11Context->m_SwapChainCount = 1; + + m_D3D11Manager->SwapChainAdded(); + + ID3D11Texture2D *tex = null; + D3D11_TEXTURE2D_DESC textureStagingDesc = {}; + + textureStagingDesc.Width = size.x(); + textureStagingDesc.Height = size.y(); + textureStagingDesc.MipLevels = 1; + textureStagingDesc.ArraySize = 1; + textureStagingDesc.Format = RHI::D3DConversion::PopcornToD3DPixelFormat(format); + textureStagingDesc.SampleDesc.Count = 1; + textureStagingDesc.Usage = D3D11_USAGE_STAGING; + textureStagingDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; + if (textureStagingDesc.Format == DXGI_FORMAT_UNKNOWN || + PK_D3D11_FAILED(m_D3D11Context->m_Device->CreateTexture2D(&textureStagingDesc, null, &tex))) + return false; + + if (m_StagingTexture != null) + { + m_StagingTexture->Release(); + m_StagingTexture = null; + } + m_StagingTexture = tex; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::SetAsCurrent(void *deviceContext) +{ + (void)deviceContext; + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::FillRenderBuffer(PRefCountedMemoryBuffer dstBuffer, RHI::PFrameBuffer srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) +{ + (void)rowLength; + + PK_SCOPEDPROFILE(); + + m_D3D11Context->m_ImmediateDeviceContext->CopyResource(m_StagingTexture, m_Texture); + // Copy GPU Resource to CPU + D3D11_TEXTURE2D_DESC desc; + D3D11_MAPPED_SUBRESOURCE resource; + UINT subresource = D3D11CalcSubresource(0, 0, 0); + + m_StagingTexture->GetDesc(&desc); + //Locking Map + HRESULT hr = m_D3D11Context->m_ImmediateDeviceContext->Map(m_StagingTexture, subresource, D3D11_MAP_READ, 0, &resource); + if (FAILED(hr)) + { + CLog::Log(PK_ERROR, "D3D11Context map failure"); + return false; + } + + BYTE *sptr = reinterpret_cast(resource.pData); + BYTE *dptr = (BYTE*)dstBuffer->Data(); + + const u32 formatSize = RHI::PixelFormatHelpers::PixelFormatToPixelByteSize(format); + const u32 widthSize = (formatSize * width); + + PK_ASSERT(resource.RowPitch >= widthSize); + + u32 taskRowNumbers = height / m_WorkerCount; + u32 reminder = height % m_WorkerCount; + TAtomic counter = 0; + Threads::CEvent event; + + for (u32 i = 0; i < m_WorkerCount;++i) + { + m_Tasks[i] = PK_NEW(CAsynchronousJob_CopyTextureTask); + m_Tasks[i]->m_TargetCount = m_WorkerCount; + + m_Tasks[i]->m_Counter = &counter; + m_Tasks[i]->m_EndCB = &event; + + if (i == (m_WorkerCount - 1)) + m_Tasks[i]->m_Height = taskRowNumbers + reminder; + else + m_Tasks[i]->m_Height = taskRowNumbers; + m_Tasks[i]->m_StartOffset = i * taskRowNumbers; + m_Tasks[i]->m_DestinationPtr = dptr; + m_Tasks[i]->m_SourcePtr = sptr; + m_Tasks[i]->m_WidthSize = widthSize; + m_Tasks[i]->m_RowPitch = resource.RowPitch; + } + + for (u32 i = 1; i < m_WorkerCount; ++i) + { + m_Tasks[i]->AddToPool(Scheduler::ThreadPool()); + } + Scheduler::ThreadPool()->KickTasks(true); + + m_Tasks[0]->ImmediateExecute(); + { + PK_SCOPEDLOGGEDPROFILE("WaitMergeTask"); + + event.Wait(); + + for (u32 i = 0; i < m_WorkerCount; ++i) + { + if (!m_Tasks[i]->Done()) + i = 0; + } + } + + m_D3D11Context->m_ImmediateDeviceContext->Unmap(m_StagingTexture, subresource); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::FillCompositingTexture(void *srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) +{ + (void)rowLength; + + PK_SCOPEDPROFILE(); + + CImageMap image(CUint3(width, height, 1), srcBuffer, RHI::PixelFormatHelpers::PixelFormatToPixelByteSize(format) * width * height); + + PK_TODO("Optim: Use GPU Swizzle instead of CPU"); + + RHI::PTexture textureSrc = m_D3D11Manager->CreateTexture(RHI::SRHIResourceInfos("CompositingTexture"), TMemoryView(image), format); + + m_CompositingTexture = textureSrc; + return true; +} + +//---------------------------------------------------------------------------- + +TMemoryView CAAED3D11Context::GetCurrentSwapChain() +{ + return m_D3D11Context->m_SwapChainRenderTargets; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::_LoadDynamicLibrary() +{ + if (m_Initialized) + return true; + PK_ASSERT(m_Context != null); + m_Context->m_D3DModule = ::LoadLibraryA("d3d11.dll"); + if (m_Context->m_D3DModule == null) + return false; + m_Context->m_DXGIModule = ::LoadLibraryA("dxgi.dll"); + if (m_Context->m_DXGIModule == null) + return false; + m_Context->m_CreateDeviceFunc = (PFN_D3D11_CREATE_DEVICE)::GetProcAddress(m_Context->m_D3DModule, "D3D11CreateDevice"); + + return m_Context->m_CreateDeviceFunc != null; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::_CreateDevice() +{ + D3D_FEATURE_LEVEL featureLevels[] = + { + D3D_FEATURE_LEVEL_11_1, + D3D_FEATURE_LEVEL_11_0, + }; + if (!_PickHardwareAdapter()) + { + return false; + } + +#if defined(PK_DEBUG) + UINT deviceFlags = (D3D11_CREATE_DEVICE_DEBUG); +#else + UINT deviceFlags = 0; +#endif + + if (!PK_D3D11_OK(m_Context->m_CreateDeviceFunc( m_Context->m_HardwareAdapter, + D3D_DRIVER_TYPE_UNKNOWN, + null, + deviceFlags, + featureLevels, + _countof(featureLevels), + D3D11_SDK_VERSION, + &m_D3D11Context->m_Device, + &m_D3D11Context->m_FeatureLevel, + &m_D3D11Context->m_ImmediateDeviceContext))) + { + return false; + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D11Context::_PickHardwareAdapter() +{ + IDXGIFactory1 *&factory = m_Context->m_Factory; + IDXGIAdapter1 *&adapter = m_Context->m_HardwareAdapter; + + adapter = 0; + for (u32 idx = 0; factory->EnumAdapters1(idx, &adapter) != DXGI_ERROR_NOT_FOUND; ++idx) + { + DXGI_ADAPTER_DESC1 desc; + adapter->GetDesc1(&desc); + + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + { + // Don't select the Basic Render Driver adapter. + // If you want a software adapter, pass in "/warp" on the command line. + continue; + } + + // Check to see if the adapter supports Direct3D 12, but don't create the + // actual device yet. + D3D_FEATURE_LEVEL featureLevels[] = + { + D3D_FEATURE_LEVEL_11_1, + D3D_FEATURE_LEVEL_11_0, + }; + if (SUCCEEDED(m_Context->m_CreateDeviceFunc(adapter, D3D_DRIVER_TYPE_UNKNOWN, null, 0, featureLevels, _countof(featureLevels), D3D11_SDK_VERSION, null, null, null))) + { + return true; + } + } + adapter = 0; + return false; +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D12Context.cpp b/AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D12Context.cpp new file mode 100644 index 00000000..f1cbfb89 --- /dev/null +++ b/AE_GeneralPlugin/Sources/RenderApi/AEGP_D3D12Context.cpp @@ -0,0 +1,712 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#include "ae_precompiled.h" +#include "RenderApi/AEGP_D3D12Context.h" + +#if (PK_BUILD_WITH_D3D12_SUPPORT != 0) + +#include +#include +#include +#include +#include +#include "pk_rhi/include/D3D12/D3D12ReadBackTexture.h" + +#include + +#include + +#include + +#include "AEGP_World.h" +#include "RenderApi/AEGP_CopyTask.h" + +#include + +#include +#include + +__AEGP_PK_BEGIN + +//---------------------------------------------------------------------------- + +class CD3D12SwapChainRT : public RHI::ID3D12SwapChain +{ +public: + CGuid m_BufferIndex; + + RHI::PD3D12RenderTarget m_RenderTargets[CAAED3D12Context::kFrameCount]; + RHI::PD3D12ReadBackTexture m_ReadbackTextures[CAAED3D12Context::kFrameCount]; + + + CD3D12SwapChainRT() + : m_BufferIndex(0) + { + } + + ~CD3D12SwapChainRT() + { + m_BufferIndex = 0; + } + + CGuid BeginFrame() + { + m_BufferIndex = (m_BufferIndex + 1) % CAAED3D12Context::kFrameCount; + return m_BufferIndex; + } + + virtual TMemoryView GetD3D12RenderTargets() const + { + return TMemoryView(m_RenderTargets); + } + + virtual TMemoryView GetRenderTargets() const + { + return TMemoryView(GetD3D12RenderTargets()); + } +}; + +//---------------------------------------------------------------------------- + +class CD3D12SwapChain : public RHI::ID3D12SwapChain +{ +public: + IDXGISwapChain3 *m_SwapChain; + CGuid m_BufferIndex; + RHI::PD3D12RenderTarget m_RenderTargets[CAAED3D12Context::kFrameCount]; + + CD3D12SwapChain() + : m_SwapChain(null) + { + } + + ~CD3D12SwapChain() + { + if (m_SwapChain != null) + m_SwapChain->Release(); + } + + CGuid BeginFrame() + { + m_BufferIndex = m_SwapChain->GetCurrentBackBufferIndex(); + return m_BufferIndex; + } + + virtual TMemoryView GetD3D12RenderTargets() const + { + return TMemoryView(m_RenderTargets); + } + + virtual TMemoryView GetRenderTargets() const + { + return TMemoryView(GetD3D12RenderTargets()); + } +}; + +//---------------------------------------------------------------------------- + +struct SD3D12PlatformContext +{ + IDXGIFactory4 *m_Factory; + IDXGIAdapter1 *m_HardwareAdapter; + + TArray m_SwapChainsRTs; + + + PFN_D3D12_CREATE_DEVICE m_CreateDeviceFunc; + PFN_D3D12_GET_DEBUG_INTERFACE m_GetDebugInterfaceFunc; + + HMODULE m_D3DModule; + HMODULE m_DXGIModule; + + SD3D12PlatformContext() + : m_Factory(null) + , m_HardwareAdapter(null) +#if USE_DEBUG_DXGI + , m_Debug(null) +#endif + , m_D3DModule(0) + , m_DXGIModule(0) + { + } + + ~SD3D12PlatformContext() + { + if (m_Factory != null) + m_Factory->Release(); + if (m_HardwareAdapter != null) + m_HardwareAdapter->Release(); + if (m_D3DModule != null) + FreeLibrary(m_D3DModule); + if (m_DXGIModule != null) + FreeLibrary(m_DXGIModule); + } +}; + +//---------------------------------------------------------------------------- + +CAAED3D12Context *CAAED3D12Context::m_Instance = null; +bool CAAED3D12Context::m_Once = false; + +//---------------------------------------------------------------------------- + +CAAED3D12Context::CAAED3D12Context() + : m_Context(PK_NEW(SD3D12PlatformContext)) +{ + for (u32 i = 0; i < kFrameCount; ++i) + { + m_Resources[i] = null; + } + m_D3D12Manager = PK_NEW(RHI::CD3D12ApiManager); + m_D3D12Context = PK_NEW(RHI::SD3D12BasicContext); + + m_ApiContext = m_D3D12Context; + m_ApiManager = m_D3D12Manager; +} + +//---------------------------------------------------------------------------- + +CAAED3D12Context::~CAAED3D12Context() +{ + ClearContextSwapchainsRT(); + m_D3D12Manager->SwapChainRemoved(0); + + m_D3D12Manager = null; + m_ApiManager = null; + + if (m_D3D12Context->m_Device != null) + m_D3D12Context->m_Device->Release(); + PK_SAFE_DELETE(m_Context); + m_ApiContext = null; + PK_SAFE_DELETE(m_D3D12Context); + m_Tasks.Clear(); +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::InitIFN() +{ + if (m_Initialized || m_Once) + return true; + m_Initialized = true; + m_Once = true; + + m_WorkerCount = CPopcornFXWorld::Instance().GetWorkerCount() + 1; + m_Tasks.Resize(m_WorkerCount); + + m_ApiManager->InitApi(m_ApiContext); + m_Fence = m_D3D12Manager->CreateFence(RHI::SRHIResourceInfos("Fence")); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::BeginFrame() +{ + if (m_Context->m_SwapChainsRTs.Count() > 0) + m_ApiManager->BeginFrame(m_Context->m_SwapChainsRTs[0]->BeginFrame()); + else + return false; + LogApiError(); + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::EndFrame() +{ + LogApiError(); + + m_FrameCount += 1; + if (m_Context->m_SwapChainsRTs.Count() > 0) + { + RHI::PCommandBuffer cmdBuff = m_ApiManager->CreateCommandBuffer(RHI::SRHIResourceInfos("Command Buffer"), true); + + if (cmdBuff != null) + { + cmdBuff->Start(); + + cmdBuff->ReadBackRenderTarget(m_Context->m_SwapChainsRTs[0]->m_RenderTargets[m_Context->m_SwapChainsRTs[0]->m_BufferIndex], + m_Context->m_SwapChainsRTs[0]->m_ReadbackTextures[m_Context->m_SwapChainsRTs[0]->m_BufferIndex]); + + cmdBuff->Stop(); + m_ApiManager->SubmitCommandBufferDirect(cmdBuff); + } + else + CLog::Log(PK_ERROR, "D3D12: Create command buffer failed"); + } + m_ApiManager->EndFrame(); + //Keep that after the endframe; + m_Fence->Signal(m_FrameCount, m_D3D12Context->m_CommandQueue); + return true; +} + +//---------------------------------------------------------------------------- + +void CAAED3D12Context::LogApiError() +{ +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::CreateDescriptorAllocator() +{ + // Create allocators if not exists or missing + TArray & allocators = m_D3D12Context->m_DescriptorAllocators; + u32 count = allocators.Count(); + if (count < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES) + { + if (!allocators.Resize(D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES)) + return false; + for (u32 i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++i) + { + u32 batchCount = (i >= D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) ? 64u : 8192u; + allocators[i] = PK_NEW(RHI::CD3D12DescriptorAllocator(m_D3D12Context->m_Device, static_cast(i), batchCount)); + if (allocators[i] == null) + return false; + } + } + + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::LoadDynamicLibrary() +{ + PK_ASSERT(m_Context != null); + m_Context->m_D3DModule = ::LoadLibraryA("d3d12.dll"); + if (m_Context->m_D3DModule == null) + return false; + m_Context->m_DXGIModule = ::LoadLibraryA("dxgi.dll"); + if (m_Context->m_DXGIModule == null) + return false; + m_Context->m_CreateDeviceFunc = (PFN_D3D12_CREATE_DEVICE)::GetProcAddress(m_Context->m_D3DModule, "D3D12CreateDevice"); + m_D3D12Context->m_SerializeRootSignatureFunc = (PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)::GetProcAddress(m_Context->m_D3DModule, "D3D12SerializeRootSignature"); + + return m_Context->m_CreateDeviceFunc != null && + m_D3D12Context->m_SerializeRootSignatureFunc != null; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::CreateDevice() +{ + if (!PickHardwareAdapter()) + return false; + if (!PK_D3D_OK(m_Context->m_CreateDeviceFunc(m_Context->m_HardwareAdapter, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&m_D3D12Context->m_Device)))) + { + CLog::Log(PK_ERROR, "D3D12: Couldn't create device"); + return false; + } + + D3D12_FEATURE_DATA_FEATURE_LEVELS levelFeature = {}; + const D3D_FEATURE_LEVEL levels[] = + { + D3D_FEATURE_LEVEL_11_0, + D3D_FEATURE_LEVEL_11_1, + D3D_FEATURE_LEVEL_12_0, + D3D_FEATURE_LEVEL_12_1 + }; + levelFeature.NumFeatureLevels = PK_ARRAY_COUNT(levels); + levelFeature.pFeatureLevelsRequested = levels; + m_D3D12Context->m_Device->CheckFeatureSupport(D3D12_FEATURE_FEATURE_LEVELS, &levelFeature, sizeof(levelFeature)); + + if (levelFeature.MaxSupportedFeatureLevel > D3D_FEATURE_LEVEL_11_0) + { + m_D3D12Context->m_Device->Release(); + m_D3D12Context->m_Device = null; + if (!PK_D3D_OK(m_Context->m_CreateDeviceFunc(m_Context->m_HardwareAdapter, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&m_D3D12Context->m_Device)))) + { + PK_ASSERT_NOT_REACHED_MESSAGE("Internal error when creating d3d12 device."); + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- + +//Duplicate of PK-Samples\PK-SampleLib\ApiContext\D3D\D3D12Context.h::PickHardwareAdapter +bool CAAED3D12Context::PickHardwareAdapter() +{ + IDXGIFactory4 *&factory = m_Context->m_Factory; + IDXGIAdapter1 *&adapter = m_Context->m_HardwareAdapter; + adapter = 0; + HRESULT hres; + for (u32 idx = 0; (hres = factory->EnumAdapters1(idx, &adapter)) != DXGI_ERROR_NOT_FOUND; ++idx) + { + DXGI_ADAPTER_DESC1 desc; + adapter->GetDesc1(&desc); + + if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) + { + // Don't select the Basic Render Driver adapter. + // If you want a software adapter, pass in "/warp" on the command line. + continue; + } + + // Check to see if the adapter supports Direct3D 12, but don't create the + // actual device yet. + HRESULT hr = m_Context->m_CreateDeviceFunc(adapter, D3D_FEATURE_LEVEL_11_0, _uuidof(ID3D12Device), null); + if (SUCCEEDED(hr)) + { + return true; + } + } + PK_ASSERT_NOT_REACHED(); + adapter = 0; + return false; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::CreatePlatformContext(void *winHandle, void *deviceContext) +{ + (void)winHandle; + if (m_Once) + return true; + + HDC hdc = (HDC)deviceContext; + + int PixelFormat; + PIXELFORMATDESCRIPTOR pfd; + + ::ZeroMemory(&pfd, sizeof(pfd)); + + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW; // | PFD_DOUBLEBUFFER; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 32; + pfd.cDepthBits = 8; + + PixelFormat = ChoosePixelFormat(hdc, &pfd); + if (PixelFormat == 0) + return false; + if (!SetPixelFormat(hdc, PixelFormat, &pfd)) + return false; + + if (m_Context == null) + return false; + m_D3D12Context->m_Api = RHI::GApi_D3D12; + m_D3D12Context->m_SwapChainCount = 0; + + if (!LoadDynamicLibrary()) + return false; + // If you want to develop with the debug layer on: + // -with DirectX Control panel(accessible via visual studio Debug->Graphics->DirectX Control panel) + // - Click on Scope->Edit List...->Add : AfterFX.exe + // - Then Direct3D / DXGI Debug Layer : Choose the `Force On` Option and voila !You got your debug logs. + +#if 0 + Microsoft::WRL::ComPtr debugController; + + m_Context->m_GetDebugInterfaceFunc = (PFN_D3D12_GET_DEBUG_INTERFACE)::GetProcAddress(m_Context->m_D3DModule, "D3D12GetDebugInterface"); + if (PK_D3D_FAILED(m_Context->m_GetDebugInterfaceFunc(IID_PPV_ARGS(&debugController)))) + return false; + debugController->EnableDebugLayer(); +#endif + + // try grabbing CreateDXGIFactory1: + typedef HRESULT(WINAPI *FnCreateDXGIFactory2)(UINT Flags, REFIID riid, _COM_Outptr_ void **ppFactory); + + FnCreateDXGIFactory2 CreateDXGIFactory2 = (FnCreateDXGIFactory2)::GetProcAddress(m_Context->m_DXGIModule, "CreateDXGIFactory2"); + // if not found, this is not fatal, it will fallback (ie: on vista & xp) + if (CreateDXGIFactory2 == null) + { + CLog::Log(PK_INFO, "DXGI API 'FnCreateDXGIFactory2' not found, cannot create D3D12 context."); + return false; + } + + UINT flags = 0; + if (!PK_D3D_OK(CreateDXGIFactory2(flags, IID_PPV_ARGS(&m_Context->m_Factory)))) + return false; + + if (!CreateDevice()) + return false; + + return CreateCommandQueue() && + CreateDescriptorAllocator();; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::CreateCommandQueue() +{ + D3D12_COMMAND_QUEUE_DESC graphicsCmdQueueDesc = {}; + graphicsCmdQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; + graphicsCmdQueueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT; // Disable TDR for compute + graphicsCmdQueueDesc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL; + + D3D12_COMMAND_QUEUE_DESC copyCmdQueueDesc = {}; + copyCmdQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_COPY; + copyCmdQueueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT; // Disable TDR for compute + copyCmdQueueDesc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL; + + D3D12_COMMAND_QUEUE_DESC computeCmdQueueDesc = {}; + computeCmdQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_COMPUTE; + computeCmdQueueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT; // Disable TDR for compute + computeCmdQueueDesc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL; + + return PK_D3D_OK(m_D3D12Context->m_Device->CreateCommandQueue(&graphicsCmdQueueDesc, IID_PPV_ARGS(&m_D3D12Context->m_CommandQueue))) && + PK_D3D_OK(m_D3D12Context->m_Device->CreateCommandQueue(©CmdQueueDesc, IID_PPV_ARGS(&m_D3D12Context->m_CopyCommandQueue))) && + PK_D3D_OK(m_D3D12Context->m_Device->CreateCommandQueue(&computeCmdQueueDesc, IID_PPV_ARGS(&m_D3D12Context->m_ComputeCommandQueue))); +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::CreateRenderTarget(RHI::EPixelFormat format, CUint3 size) +{ + if (m_Context->m_SwapChainsRTs.Count() != 0) + { + ClearContextSwapchainsRT(); + m_D3D12Manager->SwapChainRemoved(0); + } + + CD3D12SwapChainRT *swapchainRT = PK_NEW(CD3D12SwapChainRT()); + const CGuid idx = m_Context->m_SwapChainsRTs.PushBack(swapchainRT); + if (!PK_VERIFY(idx.Valid())) + { + PK_DELETE(swapchainRT); + return false; + } + m_D3D12Context->m_SwapChainCount = 1; + m_D3D12Context->m_SwapChains = TMemoryView(m_Context->m_SwapChainsRTs.ViewForWriting()); + + for (u32 i = 0; i < CAAED3D12Context::kFrameCount; ++i) + { + RHI::PD3D12RenderTarget rt = PK_NEW(RHI::CD3D12RenderTarget(RHI::SRHIResourceInfos("Render Target"))); + if (rt == null) + { + CLog::Log(PK_ERROR, "D3D12Context: CD3D12RenderTarget creation failure"); + return false; + } + ID3D12Resource *resource = null; + D3D12_HEAP_PROPERTIES heapProps = { D3D12_HEAP_TYPE_DEFAULT }; + D3D12_RESOURCE_DESC resDesc = {}; + D3D12_RESOURCE_STATES initialState = (PKRHI_D3D12_SHADER_RESOURCE_STATE); + D3D12_CLEAR_VALUE defaultClearValue; + + resDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + resDesc.Alignment = 0; + resDesc.Width = size.x(); + resDesc.Height = size.y(); + resDesc.DepthOrArraySize = 1; + resDesc.MipLevels = 1; + resDesc.Format = RHI::D3DConversion::PopcornToD3DPixelFormat(format); + resDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; + resDesc.SampleDesc.Count = 1; + resDesc.SampleDesc.Quality = 0; + + defaultClearValue.Format = RHI::D3DConversion::PopcornToD3DPixelFormat(format); + for (u32 c = 0; c < 4; ++c) + defaultClearValue.Color[c] = 0.0f; + + if (PK_D3D_FAILED(m_D3D12Context->m_Device->CreateCommittedResource(&heapProps, D3D12_HEAP_FLAG_NONE, &resDesc, initialState, null, PK_RHI_IID_PPV_ARGS(&resource)))) + { + CLog::Log(PK_ERROR, "D3D12Context: CreateCommittedResource failure"); + m_D3D12Context->m_SwapChainCount = 0; + m_D3D12Context->m_SwapChains = TMemoryView(); + ClearContextSwapchainsRT(); + return false; + } + rt->D3D12SetRenderTarget(resource, format, size.xy(), true, null, RHI::SampleCount1); + m_Resources[i] = resource; + + RHI::PReadBackTexture readbackTex = m_D3D12Manager->CreateReadBackTexture(RHI::SRHIResourceInfos("readback Texture"), rt); + + if (readbackTex == null) + { + CLog::Log(PK_ERROR, "D3D12Context: CreateReadBackTexture failure"); + return false; + } + m_Context->m_SwapChainsRTs[0]->m_RenderTargets[i] = rt; + m_Context->m_SwapChainsRTs[0]->m_ReadbackTextures[i] = CastD3D12(readbackTex); + } + m_D3D12Manager->SwapChainAdded(); + + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::SetAsCurrent(void *deviceContext) +{ + (void)deviceContext; + return true; +} + +//---------------------------------------------------------------------------- + +PRefCountedMemoryBuffer CAAED3D12Context::CreateBufferFromReadBackTexture(RHI::PCReadBackTexture readBackTexture) const +{ + PK_SCOPEDPROFILE(); + + u32 size = RHI::PixelFormatHelpers::PixelFormatToPixelByteSize(readBackTexture->GetFormat()) * readBackTexture->GetSize().x() * readBackTexture->GetSize().y(); + PRefCountedMemoryBuffer rawBuffer = CRefCountedMemoryBuffer::AllocAligned(size); + + if (rawBuffer == null) + { + CLog::Log(PK_ERROR, "D3D12Context: CreateBufferFromReadBackTexture alloc failure"); + return null; + } + + RHI::PCD3D12ReadBackTexture d3dReadBackTex = CastD3D12(readBackTexture); + ID3D12Resource *d3dResource = d3dReadBackTex->D3D12GetResource(); + void *mappedData; + + if (PK_D3D_FAILED(d3dResource->Map(0, null, &mappedData))) + { + CLog::Log(PK_ERROR, "D3D12Context: map failure"); + return null; + } + + const u32 rowcount = d3dReadBackTex->D3D12GetFootprint().m_RowCount; + const u32 rowpitch = d3dReadBackTex->D3D12GetFootprint().m_Footprint.Footprint.RowPitch; + const u64 rowsize = d3dReadBackTex->D3D12GetFootprint().m_RowSizeInBytes; + + for (u32 r = 0; r < rowcount; ++r) + { + Mem::Copy(Mem::AdvanceRawPointer(rawBuffer->Data(), r * rowsize), Mem::AdvanceRawPointer(mappedData, r * rowpitch), rowsize); + } + + d3dResource->Unmap(0, null); + return rawBuffer; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::FillRenderBuffer(PRefCountedMemoryBuffer dstBuffer, RHI::PFrameBuffer srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) +{ + (void)rowLength; + + PK_SCOPEDPROFILE(); + + { + PK_NAMEDSCOPEDPROFILE("m_Fence->Wait"); + m_Fence->Wait(m_FrameCount); + } + RHI::PReadBackTexture rbTexture = m_Context->m_SwapChainsRTs[0]->m_ReadbackTextures[m_Context->m_SwapChainsRTs[0]->m_BufferIndex]; + if (rbTexture == null) + { + CLog::Log(PK_ERROR, "D3D12Context: No readback texture in swap chain"); + return false; + } + + + { + PK_NAMEDSCOPEDPROFILE("Copy Task Creation And Kick"); + + PRefCountedMemoryBuffer buffer = CreateBufferFromReadBackTexture(rbTexture); + + if (buffer == null) + { + CLog::Log(PK_ERROR, "D3D12Context: Create buffer from readback texture failed"); + return false; + } + + BYTE *sptr = buffer->Data< BYTE>(); + BYTE *dptr = (BYTE*)dstBuffer->Data(); + + const u32 formatSize = RHI::PixelFormatHelpers::PixelFormatToPixelByteSize(format); + const u32 widthSize = (formatSize * width); + u32 taskRowNumbers = height / m_WorkerCount; + u32 reminder = height % m_WorkerCount; + TAtomic counter = 0; + Threads::CEvent event; + + for (u32 i = 0; i < m_WorkerCount; ++i) + { + m_Tasks[i] = PK_NEW(CAsynchronousJob_CopyTextureTask); + if (m_Tasks[i] == null) + { + + CLog::Log(PK_ERROR, "D3D12Context: Create task copy texture failed"); + return false; + } + m_Tasks[i]->m_TargetCount = m_WorkerCount; + + m_Tasks[i]->m_Counter = &counter; + m_Tasks[i]->m_EndCB = &event; + + if (i == (m_WorkerCount - 1)) + m_Tasks[i]->m_Height = taskRowNumbers + reminder; + else + m_Tasks[i]->m_Height = taskRowNumbers; + m_Tasks[i]->m_StartOffset = i * taskRowNumbers; + m_Tasks[i]->m_DestinationPtr = dptr; + m_Tasks[i]->m_SourcePtr = sptr; + m_Tasks[i]->m_WidthSize = widthSize; + m_Tasks[i]->m_RowPitch = formatSize * width; + } + + for (u32 i = 1; i < m_WorkerCount; ++i) + { + m_Tasks[i]->AddToPool(Scheduler::ThreadPool()); + } + + Scheduler::ThreadPool()->KickTasks(true); + + m_Tasks[0]->ImmediateExecute(); + + { + PK_NAMEDSCOPEDPROFILE("WaitMergeTask"); + + event.Wait(); + + for (u32 i = 0; i < m_WorkerCount; ++i) + { + if (!m_Tasks[i]->Done()) + i = 0; + } + } + } + return true; +} + +//---------------------------------------------------------------------------- + +bool CAAED3D12Context::FillCompositingTexture(void *srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) +{ + (void)rowLength; + + PK_SCOPEDPROFILE(); + + CImageMap image(CUint3(width, height, 1), srcBuffer, RHI::PixelFormatHelpers::PixelFormatToPixelByteSize(format) * width * height); + + PK_TODO("Optim: Use GPU Swizzle instead of CPU"); + + RHI::PTexture textureSrc = m_D3D12Manager->CreateTexture(RHI::SRHIResourceInfos("CompositingTexture"), TMemoryView(image), format); + + m_CompositingTexture = textureSrc; + return true; +} + +//---------------------------------------------------------------------------- + +TMemoryView CAAED3D12Context::GetCurrentSwapChain() +{ + if (PK_VERIFY(!m_D3D12Context->m_SwapChains.Empty())) + return m_D3D12Context->m_SwapChains[0]->GetRenderTargets(); + + return TMemoryView(); +} + +//---------------------------------------------------------------------------- + +void CAAED3D12Context::ClearContextSwapchainsRT() +{ + for (u32 i = 0; i < m_Context->m_SwapChainsRTs.Count(); ++i) + { + PK_DELETE(m_Context->m_SwapChainsRTs[i]); + } + m_Context->m_SwapChainsRTs.Clear(); +} + +//---------------------------------------------------------------------------- + +__AEGP_PK_END + +#endif diff --git a/AE_GeneralPlugin/Sources/RenderApi/AEGP_MetalContext.mm b/AE_GeneralPlugin/Sources/RenderApi/AEGP_MetalContext.mm new file mode 100644 index 00000000..0feeda65 --- /dev/null +++ b/AE_GeneralPlugin/Sources/RenderApi/AEGP_MetalContext.mm @@ -0,0 +1,188 @@ +#include "ae_precompiled.h" +#include "RenderApi/AEGP_MetalContext.h" + +#if defined(PK_MACOSX) +#if (PK_BUILD_WITH_METAL_SUPPORT != 0) + +#include "AEGP_World.h" + +#include +#include +#include +#include + +#include + +#include + +#include + +__AEGP_PK_BEGIN + +CAAEMetalContext *CAAEMetalContext::m_Instance = null; + +struct SMetalPlatformContext +{ + RHI::SMetalBasicContext *m_MetalContext; + RHI::CMetalApiManager *m_MetalManager; + RHI::PMetalRenderTarget m_MetalFinalRT; + PKSample::CMetalContext::SFinalBlit m_FinalBlit; + + SMetalPlatformContext() + { + } + + ~SMetalPlatformContext() + { + m_MetalContext = null; + m_MetalManager = null; + } +}; + +CAAEMetalContext::CAAEMetalContext() +: m_Data(null) +{ + m_ApiManager = PK_NEW(RHI::CMetalApiManager); + m_ApiContext = PK_NEW(RHI::SMetalBasicContext); + m_Data = PK_NEW(SMetalPlatformContext); + m_Data->m_MetalContext = static_cast(m_ApiContext); + m_Data->m_MetalManager = static_cast(m_ApiManager.Get()); +} + +CAAEMetalContext::~CAAEMetalContext() +{ + PK_SAFE_DELETE(m_Data); + PK_SAFE_DELETE(m_ApiContext); + m_ApiManager = null; +} + +bool CAAEMetalContext::BeginFrame() +{ + m_ApiManager->BeginFrame(0); + LogApiError(); + return true; +} + +bool CAAEMetalContext::EndFrame() +{ + void *syncRenderData = m_ApiManager->EndFrame(); + if (syncRenderData == null) + return false; + m_LastFrameSyncInfo = reinterpret_cast(syncRenderData); + PKSample::CMetalContext::EndFrame( m_Data->m_MetalContext->m_Queue, + m_Data->m_MetalContext->m_SwapChains, + m_Data->m_FinalBlit, + m_LastFrameSyncInfo, + true, + m_Data->m_MetalFinalRT); + return false; + return true; +} + +void CAAEMetalContext::LogApiError() +{ +} + +bool CAAEMetalContext::InitIFN() +{ + if (m_Initialized) + return true; + m_Initialized = true; + m_ApiContext->m_Api = RHI::GApi_Metal; + id device = MTLCreateSystemDefaultDevice(); + if (!PK_VERIFY(device != null)) + return false; + id queue = [device newCommandQueue]; + if (!PK_VERIFY(queue != null)) + return false; + m_Data->m_MetalContext->m_Device = device; + m_Data->m_MetalContext->m_Queue = queue; + if (!m_Data->m_MetalManager->InitApi(m_Data->m_MetalContext)) + return false; + if (!PKSample::CMetalContext::CreateFinalBlitData(device, m_Data->m_FinalBlit, RHI::FormatFloat32RGBA)) + return false; + return true; +} + +bool CAAEMetalContext::CreateRenderTarget(RHI::EPixelFormat format, CUint3 size) +{ + RHI::PMetalRenderTarget mtlRt = PK_NEW(RHI::CMetalRenderTarget(RHI::SRHIResourceInfos("Render Target"), null)); + + if (!PK_VERIFY(mtlRt != null)) + return false; + if (!PK_VERIFY(mtlRt->MetalCreateRenderTarget(size.xy(), format, true, RHI::SampleCount1, m_Data->m_MetalContext->m_Device))) + return false; + + m_Data->m_MetalFinalRT = PKSample::CMetalContext::MetalCreateRenderTarget(m_Data->m_MetalContext->m_Device, size.xy(), RHI::FormatFloat32RGBA, true); + + if (m_Data->m_MetalContext->m_SwapChainCount != 0) + { + m_Data->m_MetalContext->m_SwapChains.Clear(); + m_Data->m_MetalManager->SwapChainRemoved(0); + } + m_Data->m_MetalContext->m_SwapChains.PushBack().Valid(); + m_Data->m_MetalContext->m_SwapChains.Last().m_RenderTarget = mtlRt; + m_Data->m_MetalContext->m_SwapChainCount = 1; + + if (!m_Data->m_MetalManager->SwapChainAdded()) + return false; + return true; +} + +bool CAAEMetalContext::FillRenderBuffer(PRefCountedMemoryBuffer dstBuffer, RHI::PFrameBuffer srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) +{ + (void)rowLength; + (void)srcBuffer; + if (!PK_VERIFY(m_LastFrameSyncInfo != null)) + return false; + + const u32 formatSize = RHI::PixelFormatHelpers::PixelFormatToPixelByteSize(format); + const u32 widthSize = (formatSize * width); + const u32 bytesPerImage = RHI::PixelFormatHelpers::GetTextureBufferSize(format, CUint2(width, height)); + u8 *dstBuffBytes = (u8*)dstBuffer->Data(); + id mtlTexture = m_Data->m_MetalFinalRT->MetalGetTexture(); + + PK_ASSERT(dstBuffer->DataSizeInBytes() >= bytesPerImage); + + // Synchronize the command buffer: + { + PK_SCOPEDLOCK(m_LastFrameSyncInfo->m_SwapChainDoneCountLock); + if (m_LastFrameSyncInfo->m_SwapChainDoneCount < m_LastFrameSyncInfo->m_SwapChainToWait) + m_LastFrameSyncInfo->m_CondVar.Wait(m_LastFrameSyncInfo->m_SwapChainDoneCountLock); + m_LastFrameSyncInfo->m_SwapChainDoneCount = 0; + m_LastFrameSyncInfo->m_SwapChainToWait = 0; + } + + [mtlTexture getBytes:dstBuffBytes bytesPerRow:widthSize bytesPerImage:bytesPerImage fromRegion:MTLRegionMake2D(0, 0, width, height) mipmapLevel:0 slice:0]; + return true; +} + +bool CAAEMetalContext::FillCompositingTexture(void *srcBuffer, RHI::EPixelFormat format, u32 width, u32 height, u32 rowLength) +{ + (void)rowLength; + PK_SCOPEDPROFILE(); + + CImageMap image(CUint3(width, height, 1), srcBuffer, RHI::PixelFormatHelpers::PixelFormatToPixelByteSize(format) * width * height); + + RHI::PTexture textureSrc = m_Data->m_MetalManager->CreateTexture(RHI::SRHIResourceInfos("Texture"), TMemoryView(image), format); + + m_CompositingTexture = textureSrc; + return true; +} + +TMemoryView CAAEMetalContext::GetCurrentSwapChain() +{ + return TMemoryView(m_Data->m_MetalContext->m_SwapChains.Last().m_RenderTarget); +} + +bool CAAEMetalContext::CreatePlatformContext(void *window, void *deviceContext) +{ + (void)window; (void)deviceContext; + return true; +} + +__AEGP_PK_END + + +#endif //PK_BUILD_WITH_METAL_SUPPORT != 0 +#endif //PK_MACOSX \ No newline at end of file diff --git a/AE_Suites/PopcornFX_BasePluginInterface.h b/AE_Suites/PopcornFX_BasePluginInterface.h new file mode 100644 index 00000000..c588f829 --- /dev/null +++ b/AE_Suites/PopcornFX_BasePluginInterface.h @@ -0,0 +1,293 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __FX_BASEPLUGININTERFACE_H__ +#define __FX_BASEPLUGININTERFACE_H__ + +#include "PopcornFX_Define.h" +#include "PopcornFX_Suite.h" + +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +const float k_MinFloat = -100000.0f; +const float k_MaxFloat = 100000.0f; + +//---------------------------------------------------------------------------- + +class CBasePluginInterface +{ +public: + virtual ~CBasePluginInterface() { } + +#if defined(PK_WINDOWS) +#pragma warning( push ) +#pragma warning( disable : 4100 ) //Disable unused parameters +#endif + + virtual PF_Err About(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err GlobalSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err ParamsSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err GlobalSetdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err SequenceSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err SequenceReSetup(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err SequenceFlatten(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err SequenceShutdown(SAAEIOData &AAEData, PF_ParamDef *params[], PF_LayerDef *output) { (void)AAEData; (void)params; (void)output; return A_Err_NONE; }; + virtual PF_Err PreRender(SAAEIOData &AAEData) { (void)AAEData; return A_Err_NONE; }; + virtual PF_Err SmartRender(SAAEIOData &AAEData) { (void)AAEData; return A_Err_NONE; }; + virtual PF_Err ParamValueChanged(SAAEIOData &AAEData, PF_ParamDef *params[]) { (void)AAEData; (void)params; return A_Err_NONE; }; + virtual PF_Err UpdateParamsUI(SAAEIOData &AAEData, PF_ParamDef *params[]) { (void)AAEData; (void)params; return A_Err_NONE; }; + virtual PF_Err HandleDataFromAEGP(SAAEIOData &AAEData, PF_ParamDef *params[]) { (void)AAEData; (void)params; return A_Err_NONE; }; + virtual PF_Err QueryDynamicFlags(SAAEIOData &AAEData, PF_ParamDef *params[]) { (void)AAEData; (void)params; return A_Err_NONE; }; + +#if defined(PK_WINDOWS) +#pragma warning( pop ) +#endif + const int *GetParametersIndexes() + { + return m_ParametersIndexes; + }; + + PF_Err SetEffectName(SAAEIOData &AAEData, std::string &name, AEGP_EffectRefH effect = nullptr) + { + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_EffectRefH effectRef = effect; + A_UTF16Char nameUTF[64]; + AEGP_StreamRefH streamRef = nullptr; + AEGP_StreamRefH effectStreamRef = nullptr; + PF_Err result = A_Err_NONE; + + AE_VERIFY(name.size() < 64); + if (effectRef == nullptr) + { + result = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + if (!AE_VERIFY(result == A_Err_NONE)) + return result; + } + + result |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AAEID, effectRef, 1, &streamRef); + if (!AE_VERIFY(result == A_Err_NONE)) + return result; + CopyCharToUTF16(name.data(), nameUTF); + + result |= suites.DynamicStreamSuite4()->AEGP_GetNewParentStreamRef(m_AAEID, streamRef, &effectStreamRef); + result |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + streamRef = nullptr; + if (!AE_VERIFY(result == A_Err_NONE)) + return result; + result |= suites.DynamicStreamSuite4()->AEGP_SetStreamName(effectStreamRef, nameUTF); + result |= suites.StreamSuite2()->AEGP_DisposeStream(effectStreamRef); + + effectStreamRef = nullptr; + if (effect == nullptr) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + return result; + } + + PF_Err SetParameterStreamName(SAAEIOData &AAEData, std::string &str, unsigned int index, AEGP_EffectRefH effect = nullptr) + { + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + PF_Err result = PF_Err_NONE; + A_UTF16Char strUTF[256]; + AEGP_StreamRefH streamRef = nullptr; + AEGP_EffectRefH effectRef = effect; + + AE_VERIFY(str.size() < 256); + if (effectRef == nullptr) + { + result = suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + if (!AE_VERIFY(result == A_Err_NONE)) + return result; + } + CopyCharToUTF16(str.data(), strUTF); + + result |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AAEID, effectRef, index, &streamRef); + result |= suites.DynamicStreamSuite4()->AEGP_SetStreamName(streamRef, strUTF); + result |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + + AAEData.m_OutData->out_flags |= PF_OutFlag_REFRESH_UI; + if (effect == nullptr) + { + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + } + return result; + } + + PF_Err GetParamsSequenceUID(SAAEIOData &AAEData, std::string &out, unsigned int index, AEGP_EffectRefH effect = nullptr) + { + AEGP_SuiteHandler suites(AAEData.m_InData->pica_basicP); + AEGP_StreamRefH streamRef = nullptr; + AEGP_EffectRefH effectRef = effect; + PF_Err result = PF_Err_NONE; + + AEGP_MemHandle nameHandle; + aechar_t *wname; + + out.clear(); + if (effectRef == nullptr) + { + result |= suites.PFInterfaceSuite1()->AEGP_GetNewEffectForEffect(m_AAEID, AAEData.m_InData->effect_ref, &effectRef); + if (!AE_VERIFY(result == A_Err_NONE)) + return result; + } + result |= suites.StreamSuite2()->AEGP_GetNewEffectStreamByIndex(m_AAEID, effectRef, index, &streamRef); + + result |= suites.StreamSuite5()->AEGP_GetStreamName(m_AAEID, streamRef, false, &nameHandle); + result |= suites.StreamSuite2()->AEGP_DisposeStream(streamRef); + streamRef = nullptr; + + result |= suites.MemorySuite1()->AEGP_LockMemHandle(nameHandle, reinterpret_cast(&wname)); + + WCharToString(wname, &out); + + result |= suites.MemorySuite1()->AEGP_UnlockMemHandle(nameHandle); + result |= suites.MemorySuite1()->AEGP_FreeMemHandle(nameHandle); + + if (effect == nullptr) + result |= suites.EffectSuite4()->AEGP_DisposeEffect(effectRef); + effectRef = nullptr; + return result; + } + + void MakeParamCopy(PF_ParamDef *actual[], PF_ParamDef copy[], A_short arraySize) + { + for (A_short iS = 0; iS < arraySize; ++iS) { + AEFX_CLR_STRUCT(copy[iS]); + copy[iS] = *actual[iS]; + } + } + + PF_Err AddAngleParameter(PF_InData *in_data, const char *name, unsigned int id, float defaultValue = 0.0f, PF_ParamFlags flags = 0, PF_ParamUIFlags uiFlags = 0) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + def.flags = flags; + def.ui_flags = uiFlags; + PF_ADD_ANGLE(name, defaultValue, id); + + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err AddPercentParameter(PF_InData *in_data, const char *name, unsigned int id, int defaultValue = 0, PF_ParamFlags flags = 0, PF_ParamUIFlags uiFlags = 0) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + def.flags = flags; + def.ui_flags = uiFlags; + PF_ADD_PERCENT(name, defaultValue, id); + + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err AddCheckBoxParameter(PF_InData *in_data, const char *name, unsigned int id, bool defaultValue = false, PF_ParamFlags flags = 0, PF_ParamUIFlags uiFlags = 0) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + def.flags = flags; + def.ui_flags = uiFlags; + PF_ADD_CHECKBOX(name, "", defaultValue, flags, id); + + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err AddFloatParameter(PF_InData *in_data, const char *name, unsigned int id, float defaultValue = 0.0f, float min = 0.0f, float max = 0.0f, PF_ParamFlags flags = 0, PF_ParamUIFlags uiFlags = 0) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + def.flags = flags; + def.ui_flags = uiFlags; + PF_ADD_FLOAT_SLIDER(name, min, max, min, max, + 0/*Curve tolerance*/, defaultValue, 2/*float*/, 0/*display_flags*/, 0/*want phase*/, id); + + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err AddFloatParameterUnbound(PF_InData *in_data, const char *name, unsigned int id, float defaultValue = 0.0f, PF_ParamFlags flags = 0, PF_ParamUIFlags uiFlags = 0) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + def.flags = flags; + def.ui_flags = uiFlags; + PF_ADD_FLOAT_SLIDER(name, k_MinFloat, k_MaxFloat, k_MinFloat, k_MaxFloat, + 0/*Curve tolerance*/, defaultValue, 2/*float*/, 0/*display_flags*/, 0/*want phase*/, id); + + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err AddIntParameter(PF_InData *in_data, const char *name, unsigned int id, int defaultValue = 0, int min = 0, int max = 0, PF_ParamFlags flags = 0, PF_ParamUIFlags uiFlags = 0) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + def.flags = flags; + def.ui_flags = uiFlags; + PF_ADD_FLOAT_SLIDER(name, (PF_FpShort)min, (PF_FpShort)max, (PF_FpShort)min, (PF_FpShort)max, + 0/*Curve tolerance*/, defaultValue, 0/*int*/, 0/*display_flags*/, 0/*want phase*/, id); + + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err AddIntParameterUnbound(PF_InData *in_data, const char *name, unsigned int id, int defaultValue = 0, PF_ParamFlags flags = 0, PF_ParamUIFlags uiFlags = 0) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + def.flags = flags; + def.ui_flags = uiFlags; + PF_ADD_FLOAT_SLIDER(name, k_MinFloat, k_MaxFloat, k_MinFloat, k_MaxFloat, + 0/*Curve tolerance*/, defaultValue, 0/*int*/, 0/*display_flags*/, 0/*want phase*/, id); + + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err StartParameterCategory(PF_InData *in_data, const char *name, unsigned int id) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(name, id); + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + + PF_Err EndParameterCategory(PF_InData *in_data, unsigned int id) + { + PF_ParamDef def; + + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(id); + m_ParametersIndexes[id] = ++m_CurrentIndex; + return PF_Err_NONE; + } + +protected: + AEGP_PluginID m_AAEID; + int *m_ParametersIndexes = nullptr; + int m_CurrentIndex = 0; +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif + diff --git a/AE_Suites/PopcornFX_Define.h b/AE_Suites/PopcornFX_Define.h new file mode 100644 index 00000000..1ceae62c --- /dev/null +++ b/AE_Suites/PopcornFX_Define.h @@ -0,0 +1,90 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#include + +//---------------------------------------------------------------------------- + +#if (defined(MACOSX) || defined(__APPLE__) || defined(__apple__) || defined(macosx) || defined(MACOS_X)) && !defined(PK_MACOSX) +# define PK_MACOSX +#elif (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__win32__)) && !defined(PK_WINDOWS) +# define PK_WINDOWS +#endif + +//---------------------------------------------------------------------------- + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned short u_int16; +typedef unsigned long u_long; +typedef short int int16; +typedef float fpshort; + +//---------------------------------------------------------------------------- + +#define __AAEPK_BEGIN namespace AAePk { +#define __AAEPK_END } + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +#define PK_SCALE_DOWN 1 + +#define TEST_COLOR_PROFILE 1 + +#define PF_TABLE_BITS 12 + +#define PF_DEEP_COLOR_AWARE 1 // make sure we get 16bpc pixels; + +#define A_INTERNAL_TEST_ONE 0 + +inline bool ae_verify(bool condition) +{ +#if defined(PK_WINDOWS) + // Only breaks on windows for now + // should add a raise(SIGTRAP) for macos + if (condition == false) + __debugbreak(); +#endif + return condition; +} + +#ifndef AE_STRINGIFY +# define AE_STRINGIFY(s) __AE_STRINGIFY(s) +# define __AE_STRINGIFY(s) # s // don't directly use this one +#endif // !PK_STRINGIFY + +#define AE_MESSAGE(__msg) __pragma(message(__msg)) +#define AE_TODO(__msg) AE_MESSAGE(__FILE__ "(" AE_STRINGIFY(__LINE__) ") /!\\/!\\/!\\/!\\ TODO /!\\/!\\/!\\/!\\ " __msg) + +#define AE_VERIFY(__condition) ae_verify(__condition) + +// sub (shared) context +#ifndef WGL_CONTEXT_MAJOR_VERSION_ARB +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 +#endif + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#include + +/* Versioning information */ +#define AEPOPCORNFX_MAJOR_VERSION PK_VERSION_MAJOR +#define AEPOPCORNFX_MINOR_VERSION PK_VERSION_MINOR +#define AEPOPCORNFX_BUG_VERSION PK_VERSION_PATCH +#define AEPOPCORNFX_STAGE_VERSION PF_Stage_DEVELOP +#include "PopcornFX_Define_Version.h" + +typedef char16_t aechar_t; + +//---------------------------------------------------------------------------- diff --git a/AE_Suites/PopcornFX_Define_Version.h b/AE_Suites/PopcornFX_Define_Version.h new file mode 100644 index 00000000..94579e4b --- /dev/null +++ b/AE_Suites/PopcornFX_Define_Version.h @@ -0,0 +1,9 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +//---------------------------------------------------------------------------- + +#define AEPOPCORNFX_BUILD_VERSION 1 +#define AEPOPCORNFX_PIPL_VERSION 1148929 //AEPOPCORNFX_MAJOR_VERSION * 524288 + AEPOPCORNFX_MINOR_VERSION * 32768 + AEPOPCORNFX_BUG_VERSION * 2048 + AEPOPCORNFX_STAGE_VERSION * 512 + AEPOPCORNFX_BUILD_VERSION - 1 diff --git a/AE_Suites/PopcornFX_Suite.h b/AE_Suites/PopcornFX_Suite.h new file mode 100644 index 00000000..251df69d --- /dev/null +++ b/AE_Suites/PopcornFX_Suite.h @@ -0,0 +1,1407 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __POPCORNFX_SUITE_H__ +#define __POPCORNFX_SUITE_H__ + +#include "A.h" +#include + +#ifdef AE_OS_WIN +#include +#endif + +#include + +//AE +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PopcornFX_Define.h" + +#include +#include +#include + +//---------------------------------------------------------------------------- + +#define kPopcornFXSuite1 "AEGP PopcornFX Suite" +#define kPopcornFXSuiteVersion1 1 + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +enum EPKChildPlugins +{ + EMITTER = 0, + ATTRIBUTE, + SAMPLER, + _PLUGIN_COUNT +}; + +#pragma region Emitter + +//---------------------------------------------------------------------------- + +enum EGaussianBlurPixelRadius +{ + GaussianBlurPixelRadius_5 = 1, + GaussianBlurPixelRadius_9, + GaussianBlurPixelRadius_13, + __GaussianBlurPixelRadius_Count = GaussianBlurPixelRadius_13 +}; + +//---------------------------------------------------------------------------- + +enum ELightCategory +{ + ELightCategory_Debug_Default = 1, + ELightCategory_Compo_Default, + ELightCategory_Compo_Custom, + __ELightCategory_Count = ELightCategory_Compo_Custom +}; + +//---------------------------------------------------------------------------- + +enum ETransformType +{ + ETransformType_3D = 1, + ETransformType_2D, + __ETransformType_Count = ETransformType_2D +}; + +//---------------------------------------------------------------------------- + +enum ECameraType +{ + ECameraType_Compo_Default = 1, + ECameraType_Compo_Custom, + __ECameraType_Count = ECameraType_Compo_Custom +}; + +//---------------------------------------------------------------------------- + +enum ERenderType +{ + RenderType_FinalCompositing = 1, + RenderType_Emissive, + RenderType_Albedo, + RenderType_Normal, + RenderType_Depth, + __RenderType_Count = RenderType_Depth +}; + +//---------------------------------------------------------------------------- + +enum EInterpolationType +{ + EInterpolationType_Point = 1, + EInterpolationType_Trilinear, + EInterpolationType_Quadrilinear, + __EInterpolationType_Count = EInterpolationType_Quadrilinear +}; + +//---------------------------------------------------------------------------- + +// Add new effect parameters at the end of this enum +enum EEffectParameterType +{ + Effect_Parameters_InputReserved = 0, + + Effect_Parameters_Infernal_Autorender, + + Effect_Parameters_Path, + Effect_Parameters_Path_Reimport, + + Effect_Parameters_Infernal_Effect_Path_Hash, + + Effect_Topic_Transform_Start, + Effect_Parameters_Position, + Effect_Parameters_Rotation_X, + Effect_Parameters_Rotation_Y, + Effect_Parameters_Rotation_Z, + Effect_Topic_Transform_End, + + Effect_Parameters_Seed, + + + Effect_Topic_Rendering_Start, + + Effect_Parameters_Background_Toggle, + Effect_Parameters_Background_Opacity, + + Effect_Parameters_Render_Type, // PF_ParamFlag_CANNOT_TIME_VARY | PF_ParamFlag_CANNOT_INTERP + + Effect_Topic_Camera_Start, + Effect_Parameters_Camera, + Effect_Parameters_Camera_Position, + Effect_Parameters_Camera_Rotation_X, + Effect_Parameters_Camera_Rotation_Y, + Effect_Parameters_Camera_Rotation_Z, + Effect_Parameters_Camera_FOV, + Effect_Parameters_Camera_Near, + Effect_Parameters_Camera_Far, + Effect_Topic_Camera_End, + + Effect_Parameters_Receive_Light, // PF_ParamFlag_CANNOT_TIME_VARY || PF_ParamFlag_CANNOT_INTERP + + Effect_Topic_PostFX_Start, + Effect_Topic_Distortion_Start, + Effect_Parameters_Distortion_Enable, // PF_ParamFlag_CANNOT_TIME_VARY || PF_ParamFlag_CANNOT_INTERP + Effect_Topic_Distortion_End, + + Effect_Topic_Bloom_Start, + Effect_Parameters_Bloom_Enable, // PF_ParamFlag_CANNOT_TIME_VARY || PF_ParamFlag_CANNOT_INTERP + Effect_Parameters_Bloom_BrightPassValue, + Effect_Parameters_Bloom_Intensity, + Effect_Parameters_Bloom_Attenuation, + Effect_Parameters_Bloom_GaussianBlur, // PF_ParamFlag_CANNOT_TIME_VARY || PF_ParamFlag_CANNOT_INTERP + Effect_Parameters_Bloom_RenderPassCount, // PF_ParamFlag_CANNOT_TIME_VARY || PF_ParamFlag_CANNOT_INTERP + Effect_Topic_Bloom_End, + + Effect_Topic_ToneMapping_Start, + Effect_Parameters_ToneMapping_Enable, // PF_ParamFlag_CANNOT_TIME_VARY || PF_ParamFlag_CANNOT_INTERP + Effect_Parameters_ToneMapping_Saturation, + Effect_Parameters_ToneMapping_Exposure, + Effect_Topic_ToneMapping_End, + Effect_Topic_PostFX_End, + + Effect_Topic_Rendering_End, + + Effect_Topic_BackdropMesh_Start, + Effect_Parameters_BackdropMesh_Enable_Rendering, + Effect_Parameters_BackdropMesh_Enable_Collisions, + Effect_Parameters_BackdropMesh_Path, + Effect_Parameters_BackdropMesh_Reset, + + Effect_Topic_BackdropMesh_Transform_Start, + Effect_Parameters_BackdropMesh_Position, + Effect_Parameters_BackdropMesh_Rotation_X, + Effect_Parameters_BackdropMesh_Rotation_Y, + Effect_Parameters_BackdropMesh_Rotation_Z, + Effect_Parameters_BackdropMesh_Scale_X, + Effect_Parameters_BackdropMesh_Scale_Y, + Effect_Parameters_BackdropMesh_Scale_Z, + Effect_Topic_BackdropMesh_Transform_End, + Effect_Parameters_BackdropMesh_Roughness, + Effect_Parameters_BackdropMesh_Metalness, + Effect_Topic_BackdropMesh_End, + + Effect_Topic_BackdropEnvMap_Start, + Effect_Parameters_BackdropEnvMap_Enable_Rendering, + Effect_Parameters_BackdropEnvMap_Path, + Effect_Parameters_BackdropEnvMap_Reset, + Effect_Parameters_BackdropEnvMap_Intensity, + Effect_Parameters_BackdropEnvMap_Color, + Effect_Topic_BackdropEnvMap_End, + + Effect_Topic_Light_Start, + Effect_Parameters_Light_Category, + Effect_Parameters_Light_Direction, + Effect_Parameters_Light_Intensity, + Effect_Parameters_Light_Color, + Effect_Parameters_Light_Ambient, + Effect_Topic_Light_End, + + Effect_Parameters_Scale_Factor, + Effect_Parameters_Refresh_Render, + + Effect_Parameters_Seeking_Toggle, + Effect_Parameters_Simulation_State, + + Effect_Parameters_BackdropMesh_Enable_Animation, + + Effect_Topic_FXAA_Start, + Effect_Parameters_FXAA_Enable, // PF_ParamFlag_CANNOT_TIME_VARY || PF_ParamFlag_CANNOT_INTERP + Effect_Topic_FXAA_End, + + Effect_Parameters_Path_Marketplace, + + Effect_Parameters_TransformType, + Effect_Parameters_Position_2D, + Effect_Parameters_Position_2D_Distance, + + Effect_Topic_BackdropAudio_Start, + Effect_Parameters_Audio, + Effect_Topic_BackdropAudio_End, + + Effect_Parameters_BringEffectIntoView, + __Effect_Parameters_Count +}; + +//---------------------------------------------------------------------------- + +struct SPostFXDistortionDesc +{ + bool m_Enable; +}; + +//---------------------------------------------------------------------------- + +struct SPostFXBloomDesc +{ + bool m_Enable; + float m_BrightPassValue; + float m_Intensity; + float m_Attenuation; + EGaussianBlurPixelRadius m_GaussianBlur; + int m_RenderPassCount; +}; + +//---------------------------------------------------------------------------- + +struct SPostFXToneMappingDesc +{ + bool m_Enable; + + float m_Saturation; + float m_Exposure; +}; + +//---------------------------------------------------------------------------- + +struct SPostFXAADesc +{ + bool m_Enable; +}; + +//---------------------------------------------------------------------------- + +struct SRenderingDesc +{ + ERenderType m_Type; + bool m_ReceiveLight; + + SPostFXDistortionDesc m_Distortion; + SPostFXBloomDesc m_Bloom; + SPostFXToneMappingDesc m_ToneMapping; + SPostFXAADesc m_FXAA; +}; + +//---------------------------------------------------------------------------- + +struct SLightDesc +{ + bool m_Internal = true; + ELightCategory m_Category; + + A_FloatPoint3 m_Direction; + A_FloatPoint3 m_Position; + A_FloatPoint3 m_Color; + A_FloatPoint3 m_Ambient; + float m_Intensity; + float m_Angle; + float m_Feather; + + AEGP_LightType m_Type; +}; + +//---------------------------------------------------------------------------- + +struct SCameraDesc +{ + bool m_Internal = false; + bool m_AECameraPresent = false; + + A_FloatPoint3 m_Position; + A_FloatPoint3 m_Rotation; + + float m_FOV; + float m_Near = 0.1f; + float m_Far = 1000; + +}; + +//---------------------------------------------------------------------------- + +struct SBackdropMesh +{ + std::string m_Path; + + bool m_EnableRendering; + bool m_EnableCollisions; + bool m_EnableAnimations; + + A_FloatPoint3 m_Position; + A_FloatPoint3 m_Rotation; + A_FloatPoint3 m_Scale; + + float m_Roughness; + float m_Metalness; +}; + +//---------------------------------------------------------------------------- + +struct SBackdropEnvironmentMap +{ + std::string m_Path; + + bool m_EnableRendering = false; + + float m_Intensity; + A_FloatPoint3 m_Color; + +}; + +//---------------------------------------------------------------------------- + +enum EEmitterEffectGenericCall : int +{ + EmitterDesc = 0, + GetEmitterInfos +}; + + +//---------------------------------------------------------------------------- + +struct SGetEmitterInfos +{ + const EEmitterEffectGenericCall m_Type = EEmitterEffectGenericCall::GetEmitterInfos; + char m_Name[1024]; + char m_PathSource[1024]; +}; + +//---------------------------------------------------------------------------- + +struct SEmitterDesc +{ + const EEmitterEffectGenericCall m_Type = EEmitterEffectGenericCall::EmitterDesc; + static int s_ID; +public: + std::string m_Name; + std::string m_PathSource; + std::string m_UUID; + + ETransformType m_TransformType; + A_FloatPoint3 m_Position; + A_FloatPoint3 m_Rotation; + + bool m_IsAlphaBGOverride; + float m_AlphaBGOverride; + + int m_Seed = 0; + + SCameraDesc m_Camera; + SRenderingDesc m_Rendering; + + SBackdropMesh m_BackdropMesh; + SBackdropEnvironmentMap m_BackdropEnvironmentMap; + + SLightDesc m_Light; + + float m_ScaleFactor = 1; + + bool m_Update; + bool m_UpdateBackdrop = true; + bool m_LoadBackdrop = false; + int m_DebugID; + + A_long m_LayerID; + bool m_IsDeleted = false; + bool m_ReloadEffect = false; + + bool m_SimStatePrev = true; + bool m_SimState = true; + + SEmitterDesc() + { + SEmitterDesc::s_ID++; + m_DebugID = SEmitterDesc::s_ID; + m_Position.x = 0; + m_Position.y = 0; + m_Position.z = 0; + + m_Rotation.x = 0; + m_Rotation.y = 0; + m_Rotation.z = 0; + + m_IsAlphaBGOverride = false; + m_AlphaBGOverride = 1.0f; + m_LayerID = 0; + } +}; + +//---------------------------------------------------------------------------- + +#pragma region AttributeSampler + +enum ESamplerShapeType : int +{ + SamplerShapeType_Box = 0, + SamplerShapeType_Sphere, + SamplerShapeType_Ellipsoid, + SamplerShapeType_Cylinder, + SamplerShapeType_Capsule, + SamplerShapeType_Cone, + SamplerShapeType_Mesh, + + SamplerShapeType_None, + __SamplerShapeType_Count = SamplerShapeType_Mesh +}; + +//---------------------------------------------------------------------------- + +struct SBaseSamplerDescriptor +{ + uint32_t m_UsageFlags = 0; +}; + +//---------------------------------------------------------------------------- + +struct SShapeSamplerDescriptor : public SBaseSamplerDescriptor +{ + ESamplerShapeType m_Type; + + float m_Dimension[3]; + + std::string m_Path; + + //Skinned Backdrop + bool m_BindToBackdrop; + bool m_WeightedSampling; + unsigned int m_ColorStreamID; + unsigned int m_WeightStreamID; + + SShapeSamplerDescriptor() + : m_Type(SamplerShapeType_None) + , m_BindToBackdrop(false) + , m_WeightedSampling(false) + , m_ColorStreamID(0) + , m_WeightStreamID(0) + + { + m_Dimension[0] = 1.0f; + m_Dimension[1] = 1.0f; + m_Dimension[2] = 1.0f; + } +}; + +//---------------------------------------------------------------------------- + +struct STextSamplerDescriptor : public SBaseSamplerDescriptor +{ + AEGP_LayerIDVal m_LayerID = AEGP_LayerIDVal_NONE; + std::string m_Data; +}; + +//---------------------------------------------------------------------------- + +struct SAudioSamplerDescriptor : public SBaseSamplerDescriptor +{ + AEGP_LayerIDVal m_LayerID = AEGP_LayerIDVal_NONE; + + std::string m_ChannelGroup = ""; +}; + +//---------------------------------------------------------------------------- + +struct SImageSamplerDescriptor : public SBaseSamplerDescriptor +{ + AEGP_LayerIDVal m_LayerID = AEGP_LayerIDVal_NONE; +}; + +//---------------------------------------------------------------------------- + +struct SVectorFieldSamplerDescriptor : public SBaseSamplerDescriptor +{ + std::string m_Path; + + EInterpolationType m_Interpolation; + float m_Strength; + A_FloatPoint3 m_Position; + + bool m_ResourceUpdate; +}; + +//---------------------------------------------------------------------------- + +enum EAttributeSamplerType : int +{ + AttributeSamplerType_None = 0, + AttributeSamplerType_Animtrack, + AttributeSamplerType_Audio, + AttributeSamplerType_Curve, + AttributeSamplerType_EventStream, + AttributeSamplerType_Geometry, + AttributeSamplerType_Image, + AttributeSamplerType_ImageAtlas, + AttributeSamplerType_Grid, + AttributeSamplerType_Text, + AttributeSamplerType_VectorField, + __AttributeSamplerType_Count, +}; + +//---------------------------------------------------------------------------- + +enum EAttributeSamplerParameterType : int +{ + AttributeSamplerType_Parameters_Infernal_Uuid = 1, + AttributeSamplerType_Parameters_Infernal_Name, + AttributeSamplerType_Parameters_Shapes, + + AttributeSamplerType_Topic_Shape_Start, + + AttributeSamplerType_Topic_Shape_Box_Start, + AttributeSamplerType_Parameters_Box_Size_X, + AttributeSamplerType_Parameters_Box_Size_Y, + AttributeSamplerType_Parameters_Box_Size_Z, + AttributeSamplerType_Topic_Shape_Box_End, + + AttributeSamplerType_Topic_Shape_Sphere_Start, + AttributeSamplerType_Parameters_Sphere_Radius, + AttributeSamplerType_Parameters_Sphere_InnerRadius, + AttributeSamplerType_Topic_Shape_Sphere_End, + + AttributeSamplerType_Topic_Shape_Ellipsoid_Start, + AttributeSamplerType_Parameters_Ellipsoid_Radius, + AttributeSamplerType_Parameters_Ellipsoid_InnerRadius, + AttributeSamplerType_Topic_Shape_Ellipsoid_End, + + AttributeSamplerType_Topic_Shape_Cylinder_Start, + AttributeSamplerType_Parameters_Cylinder_Radius, + AttributeSamplerType_Parameters_Cylinder_Height, + AttributeSamplerType_Parameters_Cylinder_InnerRadius, + AttributeSamplerType_Topic_Shape_Cylinder_End, + + AttributeSamplerType_Topic_Shape_Capsule_Start, + AttributeSamplerType_Parameters_Capsule_Radius, + AttributeSamplerType_Parameters_Capsule_Height, + AttributeSamplerType_Parameters_Capsule_InnerRadius, + AttributeSamplerType_Topic_Shape_Capsule_End, + + AttributeSamplerType_Topic_Shape_Cone_Start, + AttributeSamplerType_Parameters_Cone_Radius, + AttributeSamplerType_Parameters_Cone_Height, + AttributeSamplerType_Topic_Shape_Cone_End, + + AttributeSamplerType_Topic_Shape_Mesh_Start, + AttributeSamplerType_Parameters_Mesh_Scale, + AttributeSamplerType_Parameters_Mesh_Path, + AttributeSamplerType_Parameters_Mesh_Bind_Backdrop, + AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_Weighted_Enabled, + AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_ColorStreamID, + AttributeSamplerType_Parameters_Mesh_Bind_Backdrop_WeightStreamID, + AttributeSamplerType_Topic_Shape_Mesh_End, + + AttributeSamplerType_Topic_Shape_End, + + AttributeSamplerType_Layer_Pick, + + AttributeSamplerType_Layer_Sample_Once, + AttributeSamplerType_Layer_Sample_Seeking, + + AttributeSamplerType_Parameters_VectorField_Path, + AttributeSamplerType_Parameters_VectorField_Strength, + AttributeSamplerType_Parameters_VectorField_Position, + AttributeSamplerType_Parameters_VectorField_Interpolation, + + AttributeSamplerType_Layer_Sample_Downsampling_X, + AttributeSamplerType_Layer_Sample_Downsampling_Y, + + __AttributeSamplerType_Parameters_Count +}; + +//---------------------------------------------------------------------------- + +struct SAttributeBaseDesc +{ + unsigned int m_Order; + bool m_IsAttribute; + + std::string m_Name; + std::string m_CategoryName; + + bool m_IsDeleted = false; + + SAttributeBaseDesc() + : m_Order(0) + , m_IsAttribute(false) + , m_Name("") + , m_CategoryName("") + { + + } + + SAttributeBaseDesc(const SAttributeBaseDesc &other) + : m_Order(other.m_Order) + , m_Name(other.m_Name) + , m_CategoryName(other.m_CategoryName) + , m_IsDeleted(other.m_IsDeleted) + { + } + + SAttributeBaseDesc &operator=(const SAttributeBaseDesc &other) + { + m_Name = other.m_Name; + m_CategoryName = other.m_CategoryName; + + return *this; + } + + std::string GetAttributePKKey() + { + std::string key = ""; + if (m_CategoryName.length() != 0) + { + key += m_CategoryName; + key += ":"; + } + key += m_Name; + return key; + } +}; + +//---------------------------------------------------------------------------- + +struct SAttributeSamplerDesc : public SAttributeBaseDesc +{ +public: + EAttributeSamplerType m_Type; + SBaseSamplerDescriptor *m_Descriptor = nullptr; + std::string m_ResourcePath = ""; + bool m_IsDefaultValue = true; + + SAttributeSamplerDesc(const char* name = nullptr, const char* category = nullptr, EAttributeSamplerType type = AttributeSamplerType_None) + : m_Type(type) + { + m_Name = name == nullptr ? "" : name; + m_CategoryName = category == nullptr ? "" : category; + } + + SAttributeSamplerDesc(const SAttributeSamplerDesc &other) + : SAttributeBaseDesc(other) + , m_Type(other.m_Type) + , m_Descriptor(other.m_Descriptor) + , m_IsDefaultValue(other.m_IsDefaultValue) + { + if(m_ResourcePath.length() == 0) + m_ResourcePath = (other.m_ResourcePath); + } + + SAttributeSamplerDesc &operator=(const SAttributeSamplerDesc &other) + { + m_Name = other.m_Name; + m_CategoryName = other.m_CategoryName; + m_Type = other.m_Type; + m_Descriptor = other.m_Descriptor; + m_IsDeleted = other.m_IsDeleted; + m_IsDefaultValue = other.m_IsDefaultValue; + + if (m_ResourcePath.length() == 0) + m_ResourcePath = (other.m_ResourcePath); + + return *this; + } +}; + +#pragma endregion + +//---------------------------------------------------------------------------- +#pragma region Attribute + +enum EAttributeType : int +{ + AttributeType_None = 0, + AttributeType_Bool1, + AttributeType_Bool2, + AttributeType_Bool3, + AttributeType_Bool4, + AttributeType_Int1, + AttributeType_Int2, + AttributeType_Int3, + AttributeType_Int4, + AttributeType_Float1, + AttributeType_Float2, + AttributeType_Float3, + AttributeType_Float4, + __AttributeType_Count, +}; + +//---------------------------------------------------------------------------- + +enum EAttributeParameterType : int +{ + Attribute_Parameters_Bool1 = 1, + Attribute_Parameters_Bool2, + Attribute_Parameters_Bool3, + Attribute_Parameters_Bool4, + Attribute_Parameters_Int1, + Attribute_Parameters_Int2, + Attribute_Parameters_Int3, + Attribute_Parameters_Int4, + Attribute_Parameters_Float1, + Attribute_Parameters_Float2, + Attribute_Parameters_Float3, + Attribute_Parameters_Float4, + Attribute_Parameters_Infernal_Uuid, + Attribute_Parameters_AffectedByScale, + Attribute_Parameters_Infernal_Name, + Attribute_Parameters_Color_RGB, + Attribute_Parameters_Color_A, + Attribute_Parameters_Reset, + __Attribute_Parameters_Count +}; + +//---------------------------------------------------------------------------- + +enum EAttributeSemantic : int +{ + AttributeSemantic_None = 0, + AttributeSemantic_Coordinate, + AttributeSemantic_Scale, + AttributeSemantic_Color, + __AttributeSemantic_Count +}; + +//---------------------------------------------------------------------------- + +union UAttributeValue +{ + void *m_Invalid; + bool m_Bool4[4]; + int m_Int4[4]; + float m_Float4[4]; + float m_Angles[3]; +}; + +//---------------------------------------------------------------------------- + +struct SAttributeDesc : public SAttributeBaseDesc +{ +public: + EAttributeType m_Type; + EAttributeSemantic m_AttributeSemantic; + + UAttributeValue m_DefaultValue; + + UAttributeValue m_MinValue; + UAttributeValue m_MaxValue; + + bool m_HasMax = false; + bool m_HasMin = false; + + UAttributeValue m_Value; + bool m_IsValid; + bool m_IsDirty; + + std::mutex m_Lock; +public: + bool m_IsDefaultValue = true; + bool m_IsAffectedByScale = false; + + SAttributeDesc(const char* name = nullptr, const char* category = nullptr, EAttributeType type = AttributeType_None, EAttributeSemantic semantic = EAttributeSemantic::AttributeSemantic_None) + : m_Type(type) + , m_AttributeSemantic(semantic) + , m_DefaultValue() + , m_MinValue() + , m_MaxValue() + , m_Value() + , m_IsValid(true) + , m_IsDirty(true) + { + m_IsAttribute = true; + m_Name = name == nullptr ? "" : name; + m_CategoryName = category == nullptr ? "" : category; + } + + SAttributeDesc(const SAttributeDesc &other) + : SAttributeBaseDesc(other) + , m_Type(other.m_Type) + , m_AttributeSemantic(other.m_AttributeSemantic) + , m_DefaultValue(other.m_DefaultValue) + , m_MinValue(other.m_MinValue) + , m_MaxValue(other.m_MaxValue) + , m_HasMax(other.m_HasMax) + , m_HasMin(other.m_HasMin) + , m_Value(other.m_Value) + , m_IsValid(other.m_IsValid) + , m_IsDirty(true) + , m_IsDefaultValue(other.m_IsDefaultValue) + { + + } + + ~SAttributeDesc() + { + + } + + SAttributeDesc& operator=(const SAttributeDesc &other) + { + m_Name = other.m_Name; + m_CategoryName = other.m_CategoryName; + m_Type = other.m_Type; + m_AttributeSemantic = other.m_AttributeSemantic; + + m_HasMin = other.m_HasMin; + m_HasMax = other.m_HasMax; + + m_MinValue = other.m_MinValue; + m_MaxValue = other.m_MaxValue; + + if (m_IsDefaultValue == true) + { + m_Value = other.m_Value; + m_IsDefaultValue = other.m_IsDefaultValue; + } + m_DefaultValue = other.m_DefaultValue; + m_IsDirty = true; + m_IsValid = other.m_IsValid; + m_IsDeleted = other.m_IsDeleted; + return *this; + } + + void Invalidate() + { + m_IsValid = false; + } + + bool isValid() + { + return m_IsValid; + } + + bool ResetValues() + { + m_Lock.lock(); + memcpy(&m_Value, &m_DefaultValue, sizeof(UAttributeValue)); + m_IsDirty = true; + m_IsDefaultValue = true; + m_Lock.unlock(); + + return true; + } + + template + void SetDefaultValue(T *value) + { + return _SetValueImpl(value, m_DefaultValue, true); + } + + template + void GetDefaultValue(T *value) + { + return _GetValueImpl(value, m_DefaultValue); + } + + template + void GetDefaultValueByType(EAttributeType type, T *value) + { + _GetValueByTypeImpl(type, value, m_DefaultValue); + } + + template + void SetValue(T *value) + { + return _SetValueImpl(value, m_Value); + } + + template + void GetValue(T *value) + { + return _GetValueImpl(value, m_Value); + } + + template + void GetValueByType(EAttributeType type, T *value) + { + _GetValueByTypeImpl(type, value, m_Value); + } + + void *GetRawValue() + { + return _GetRawValueImpl(m_Value); + } + + void GetValueAsStreamValue(EAttributeType type, AEGP_StreamValue *value) + { + _GetValueAsStreamValueImpl(type, value, m_Value); + } + + template + void SetMinValue(T *value) + { + return _SetValueImpl(value, m_MinValue); + } + + template + void GetMinValueByType(EAttributeType type, T *value) + { + _GetValueByTypeImpl(type, value, m_MinValue); + } + + template + void SetMaxValue(T *value) + { + return _SetValueImpl(value, m_MaxValue); + } + + template + void GetMaxValueByType(EAttributeType type, T *value) + { + _GetValueByTypeImpl(type, value, m_MaxValue); + } + + void Reset() + { + m_IsDirty = true; + m_IsValid = false; + m_Value = {}; + m_Name = ""; + m_CategoryName = ""; + m_Type = AttributeType_None; + m_AttributeSemantic = EAttributeSemantic::AttributeSemantic_None; + } +private: + template + void _SetValueImpl(T *value, UAttributeValue &field, bool isDefault = false) + { + m_Lock.lock(); + switch (m_Type) + { + case AttributeType_Bool4: + case AttributeType_Bool3: + case AttributeType_Bool2: + case AttributeType_Bool1: + memcpy(field.m_Bool4, value, sizeof(bool) * 4); + break; + case AttributeType_Int4: + case AttributeType_Int3: + case AttributeType_Int2: + case AttributeType_Int1: + memcpy(field.m_Int4, value, sizeof(int) * 4); + break; + case AttributeType_Float4: + case AttributeType_Float3: + case AttributeType_Float2: + case AttributeType_Float1: + memcpy(field.m_Float4, value, sizeof(float) * 4); + break; + default: + m_IsValid = false; + AE_VERIFY(false); + break; + } + m_IsDirty = true; + m_IsDefaultValue = isDefault; + m_Lock.unlock(); + } + + template + void _GetValueByTypeImpl(EAttributeType type, T *value, UAttributeValue &field) + { + m_Lock.lock(); + switch (type) + { + case AttributeType_Bool4: + *value = (T)field.m_Bool4[3]; + break; + case AttributeType_Bool3: + *value = (T)field.m_Bool4[2]; + break; + case AttributeType_Bool2: + *value = (T)field.m_Bool4[1]; + break; + case AttributeType_Bool1: + *value = (T)field.m_Bool4[0]; + break; + case AttributeType_Int4: + *value = (T)field.m_Int4[3]; + break; + case AttributeType_Int3: + *value = (T)field.m_Int4[2]; + break; + case AttributeType_Int2: + *value = (T)field.m_Int4[1]; + break; + case AttributeType_Int1: + *value = (T)field.m_Int4[0]; + break; + case AttributeType_Float4: + *value = (T)field.m_Float4[3]; + break; + case AttributeType_Float3: + *value = (T)field.m_Float4[2]; + break; + case AttributeType_Float2: + *value = (T)field.m_Float4[1]; + break; + case AttributeType_Float1: + *value= (T)field.m_Float4[0]; + break; + default: + m_IsValid = false; + AE_VERIFY(false); + break; + } + m_Lock.unlock(); + } + + void _GetValueAsStreamValueImpl(EAttributeType type, AEGP_StreamValue *value, UAttributeValue &field) + { + m_Lock.lock(); + switch (type) + { + case AttributeType_Bool4: + value->val.one_d = field.m_Bool4[3]; + break; + case AttributeType_Bool3: + value->val.one_d = field.m_Bool4[2]; + break; + case AttributeType_Bool2: + value->val.one_d = field.m_Bool4[1]; + break; + case AttributeType_Bool1: + value->val.one_d = field.m_Bool4[0]; + break; + case AttributeType_Int4: + value->val.one_d = field.m_Int4[3]; + break; + case AttributeType_Int3: + value->val.one_d = field.m_Int4[2]; + break; + case AttributeType_Int2: + value->val.one_d = field.m_Int4[1]; + break; + case AttributeType_Int1: + value->val.one_d = field.m_Int4[0]; + break; + case AttributeType_Float4: + value->val.one_d = field.m_Float4[3]; + break; + case AttributeType_Float3: + value->val.one_d = field.m_Float4[2]; + break; + case AttributeType_Float2: + value->val.one_d = field.m_Float4[1]; + break; + case AttributeType_Float1: + value->val.one_d = field.m_Float4[0]; + break; + default: + m_IsValid = false; + AE_VERIFY(false); + break; + } + m_Lock.unlock(); + } + + template + void _GetValueImpl(T *value, UAttributeValue &field) + { + m_Lock.lock(); + switch (m_Type) + { + case AttributeType_Bool4: + value[3] = field.m_Bool4[3]; + case AttributeType_Bool3: + value[2] = field.m_Bool4[2]; + case AttributeType_Bool2: + value[1] = field.m_Bool4[1]; + case AttributeType_Bool1: + value[0] = field.m_Bool4[0]; + break; + case AttributeType_Int4: + value[3] = (T)field.m_Int4[3]; + case AttributeType_Int3: + value[2] = (T)field.m_Int4[2]; + case AttributeType_Int2: + value[1] = (T)field.m_Int4[1]; + case AttributeType_Int1: + value[0] = (T)field.m_Int4[0]; + break; + case AttributeType_Float4: + value[3] = field.m_Float4[3]; + case AttributeType_Float3: + value[2] = field.m_Float4[2]; + case AttributeType_Float2: + value[1] = field.m_Float4[1]; + case AttributeType_Float1: + value[0] = field.m_Float4[0]; + break; + default: + m_IsValid = false; + AE_VERIFY(false); + break; + } + m_Lock.unlock(); + } + + void *_GetRawValueImpl(UAttributeValue &field) + { + m_Lock.lock(); + + void* result = nullptr; + switch (m_Type) + { + case AttributeType_Bool4: + case AttributeType_Bool3: + case AttributeType_Bool2: + case AttributeType_Bool1: + result = (void*)&field.m_Bool4; + break; + case AttributeType_Int4: + case AttributeType_Int3: + case AttributeType_Int2: + case AttributeType_Int1: + result = (void*)&field.m_Int4; + break; + case AttributeType_Float4: + case AttributeType_Float3: + case AttributeType_Float2: + case AttributeType_Float1: + result = (void*)&field.m_Float4; + break; + default: + AE_VERIFY(false); + break; + } + m_Lock.unlock(); + return result; + } +}; + +#pragma endregion + +//---------------------------------------------------------------------------- + +union SAAEExtraData +{ + SAAEExtraData(PF_Cmd Cmd, void *data) + { + switch (Cmd) + { + case PF_Cmd_SMART_PRE_RENDER: + m_PreRenderData = reinterpret_cast(data); + break; + case PF_Cmd_SMART_RENDER: + m_SmartRenderData = reinterpret_cast(data); + break; + case PF_Cmd_USER_CHANGED_PARAM: + m_ChangeParamData = reinterpret_cast(data); + break; + default: + m_UndefinedData = data; + break; + } + } + PF_SmartRenderExtra *m_SmartRenderData; + PF_PreRenderExtra *m_PreRenderData; + PF_UserChangedParamExtra *m_ChangeParamData; + void *m_UndefinedData; +}; + +//---------------------------------------------------------------------------- + +struct SAAEIOData +{ + SAAEIOData(PF_Cmd Cmd, PF_InData *InData, PF_OutData *OutData, void *data, const int *paramIndexes) + : m_Cmd(Cmd) + , m_InData(InData) + , m_OutData(OutData) + , m_ExtraData(Cmd, data) + , m_WorldSuite(nullptr) + , m_ReturnCode(PF_Err_NONE) + , m_ParametersIndexes(paramIndexes) + { + if (m_InData && m_OutData) + { + AEFX_AcquireSuite( m_InData, + m_OutData, + kPFWorldSuite, + kPFWorldSuiteVersion2, + "Couldn't load suite.", + (void**)&m_WorldSuite); + } + }; + ~SAAEIOData() + { + if (m_InData && m_OutData) + { + AEFX_ReleaseSuite( m_InData, + m_OutData, + kPFWorldSuite, + kPFWorldSuiteVersion2, + "Couldn't release suite."); + } + m_WorldSuite = nullptr; + }; + + PF_Cmd m_Cmd; + + PF_InData *m_InData; + PF_OutData *m_OutData; + + SAAEExtraData m_ExtraData; + + PF_WorldSuite2 *m_WorldSuite; + + PF_Err m_ReturnCode; + + const int *m_ParametersIndexes; +}; + +//---------------------------------------------------------------------------- + +struct SAAEScopedParams +{ + PF_ParamDef m_ParamData; + PF_InData *m_InData; + + SAAEScopedParams(SAAEIOData& AAEData, A_u_long type) : + m_InData(AAEData.m_InData) + { + AEFX_CLR_STRUCT(m_ParamData); + int idx = (AAEData.m_ParametersIndexes != nullptr) ? AAEData.m_ParametersIndexes[type] : type; + PF_CHECKOUT_PARAM( m_InData, + idx, + m_InData->current_time, + m_InData->time_step, + m_InData->time_scale, + &m_ParamData); + } + ~SAAEScopedParams() + { + PF_CHECKIN_PARAM(m_InData, &m_ParamData); + m_InData = nullptr; + } + + PF_ParamDef &GetRawParam() { return m_ParamData; } + float GetAngle() const { return (float)m_ParamData.u.ad.value / 65536.0f; } + float GetFloat() const { return (float)m_ParamData.u.fs_d.value; } + float GetPercent() const { return (float)m_ParamData.u.fd.value / (float)m_ParamData.u.fd.valid_max; } + int GetInt() const { return (int)m_ParamData.u.fs_d.value; } + int GetComboBoxValue() const { return (int)m_ParamData.u.pd.value; } + bool GetCheckBoxValue() const { return (bool)m_ParamData.u.bd.value; } + PF_LayerDef GetLayer() const { return (PF_LayerDef)m_ParamData.u.ld; } + A_FloatPoint3 GetPoint3D() const + { + A_FloatPoint3 position = {(float)m_ParamData.u.point3d_d.x_value * m_InData->downsample_x.den, + (float)m_ParamData.u.point3d_d.y_value * m_InData->downsample_y.den, + (float)m_ParamData.u.point3d_d.z_value * ::sqrt(m_InData->downsample_x.den * m_InData->downsample_y.den)}; + return position; + } + A_FloatPoint GetPoint2D() const + { + A_FloatPoint position = { (float)m_ParamData.u.td.x_value * m_InData->downsample_x.den, + (float)m_ParamData.u.td.y_value * m_InData->downsample_y.den }; + return position; + } + A_FloatPoint3 GetColor() const + { + const PF_UnionablePixel &color = m_ParamData.u.cd.value; + return A_FloatPoint3{ color.red / 255.0f, color.green / 255.0f, color.blue / 255.0f }; + } +}; + +//---------------------------------------------------------------------------- + +struct SAAECamera +{ + float m_YFov; +}; + +//---------------------------------------------------------------------------- + +inline void CopyCharToUTF16(const char *input, + A_UTF16Char *destination) +{ + std::string basicStr(input); + std::u16string ws; + + ws.append(basicStr.begin(), basicStr.end()); + memcpy(destination, ws.data(), (ws.length() + 1) * sizeof(char16_t)); +} + +//---------------------------------------------------------------------------- + +inline void WCharToString(aechar_t *input, std::string *destination) +{ + std::u16string ws(input); + destination->append(ws.begin(), ws.end()); +} + +//---------------------------------------------------------------------------- + +inline unsigned int hashString(const char *str) +{ + unsigned int hash = 5381; + int c; + + while ((c = *str++)) + hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + + return hash; +} + +//---------------------------------------------------------------------------- + +inline float RadToDeg(const float angle) +{ + return angle * 180.f / 3.141592f; +} + +//---------------------------------------------------------------------------- + +inline float DegToRad(const float angle) +{ + return angle * 3.141592f / 180.f; +} + +//---------------------------------------------------------------------------- + +__AAEPK_END + +//---------------------------------------------------------------------------- + +struct PopcornFXSuite1 +{ + SPAPI A_Err (*InitializePopcornFXIFN) (AAePk::SAAEIOData& AAEData); + + SPAPI A_Err (*HandleNewEmitterEvent) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc *descriptor); + + SPAPI A_Err (*HandleDeleteEmitterEvent) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc *descriptor); + + SPAPI bool (*CheckEmitterValidity) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc *descriptor); + + SPAPI A_Err (*UpdateScene) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + + SPAPI A_Err (*UpdateEmitter) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + + SPAPI A_Err (*DisplayMarketplacePanel) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + + SPAPI A_Err (*DisplayBrowseEffectPanel) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + + SPAPI A_Err (*DisplayBrowseMeshDialog) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + + SPAPI A_Err (*DisplayBrowseEnvironmentMapDialog) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + + SPAPI A_Err (*ReimportEffect) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + + SPAPI A_Err (*Display_AttributeSampler_BrowseMeshDialog) (AAePk::SAAEIOData& AAEData, AAePk::SAttributeSamplerDesc* descriptor); + + SPAPI A_Err (*ShutdownPopcornFXIFN) (AAePk::SAAEIOData& AAEData); + + SPAPI A_Err (*SetParametersIndexes) (const int *indexes, AAePk::EPKChildPlugins plugin); + + SPAPI A_Err (*SetDefaultLayerPosition) (AAePk::SAAEIOData& AAEData, AEGP_LayerH layer); + + SPAPI A_Err (*MoveEffectIntoCurrentView) (AAePk::SAAEIOData& AAEData, AAePk::SEmitterDesc* descriptor); + +}; + +//---------------------------------------------------------------------------- + +#endif // !__POPCORNFX_SUITE_H__ + + diff --git a/AE_Suites/PopcornFX_UID.h b/AE_Suites/PopcornFX_UID.h new file mode 100644 index 00000000..e7ac9d64 --- /dev/null +++ b/AE_Suites/PopcornFX_UID.h @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------- +// Copyright Persistant Studios, SARL. All Rights Reserved. https://www.popcornfx.com/terms-and-conditions/ +//---------------------------------------------------------------------------- +#pragma once + +#ifndef __POPCORNFX_UID_H__ +#define __POPCORNFX_UID_H__ + +#include "PopcornFX_Define.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +__AAEPK_BEGIN + +//---------------------------------------------------------------------------- + +class CUUIDGenerator +{ +private: + CUUIDGenerator() {} + + static unsigned char _RandomChar() + { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> dis(0, 255); + return static_cast(dis(gen)); + } + + static std::string _GenerateHex(const unsigned int len) + { + std::stringstream ss; + + for (unsigned int i = 0; i < len; i++) + { + unsigned char rc = _RandomChar(); + std::stringstream hexstream; + + hexstream << std::hex << int(rc); + + std::string hex = hexstream.str(); + + ss << (hex.length() < 2 ? '0' + hex : hex); + } + return ss.str(); + } +public: + ~CUUIDGenerator() {}; + + static std::string Get32() { return _GenerateHex(32); } + static std::string Get16() { return _GenerateHex(16); } + static std::string Get8() { return _GenerateHex(8); } + +}; + +//---------------------------------------------------------------------------- + +__AAEPK_END + +#endif diff --git a/CopyQTDllsForAE.py b/CopyQTDllsForAE.py new file mode 100644 index 00000000..d86ade92 --- /dev/null +++ b/CopyQTDllsForAE.py @@ -0,0 +1,105 @@ +import os +import shutil +import sys +import subprocess +import pathlib + +# Check if file's relative location is as expected +script_dir = pathlib.Path(os.path.abspath(__file__)).parent +assert script_dir.match("*/source_tree/Integrations/AfterEffects") + +sys.path.append(str(script_dir / "../../SDK/Python")) +from Libs.pk_tools_locate import get_qt_bin_path + +#SETUP +#============ +QT_BIN_PATH_OVERRIDE="" # e.g. "E:\\SDK\\Qt\\Qt5.15.2\\5.15.2\\msvc2019_64\\bin" + +assembly_folder = "External/popcornfx.qt" +debug_dlls = False #Set this to True to add debug dlls in the private assembly +qt_dll_override_manifest = "qtoverride.dll.manifest" +win_kit_bin_path = "C:\\Program Files (x86)\\Windows Kits\\10\\bin" + +# [0] path: str +# [1] addInAssembly: bool +# [2] patchWithManifest: bool +dlls_to_copy = [ + ("Qt5Core.dll", True, False), #The first one must be Qt5Core + ("Qt5Gui.dll", True, True), + ("Qt5Widgets.dll", True, True), + ("../plugins/platforms/qwindows.dll", False, True), + ] +#============ + +def FindMtExe(): + versions_list = [name for name in os.listdir(win_kit_bin_path) if os.path.isdir(os.path.join(win_kit_bin_path, name)) and name.startswith("10.")] + versions_list.sort(reverse=True) + for version in versions_list: + mt_exe_path = os.path.join(win_kit_bin_path, version + "\\x64\\mt.exe") + if (os.path.exists(mt_exe_path)): + return mt_exe_path + return "" + +def CopyDll(dll, debug, path_qt_folder, mt_exe_path, f): + dll_path = dll[0] #path + if debug: + split_path = os.path.splitext(dll_path) + dll_path = split_path[0] + "d" + split_path[1] + src_fpath = os.path.join(path_qt_folder, dll_path) + file = os.path.basename(dll_path) + dest_fpath = os.path.join(assembly_folder, file) + print("Copying: " + file) + shutil.copy(src_fpath, dest_fpath) + if dll[1]: #addInAssembly + f.write(" \n") + if dll[2]: #patchWithManifest + cmd = [mt_exe_path, "-manifest", "qtoverride.dll.manifest", "-outputresource:" + assembly_folder + "/" + file + ";#2"] + process = subprocess.run(cmd, check=True, stdout=subprocess.DEVNULL) + process.check_returncode() + +def main(): + mt_exe_path = FindMtExe() + if not mt_exe_path: + print("Error: Could not found mt.exe") + sys.exit(1) + + if not os.path.exists(qt_dll_override_manifest): + print("Error: Could not found:" + qt_dll_override_manifest) + sys.exit(1) + + path_qt_folder = QT_BIN_PATH_OVERRIDE if QT_BIN_PATH_OVERRIDE else str(get_qt_bin_path(True)) + if not os.path.exists(path_qt_folder): + print("Error: Could not found Qt folder: " + path_qt_folder) + sys.exit(1) + print("Found Qt directory at: " + path_qt_folder) + + if not path_qt_folder: + print("Error: Could not found Qt directory in PATH") + sys.exit(1) + + if os.path.isdir(assembly_folder): + shutil.rmtree(assembly_folder) + os.mkdir(assembly_folder) + f = open(assembly_folder + "/popcornfx.qt.manifest", "w") + if not f: + print("Error: Could not open to write:" + assembly_folder + "/popcornfx.qt.manifest") + sys.exit(1) + + f.write("\n") + f.write("\"\n") + f.write("\n") + f.write(" \n") + + for dll in dlls_to_copy: + CopyDll(dll, False, path_qt_folder, mt_exe_path, f) + if debug_dlls: + CopyDll(dll, True, path_qt_folder, mt_exe_path, f) + + f.write("\n") + f.write("") + f.close() + + sys.exit(0) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/External/AE SDK/Headers/A.h b/External/AE SDK/Headers/A.h new file mode 100644 index 00000000..b0ba6616 --- /dev/null +++ b/External/AE SDK/Headers/A.h @@ -0,0 +1,196 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +/** A.h + + Adobe-standard (hopefully one day) types to promote plug-in sharing. + +**/ +#ifndef _H_A +#define _H_A + +#ifdef A_INTERNAL + + #include + +#else + #include "stdint.h" + + typedef int32_t A_long; + typedef uint32_t A_u_long; + typedef char A_char; + typedef double A_FpLong; + typedef float A_FpShort; + typedef A_long A_Err; + typedef void * A_Handle; + typedef A_long A_Fixed; + typedef A_u_long A_UFixed; + + #if defined( __MWERKS__) || defined (__GNUC__) // metrowerks codewarrior and XCode/GCC + typedef int16_t A_short; + typedef uint16_t A_u_short; + typedef uint8_t A_u_char; + typedef uint8_t A_Boolean; + typedef intptr_t A_intptr_t; + #else // windows + typedef short A_short; + typedef unsigned short A_u_short; + typedef unsigned char A_u_char; + typedef unsigned char A_Boolean; + #ifdef _WIN64 + typedef __int64 A_intptr_t; + #else + typedef int32_t A_intptr_t; + #endif + #endif + +#ifdef _MSC_VER // visual c++ + typedef unsigned __int64 A_u_longlong; +#endif + +#if defined( __MWERKS__) || defined (__GNUC__) // metrowerks codewarrior and XCode/GCC + typedef uint64_t A_u_longlong; +#endif + + +#include + + + typedef struct { + A_long value; + A_u_long scale; + } A_Time; + + typedef struct { + A_long num; /* numerator */ + A_u_long den; /* denominator */ + } A_Ratio; + + typedef struct { + A_FpLong x, y; + } A_FloatPoint; + + typedef struct { + A_FpLong x, y, z; + } A_FloatPoint3; + + typedef struct { + A_FpLong left, top, right, bottom; + } A_FloatRect; + + typedef struct { + A_FpLong mat[3][3]; + } A_Matrix3; + + typedef struct { + A_FpLong mat[4][4]; + } A_Matrix4; + + typedef struct { + A_short top, left, bottom, right; + } A_LegacyRect; + + typedef struct { + A_long left, top, right, bottom; + } A_LRect; + + typedef A_LRect A_Rect; + + typedef struct { + A_long x, y; + } A_LPoint; + + typedef struct { + A_FpLong radius, angle; + } A_FloatPolar; + + typedef A_u_longlong A_HandleSize; + +#include + + + + +#endif + + +#include + +typedef struct { + A_FpLong alpha; + A_FpLong red; + A_FpLong green; + A_FpLong blue; + +} A_Color; + +#include + + + + + +#define A_THROW(ERR) throw ((A_long) ERR) + +enum { + A_Err_NONE = 0, + A_Err_GENERIC, + A_Err_STRUCT, + A_Err_PARAMETER, + A_Err_ALLOC, + A_Err_WRONG_THREAD, // Some calls can only be used on UI (Main) or Render threads. Also, calls back to AE can only be made from the same thread AE called you on + A_Err_CONST_PROJECT_MODIFICATION, // An attempt was made to write to a read only copy of an AE project. Project changes must originate in the UI/Main thread. + A_Err_RESERVED_7, + A_Err_RESERVED_8, + A_Err_RESERVED_9, + A_Err_RESERVED_10, + A_Err_RESERVED_11, + A_Err_RESERVED_12, + A_Err_MISSING_SUITE = 13, // acquire suite failed on a required suite + A_Err_RESERVED_14, + A_Err_RESERVED_15, + A_Err_RESERVED_16, + A_Err_RESERVED_17, + A_Err_RESERVED_18, + A_Err_RESERVED_19, + A_Err_RESERVED_20, + A_Err_RESERVED_21, + A_Err_NOT_IN_CACHE_OR_COMPUTE_PENDING, + + A_Err_LAST +}; + +typedef struct { + A_short majorS; + A_short minorS; +} A_Version; + +typedef struct _Up_OpaqueMem **AEGP_MemHandle; + +typedef A_u_short A_UTF16Char; + +#if defined( __MWERKS__) || defined (__GNUC__) // metrowerks codewarrior and XCode/GCC + typedef A_char A_LegacyEnumType; +#else // windows + typedef A_long A_LegacyEnumType; +#endif + +#endif diff --git a/External/AE SDK/Headers/AEConfig.h b/External/AE SDK/Headers/AEConfig.h new file mode 100644 index 00000000..c1b36982 --- /dev/null +++ b/External/AE SDK/Headers/AEConfig.h @@ -0,0 +1,102 @@ +#ifndef AECONFIG_H +#define AECONFIG_H + +/* +Usage guidelines for these defines. 4/12/2006 + +Always use the most specific kind for your problem. Try and use +the form + +#ifdef AE_XXXXX (i.e. AE_OS_MAC) + +#elif defined(AE_NOT_XXXX) (i.e. AE_OS_WIN) + +#else + #error "unknown" +#endif + +when creating conditionally compiled blocks. + +AE_OS_MAC | AE_OS_WIN + +are used to select between the most popular version of the operating +system API's. As of this writing AE_OS_MAC implies 10.4.4u SDK, and +AE_OS_WIN implies the platform SDK shipped with VS8 and _WIN32. + + +AE_PROC_PPC | AE_PROC_INTEL + +are used for code that will only execute on one processor family or +the other. Essentially should only be used for asm, or asm based +intrinsics. Note: we do not currently have a define for things +like SSE or SSE3 as we don't build the whole code base targetted +for different instances of processors. You'll need to do runtime checks for SSE3 +(though our minimum requirement is Pentium4 so SSE2 can be assumed). + + +AE_BIG_ENDIAN | AE_LITTLE_ENDIAN + +PowerPC on Mac was BIG endian (as is network byte order). +x86 is a little endian architecture. + +Try and avoid writing new code that uses this. Use XML or dva::filesupport +for writing things to disk. + +These defines should be seldom used, instead use the byte swapping macro's +already defined in U which will be a no-op on platforms that don't need it. + +For the record, our file format is stored big endian. + + +*/ +//Define our OS defines +#if defined(_WIN32) + #define AE_OS_WIN +#elif defined(__GNUC__) && defined(__MACH__) + #include "TargetConditionals.h" // defines the nesting of TARGET_OS_* + #if TARGET_OS_MAC + #if TARGET_OS_IPHONE + // Older SDKs ( before TV, WATCH ) do not have TARGET_OS_IOS defined. + #if TARGET_OS_IOS || !defined(TARGET_OS_IOS) + #define AE_OS_IOS + #endif + #else + #define AE_OS_MAC + #endif // TARGET_OS_IPHONE + + #if TARGET_OS_SIMULATOR + #define AE_OS_APPLE_SIM + #endif + #endif // TARGET_OS_MAC +#elif Rez + #define AE_OS_MAC +#elif defined(__ANDROID__) + #define AE_OS_ANDROID +#else + #error "unrecognized AE platform" +#endif + +//Define our Processor defines +#if defined(__i386__) || defined(_M_IX86) + #define AE_PROC_INTEL +#elif defined(_M_X64) || defined(__amd64__) || defined(__x86_64__) + #define AE_PROC_INTELx64 +#elif defined(__arm64__) || defined(__aarch64__) + #define AE_PROC_ARM64 +#else + #error "unrecognized AE processor" +#endif + +#if defined(AE_OS_MAC) && defined(AE_PROC_ARM64) +// This is used to enable/disable features that are still being +// ported/tested to run on Mac arm64based M1 processors, aka Apple Silicon. +// It is intended for Adobe internal use, and will be going away once the mac +// arm64 work is completed. +#define AE_MAC_ARM64_PROTOTYPE_TODO +#endif + +//Define our Byte order +#define AE_LITTLE_ENDIAN + + +#endif diff --git a/External/AE SDK/Headers/AEFX_ArbParseHelper.c b/External/AE SDK/Headers/AEFX_ArbParseHelper.c new file mode 100644 index 00000000..789f269b --- /dev/null +++ b/External/AE SDK/Headers/AEFX_ArbParseHelper.c @@ -0,0 +1,171 @@ +// AEFX_ArbParseHelper.c +// + + + +#include "AEFX_ArbParseHelper.h" + +#include +#include +#include +#include +#include + +PF_Err +AEFX_AppendText( A_char *srcAC, /* >> */ + const A_u_long dest_sizeL, /* >> */ + A_char *destAC, /* <> */ + A_u_long *current_indexPLu) /* <> */ +{ + PF_Err err = PF_Err_NONE; + + A_u_long new_strlenLu = (A_u_long) strlen(srcAC) + *current_indexPLu; + + + if (new_strlenLu <= dest_sizeL) { + destAC[*current_indexPLu] = 0x00; + + strcat(destAC, srcAC); + *current_indexPLu = new_strlenLu; + } else { + err = AEFX_ParseError_APPEND_ERROR; + } + + return err; +} + + + + +PF_Err +AEFX_ParseCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + A_char *bufAC) /* << AEFX_CELL_SIZE */ +{ + PF_Err err = PF_Err_NONE; + A_char c; + A_char buf[AEFX_CELL_SIZE]; + A_char *scan; + A_short count; + + if (startPC[*current_indexPL] == AEFX_Char_EOL) { + err = AEFX_ParseError_EXPECTING_MORE_DATA; + } else if (startPC[*current_indexPL] == 0) { + err = AEFX_ParseError_EXPECTING_MORE_DATA; + } else { + count = 0; + scan = buf; + while ((c = startPC[(*current_indexPL)++]) != 0) { + if (c == AEFX_Char_TAB) + break; + if (c == AEFX_Char_EOL) { + (*current_indexPL)--; + break; + } + + *scan++ = c; + + if (++count >= AEFX_CELL_SIZE) + break; + } + *scan = 0; + + // trim spaces from head + scan = buf; + while (isspace(*scan)) + scan++; + + strcpy(bufAC, scan); + + // trim spaces from end (guaranteed not to scan past start of string, because + // if the string were all spaces, it would be trimmed down to nothing in the + // head-trim step above + if (*bufAC) { + scan = bufAC + strlen(bufAC) - 1; + while (*scan == AEFX_Char_SPACE) { + *scan-- = 0; + } + } + } + + return err; + +} + + +/** AEFX_ParseFpLong + + Reads in the next cell in the input stream and converts it to a double. + The first non-space character must be numeric. + +**/ +PF_Err +AEFX_ParseFpLong( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_FpLong *dPF) /* << */ +{ + PF_Err err = PF_Err_NONE; + A_char c; + A_char *end_ptr; + A_char buf[AEFX_CELL_SIZE]; + + err = AEFX_ParseCell(in_data, out_data, startPC, current_indexPL, buf); + + if (!err) { + c = buf[0]; + + if (!isdigit(c) && c != '.' && c != '-') { + err = AEFX_ParseError_EXPECTING_A_NUMBER; + } else { + errno = 0; + *dPF = strtod(buf, &end_ptr); + } + } + + return err; +} + + + +PF_Err +AEFX_MatchCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *strPC, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_Boolean *matchPB0) /* << */ +{ + PF_Err err = PF_Err_NONE; + A_char buf[AEFX_CELL_SIZE]; + A_u_long origLu = *current_indexPL; + PF_Boolean found = 0; + + if (startPC[*current_indexPL] == AEFX_Char_EOL) { + found = 0; + err = AEFX_ParseError_EXPECTING_MORE_DATA; + } else { + err = AEFX_ParseCell(in_data, out_data, startPC, current_indexPL, buf); + + if (!err) { + found = STR_EQUAL(buf, strPC); + + if (!found) + *current_indexPL = origLu; + } + } + + if (!err && !found && matchPB0 == NULL) { + err = AEFX_ParseError_MATCH_ERROR; + } + + if (matchPB0) + *matchPB0 = found; + + return err; +} + + diff --git a/External/AE SDK/Headers/AEFX_ArbParseHelper.h b/External/AE SDK/Headers/AEFX_ArbParseHelper.h new file mode 100644 index 00000000..fa79fa3e --- /dev/null +++ b/External/AE SDK/Headers/AEFX_ArbParseHelper.h @@ -0,0 +1,75 @@ +// AEFX_ArbParseHelper.h +// + +// This file has no header, and is designed to by #included as necessary. -jja 9/30/98 + + +#ifndef _H_AEFX_ArbParseHelper +#define _H_AEFX_ArbParseHelper + +#include + +#define AEFX_Char_TAB '\t' +#define AEFX_Char_EOL '\r' +#define AEFX_Char_SPACE ' ' + +#ifndef AEFX_CELL_SIZE +#define AEFX_CELL_SIZE 256 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +enum { + AEFX_ParseError_EXPECTING_MORE_DATA = 0x00FEBE00, + AEFX_ParseError_APPEND_ERROR, + AEFX_ParseError_EXPECTING_A_NUMBER, + AEFX_ParseError_MATCH_ERROR +}; +typedef A_long AEFX_ParseErrors; + + + +#ifndef STR_EQUAL + #define STR_EQUAL(A, B) (strcmp((A),(B)) == 0) +#endif + + +PF_Err +AEFX_AppendText( A_char *srcAC, /* >> */ + const A_u_long dest_sizeL, /* >> */ + A_char *destAC, /* <> */ + A_u_long *current_indexPLu); /* <> */ + + +PF_Err +AEFX_ParseFpLong( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_FpLong *dPF); /* << */ + + +PF_Err +AEFX_MatchCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *strPC, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_Boolean *matchPB0); /* << */ + +PF_Err +AEFX_ParseCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + A_char *bufAC); /* << AEFX_CELL_SIZE */ + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/External/AE SDK/Headers/AEFX_ChannelDepthTpl.h b/External/AE SDK/Headers/AEFX_ChannelDepthTpl.h new file mode 100644 index 00000000..55c0546d --- /dev/null +++ b/External/AE SDK/Headers/AEFX_ChannelDepthTpl.h @@ -0,0 +1,59 @@ +#ifndef _H_AEFX_CHANNELDEPTHTPL +#define _H_AEFX_CHANNELDEPTHTPL + +/** AEFX_ChannelDepthTpl.h + + (c) 2005 Adobe Systems Incorporated + +**/ + +// Basic pixel traits structure. This structure is never used per se, merely overidden -- see below. +template +struct PixelTraits { + typedef int PixType; + typedef int DataType; + static DataType + LutFunc(DataType input, const DataType *map); + + enum {max_value = 0 }; +}; + + +// 8 bit pixel types, constants, and functions +template <> +struct PixelTraits{ + typedef PF_Pixel8 PixType; + typedef u_char DataType; + static DataType + LutFunc(DataType input, const DataType *map){return map[input];} + enum {max_value = PF_MAX_CHAN8}; +}; + +// 16 bit pixel types, constants, and functions +template <> +struct PixelTraits{ + typedef PF_Pixel16 PixType; + typedef u_short DataType; + static u_short + LutFunc(u_short input, const u_short *map); + enum {max_value = PF_MAX_CHAN16}; +}; + + +inline u_short +PixelTraits::LutFunc(u_short input, + const u_short *map) +{ + u_short index = input >> (15 - PF_TABLE_BITS); + uint32_t fract = input & ((1 << (15 - PF_TABLE_BITS)) - 1); + A_long result = map [index]; + + if (fract) { + result += ((((A_long) map [index + 1] - result) * fract) + + (1 << (14 - PF_TABLE_BITS))) >> (15 - PF_TABLE_BITS); + } + return (u_short) result; + +} + +#endif //_H_AEFX_CHANNELDEPTHTPL \ No newline at end of file diff --git a/External/AE SDK/Headers/AEFX_SuiteHandlerTemplate.h b/External/AE SDK/Headers/AEFX_SuiteHandlerTemplate.h new file mode 100644 index 00000000..b51cf18e --- /dev/null +++ b/External/AE SDK/Headers/AEFX_SuiteHandlerTemplate.h @@ -0,0 +1,63 @@ +#ifndef _H_AEFX_SUITE_HELPER_TEMPLATE +#define _H_AEFX_SUITE_HELPER_TEMPLATE + +#include +#include +#include +#include + + +#ifdef __cplusplus + +// Throws A_Err_MISSING_SUITE if acquisition fails and the second template argument, ALLOW_NO_SUITE, is set to false +template +class AEFX_SuiteScoper +{ +public: + AEFX_SuiteScoper(const PF_InData *in_data, const char *suite_name, int32_t suite_versionL, PF_OutData *out_dataP0 = 0, const char *err_stringZ0 = 0) + { + i_suite_name = suite_name; + i_suite_versionL = suite_versionL; + i_basic_suiteP = in_data->pica_basicP; + + const void *suiteP; + SPErr err = i_basic_suiteP->AcquireSuite(i_suite_name, i_suite_versionL, &suiteP); + + if (err != kSPNoError) { + if (ALLOW_NO_SUITE) { + suiteP = NULL; + } + else { + if (out_dataP0) { + const char *error_stringPC = err_stringZ0 ? err_stringZ0 : "Not able to acquire AEFX Suite."; + out_dataP0->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + (*in_data->utils->ansi.sprintf)(out_dataP0->return_msg, error_stringPC); + } + A_THROW(A_Err_MISSING_SUITE); + } + } + + i_suiteP = reinterpret_cast(suiteP); + } + + ~AEFX_SuiteScoper() + { + if (i_suiteP) { + i_basic_suiteP->ReleaseSuite(i_suite_name, i_suite_versionL); // ignore error, nothing we can do in dtor + } + } + + const SUITETYPE* operator->() const { return i_suiteP; } + const SUITETYPE* get() const { return i_suiteP; } + +private: + mutable const SUITETYPE *i_suiteP; + SPBasicSuite *i_basic_suiteP; + const char *i_suite_name; + int32_t i_suite_versionL; +}; + + +#endif // __cplusplus + +#endif // _H diff --git a/External/AE SDK/Headers/AEFX_SuiteHelper.c b/External/AE SDK/Headers/AEFX_SuiteHelper.c new file mode 100644 index 00000000..9ddd9b2a --- /dev/null +++ b/External/AE SDK/Headers/AEFX_SuiteHelper.c @@ -0,0 +1,139 @@ +/************************************************************************** +* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2009 Adobe Systems Incorporated +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains the property of +* Adobe Systems Incorporated and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe Systems +* Incorporated and its suppliers and may be covered by U.S. and Foreign +* Patents,patents in process,and are protected by trade secret or copyright +* law. Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained from +* Adobe Systems Incorporated. +**************************************************************************/ + + +/** AEFX_SuiteHelper.c + + Contains helper routines for acquiring/releasing suites. + +**/ + +#include "AEFX_SuiteHelper.h" +#include + +PF_Err AEFX_AcquireSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0, /* >> */ + void **suite) /* << */ +{ + PF_Err err = PF_Err_NONE; + SPBasicSuite *bsuite; + + bsuite = in_data->pica_basicP; + + if (bsuite) { + (*bsuite->AcquireSuite)((char*)name, version, (const void**)suite); + + if (!*suite) { + err = PF_Err_BAD_CALLBACK_PARAM; + } + } else { + err = PF_Err_BAD_CALLBACK_PARAM; + } + + if (err) { + const char *error_stringPC = error_stringPC0 ? error_stringPC0 : "Not able to acquire AEFX Suite."; + + out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + + PF_SPRINTF(out_data->return_msg, error_stringPC); + } + + return err; +} + + + +PF_Err AEFX_ReleaseSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0) /* >> */ +{ + PF_Err err = PF_Err_NONE; + SPBasicSuite *bsuite; + + bsuite = in_data->pica_basicP; + + if (bsuite) { + (*bsuite->ReleaseSuite)((char*)name, version); + } else { + err = PF_Err_BAD_CALLBACK_PARAM; + } + + if (err) { + const char *error_stringPC = error_stringPC0 ? error_stringPC0 : "Not able to release AEFX Suite."; + + out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + + PF_SPRINTF(out_data->return_msg, error_stringPC); + } + + return err; +} + + +PF_Err AEFX_AcquireDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + DRAWBOT_Suites *suitesP) /* << */ +{ + PF_Err err = PF_Err_NONE; + + if (suitesP == NULL) { + out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + + PF_SPRINTF(out_data->return_msg, "NULL suite pointer passed to AEFX_AcquireDrawbotSuites"); + + err = PF_Err_UNRECOGNIZED_PARAM_TYPE; + } + + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent, NULL, (void **)&suitesP->drawbot_suiteP); + } + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent, NULL, (void **)&suitesP->supplier_suiteP); + } + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent, NULL, (void **)&suitesP->surface_suiteP); + } + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent, NULL, (void **)&suitesP->path_suiteP); + } + + return err; +} + + +PF_Err AEFX_ReleaseDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data) /* >> */ +{ + PF_Err err = PF_Err_NONE; + + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent, NULL); + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent, NULL); + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent, NULL); + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent, NULL); + + return err; +} + + + + diff --git a/External/AE SDK/Headers/AEFX_SuiteHelper.h b/External/AE SDK/Headers/AEFX_SuiteHelper.h new file mode 100644 index 00000000..2ede44c8 --- /dev/null +++ b/External/AE SDK/Headers/AEFX_SuiteHelper.h @@ -0,0 +1,157 @@ +/************************************************************************** +* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2009 Adobe Systems Incorporated +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains the property of +* Adobe Systems Incorporated and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe Systems +* Incorporated and its suppliers and may be covered by U.S. and Foreign +* Patents,patents in process,and are protected by trade secret or copyright +* law. Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained from +* Adobe Systems Incorporated. +**************************************************************************/ + +#ifndef AEFX_SUITE_HELPER_H +#define AEFX_SUITE_HELPER_H + + +/** AEFX_SuiteHelper.h + + Contains helper routines for acquiring/releasing suites. + + NOTE: If you're writing C++ plug-ins that support exceptions, use the AEGP_SuiteHandler class or AEFX_SuiteScoper. + +**/ + +#include +#include +#include +#include + + + +#ifdef __cplusplus + extern "C" { +#endif + +PF_Err AEFX_AcquireSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0, /* >> */ + void **suite); /* << */ + + +PF_Err AEFX_ReleaseSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0); /* >> */ + + +PF_Err AEFX_AcquireDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + DRAWBOT_Suites *suiteP); /* << */ + + +PF_Err AEFX_ReleaseDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data); /* >> */ + + +#ifdef __cplusplus + } +#endif + + +#ifdef __cplusplus + + template + class AEFX_SuiteHelperT + { + public: + AEFX_SuiteHelperT( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version) : /* >> */ + mInDataP(in_data), mOutDataP(out_data), mSuiteName(name), mSuiteVersion(version), mSuiteP(NULL) + { + void *suiteP(NULL); + + PF_Err err = AEFX_AcquireSuite(mInDataP, mOutDataP, mSuiteName, mSuiteVersion, NULL, &suiteP); + + if (err) { + A_THROW(err); + } + + mSuiteP = reinterpret_cast(suiteP); + } + + ~AEFX_SuiteHelperT() + { + (void)AEFX_ReleaseSuite(mInDataP, mOutDataP, mSuiteName, mSuiteVersion, NULL); + } + + const SuiteType* operator->() const + { + return mSuiteP; + } + + SuiteType* get() const + { + return mSuiteP; + } + + private: + + PF_InData *mInDataP; + PF_OutData *mOutDataP; + const char *mSuiteName; + int32_t mSuiteVersion; + SuiteType *mSuiteP; + }; + + + +// clients of this class probably should just be using the regular template +// instead + +class AEFX_DrawbotSuitesScoper +{ +public: + AEFX_DrawbotSuitesScoper(PF_InData *in_data, PF_OutData *out_data) + : + i_in_data(in_data), + i_out_data(out_data) + { + PF_Err err = AEFX_AcquireDrawbotSuites(in_data, out_data, &i_suites); + + if (err) { + A_THROW(err); + } + } + + inline DRAWBOT_Suites* Get() + { + return &i_suites; + } + + ~AEFX_DrawbotSuitesScoper() + { + AEFX_ReleaseDrawbotSuites(i_in_data, i_out_data); + } + +private: + DRAWBOT_Suites i_suites; + PF_InData *i_in_data; + PF_OutData *i_out_data; +}; + +#endif + + +#endif // AEFX_SUITE_HELPER_H diff --git a/External/AE SDK/Headers/AEGP_SuiteHandler.cpp b/External/AE SDK/Headers/AEGP_SuiteHandler.cpp new file mode 100644 index 00000000..146a5f5e --- /dev/null +++ b/External/AE SDK/Headers/AEGP_SuiteHandler.cpp @@ -0,0 +1,66 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +/** AEGP_SuiteHandler.cpp + + Implementation of AEGP_SuiteHandler non-inlines. See AEGP_SuiteHandler.h for usage. + + created 9/11/2000 jms +**/ + + +#include +#include + +AEGP_SuiteHandler::AEGP_SuiteHandler(const SPBasicSuite *pica_basicP) : + i_pica_basicP(pica_basicP) +{ + AEFX_CLR_STRUCT(i_suites); + + if (!i_pica_basicP) { //can't construct w/out basic suite, everything else is demand loaded + MissingSuiteError(); + } +} + +AEGP_SuiteHandler::~AEGP_SuiteHandler() +{ + ReleaseAllSuites(); +} + +// Had to go to the header file to be inlined to please CW mach-o target +/*void *AEGP_SuiteHandler::pLoadSuite(A_char *nameZ, A_long versionL) const +{ + const void *suiteP; + A_long err = i_pica_basicP->AcquireSuite(nameZ, versionL, &suiteP); + + if (err || !suiteP) { + MissingSuiteError(); + } + + return (void*)suiteP; +}*/ + +// Free a particular suite. Ignore errors, because, what is there to be done if release fails? +void AEGP_SuiteHandler::ReleaseSuite(const A_char *nameZ, A_long versionL) +{ + i_pica_basicP->ReleaseSuite(nameZ, versionL); +} + diff --git a/External/AE SDK/Headers/AEGP_SuiteHandler.h b/External/AE SDK/Headers/AEGP_SuiteHandler.h new file mode 100644 index 00000000..59bc043b --- /dev/null +++ b/External/AE SDK/Headers/AEGP_SuiteHandler.h @@ -0,0 +1,601 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + + +/** AEGP_SuiteHandler.h + + DEPRECATED: + This way of doing things is out of date. See AEFX_SuiteHandlerTemplate.h for the + new way of doing things. + + -kjw 2/28/2014 + + A very helpful class that manages demand loading and automatic, exception-safe freeing + of AEGP suites. + + USAGE INSTRUCTIONS: + + The accompanying file, AEGP_SuiteHandler.cpp, is designed to be compiled right into + the client application or plug-in. + + You'll get a link error. + + This is because AEGP_SuiteHandler.cpp lacks a definition for the MissingSuiteError() + method. You must provide one to define the error handling behaviour of the class. + This function may or may not display an error message etc. but it must end + by throwing an exception. It cannot return. + + Other than that, usage is pretty trivial. Construct with a pointer to the PICA + basic suite, and then call the public method to obtain lazily loaded pointers + to other AEGP suites. Upon desctruction, all loaded suites are freed (so this class + is really handy for writing exception-safe AEGP code.) + + NOTE!!! If you need to upgrade a suite, DO NOT SIMPLY UPDATE THE VERSION NUMBER. + You should: + 1. Add a new member to the Suites structure for that suite. + 2. Add the boiler plate macro to release the suite in ReleaseAllSuites (AEGP_SUITE_RELEASE_BOILERPLATE). + 3. Add the boiler plate macro to define the suite. (AEGP_SUITE_ACCESS_BOILERPLATE) + + If you have any questions, ask me. -jja 5/7/2004 + + If you'll be using ADM suites, #define I_NEED_ADM_SUPPORT before #including AEGP_SuiteHandler.h. + + -bbb 9/16/2004 +**/ + +#ifndef _H_AEGP_SUITEHANDLER +#define _H_AEGP_SUITEHANDLER + +#include +#include +#include +#include +#include +#include +#include + +#ifdef I_NEED_ADM_SUPPORT +#include +#include +#include +#include +#include +#include +#include +#endif + +// Suite registration and handling object +class AEGP_SuiteHandler { + +private: + // forbid copy construct + AEGP_SuiteHandler(const AEGP_SuiteHandler&) {} + AEGP_SuiteHandler& operator=(const AEGP_SuiteHandler&) { return *this; } + + // basic suite pointer + const SPBasicSuite *i_pica_basicP; + + // Suites we can register. These are mutable because they are demand loaded using a const object. + + struct Suites { + AEGP_KeyframeSuite4 *keyframe_suite4P; + AEGP_StreamSuite3 *stream_suite3P; + AEGP_StreamSuite4 *stream_suite4P; + AEGP_StreamSuite5 *stream_suite5P; + AEGP_MarkerSuite1 *marker_suite1P; + AEGP_MarkerSuite2 *marker_suite2P; + AEGP_MarkerSuite3 *marker_suite3P; + AEGP_CompSuite4 *comp_suite4P; + AEGP_CompSuite5 *comp_suite5P; + AEGP_CompSuite6 *comp_suite6P; + AEGP_CompSuite7 *comp_suite7P; + AEGP_CompSuite8 *comp_suite8P; + AEGP_CompSuite9 *comp_suite9P; + AEGP_CompSuite10 *comp_suite10P; + AEGP_CompSuite11 *comp_suite11P; + AEGP_LayerSuite3 *layer_suite3P; + AEGP_LayerSuite4 *layer_suite4P; + AEGP_StreamSuite2 *stream_suite2P; + AEGP_DynamicStreamSuite2 *dynamic_stream_suite2P; + AEGP_DynamicStreamSuite3 *dynamic_stream_suite3P; + AEGP_DynamicStreamSuite4 *dynamic_stream_suite4P; + AEGP_KeyframeSuite3 *keyframe_suite3P; + AEGP_CanvasSuite5 *canvas_suite5P; + AEGP_CanvasSuite6 *canvas_suite6P; + AEGP_CanvasSuite7 *canvas_suite7P; + AEGP_CanvasSuite8 *canvas_suite8P; + AEGP_CameraSuite2 *camera_suite2P; + AEGP_RegisterSuite5 *register_suite5P; + AEGP_MemorySuite1 *memory_suite1P; + AEGP_ItemViewSuite1 *item_view_suite1P; + AEGP_ItemSuite9 *item_suite9P; + AEGP_ItemSuite8 *item_suite8P; + AEGP_ItemSuite7 *item_suite7P; + AEGP_ItemSuite6 *item_suite6P; + AEGP_ItemSuite5 *item_suite5P; + AEGP_ItemSuite1 *item_suite1P; + AEGP_LightSuite1 *light_suite1P; + AEGP_LightSuite2 *light_suite2P; + AEGP_EffectSuite1 *effect_suite1P; + AEGP_EffectSuite2 *effect_suite2P; + AEGP_EffectSuite3 *effect_suite3P; + AEGP_EffectSuite4 *effect_suite4P; + AEGP_MaskSuite4 *mask_suite4P; + AEGP_MaskOutlineSuite1 *mask_outline_suite1P; + AEGP_MaskOutlineSuite2 *mask_outline_suite2P; + AEGP_MaskOutlineSuite3 *mask_outline_suite3P; + AEGP_CommandSuite1 *command_suite1P; + AEGP_UtilitySuite3 *utility_suite3P; + AEGP_RenderSuite1 *render_suite1P; + AEGP_RenderSuite2 *render_suite2P; + AEGP_RenderSuite3 *render_suite3P; + AEGP_RenderSuite4 *render_suite4P; + AEGP_RenderSuite5 *render_suite5P; + PF_ANSICallbacksSuite1 *ansi_callbacks_suite1P; + PF_HandleSuite1 *handle_suite1P; + PF_FillMatteSuite2 *fill_matte_suite2P; + PF_WorldTransformSuite1 *world_transform_suite1P; + AEGP_QueryXformSuite2 *query_xform_suite2P; + AEGP_CompositeSuite2 *composite_suite2P; + PF_WorldSuite1 *world_suite1P; + AEGP_PFInterfaceSuite1 *pf_interface_suite1P; + AEGP_MathSuite1 *math_suite1P; + PF_AdvTimeSuite4 *adv_time_suite4P; + PF_PathQuerySuite1 *path_query_suite1P; + PF_PathDataSuite1 *path_data_suite1P; + PF_ParamUtilsSuite3 *param_utils_suite3P; + PFAppSuite4 *app_suite4P; + PFAppSuite5 *app_suite5P; + PFAppSuite6 *app_suite6P; + PF_AdvAppSuite2 *adv_app_suite2P; + AEGP_IOInSuite4 *io_in_suite4P; + AEGP_IOOutSuite4 *io_out_suite4P; + AEGP_PersistentDataSuite3 *persistent_data_suite3P; + AEGP_PersistentDataSuite4 *persistent_data_suite4P; + AEGP_RenderQueueSuite1 *render_queue_suite1P; + AEGP_RQItemSuite2 *rq_item_suite2P; + AEGP_OutputModuleSuite4 *output_module_suite4P; + AEGP_FIMSuite3 *fim_suite3P; + PF_Sampling8Suite1 *sampling_8_suite1P; + PF_Sampling16Suite1 *sampling_16_suite1P; + PF_Iterate8Suite1 *iterate_8_suite1P; + PF_iterate16Suite1 *iterate_16_suite1P; + PF_iterateFloatSuite1 *iterate_float_suite1P; + PF_Iterate8Suite2 *iterate_8_suite2P; + PF_iterate16Suite2 *iterate_16_suite2P; + PF_iterateFloatSuite2 *iterate_float_suite2P; + AEGP_CollectionSuite2 *collection_suite2P; + AEGP_TextDocumentSuite1 *text_document_suite1P; + AEGP_SoundDataSuite1 *sound_data_suite1P; + AEGP_IterateSuite1 *aegp_iterate_suite1P; + AEGP_IterateSuite2 *aegp_iterate_suite2P; + AEGP_TextLayerSuite1 *text_layer_suite1P; + AEGP_ArtisanUtilSuite1 *artisan_util_suite1P; + AEGP_WorldSuite2 *aegp_world_suite_2P; + AEGP_WorldSuite3 *aegp_world_suite_3P; + AEGP_RenderOptionsSuite1 *render_options_suite_1P; + AEGP_LayerRenderOptionsSuite1 *layer_render_options_suite_1P; + AEGP_LayerRenderOptionsSuite2 *layer_render_options_suite_2P; + AEGP_RenderAsyncManagerSuite1 *async_manager_suite_1P; + AEGP_TrackerSuite1 *tracker_suite_1P; + AEGP_TrackerUtilitySuite1 *tracker_utility_suite_1P; + PF_HelperSuite2 *helper_suite_2P; + AEGP_LayerSuite5 *layer_suite_5P; + AEGP_LayerSuite6 *layer_suite_6P; + AEGP_LayerSuite7 *layer_suite_7P; + AEGP_LayerSuite8 *layer_suite_8P; + +#ifdef I_NEED_ADM_SUPPORT + ADMBasicSuite8 *adm_basic_suite_8P; + ADMDialogSuite8 *adm_dialog_suite_8P; + ADMDialogGroupSuite3 *adm_dialog_group_suite_3P; + ADMItemSuite8 *adm_item_suite_8P; + ADMListSuite3 *adm_list_suite_3P; + ADMEntrySuite5 *adm_entry_suite_5P; + ADMNotifierSuite2 *adm_notifier_suite_2P; +#endif + AEGP_LayerSuite1 *layer_suite_1P; + AEGP_MaskSuite1 *mask_suite_1P; + AEGP_MaskSuite5 *mask_suite_5P; + AEGP_MaskSuite6 *mask_suite_6P; + AEGP_StreamSuite1 *stream_suite_1P; + AEGP_CompSuite1 *comp_suite_1P; + AEGP_CollectionSuite1 *collection_suite_1P; + AEGP_KeyframeSuite1 *keyframe_suite_1P; + PF_AdvAppSuite1 *adv_app_suite_1P; + AEGP_UtilitySuite1 *utility_suite_1P; + AEGP_RenderOptionsSuite2 *render_options_suite_2P; + AEGP_ProjSuite5 *proj_suite_5P; + AEGP_ProjSuite6 *proj_suite_6P; + AEGP_FootageSuite5 *footage_suite_5P; + AEGP_RQItemSuite3 *rq_item_suite_3P; + AEGP_UtilitySuite4 *utility_suite_4P; + AEGP_ColorSettingsSuite3 *color_settings_suite_3P; + AEGP_ColorSettingsSuite2 *color_settings_suite_2P; + AEGP_ColorSettingsSuite1 *color_settings_suite_1P; + PF_AdvItemSuite1 *adv_item_suite_1P; + AEGP_RenderOptionsSuite3 *render_options_suite_3P; + PF_ColorParamSuite1 *color_param_suite_1P; + PF_SamplingFloatSuite1 *sampling_float_suite_1P; + AEGP_UtilitySuite5 *utility_suite_5P; + AEGP_UtilitySuite6 *utility_suite_6P; + PF_EffectCustomUISuite1 *custom_ui_suite1P; + PF_EffectCustomUISuite2 *custom_ui_suite2P; + PF_EffectCustomUIOverlayThemeSuite1 *custom_ui_theme_suite1P; + + //Drawbot Suites + DRAWBOT_DrawbotSuiteCurrent *drawing_suite_currentP; + DRAWBOT_SupplierSuiteCurrent *drawbot_supplier_suite_currentP; + DRAWBOT_SurfaceSuiteCurrent *drawbot_surface_suite_currentP; + DRAWBOT_PathSuiteCurrent *drawbot_path_suite_currentP; + + SPSuitesSuite *suites_suite_2P; + }; + + mutable Suites i_suites; + + // private methods + // I had to make this inline by moving the definition from the .cpp file + // CW mach-o target was freaking otherwise when seeing the call to this + // function in inlined public suite accessors below + + void *LoadSuite(const A_char *nameZ, A_long versionL) const + { + const void *suiteP; + A_long err = i_pica_basicP->AcquireSuite(nameZ, versionL, &suiteP); + + if (err || !suiteP) { + MissingSuiteError(); + } + + return (void*)suiteP; + } + + void ReleaseSuite(const A_char *nameZ, A_long versionL); + void ReleaseAllSuites() + { + #define AEGP_SUITE_RELEASE_BOILERPLATE(MEMBER_NAME, kSUITE_NAME, kVERSION_NAME) \ + if (i_suites.MEMBER_NAME) { \ + ReleaseSuite(kSUITE_NAME, kVERSION_NAME); \ + } + + AEGP_SUITE_RELEASE_BOILERPLATE(marker_suite1P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(marker_suite2P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(marker_suite3P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite3P, kAEGPLayerSuite, kAEGPLayerSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite4P, kAEGPLayerSuite, kAEGPLayerSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite5P, kAEGPStreamSuite, kAEGPStreamSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite4P, kAEGPStreamSuite, kAEGPStreamSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite3P, kAEGPStreamSuite, kAEGPStreamSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite2P, kAEGPStreamSuite, kAEGPStreamSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite_1P, kAEGPStreamSuite, kAEGPStreamSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(dynamic_stream_suite2P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(dynamic_stream_suite3P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(dynamic_stream_suite4P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(keyframe_suite4P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(keyframe_suite3P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(keyframe_suite_1P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite4P, kAEGPCompSuite, kAEGPCompSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite5P, kAEGPCompSuite, kAEGPCompSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite6P, kAEGPCompSuite, kAEGPCompSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite7P, kAEGPCompSuite, kAEGPCompSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite8P, kAEGPCompSuite, kAEGPCompSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite9P, kAEGPCompSuite, kAEGPCompSuiteVersion9); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite10P, kAEGPCompSuite, kAEGPCompSuiteVersion10); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite11P, kAEGPCompSuite, kAEGPCompSuiteVersion11); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite5P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite6P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite7P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite8P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(camera_suite2P, kAEGPCameraSuite, kAEGPCameraSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(register_suite5P, kAEGPRegisterSuite, kAEGPRegisterSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(item_view_suite1P, kAEGPItemViewSuite, kAEGPItemViewSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite8P, kAEGPItemSuite, kAEGPItemSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite7P, kAEGPItemSuite, kAEGPItemSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite6P, kAEGPItemSuite, kAEGPItemSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite5P, kAEGPItemSuite, kAEGPItemSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite1P, kAEGPItemSuite, kAEGPItemSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(pf_interface_suite1P, kAEGPPFInterfaceSuite, kAEGPPFInterfaceSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(math_suite1P, kAEGPMathSuite, kAEGPMathSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_time_suite4P, kPFAdvTimeSuite, kPFAdvTimeSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(path_query_suite1P, kPFPathQuerySuite, kPFPathQuerySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(memory_suite1P, kAEGPMemorySuite, kAEGPMemorySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(path_data_suite1P, kPFPathDataSuite, kPFPathDataSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(param_utils_suite3P, kPFParamUtilsSuite, kPFParamUtilsSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(app_suite4P, kPFAppSuite, kPFAppSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(app_suite5P, kPFAppSuite, kPFAppSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(app_suite6P, kPFAppSuite, kPFAppSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_app_suite2P, kPFAdvAppSuite, kPFAdvAppSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(light_suite1P, kAEGPLightSuite, kAEGPLightSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(light_suite2P, kAEGPLightSuite, kAEGPLightSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite1P, kAEGPEffectSuite, kAEGPEffectSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite2P, kAEGPEffectSuite, kAEGPEffectSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite3P, kAEGPEffectSuite, kAEGPEffectSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite4P, kAEGPEffectSuite, kAEGPEffectSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite4P, kAEGPMaskSuite, kAEGPMaskSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_outline_suite1P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_outline_suite2P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_outline_suite3P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(command_suite1P, kAEGPCommandSuite, kAEGPCommandSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite3P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite1P, kAEGPRenderSuite, kAEGPRenderSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite2P, kAEGPRenderSuite, kAEGPRenderSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite3P, kAEGPRenderSuite, kAEGPRenderSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite4P, kAEGPRenderSuite, kAEGPRenderSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite5P, kAEGPRenderSuite, kAEGPRenderSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(ansi_callbacks_suite1P, kPFANSISuite, kPFANSISuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(handle_suite1P, kPFHandleSuite, kPFHandleSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(fill_matte_suite2P, kPFFillMatteSuite, kPFFillMatteSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(world_transform_suite1P, kPFWorldTransformSuite, kPFWorldTransformSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(query_xform_suite2P, kAEGPQueryXformSuite, kAEGPQueryXformSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(composite_suite2P, kAEGPCompositeSuite, kAEGPCompositeSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(world_suite1P, kPFWorldSuite, kPFWorldSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(io_in_suite4P, kAEGPIOInSuite, kAEGPIOInSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(io_out_suite4P, kAEGPIOOutSuite, kAEGPIOOutSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(render_queue_suite1P, kAEGPRenderQueueSuite, kAEGPRenderQueueSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(rq_item_suite2P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(output_module_suite4P, kAEGPOutputModuleSuite, kAEGPOutputModuleSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(fim_suite3P, kAEGPFIMSuite, kAEGPFIMSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(math_suite1P, kAEGPMathSuite, kAEGPMathSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_time_suite4P, kPFAdvTimeSuite, kPFAdvTimeSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(sampling_8_suite1P, kPFSampling8Suite, kPFSampling8SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(sampling_16_suite1P, kPFSampling16Suite, kPFSampling16SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_8_suite1P, kPFIterate8Suite, kPFIterate8SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_16_suite1P, kPFIterate16Suite, kPFIterate16SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_float_suite1P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_8_suite2P, kPFIterate8Suite, kPFIterate8SuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_16_suite2P, kPFIterate16Suite, kPFIterate16SuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_float_suite2P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(collection_suite2P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(text_document_suite1P, kAEGPTextDocumentSuite, kAEGPTextDocumentSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(sound_data_suite1P, kAEGPSoundDataSuite, kAEGPSoundDataVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(text_layer_suite1P, kAEGPTextLayerSuite, kAEGPTextLayerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(artisan_util_suite1P, kAEGPArtisanUtilSuite, kAEGPArtisanUtilSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(aegp_world_suite_2P, kAEGPWorldSuite, kAEGPWorldSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(aegp_world_suite_3P, kAEGPWorldSuite, kAEGPWorldSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(render_options_suite_1P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(tracker_suite_1P, kAEGPTrackerSuite, kAEGPTrackerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(tracker_utility_suite_1P, kAEGPTrackerUtilitySuite, kAEGPTrackerUtilitySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(helper_suite_2P, kPFHelperSuite2, kPFHelperSuite2Version2); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_5P, kAEGPLayerSuite, kAEGPLayerSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_6P, kAEGPLayerSuite, kAEGPLayerSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_7P, kAEGPLayerSuite, kAEGPLayerSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_8P, kAEGPLayerSuite, kAEGPLayerSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_item_suite_1P, kPFAdvItemSuite, kPFAdvItemSuiteVersion1); +#ifdef I_NEED_ADM_SUPPORT + AEGP_SUITE_RELEASE_BOILERPLATE(adm_basic_suite_8P, kADMBasicSuite, kADMBasicSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_dialog_suite_8P, kADMDialogSuite, kADMDialogSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_dialog_group_suite_3P, kADMDialogGroupSuite, kADMDialogGroupSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_item_suite_8P, kADMItemSuite, kADMItemSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_list_suite_3P, kADMListSuite, kADMListSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_entry_suite_5P, kADMEntrySuite, kADMEntrySuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_notifier_suite_2P, kADMNotifierSuite, kADMNotifierSuiteVersion2); +#endif + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_1P, kAEGPLayerSuite, kAEGPLayerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite_1P, kAEGPMaskSuite, kAEGPMaskSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite_5P, kAEGPMaskSuite, kAEGPMaskSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite_6P, kAEGPMaskSuite, kAEGPMaskSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite_1P, kAEGPCompSuite, kAEGPCompSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(collection_suite_1P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_app_suite_1P, kPFAdvAppSuite, kPFAdvAppSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_1P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(render_options_suite_2P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_render_options_suite_1P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_render_options_suite_2P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(async_manager_suite_1P, kAEGPRenderAsyncManagerSuite, kAEGPRenderAsyncManagerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(proj_suite_5P, kAEGPProjSuite, kAEGPProjSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(proj_suite_6P, kAEGPProjSuite, kAEGPProjSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(footage_suite_5P, kAEGPFootageSuite, kAEGPFootageSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(rq_item_suite_3P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_4P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(persistent_data_suite4P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(persistent_data_suite3P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(color_settings_suite_3P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(color_settings_suite_2P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(color_settings_suite_1P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(color_param_suite_1P, kPFColorParamSuite, kPFColorParamSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(sampling_float_suite_1P, kPFSamplingFloatSuite, kPFSamplingFloatSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_5P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_6P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(custom_ui_suite1P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(custom_ui_suite2P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(custom_ui_theme_suite1P, kPFEffectCustomUIOverlayThemeSuite, kPFEffectCustomUIOverlayThemeSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(drawing_suite_currentP, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(drawbot_supplier_suite_currentP, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(drawbot_surface_suite_currentP, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(drawbot_path_suite_currentP, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(suites_suite_2P, kSPSuitesSuite, kSPSuitesSuiteVersion); +} + + // Here is the error handling function which must be defined. + // It must exit by throwing an exception, it cannot return. + void MissingSuiteError() const; + +public: + // To construct, pass pica_basicP + AEGP_SuiteHandler(const SPBasicSuite *pica_basicP); + ~AEGP_SuiteHandler(); + + const SPBasicSuite *Pica() const { return i_pica_basicP; } + + #define AEGP_SUITE_ACCESS_BOILERPLATE(SUITE_NAME, VERSION_NUMBER, SUITE_PREFIX, MEMBER_NAME, kSUITE_NAME, kVERSION_NAME) \ + SUITE_PREFIX##SUITE_NAME##VERSION_NUMBER *SUITE_NAME##VERSION_NUMBER() const \ + { \ + if (i_suites.MEMBER_NAME == NULL) { \ + i_suites.MEMBER_NAME = (SUITE_PREFIX##SUITE_NAME##VERSION_NUMBER*) \ + LoadSuite(kSUITE_NAME, kVERSION_NAME); \ + } \ + return i_suites.MEMBER_NAME; \ + } + + AEGP_SUITE_ACCESS_BOILERPLATE(MarkerSuite, 1, AEGP_, marker_suite1P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MarkerSuite, 2, AEGP_, marker_suite2P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(MarkerSuite, 3, AEGP_, marker_suite3P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 3, AEGP_, layer_suite3P, kAEGPLayerSuite, kAEGPLayerSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 4, AEGP_, layer_suite4P, kAEGPLayerSuite, kAEGPLayerSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 5, AEGP_, stream_suite5P, kAEGPStreamSuite, kAEGPStreamSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 4, AEGP_, stream_suite4P, kAEGPStreamSuite, kAEGPStreamSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 3, AEGP_, stream_suite3P, kAEGPStreamSuite, kAEGPStreamSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 2, AEGP_, stream_suite2P, kAEGPStreamSuite, kAEGPStreamSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 1, AEGP_, stream_suite_1P, kAEGPStreamSuite, kAEGPStreamSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(DynamicStreamSuite, 2, AEGP_, dynamic_stream_suite2P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(DynamicStreamSuite, 3, AEGP_, dynamic_stream_suite3P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(DynamicStreamSuite, 4, AEGP_, dynamic_stream_suite4P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(KeyframeSuite, 4, AEGP_, keyframe_suite4P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(KeyframeSuite, 3, AEGP_, keyframe_suite3P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(KeyframeSuite, 1, AEGP_, keyframe_suite_1P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 4, AEGP_, comp_suite4P, kAEGPCompSuite, kAEGPCompSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 5, AEGP_, comp_suite5P, kAEGPCompSuite, kAEGPCompSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 6, AEGP_, comp_suite6P, kAEGPCompSuite, kAEGPCompSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 7, AEGP_, comp_suite7P, kAEGPCompSuite, kAEGPCompSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 8, AEGP_, comp_suite8P, kAEGPCompSuite, kAEGPCompSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 9, AEGP_, comp_suite9P, kAEGPCompSuite, kAEGPCompSuiteVersion9); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 10, AEGP_, comp_suite10P, kAEGPCompSuite, kAEGPCompSuiteVersion10); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 11, AEGP_, comp_suite11P, kAEGPCompSuite, kAEGPCompSuiteVersion11); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 5, AEGP_, canvas_suite5P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 6, AEGP_, canvas_suite6P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 7, AEGP_, canvas_suite7P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 8, AEGP_, canvas_suite8P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(CameraSuite, 2, AEGP_, camera_suite2P, kAEGPCameraSuite, kAEGPCameraSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RegisterSuite, 5, AEGP_, register_suite5P, kAEGPRegisterSuite, kAEGPRegisterSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(MemorySuite, 1, AEGP_, memory_suite1P, kAEGPMemorySuite, kAEGPMemorySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemViewSuite, 1, AEGP_, item_view_suite1P, kAEGPItemViewSuite, kAEGPItemViewSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 9, AEGP_, item_suite9P, kAEGPItemSuite, kAEGPItemSuiteVersion9); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 8, AEGP_, item_suite8P, kAEGPItemSuite, kAEGPItemSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 7, AEGP_, item_suite7P, kAEGPItemSuite, kAEGPItemSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 6, AEGP_, item_suite6P, kAEGPItemSuite, kAEGPItemSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 5, AEGP_, item_suite5P, kAEGPItemSuite, kAEGPItemSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 1, AEGP_, item_suite1P, kAEGPItemSuite, kAEGPItemSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(PFInterfaceSuite, 1, AEGP_, pf_interface_suite1P, kAEGPPFInterfaceSuite, kAEGPPFInterfaceSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MathSuite, 1, AEGP_, math_suite1P, kAEGPMathSuite, kAEGPMathSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvTimeSuite, 4, PF_, adv_time_suite4P, kPFAdvTimeSuite, kPFAdvTimeSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(PathQuerySuite, 1, PF_, path_query_suite1P, kPFPathQuerySuite, kPFPathQuerySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(PathDataSuite, 1, PF_, path_data_suite1P, kPFPathDataSuite, kPFPathDataSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ParamUtilsSuite, 3, PF_, param_utils_suite3P, kPFParamUtilsSuite, kPFParamUtilsSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(AppSuite, 4, PF, app_suite4P, kPFAppSuite, kPFAppSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(AppSuite, 5, PF, app_suite5P, kPFAppSuite, kPFAppSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(AppSuite, 6, PF, app_suite6P, kPFAppSuite, kPFAppSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvAppSuite, 2, PF_, adv_app_suite2P, kPFAdvAppSuite, kPFAdvAppSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(LightSuite, 1, AEGP_, light_suite1P, kAEGPLightSuite, kAEGPLightSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(LightSuite, 2, AEGP_, light_suite2P, kAEGPLightSuite, kAEGPLightSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 1, AEGP_, effect_suite1P, kAEGPEffectSuite, kAEGPEffectSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 2, AEGP_, effect_suite2P, kAEGPEffectSuite, kAEGPEffectSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 3, AEGP_, effect_suite3P, kAEGPEffectSuite, kAEGPEffectSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 4, AEGP_, effect_suite4P, kAEGPEffectSuite, kAEGPEffectSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 4, AEGP_, mask_suite4P, kAEGPMaskSuite, kAEGPMaskSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskOutlineSuite, 1, AEGP_, mask_outline_suite1P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskOutlineSuite, 2, AEGP_, mask_outline_suite2P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskOutlineSuite, 3, AEGP_, mask_outline_suite3P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(CommandSuite, 1, AEGP_, command_suite1P, kAEGPCommandSuite, kAEGPCommandSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 3, AEGP_, utility_suite3P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 1, AEGP_, render_suite1P, kAEGPRenderSuite, kAEGPRenderSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 2, AEGP_, render_suite2P, kAEGPRenderSuite, kAEGPRenderSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 3, AEGP_, render_suite3P, kAEGPRenderSuite, kAEGPRenderSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 4, AEGP_, render_suite4P, kAEGPRenderSuite, kAEGPRenderSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 5, AEGP_, render_suite5P, kAEGPRenderSuite, kAEGPRenderSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(ANSICallbacksSuite, 1, PF_, ansi_callbacks_suite1P, kPFANSISuite, kPFANSISuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(HandleSuite, 1, PF_, handle_suite1P, kPFHandleSuite, kPFHandleSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(FillMatteSuite, 2, PF_, fill_matte_suite2P, kPFFillMatteSuite, kPFFillMatteSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldTransformSuite, 1, PF_, world_transform_suite1P, kPFWorldTransformSuite, kPFWorldTransformSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(QueryXformSuite, 2, AEGP_, query_xform_suite2P, kAEGPQueryXformSuite, kAEGPQueryXformSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(CompositeSuite, 2, AEGP_, composite_suite2P, kAEGPCompositeSuite, kAEGPCompositeSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldSuite, 1, PF_, world_suite1P, kPFWorldSuite, kPFWorldSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IOInSuite, 4, AEGP_, io_in_suite4P, kAEGPIOInSuite, kAEGPIOInSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(IOOutSuite, 4, AEGP_, io_out_suite4P, kAEGPIOOutSuite, kAEGPIOOutSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderQueueSuite, 1, AEGP_, render_queue_suite1P, kAEGPRenderQueueSuite, kAEGPRenderQueueSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(RQItemSuite, 2, AEGP_, rq_item_suite2P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(OutputModuleSuite, 4, AEGP_, output_module_suite4P, kAEGPOutputModuleSuite, kAEGPOutputModuleSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(FIMSuite, 3, AEGP_, fim_suite3P, kAEGPFIMSuite, kAEGPFIMSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(Sampling8Suite, 1, PF_, sampling_8_suite1P, kPFSampling8Suite, kPFSampling8SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Sampling16Suite, 1, PF_, sampling_16_suite1P, kPFSampling16Suite, kPFSampling16SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate8Suite, 1, PF_, iterate_8_suite1P, kPFIterate8Suite, kPFIterate8SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate16Suite, 1, PF_, iterate_16_suite1P, kPFIterate16Suite, kPFIterate16SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateFloatSuite, 1, PF_, iterate_float_suite1P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate8Suite, 2, PF_, iterate_8_suite2P, kPFIterate8Suite, kPFIterate8SuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate16Suite, 2, PF_, iterate_16_suite2P, kPFIterate16Suite, kPFIterate16SuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateFloatSuite, 2, PF_, iterate_float_suite2P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(CollectionSuite, 2, AEGP_, collection_suite2P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(TextDocumentSuite, 1, AEGP_, text_document_suite1P, kAEGPTextDocumentSuite, kAEGPTextDocumentSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(SoundDataSuite, 1, AEGP_, sound_data_suite1P, kAEGPSoundDataSuite, kAEGPSoundDataVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateSuite, 1, AEGP_, aegp_iterate_suite1P, kAEGPIterateSuite, kAEGPIterateSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateSuite, 2, AEGP_, aegp_iterate_suite2P, kAEGPIterateSuite, kAEGPIterateSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(TextLayerSuite, 1, AEGP_, text_layer_suite1P, kAEGPTextLayerSuite, kAEGPTextLayerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ArtisanUtilSuite, 1, AEGP_, artisan_util_suite1P, kAEGPArtisanUtilSuite, kAEGPArtisanUtilSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldSuite, 2, AEGP_, aegp_world_suite_2P, kAEGPWorldSuite, kAEGPWorldSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldSuite, 3, AEGP_, aegp_world_suite_3P, kAEGPWorldSuite, kAEGPWorldSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderOptionsSuite, 1, AEGP_, render_options_suite_1P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(TrackerSuite, 1, AEGP_, tracker_suite_1P, kAEGPTrackerSuite, kAEGPTrackerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(TrackerUtilitySuite, 1, AEGP_, tracker_utility_suite_1P, kAEGPTrackerUtilitySuite, kAEGPTrackerUtilitySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(HelperSuite, 2, PF_, helper_suite_2P, kPFHelperSuite2, kPFHelperSuite2Version2); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 5, AEGP_, layer_suite_5P, kAEGPLayerSuite, kAEGPLayerSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 6, AEGP_, layer_suite_6P, kAEGPLayerSuite, kAEGPLayerSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 7, AEGP_, layer_suite_7P, kAEGPLayerSuite, kAEGPLayerSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 8, AEGP_, layer_suite_8P, kAEGPLayerSuite, kAEGPLayerSuiteVersion8); +#ifdef I_NEED_ADM_SUPPORT + AEGP_SUITE_ACCESS_BOILERPLATE(BasicSuite, 8, ADM, adm_basic_suite_8P, kADMBasicSuite, kADMBasicSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(DialogSuite, 8, ADM, adm_dialog_suite_8P, kADMDialogSuite, kADMDialogSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(DialogGroupSuite, 3, ADM, adm_dialog_group_suite_3P, kADMDialogGroupSuite, kADMDialogGroupSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 8, ADM, adm_item_suite_8P, kADMItemSuite, kADMItemSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(ListSuite, 3, ADM, adm_list_suite_3P, kADMListSuite, kADMListSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(EntrySuite, 5, ADM, adm_entry_suite_5P, kADMEntrySuite, kADMEntrySuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(NotifierSuite, 2, ADM, adm_notifier_suite_2P, kADMNotifierSuite, kADMNotifierSuiteVersion2); +#endif + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 1, AEGP_, layer_suite_1P, kAEGPLayerSuite, kAEGPLayerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvItemSuite, 1, PF_, adv_item_suite_1P, kPFAdvItemSuite, kPFAdvItemSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 1, AEGP_, mask_suite_1P, kAEGPMaskSuite, kAEGPMaskSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 5, AEGP_, mask_suite_5P, kAEGPMaskSuite, kAEGPMaskSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 6, AEGP_, mask_suite_6P, kAEGPMaskSuite, kAEGPMaskSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 1, AEGP_, comp_suite_1P, kAEGPCompSuite, kAEGPCompSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(CollectionSuite, 1, AEGP_, collection_suite_1P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvAppSuite, 1, PF_, adv_app_suite_1P, kPFAdvAppSuite, kPFAdvAppSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 1, AEGP_, utility_suite_1P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderOptionsSuite, 2, AEGP_, render_options_suite_2P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderOptionsSuite, 3, AEGP_, render_options_suite_3P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerRenderOptionsSuite, 1, AEGP_, layer_render_options_suite_1P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerRenderOptionsSuite, 2, AEGP_, layer_render_options_suite_2P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderAsyncManagerSuite, 1, AEGP_, async_manager_suite_1P, kAEGPRenderAsyncManagerSuite, kAEGPRenderAsyncManagerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ProjSuite, 5, AEGP_, proj_suite_5P, kAEGPProjSuite, kAEGPProjSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(ProjSuite, 6, AEGP_, proj_suite_6P, kAEGPProjSuite, kAEGPProjSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(FootageSuite, 5, AEGP_, footage_suite_5P, kAEGPFootageSuite, kAEGPFootageSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(RQItemSuite, 3, AEGP_, rq_item_suite_3P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 4, AEGP_, utility_suite_4P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorSettingsSuite, 3, AEGP_, color_settings_suite_3P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorSettingsSuite, 2, AEGP_, color_settings_suite_2P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorSettingsSuite, 1, AEGP_, color_settings_suite_1P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorParamSuite, 1, PF_, color_param_suite_1P, kPFColorParamSuite, kPFColorParamSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(PersistentDataSuite, 4, AEGP_, persistent_data_suite4P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(PersistentDataSuite, 3, AEGP_, persistent_data_suite3P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(SamplingFloatSuite, 1, PF_, sampling_float_suite_1P, kPFSamplingFloatSuite, kPFSamplingFloatSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 5, AEGP_, utility_suite_5P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 6, AEGP_, utility_suite_6P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectCustomUISuite, 1, PF_, custom_ui_suite1P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectCustomUISuite, 2, PF_, custom_ui_suite2P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectCustomUIOverlayThemeSuite, 1, PF_, custom_ui_theme_suite1P, kPFEffectCustomUIOverlayThemeSuite, kPFEffectCustomUIOverlayThemeSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(DrawbotSuite, Current, DRAWBOT_, drawing_suite_currentP, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent); + AEGP_SUITE_ACCESS_BOILERPLATE(SupplierSuite, Current, DRAWBOT_, drawbot_supplier_suite_currentP, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent); + AEGP_SUITE_ACCESS_BOILERPLATE(SurfaceSuite, Current, DRAWBOT_, drawbot_surface_suite_currentP, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent); + AEGP_SUITE_ACCESS_BOILERPLATE(PathSuite, Current, DRAWBOT_, drawbot_path_suite_currentP, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent); + + AEGP_SUITE_ACCESS_BOILERPLATE(SuitesSuite, , SP, suites_suite_2P, kSPSuitesSuite, kSPSuitesSuiteVersion); +}; + +#endif diff --git a/External/AE SDK/Headers/AEGP_Utils.cpp b/External/AE SDK/Headers/AEGP_Utils.cpp new file mode 100644 index 00000000..8b598074 --- /dev/null +++ b/External/AE SDK/Headers/AEGP_Utils.cpp @@ -0,0 +1,37 @@ +#include "AEGP_Utils.h" + + +A_Err GetNewFirstLayerInFirstComp( + SPBasicSuite *sP, + AEGP_LayerH *first_layerPH) +{ + A_Err err = A_Err_NONE; + + AEGP_ItemH itemH = NULL; + AEGP_ItemType type = AEGP_ItemType_NONE; + AEGP_CompH compH = NULL; + AEGP_ProjectH projH = NULL; + A_long num_projectsL = 0, + num_layersL = 0; + + AEGP_SuiteHandler suites(sP); + + ERR(suites.ProjSuite5()->AEGP_GetProjectByIndex(0, &projH)); + ERR(suites.ItemSuite8()->AEGP_GetFirstProjItem(projH, &itemH)); + ERR(suites.ItemSuite6()->AEGP_GetItemType(itemH, &type)); + + while ((itemH != NULL) && (type != AEGP_ItemType_COMP)){ + ERR(suites.ItemSuite6()->AEGP_GetNextProjItem(projH, itemH, &itemH)); + ERR(suites.ItemSuite6()->AEGP_GetItemType(itemH, &type)); + } + if (!err && (type == AEGP_ItemType_COMP)){ + err = suites.CompSuite4()->AEGP_GetCompFromItem(itemH, &compH); + } + if (!err && compH) { + err = suites.LayerSuite5()->AEGP_GetCompNumLayers(compH, &num_layersL); + } + if (!err && num_layersL){ + err = suites.LayerSuite5()->AEGP_GetCompLayerByIndex(compH, 0, first_layerPH); + } + return err; +} \ No newline at end of file diff --git a/External/AE SDK/Headers/AEGP_Utils.h b/External/AE SDK/Headers/AEGP_Utils.h new file mode 100644 index 00000000..a2f2b06f --- /dev/null +++ b/External/AE SDK/Headers/AEGP_Utils.h @@ -0,0 +1,9 @@ +#include "A.h" +#include "AE_GeneralPlug.h" +#include "AEGP_SuiteHandler.h" +#include "AE_Macros.h" + +A_Err GetNewFirstLayerInFirstComp( + SPBasicSuite *sP, + AEGP_LayerH *first_layerPH); + diff --git a/External/AE SDK/Headers/AE_AdvEffectSuites.h b/External/AE SDK/Headers/AE_AdvEffectSuites.h new file mode 100644 index 00000000..5ea6901d --- /dev/null +++ b/External/AE SDK/Headers/AE_AdvEffectSuites.h @@ -0,0 +1,343 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _H_AE_AdvEffectSuites +#define _H_AE_AdvEffectSuites + +#include +#include +#include + +#include + +#ifdef __cplusplus + extern "C" { +#endif + + +#define kPFAdvAppSuite "PF AE Adv App Suite" +#define kPFAdvAppSuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_AdvAppSuite1 { + + SPAPI PF_Err (*PF_SetProjectDirty)(void); + + SPAPI PF_Err (*PF_SaveProject)(void); + + SPAPI PF_Err (*PF_SaveBackgroundState)(void); + + SPAPI PF_Err (*PF_ForceForeground)(void); + + SPAPI PF_Err (*PF_RestoreBackgroundState)(void); + + SPAPI PF_Err (*PF_RefreshAllWindows)(void); + + // 2 lines of text, same as calling PF_InfoDrawText3( line1Z0, line2Z0, NULL) + SPAPI PF_Err (*PF_InfoDrawText)( + const A_char *line1Z0, + const A_char *line2Z0); + + SPAPI PF_Err (*PF_InfoDrawColor)( + PF_Pixel color); + + // 3 lines of text + SPAPI PF_Err (*PF_InfoDrawText3)( + const A_char *line1Z0, + const A_char *line2Z0, + const A_char *line3Z0); + + // 3 lines, with two lines including formatting for right and left justification + SPAPI PF_Err (*PF_InfoDrawText3Plus)( + const A_char *line1Z0, + const A_char *line2_jrZ0, + const A_char *line2_jlZ0, + const A_char *line3_jrZ0, + const A_char *line3_jlZ0); + +} PF_AdvAppSuite1; + + + + + +#define kPFAdvAppSuiteVersion2 2/* to be frozen in AE 6.0 */ + +typedef struct PF_AdvAppSuite2 { + + SPAPI PF_Err (*PF_SetProjectDirty)(void); + + SPAPI PF_Err (*PF_SaveProject)(void); + + SPAPI PF_Err (*PF_SaveBackgroundState)(void); + + SPAPI PF_Err (*PF_ForceForeground)(void); + + SPAPI PF_Err (*PF_RestoreBackgroundState)(void); + + SPAPI PF_Err (*PF_RefreshAllWindows)(void); + + // 2 lines of text, same as calling PF_InfoDrawText3( line1Z0, line2Z0, NULL) + SPAPI PF_Err (*PF_InfoDrawText)( + const A_char *line1Z0, + const A_char *line2Z0); + + SPAPI PF_Err (*PF_InfoDrawColor)( + PF_Pixel color); + + // 3 lines of text + SPAPI PF_Err (*PF_InfoDrawText3)( + const A_char *line1Z0, + const A_char *line2Z0, + const A_char *line3Z0); + + // 3 lines, with two lines including formatting for right and left justification + SPAPI PF_Err (*PF_InfoDrawText3Plus)( + const A_char *line1Z0, + const A_char *line2_jrZ0, + const A_char *line2_jlZ0, + const A_char *line3_jrZ0, + const A_char *line3_jlZ0); + + // append a line of text to top line for so many ticks + SPAPI PF_Err (*PF_AppendInfoText)( + const A_char *appendZ0); + + +} PF_AdvAppSuite2; + + + +#define PF_MAX_TIME_LEN 31 + +enum { + PF_Step_FORWARD, + PF_Step_BACKWARD +}; +typedef A_LegacyEnumType PF_Step; + +enum { + PF_TimeDisplayFormatTimecode, + PF_TimeDisplayFormatFrames, + PF_TimeDisplayFormatFeetFrames // OBSOLETE: returned only by kPFAdvTimeSuiteVersion1 +}; + +typedef struct { + A_char display_mode; + A_long framemax; + A_long frames_per_foot; + A_char frames_start; + A_Boolean nondrop30B; + A_Boolean honor_source_timecodeB; + A_Boolean use_feet_framesB; +} PF_TimeDisplayPrefVersion3; + + + +#define kPFAdvTimeSuite "PF AE Adv Time Suite" +#define kPFAdvTimeSuiteVersion4 4 //frozen for ae15.0 + +typedef struct PF_AdvTimeSuite4 { + + SPAPI PF_Err (*PF_FormatTimeActiveItem)( A_long time_valueUL, // time is value/scale in seconds + A_u_long time_scaleL, + PF_Boolean durationB, // is the time value a duration or time? + A_char *time_buf); // allocate as PF_MAX_TIME_LEN + 1 + + SPAPI PF_Err (*PF_FormatTime)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean durationB, + A_char *time_buf); + + SPAPI PF_Err (*PF_FormatTimePlus)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean comp_timeB, + PF_Boolean durationB, + A_char *time_buf); + + SPAPI PF_Err (*PF_GetTimeDisplayPref)( PF_TimeDisplayPrefVersion3 *tdp, + A_long *starting_frame_num); + + SPAPI PF_Err (*PF_TimeCountFrames)( const A_Time* start_timeTP, + const A_Time* time_stepTP, + A_Boolean include_partial_frameB, + A_long* frame_countL); + +} PF_AdvTimeSuite4; + + +#define kPFAdvTimeSuite "PF AE Adv Time Suite" +#define kPFAdvTimeSuiteVersion3 3 //frozen for ae14.2 + +typedef struct PF_AdvTimeSuite3 { + + SPAPI PF_Err (*PF_FormatTimeActiveItem)( A_long time_valueUL, // time is value/scale in seconds + A_u_long time_scaleL, + PF_Boolean durationB, // is the time value a duration or time? + A_char *time_buf); // allocate as PF_MAX_TIME_LEN + 1 + + SPAPI PF_Err (*PF_FormatTime)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean durationB, + A_char *time_buf); + + SPAPI PF_Err (*PF_FormatTimePlus)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean comp_timeB, + PF_Boolean durationB, + A_char *time_buf); + + SPAPI PF_Err (*PF_GetTimeDisplayPref)( PF_TimeDisplayPrefVersion3 *tdp, + A_long *starting_frame_num); + +} PF_AdvTimeSuite3; + + +#define kPFAdvTimeSuiteVersion2 2 + +typedef struct { + A_char display_mode; + A_char framemax; + A_char frames_per_foot; + A_char frames_start; + A_Boolean nondrop30B; + A_Boolean honor_source_timecodeB; + A_Boolean use_feet_framesB; +} PF_TimeDisplayPrefVersion2; + +typedef struct PF_AdvTimeSuite2 { + + SPAPI PF_Err (*PF_FormatTimeActiveItem)( A_long time_valueUL, // time is value/scale in seconds + A_u_long time_scaleL, + PF_Boolean durationB, // is the time value a duration or time? + A_char *time_buf); // allocate as PF_MAX_TIME_LEN + 1 + + SPAPI PF_Err (*PF_FormatTime)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean durationB, + A_char *time_buf); + + SPAPI PF_Err (*PF_FormatTimePlus)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean comp_timeB, + PF_Boolean durationB, + A_char *time_buf); + + + SPAPI PF_Err (*PF_GetTimeDisplayPref)( PF_TimeDisplayPrefVersion2 *tdp, + A_long *starting_frame_num); + + + +} PF_AdvTimeSuite2; + + + +#define kPFAdvTimeSuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct { + A_char time_display_format; + A_char framemax; + A_char nondrop30; + A_char frames_per_foot; +} PF_TimeDisplayPref; + +typedef struct PF_AdvTimeSuite1 { + + SPAPI PF_Err (*PF_FormatTimeActiveItem)( A_long time_valueUL, // time is value/scale in seconds + A_u_long time_scaleL, + PF_Boolean durationB, // is the time value a duration or time? + A_char *time_buf); // allocate as PF_MAX_TIME_LEN + 1 + + SPAPI PF_Err (*PF_FormatTime)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean durationB, + A_char *time_buf); + + SPAPI PF_Err (*PF_FormatTimePlus)( PF_InData *in_data, + PF_EffectWorld *world, + A_long time_valueUL, + A_u_long time_scaleL, + PF_Boolean comp_timeB, + PF_Boolean durationB, + A_char *time_buf); + + + SPAPI PF_Err (*PF_GetTimeDisplayPref)( PF_TimeDisplayPref *tdp, + A_long *starting_frame_num); + +} PF_AdvTimeSuite1; + + + +#define kPFAdvItemSuite "PF AE Adv Item Suite" +#define kPFAdvItemSuiteVersion1 1 /* frozen in AE 5.0 */ + + + +typedef struct PF_AdvItemSuite1 { + + SPAPI PF_Err (*PF_MoveTimeStep)( PF_InData *in_data, + PF_EffectWorld *world, + PF_Step time_dir, + A_long num_stepsL); + + SPAPI PF_Err (*PF_MoveTimeStepActiveItem) ( PF_Step time_dir, + A_long num_stepsL); + + + SPAPI PF_Err (*PF_TouchActiveItem) (void); + + + SPAPI PF_Err (*PF_ForceRerender)( PF_InData *in_data, + PF_EffectWorld *world); + + + SPAPI PF_Err (*PF_EffectIsActiveOrEnabled)( PF_ContextH contextH, + PF_Boolean *enabledPB); + + +} PF_AdvItemSuite1; + + + +#ifdef __cplusplus +} +#endif + +#include + + +#endif diff --git a/External/AE SDK/Headers/AE_CacheOnLoadSuite.h b/External/AE SDK/Headers/AE_CacheOnLoadSuite.h new file mode 100644 index 00000000..3572ce71 --- /dev/null +++ b/External/AE SDK/Headers/AE_CacheOnLoadSuite.h @@ -0,0 +1,39 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2003 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef AECACHEONLOADSUITE +#define AECACHEONLOADSUITE + +/** +** CacheOnLoadSuite, used to signal whether or not the plugin needs to load from +** disk every time on startup. +*/ +#define kPFCacheOnLoadSuite "PF Cache On Load Suite" +#define kPFCacheOnLoadSuiteVersion1 1 + +typedef struct PF_CacheOnLoadSuite1 { + + SPAPI PF_Err (*PF_SetNoCacheOnLoad)( PF_ProgPtr effect_ref, + long effectAvailable); + +} PF_CacheOnLoadSuite1; + +#endif // AECACHEONLOADSUITE \ No newline at end of file diff --git a/External/AE SDK/Headers/AE_ChannelSuites.h b/External/AE SDK/Headers/AE_ChannelSuites.h new file mode 100644 index 00000000..3ce87f56 --- /dev/null +++ b/External/AE SDK/Headers/AE_ChannelSuites.h @@ -0,0 +1,509 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + +#ifndef _H_AE_ChannelSuites +#define _H_AE_ChannelSuites + +#include +#include + +#include + + +#ifdef __cplusplus + extern "C" { +#endif + + +/** PF_ChannelSuite + + PF_GetLayerChannelCount + use this to find the number of channels associated with a given source layer + Most likely use is to get number of channels for iteration purposes. + + -param_index is the parameter index of the layer whose source you wish to interrogate + -num_paramsL is the number of "auxillary" channels + + + PF_GetLayerIndexedChannelRefAndDesc + Given a channel index return the opaque channelRef and a channel description + channel index must lie between 0 and num_channels-1 + you will use the channelRef in all subsequent calls + + PF_GetLayerTypedChannelRefAndDesc + Given a type retrieve the channelRef and ChannelDescription + + PF_CheckoutLayerChannel + given the time parameters and a channel reference, get the data + The data chunk is allocated is of the type requested. + The data is in chunky format. + + + + PF_ProgPtr effect_ref, >> + PF_ChannelRefPtr channel_refP, >> + A_long what_time, >> + A_long duration, >> + A_u_long time_scale, >> + PF_DataType data_type, >> + PF_ChannelData *channel_chunkP) <<------ + + PF_CheckinLayerChannel + The checked out channel must be checked in to avoid memory leaks. + PF_ProgPtr effect_ref, + PF_ChannelRefPtr channel_refP, + PF_ChannelDataPtr channel_data_chunkP + +**/ + +#define PF_CHANNEL_DEPTH_INFINITY 1e7 + +#define kPFChannelSuite1 "PF AE Channel Suite" +#define kPFChannelSuiteVersion1 1 /* frozen in AE 5.0 */ + + + + +/** + ** channel data access macros with a check for the type + **/ + +#define PF_GET_CHANNEL_FLOAT_DATA( CHUNK, FLOAT_PTR) \ + do { \ + if ( (CHUNK).data_type == PF_DataType_FLOAT) { \ + FLOAT_PTR = (A_FpShort *) (CHUNK).dataPV; \ + } else { \ + FLOAT_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_DOUBLE_DATA( CHUNK, DOUBLE_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_DOUBLE) { \ + DOUBLE_PTR = (A_FpLong *) (CHUNK).dataPV; \ + } else { \ + DOUBLE_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_LONG_DATA( CHUNK, LONG_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_LONG) { \ + LONG_PTR = (A_long *) (CHUNK).dataPV; \ + } else { \ + LONG_PTR = NULL; \ + } \ + } while(0) + + + +#define PF_GET_CHANNEL_SHORT_DATA( CHUNK, SHORT_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_SHORT) { \ + SHORT_PTR = (A_short *) (CHUNK).dataPV; \ + } else { \ + SHORT_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_FIXED_DATA( CHUNK, FIXED_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_FIXED_16_16) { \ + FIXED_PTR = (A_long *) (CHUNK).dataPV; \ + } else { \ + FIXED_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_CHAR_DATA( CHUNK, CHAR_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_CHAR) { \ + CHAR_PTR = (A_char *) (CHUNK).dataPV; \ + } else { \ + CHAR_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_U_BYTE_DATA( CHUNK, BYTE_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_U_BYTE) { \ + BYTE_PTR = (A_u_char *) (CHUNK).dataPV; \ + } else { \ + BYTE_PTR = NULL; \ + } \ + } while(0) + + + + + +#define PF_GET_CHANNEL_U_SHORT_DATA( CHUNK, U_SHORT_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_U_SHORT) { \ + U_SHORT_PTR = (A_u_short *) (CHUNK).dataPV;\ + } else { \ + U_SHORT_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_U_FIXED_DATA( CHUNK, U_FIXED_PTR) \ + do { \ + if ((CHUNK).data_type == PF_DataType_U_FIXED_16_16) { \ + U_FIXED_PTR = (A_u_long) (CHUNK).dataPV; \ + } else { \ + U_FIXED_PTR = NULL; \ + } \ + } while(0) + + + + +/** + ** get a row of the chunk data + **/ +#define PF_GET_CHANNEL_ROW_FLOAT_DATA( CHUNK, ROW, FLOAT_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_FLOAT) && ((ROW) < (CHUNK).heightL)) { \ + FLOAT_PTR = (A_FpShort *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + FLOAT_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_ROW_DOUBLE_DATA( CHUNK, ROW, DOUBLE_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_DOUBLE) && ((ROW) < (CHUNK).heightL)) { \ + DOUBLE_PTR = (A_FpLong *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + DOUBLE_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_ROW_LONG_DATA( CHUNK, ROW, LONG_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_LONG) && ((ROW) < (CHUNK).heightL)) { \ + LONG_PTR = (A_long *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + LONG_PTR = NULL; \ + } \ + } while(0) + + + +#define PF_GET_CHANNEL_ROW_SHORT_DATA( CHUNK, ROW, SHORT_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_SHORT) && ((ROW) < (CHUNK).heightL)) { \ + SHORT_PTR = (A_short *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + SHORT_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_ROW_FIXED_DATA( CHUNK, ROW, FIXED_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_FIXED_16_16) && ((ROW) < (CHUNK).heightL)) { \ + FIXED_PTR = (A_long *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + FIXED_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_ROW_CHAR_DATA( CHUNK, ROW, CHAR_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_CHAR) && ((ROW) < (CHUNK).heightL)) { \ + CHAR_PTR = (A_char *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + CHAR_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_ROW_U_BYTE_DATA( CHUNK, ROW, BYTE_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_U_BYTE) && ((ROW) < (CHUNK).heightL)) { \ + BYTE_PTR = (A_u_char *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + BYTE_PTR = NULL; \ + } \ + } while(0) + + + + + +#define PF_GET_CHANNEL_ROW_U_SHORT_DATA( CHUNK, ROW, U_SHORT_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_U_SHORT) && ((ROW) < (CHUNK).heightL)) { \ + U_SHORT_PTR = (A_u_short *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + U_SHORT_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_ROW_U_FIXED_DATA( CHUNK, ROW, U_FIXED_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_U_FIXED_16_16) && ((ROW) < (CHUNK).heightL)) { \ + U_FIXED_PTR = (A_u_long) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + } else { \ + U_FIXED_PTR = NULL; \ + } \ + } while(0) + + + + + + +/** + ** get a item from the chunk data + **/ +#define PF_GET_CHANNEL_ROW_COL_FLOAT_DATA( CHUNK, ROW, COL, FLOAT_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_FLOAT) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + FLOAT_PTR = (A_FpShort *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + FLOAT_PTR = (A_FpShort *)FLOAT_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + FLOAT_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_ROW_COL_DOUBLE_DATA( CHUNK, ROW, COL, DOUBLE_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_DOUBLE) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + DOUBLE_PTR = (A_FpLong *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + DOUBLE_PTR = (A_FpLong *)DOUBLE_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + DOUBLE_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_ROW_COL_LONG_DATA( CHUNK, ROW, COL, LONG_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_LONG) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + LONG_PTR = (A_long *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + LONG_PTR = (A_long *) LONG_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + LONG_PTR = NULL; \ + } \ + } while(0) + + + +#define PF_GET_CHANNEL_ROW_COL_SHORT_DATA( CHUNK, ROW, COL, SHORT_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_SHORT) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + SHORT_PTR = (A_short *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + SHORT_PTR = (A_short *) SHORT_PTR + (COL) * (CHUNK).dimensionL;\ + } else { \ + SHORT_PTR = NULL; \ + } \ + } while(0) + + +#define PF_GET_CHANNEL_ROW_COL_FIXED_DATA( CHUNK, ROW, COL, FIXED_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_FIXED_16_16) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + FIXED_PTR = (A_long *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + FIXED_PTR = (A_long *) FIXED_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + FIXED_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_ROW_COL_CHAR_DATA( CHUNK, ROW, COL, CHAR_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_CHAR) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + CHAR_PTR = (A_char *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + CHAR_PTR = (A_char *) CHAR_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + CHAR_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_ROW_COL_U_BYTE_DATA( CHUNK, ROW, COL, BYTE_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_U_BYTE) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + BYTE_PTR = (A_u_char *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + BYTE_PTR = (A_u_char *) BYTE_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + BYTE_PTR = NULL; \ + } \ + } while(0) + + + + + +#define PF_GET_CHANNEL_ROW_COL_U_SHORT_DATA( CHUNK, ROW, COL, U_SHORT_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_U_SHORT) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + U_SHORT_PTR = (A_u_short *) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + U_SHORT_PTR = (A_u_short *) U_SHORT_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + U_SHORT_PTR = NULL; \ + } \ + } while(0) + + + + +#define PF_GET_CHANNEL_ROW_COL_U_FIXED_DATA( CHUNK, ROW, COL, U_FIXED_PTR) \ + do { \ + if (((CHUNK).data_type == PF_DataType_U_FIXED_16_16) && \ + ((ROW) >= 0) && \ + ((COL) >= 0) && \ + ((ROW) < (CHUNK).heightL) && \ + ((COL) < (CHUNK).widthL)) { \ + U_FIXED_PTR = (A_u_long) ((A_char *)(CHUNK).dataPV + (ROW) * (CHUNK).row_bytesL); \ + U_FIXED_PTR = (A_u_long) U_FIXED_PTR + (COL) * (CHUNK).dimensionL; \ + } else { \ + U_FIXED_PTR = NULL; \ + } \ + } while(0) + + + + + + +/** + ** the suite functions + **/ + +typedef struct PF_ChannelSuite1 { /* frozen in AE 5.0 */ + + SPAPI PF_Err (*PF_GetLayerChannelCount)( + PF_ProgPtr effect_ref, /* >> */ + PF_ParamIndex param_index, /* >> */ + A_long *num_channelsPL); /* << */ + + SPAPI PF_Err (*PF_GetLayerChannelIndexedRefAndDesc)( + PF_ProgPtr effect_ref, /* >> */ + PF_ParamIndex param_index, /* >> */ + PF_ChannelIndex channel_index, /* >> */ + PF_Boolean *foundPB, /* << */ + PF_ChannelRef *channel_refP, /* << */ + PF_ChannelDesc *channel_descP); /* << */ + + + SPAPI PF_Err (*PF_GetLayerChannelTypedRefAndDesc)( + PF_ProgPtr effect_ref, /* >> */ + PF_ParamIndex param_index, /* >> */ + PF_ChannelType channel_type, /* >> */ + PF_Boolean *foundPB, /* << */ + PF_ChannelRef *channel_refP, /* << */ + PF_ChannelDesc *channel_descP); /* << */ + + SPAPI PF_Err (*PF_CheckoutLayerChannel)( + PF_ProgPtr effect_ref, /* >> */ + PF_ChannelRefPtr channel_refP, /* >> */ + A_long what_time, /* >> */ + A_long duration, /* >> */ + A_u_long time_scale, /* >> */ + PF_DataType data_type, /* << */ + PF_ChannelChunk *channel_chunkP); /* << */ + + + SPAPI PF_Err (*PF_CheckinLayerChannel)( + PF_ProgPtr effect_ref, /* >> */ + PF_ChannelRefPtr channel_refP, /* >> */ + PF_ChannelChunk *channel_chunkP); /* << */ + + +} PF_ChannelSuite1; + + + + + +#ifdef __cplusplus + } // end extern "C" +#endif + + +#include + + +#endif diff --git a/External/AE SDK/Headers/AE_ComputeCacheSuite.h b/External/AE SDK/Headers/AE_ComputeCacheSuite.h new file mode 100644 index 00000000..e11481d5 --- /dev/null +++ b/External/AE SDK/Headers/AE_ComputeCacheSuite.h @@ -0,0 +1,175 @@ +/******************************************************************** +* ADOBE CONFIDENTIAL +* __________________ +* +* Copyright 2020 Adobe Inc. +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains +* the property of Adobe and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe +* and its suppliers and are protected by all applicable intellectual +* property laws, including trade secret and copyright laws. +* Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained +* from Adobe. +********************************************************************/ + +#ifndef _H_AE_ComputeCacheSuite +#define _H_AE_ComputeCacheSuite + +#include +#include + +#ifdef AEGP_INTERNAL + #include +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +///////////////////////////////////// MC Compute -- plugin registration of cached computations + +// Globally unique identifier for the compute class, such as "adobe.ae.effect.test_effect.cache_v_1" +typedef const char *AEGP_CCComputeClassIdP; + +typedef void *AEGP_CCComputeOptionsRefconP; // opaque content provided by plugin for generating key and value. Input to the compute. +typedef void *AEGP_CCComputeValueRefconP; // opaque compute result from the plugin + + +// GUID used as the cache key. +typedef struct AEGP_GUID { + A_long bytes[4]; +} AEGP_GUID; + +typedef AEGP_GUID AEGP_CCComputeKey; +typedef AEGP_CCComputeKey *AEGP_CCComputeKeyP; + +typedef void *AEGP_CCCheckoutReceiptP; + +// +// The effect supplies implementations of these callbacks. +// +typedef struct AEGP_ComputeCacheCallbacks { + // Cache key. Called when creating a cache entry and when doing a cache lookup. Should be fast to compute. All of the inputs + // needed to uniquely address the cache entry must be hashed into the key. If a layer checkout is needed to calculate the cache + // value, such as with a histogram, then the hash of that input must be included. See PF_ParamUtilsSuite::PF_GetCurrentState + // to get the hash for a layer param. Note this is the hash of the inputs needed to generate the frame, not a hash the pixels + // in the frame, thus a render is not triggered when making this call. + A_Err (*generate_key)( + AEGP_CCComputeOptionsRefconP optionsP, + AEGP_CCComputeKeyP out_keyP); + + // The expensive call. Generate the cache data from the input parameters. + A_Err (*compute)( + AEGP_CCComputeOptionsRefconP optionsP, + AEGP_CCComputeValueRefconP *out_valuePP); + + // The computed value may not be a flat data structure. This should return the total memory footprint. The size is an input + // to the cache purging heuristic. + size_t (*approx_size_value)( + AEGP_CCComputeValueRefconP valueP); + + // The computed value lives in the cache. This is called to free the value when the cached is to be purged. All resources + // owned by the cache value must be freed here. + void (*delete_compute_value)( + AEGP_CCComputeValueRefconP valueP); +} AEGP_ComputeCacheCallbacks; + + + +#define kAEGPComputeCacheSuite "AEGP Compute Cache" +#define kAEGPComputeCacheSuiteVersion1 1 /* frozen in AE 18.2 */ + +typedef struct AEGP_ComputeCacheSuite1 { + + // Register a cache type. + SPAPI A_Err (*AEGP_ClassRegister)( + AEGP_CCComputeClassIdP compute_classP, + const AEGP_ComputeCacheCallbacks *callbacksP); + + // Unregister a cache type. Note that all cached values will be purged at this time since the delete_compute_value callback + // is how cache entries are deleted, and delete_compute_value is not available after unregister. + SPAPI A_Err (*AEGP_ClassUnregister)( + AEGP_CCComputeClassIdP compute_classP); + + + // This is the main checkout call. + // + // When adding cache support one of the first questions to answer is if a single render call needs to checkout more than one + // cache value. If more than one cache value is needed then the multi-checkout pattern, below, can be applied to concurrently + // calculate the caches across multiple render calls and thus avoid serialization of the compute. + // + // SINGLE CACHE VALUE + // If a render call only needs one cache value then set wait_for_other_threadB to true. The checkout call will return a receipt, + // possibly calling the compute callback to populate the cache; or waiting on another thread that had already started the + // needed computation. + // + // MULTI-CHECKOUT + // If a render call needs multiple cache values then this pattern can be used to keep the render threads utilized and thus + // avoid serializing the compute. + // Render() + // { + // bool first_err = AEGP_ComputeIfNeededAndCheckout(first_options, do_not_wait); + // bool second_err = AEGP_ComputeIfNeededAndCheckout(second_options, do_not_wait); + // // Add as many additional do_not_wait checkout calls here as needed. + // + // if(first_err == A_Err_NOT_IN_CACHE_OR_COMPUTE_PENDING) { + // AEGP_ComputeIfNeededAndCheckout(wait); + // } + // if(second_err == A_Err_NOT_IN_CACHE_OR_COMPUTE_PENDING) { + // AEGP_ComputeIfNeededAndCheckout(wait); + // } + // // Add as many additional waiting checkout calls here as needed + // } + // + // wait_for_other_threadB + // CACHE STATE || FALSE TRUE | + // ================++========================+========================+ + // No cache || Compute and checkout | Compute and checkout | + // ----------------++------------------------+------------------------+ + // Being computed || Return error, see | Wait for the other | + // by another thread || below. | thread and checkout | + // ----------------++------------------------+------------------------+ + // Cached || Checkout | Checkout | + // ----------------++------------------------+------------------------+ + // + // Returns A_Err_NOT_IN_CACHE_OR_COMPUTE_PENDING if wait_for_other_threadB is false and another thread is currently computing + // the cache value. Note that the host will not notify the user of this error; it will be silent to the user. + // + // Must call AEGP_CheckinComputeReceipt on success. Check-in must be done before returning to the host. + SPAPI A_Err (*AEGP_ComputeIfNeededAndCheckout)( + AEGP_CCComputeClassIdP compute_classP, + AEGP_CCComputeOptionsRefconP opaque_optionsP, + bool wait_for_other_threadB, + AEGP_CCCheckoutReceiptP *compute_receiptPP); + + // This call does a cache check, and thus should return always quickly. It does not do compute nor does it wait for another + // thread that is populating the cache. + // This call could be used to implement a polling pattern where another piece of code is expected to populate the cache. For + // example, a UI thread could poll the cache regularly for a histogram that is generated on a render thread. + // + // Either returns cache value or A_Err_NOT_IN_CACHE_OR_COMPUTE_PENDING if cache miss. + // Must call AEGP_CheckinComputeReceipt on success. Check-in must be done before returning to the host. + SPAPI A_Err (*AEGP_CheckoutCached)( + AEGP_CCComputeClassIdP compute_classP, + AEGP_CCComputeOptionsRefconP opaque_optionsP, + AEGP_CCCheckoutReceiptP *compute_receiptPP); + + // Get the cache value from a checkout receipt. + SPAPI A_Err (*AEGP_GetReceiptComputeValue)( + const AEGP_CCCheckoutReceiptP compute_receiptP, + AEGP_CCComputeValueRefconP *compute_valuePP); + + // Check-in a receipt. + SPAPI A_Err (*AEGP_CheckinComputeReceipt)( + AEGP_CCCheckoutReceiptP compute_receiptP ); + +} AEGP_ComputeCacheSuite1; + +#ifdef __cplusplus + } // end extern "C" +#endif + +#endif diff --git a/External/AE SDK/Headers/AE_CreatorInfo.h b/External/AE SDK/Headers/AE_CreatorInfo.h new file mode 100644 index 00000000..2867c1a0 --- /dev/null +++ b/External/AE SDK/Headers/AE_CreatorInfo.h @@ -0,0 +1 @@ +/*******************************************************************/ /* */ /* ADOBE CONFIDENTIAL */ /* _ _ _ _ _ _ _ _ _ _ _ _ _ */ /* */ /* Copyright 2007 Adobe Systems Incorporated */ /* All Rights Reserved. */ /* */ /* NOTICE: All information contained herein is, and remains the */ /* property of Adobe Systems Incorporated and its suppliers, if */ /* any. The intellectual and technical concepts contained */ /* herein are proprietary to Adobe Systems Incorporated and its */ /* suppliers and may be covered by U.S. and Foreign Patents, */ /* patents in process, and are protected by trade secret or */ /* copyright law. Dissemination of this information or */ /* reproduction of this material is strictly forbidden unless */ /* prior written permission is obtained from Adobe Systems */ /* Incorporated. */ /* */ /*******************************************************************/ /* If you'd like After Effects to open files created by your application IN your application, embed this structure in that file. Data must be in Motorola byte order. Your application must then respond to the appleEvent (mac) or the command line flags (win) that are specified in the structure. */ #define ADBE_CREATOR_ATOM_TYPE 'Cr8r' #define CR8R_MAGIC 0xBEEFCAFE #define ADBE_CREATOR_ATOM_VERS_MAJOR 1 #define ADBE_CREATOR_ATOM_VERS_MINOR 0 typedef struct adbe_creator_atom { unsigned long magicLu; // set to CR8R_MAGIC long atom_sizeL; // size of this structure (sizeof(CR8R_CreatorAtom)) short atom_vers_majorS; // set to ADBE_CREATOR_ATOM_VERS_MAJOR short atom_vers_minorS; // set to ADBE_CREATOR_ATOM_VERS_MINOR // mac unsigned long creator_codeLu; // application code on MacOS unsigned long creator_eventLu; // invocation appleEvent // windows char creator_extAC[16]; // extension allowing registry search to app char creator_flagAC[16]; // flag passed to app at invocation time char creator_nameAC[32]; // name of the creator application } CR8R_CreatorAtom, **CR8R_CreatorAtomHandle; \ No newline at end of file diff --git a/External/AE SDK/Headers/AE_Effect.h b/External/AE SDK/Headers/AE_Effect.h new file mode 100644 index 00000000..bb1107b2 --- /dev/null +++ b/External/AE SDK/Headers/AE_Effect.h @@ -0,0 +1,3049 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + +/** AE_Effect.h + + Part of the After Effects SDK + + CONTENTS + Version Information + Constants And Enumerations + Output Flags + Input Flags + Command Selectors + Simple Types + Pixel Access Macros + Effect Parameter Description Structures + Interaction Callbacks + Effect Parameter Blocks + Effect Prototype + + NOTES + It may be easiest to start reading this file at the bottom + and work your way, section by section, to the top. Of course, + the best thing to do is start with the sample filter and the + work your way from that back through the goodies in this file. + + All strings in this spec are NULL-terminated (C strings). + +**/ + +// This stuff is a test to make sure that no code is including +// this file with contradictory settings of A_INTERNAL. It must +// come *before* the _H_AE_Effect "include once" test. +// You can define A_SUPPRESS_A_INTERNAL_WARNING if you have a plugin +// that breaks this rule innocently. +#ifdef A_INTERNAL + #define A_INTERNAL_TEST_ONE 1 +#else + #define A_INTERNAL_TEST_TWO 1 +#endif + +#if (A_INTERNAL_TEST_ONE && A_INTERNAL_TEST_TWO) + #ifndef A_SUPPRESS_A_INTERNAL_WARNING + #pragma message("Warning: You have included AE_Effect.h once with A_INTERNAL set and once without.") + #endif +#endif + +// End of A_INTERNAL consistency check. + + +#ifndef _H_AE_Effect +#define _H_AE_Effect + +#ifdef A_INTERNAL + #include "PF_Private.h" +#endif + +#include "A.h" +#if defined(__APPLE__) +#include +#endif +#include + + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __cplusplus + #if defined(__ANDROID__) + #include + #endif +#endif + +/** -------------------- Version Information ---------------------------------- + ** + ** Please use these macros for designating the version information + ** of your plug-ins. Should After Effects encounter more than one version + ** of a specific plug-in when it starts up, it will use this information + ** to decide which plug-in to honor. The plug-in version information + ** (field 'my_version' in the PF_OutData) should be set at GLOBAL_SETUP + ** time. + ** + ** This version information is meant for your version control, and should + ** not be confused with the min_version and desired_version fields in the + ** PF_OutData structure, which refer to the version of the PF specification. + ** + **/ + +#define PF_Vers_BUILD_BITS 0x1ffL +#define PF_Vers_BUILD_SHIFT 0 +#define PF_Vers_STAGE_BITS 0x3L +#define PF_Vers_STAGE_SHIFT 9 +#define PF_Vers_BUGFIX_BITS 0xfL +#define PF_Vers_BUGFIX_SHIFT 11 +#define PF_Vers_SUBVERS_BITS 0xfL +#define PF_Vers_SUBVERS_SHIFT 15 +#define PF_Vers_VERS_BITS 0x7L // incomplete without high bits, below +#define PF_Vers_VERS_SHIFT 19 +// skipping these bits for similarity to Up_Vers_ARCH_*, currently unused in PF +#define PF_Vers_VERS_HIGH_BITS 0xfL // expand version max from 7 to 127 +#define PF_Vers_VERS_HIGH_SHIFT 26 + +// b/c we are stripping the stand alone vers value for two fields +#define PF_Vers_VERS_LOW_SHIFT 3 +#define PF_Vers_VERS_HIGH(vers) ((vers)>>PF_Vers_VERS_LOW_SHIFT) + +#define PF_VERSION(vers, subvers, bugvers, stage, build) \ + (A_u_long)( \ + ((((A_u_long)PF_Vers_VERS_HIGH(vers)) & PF_Vers_VERS_HIGH_BITS) << PF_Vers_VERS_HIGH_SHIFT) | \ + ((((A_u_long)(vers)) & PF_Vers_VERS_BITS) << PF_Vers_VERS_SHIFT) | \ + ((((A_u_long)(subvers)) & PF_Vers_SUBVERS_BITS)<> PF_Vers_VERS_SHIFT) & PF_Vers_VERS_BITS) + (((vers >> PF_Vers_VERS_HIGH_SHIFT) & PF_Vers_VERS_HIGH_BITS) << PF_Vers_VERS_LOW_SHIFT)) + +#define PF_Version_SUBVERS(vers) \ + ((((A_u_long) vers) >> PF_Vers_SUBVERS_SHIFT) & PF_Vers_SUBVERS_BITS) + +#define PF_Version_BUGFIX(vers) \ + ((((A_u_long) vers) >> PF_Vers_BUGFIX_SHIFT) & PF_Vers_BUGFIX_BITS) + +#define PF_Version_STAGE(vers) \ + ((((A_u_long) vers) >> PF_Vers_STAGE_SHIFT) & PF_Vers_STAGE_BITS) + +#define PF_Version_BUILD(vers) \ + ((((A_u_long) vers) >> PF_Vers_BUILD_SHIFT) & PF_Vers_BUILD_BITS) + + +enum { + PF_Stage_DEVELOP, + PF_Stage_ALPHA, + PF_Stage_BETA, + PF_Stage_RELEASE +}; +typedef A_long PF_Stage; + + + + + + +/** -------------------- Constants And Enumerations -------------------- + + These version numbers refer to the PF_AE_PLUG_IN_VERSION & SUBVERSION of all releases of AE, and, correspondingly, + the API used by each plug-in (i.e. the SDK that the plug-in is compiled against). The plug-in can check this number + (PF_SpecVersion version field in in_data) to see which API the host supports, and the host can check to see what API + the plug-in is expecting (as listed in the plug-in's PiPL). + +**/ + +//CC +#define PF_AE220_PLUG_IN_VERSION 13 // manually set for SDK changes to allow more than 32 max threads for PF_Iterate +#define PF_AE220_PLUG_IN_SUBVERS 27 // manually set for SDK changes to allow more than 32 max threads for PF_Iterate + +#define PF_AE184_PLUG_IN_VERSION 13 // manually set for mid-cycle SDK drop +#define PF_AE184_PLUG_IN_SUBVERS 26 // manually set for mid-cycle SDK drop + +#define PF_AE182_PLUG_IN_VERSION 13 // manually set for mid-cycle SDK drop +#define PF_AE182_PLUG_IN_SUBVERS 25 // manually set for mid-cycle SDK drop + +#define PF_AE180_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE180_PLUG_IN_SUBVERS 24 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE177_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE177_PLUG_IN_SUBVERS 23 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE176_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE176_PLUG_IN_SUBVERS 22 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE175_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE175_PLUG_IN_SUBVERS 21 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE171_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE171_PLUG_IN_SUBVERS 20 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE170_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE170_PLUG_IN_SUBVERS 18 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE161_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE161_PLUG_IN_SUBVERS 17 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE160_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE160_PLUG_IN_SUBVERS 16 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE151_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE151_PLUG_IN_SUBVERS 15 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE150_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE150_PLUG_IN_SUBVERS 15 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE142_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE142_PLUG_IN_SUBVERS 14 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE140_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE140_PLUG_IN_SUBVERS 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE138_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE138_PLUG_IN_SUBVERS 11 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +// AE137 is same plugin version as AE136, below + +#define PF_AE136_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE136_PLUG_IN_SUBVERS 10 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +#define PF_AE135_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_AE135_PLUG_IN_SUBVERS 9 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay + +// AE131 and AE132 are the same plugin version as AE130, below + +#define PF_AE130_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit okay +#define PF_AE130_PLUG_IN_SUBVERS 7 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit okay + +#define PF_AE122_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit okay +#define PF_AE122_PLUG_IN_SUBVERS 6 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit okay + +#define PF_AE121_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit okay +#define PF_AE121_PLUG_IN_SUBVERS 5 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit okay + +#define PF_AE120_PLUG_IN_VERSION 13 +#define PF_AE120_PLUG_IN_SUBVERS 4 + +//CS6.0.1 +//Plugins have to make dummy checkout (hack) to fix W3163764 in CS6. The bug has been fixed in CS6.0.1 so increase SDK minor version +//so that plugins can constrain the hack only for CS6. +#define PF_AE1101_PLUG_IN_VERSION 13 +#define PF_AE1101_PLUG_IN_SUBVERS 3 + +#define PF_AE110_PLUG_IN_VERSION 13 +#define PF_AE110_PLUG_IN_SUBVERS 2 + +#define PF_AE105_PLUG_IN_VERSION 13 +#define PF_AE105_PLUG_IN_SUBVERS 1 + +#define PF_AE100_PLUG_IN_VERSION 13 +#define PF_AE100_PLUG_IN_SUBVERS 0 + +#define PF_AE90_PLUG_IN_VERSION 12 +#define PF_AE90_PLUG_IN_SUBVERS 14 + +#define PF_AE80_PLUG_IN_VERSION 12 +#define PF_AE80_PLUG_IN_SUBVERS 13 + +#define PF_AE70_PLUG_IN_VERSION 12 +#define PF_AE70_PLUG_IN_SUBVERS 12 + +#define PF_AE65_PLUG_IN_VERSION 12 +#define PF_AE65_PLUG_IN_SUBVERS 11 + +#define PF_AE41_PLUG_IN_VERSION 12 +#define PF_AE41_PLUG_IN_SUBVERS 2 + +#define PF_AE40_PLUG_IN_VERSION 12 +#define PF_AE40_PLUG_IN_SUBVERS 1 + +#define PF_AE31_PLUG_IN_VERSION 11 +#define PF_AE31_PLUG_IN_SUBVERS 6 +#define PF_AE31_PLUG_IN_SUBVERS_STRICTIFY 8 + +#define PF_AE_PLUG_IN_VERSION PF_AE220_PLUG_IN_VERSION // manually set for SDK changes to allow more than 32 max threads for PF_Iterate +#define PF_AE_PLUG_IN_SUBVERS PF_AE220_PLUG_IN_SUBVERS // manually set for SDK changes to allow more than 32 max threads for PF_Iterate + +/* Note: AE3.1 will drive any v11.x plugin + AE4.0 will drive any v11.x or v12.x plugin + AE4.1 will drive any v11.x or v12.x plugin, changed current version from 12.1 -> 12.2 + + If you use PF_AE31_PLUG_IN_VERSION, PF_AE31_PLUG_IN_SUBVERS_STRICTIFY + or later (e.g. 11.8 or 12.0) AE4.0 will enforce new stricter rules and + report more plug-in errors. +*/ + + +#define PF_MAX_EFFECT_NAME_LEN 31 +#define PF_MAX_EFFECT_CATEGORY_NAME_LEN 31 +#define PF_MAX_EFFECT_PARAM_NAME_LEN 31 +#define PF_MAX_PARAM_DESCRIPTION_LEN 31 +#define PF_MAX_PARAM_VALUE_LEN 31 +#define PF_MAX_EFFECT_MSG_LEN 255 + +// Through AE6.5, effects could only have this many parameters. Now the number is unlimited. +#define PF_AE65_AND_EARLIER_MAX_NUM_EFFECT_PARAMS 127 + +#define PF_MAX_WORLD_WIDTH 30000 +#define PF_MAX_WORLD_HEIGHT 30000 + +#define PF_FIRST_ERR 512 + + +/* Standard effect categories for After Effects effects modules. + * These need to be set in the PiPL. + */ +#define PF_Category_BLUR_AND_SHARPEN "Blur & Sharpen" +#define PF_Category_CHANNEL "Channel" +#define PF_Category_DISTORT "Distort" +#define PF_Category_IMAGE_CONTROL "Image Control" +#define PF_Category_KEYING "Keying" +#define PF_Category_PERSPECTIVE "Perspective" +#define PF_Category_STYLIZE "Stylize" +#define PF_Category_TEXT "Text" +#define PF_Category_VIDEO "Video" +#define PF_Category_TRANSITION "Transition" +#define PF_Category_AUDIO "Audio" +#define PF_Category_OTHER "Other" + +enum { + PF_Quality_DRAWING_AUDIO = -1, // only used to inform audio plugins that the output + // will be used to draw the waveform; the plugin should + // not perform any filtering operations that may weaken + // the amplitude when rendering at low sampling rates + + PF_Quality_LO = 0, // LO & HI are sent to both audio & visual effects + PF_Quality_HI +}; +typedef A_long PF_Quality; + +enum { + PF_MF_Alpha_PREMUL = 0, + PF_MF_Alpha_STRAIGHT = (1L << 0) +}; +typedef A_long PF_ModeFlags; + +#define PF_ALPHA_PREMUL(F) (((F) & 0x00000001) == 0) +#define PF_ALPHA_STRAIGHT(F) (((F) & 0x00000001)) + +enum { + PF_Field_FRAME = 0L, + PF_Field_UPPER = 1L, + PF_Field_LOWER = 2L +}; +typedef A_long PF_Field; + + + +/* PF_ParamType + */ +enum { + PF_Param_RESERVED = -1, + PF_Param_LAYER = 0, + PF_Param_SLIDER, /* obsolete, use PF_Param_FLOAT_SLIDER */ + PF_Param_FIX_SLIDER,/* obsolete, use PF_Param_FLOAT_SLIDER */ + PF_Param_ANGLE, + PF_Param_CHECKBOX, + PF_Param_COLOR, + PF_Param_POINT, + PF_Param_POPUP, + PF_Param_CUSTOM, /* obsolete */ + PF_Param_NO_DATA, /* used for CustomUI in Effect window controls, with NO data stream */ + PF_Param_FLOAT_SLIDER, + PF_Param_ARBITRARY_DATA, // in AE: must combine with either PF_PUI_TOPIC/PF_PUI_CONTROL or PF_PUI_NO_ECW + // in PPro starting with 8.0: it's OK to set none of those flags, which allows you to + // see the parameter's keyframe track on the right side of Effect Controls + // without creating a custom control + PF_Param_PATH, + PF_Param_GROUP_START, + PF_Param_GROUP_END, + PF_Param_BUTTON, // must combine with PF_ParamFlag_SUPERVISE + PF_Param_RESERVED2, + PF_Param_RESERVED3, + PF_Param_POINT_3D // only supported by AE, not PPro +}; +typedef A_long PF_ParamType; + + +/* PF_ParamFlags + + These flags are passed when adding a param (using PF_ADD_PARAM) to specify + some details about how the param can be used. The flags + are: + + PF_ParamFlag_CANNOT_TIME_VARY + If this is passed, the parameter will not be allowed to vary + over time -- no keyframe controller will appear at the right. + + PF_ParamFlag_CANNOT_INTERP + If this is passed, parameter values are not interpolated + between. You can still use no interp and discontinuous interp. + + PF_ParamFlag_COLLAPSE_TWIRLY / PF_ParamFlag_START_COLLAPSED + Set this flag if you want the parameter's twirly arrow in the + Effect Control Window to be twirled up by default when the + effect is first applied. New in AE 4.0: you can now set & + clear this bit when handling PF_Cmd_UPDATE_PARAMS_UI and + PF_Cmd_USER_CHANGED_PARAM messages, so as to twirl your + parameters and groups up and down at will. + + PF_ParamFlag_SUPERVISE + If this is passed, PF_Cmd_USER_CHANGED_PARAM will be sent when + this parameter changes. + + PF_ParamFlag_USE_VALUE_FOR_OLD_PROJECTS + This only affects the loading of projects saved with an older version + of the effect which lacks parameters added later. When set, the PF_ParamDef + "value" field set in PF_ADD_PARAM will be used to initialize the missing parameter, + but the "dephault" field will still be used for initial value of the parameter when + the effect is newly applied or reset. This is useful for when you want a + parameter to default to one value but need it set to something else to + preserve rendering behaviour for older projects. + + This flag is valid for all PF_Param types except PF_Param_LAYER + + PF_ParamFlag_LAYER_PARAM_IS_TRACKMATTE + For PF_Param_LAYER, this flag indicates that the layer parameter is to be presented + as a track matte. Supported by Premiere, ignored in AE. + + PF_ParamFlag_EXCLUDE_FROM_HAVE_INPUTS_CHANGED + See doc for PF_HaveInputsChangedOverTimeSpan. + + PF_ParamFlag_SKIP_REVEAL_WHEN_UNHIDDEN + when this param is "un hidden" (cuz it may hide and show), then the GUI is NOT to cause + the parameter to be "revealed", ie: it won't twirl down it's parents and scroll it into view + +**/ +enum { + PF_ParamFlag_RESERVED1 = 1 << 0, + PF_ParamFlag_CANNOT_TIME_VARY = 1 << 1, /* can't vary over time */ + PF_ParamFlag_CANNOT_INTERP = 1 << 2, /* can only vary discontinuously */ + PF_ParamFlag_RESERVED2 = 1 << 3, /* was _old_ PF_ParamFlag_WANTS_UPDATE value, never used */ + PF_ParamFlag_RESERVED3 = 1 << 4, /* was _old_ PF_ParamFlag_SEPARATE, now use PF_PUI_ECW_SEPARATOR */ + PF_ParamFlag_COLLAPSE_TWIRLY = 1 << 5, /* controls the twirl-state of the twirly-arrow in the ECW (dynamic) */ + PF_ParamFlag_SUPERVISE = 1 << 6, /* call me with PF_Cmd_USER_CHANGED_PARAM (new in AE 4.0) */ + PF_ParamFlag_START_COLLAPSED = PF_ParamFlag_COLLAPSE_TWIRLY, /* when first applied, param comes up collapsed */ + PF_ParamFlag_USE_VALUE_FOR_OLD_PROJECTS = 1 << 7, /* see extensive comment above */ + PF_ParamFlag_LAYER_PARAM_IS_TRACKMATTE = 1 << 7, /* only valid for layer parameters. indicates that a layer param is used as a track-matte with applied filters (used in Premiere, ignored in AE) */ + PF_ParamFlag_EXCLUDE_FROM_HAVE_INPUTS_CHANGED = 1 << 8, /* only relevant if you call PF_HaveInputsChangedOverTimeSpan() */ + PF_ParamFlag_SKIP_REVEAL_WHEN_UNHIDDEN = 1 << 9 /* dont reveal this stream when un-hidden (use only during param setup) */ +}; +typedef A_long PF_ParamFlags; + +enum { + PF_Err_NONE = 0, + PF_Err_OUT_OF_MEMORY = 4, + PF_Err_INTERNAL_STRUCT_DAMAGED = PF_FIRST_ERR, + PF_Err_INVALID_INDEX, /* out of range, or action not allowed on this index */ + PF_Err_UNRECOGNIZED_PARAM_TYPE, + PF_Err_INVALID_CALLBACK, + PF_Err_BAD_CALLBACK_PARAM, + PF_Interrupt_CANCEL, /* Returned when user interrupts rendering */ + PF_Err_CANNOT_PARSE_KEYFRAME_TEXT /* Returned from PF_Arbitrary_SCAN_FUNC when effect + cannot parse arbitrary data from text */ +}; +typedef A_long PF_Err; + + +enum { + PF_WorldFlag_DEEP = 1L << 0, + PF_WorldFlag_WRITEABLE = 1L << 1, + + + PF_WorldFlag_RESERVED0 = 1L << 24, + PF_WorldFlag_RESERVED1 = 1L << 25, + PF_WorldFlag_RESERVED2 = 1L << 26, + PF_WorldFlag_RESERVED3 = 1L << 27, + PF_WorldFlag_RESERVED4 = 1L << 28, + PF_WorldFlag_RESERVED5 = 1L << 29, + PF_WorldFlag_RESERVED6 = 1L << 30, + PF_WorldFlag_RESERVED = 1L << 31 +}; + +typedef A_long PF_WorldFlags; + +#define PF_WORLD_IS_DEEP(W) ( ((W)->world_flags & PF_WorldFlag_DEEP) != 0 ) + +#define PF_MAX_CHAN8 255 +#define PF_HALF_CHAN8 128 +#define PF_MAX_CHAN16 32768 +#define PF_HALF_CHAN16 16384 + + + +/** -------------------- Output Flags -------------------- + + The out_flags field of the OutData can be set to an OR-ed + combination of these flags to communicate various things to + the driver program. The flags are described here: + + PF_OutFlag_NONE + This is the "empty" setting -- no outflags. + + PF_OutFlag_WIDE_TIME_INPUT + Set this flag if the effect calls get_param to inquire a + parameter at a time besides the current one (e.g. to get + the previous video frame). This should be sent, if it is + going to be sent, at PF_Cmd_GLOBAL_SETUP. Can be over-ridden + dynamically during PF_Cmd_QUERY_DYNAMIC_FLAGS. + + As of AE10, this flag is no longer recommended. It still works the + same way and is safe to set, but there's a more efficient option. + See PF_OutFlag2_AUTOMATIC_WIDE_TIME_INPUT. + + PF_OutFlag_NON_PARAM_VARY + Set this if the effect uses information other than the parameters + in the param list to generate its output at the current time. + For instance, if the effect uses the current time of the frame + or some random value to decide the output, set this flag. This + flag should be sent at PF_Cmd_GLOBAL_SETUP. If the effect + produces changing frames when applied to a still image and + all parameters are constant, that's a sure sign that this bit + should be set (e.g. Wave Warp). Can be over-ridden dynamically + during PF_Cmd_QUERY_DYNAMIC_FLAGS. + + PF_OutFlag_SEQUENCE_DATA_NEEDS_FLATTENING + When you allocate a sequence data handle, the app + may write the handle out to disk and reuse it + later. Pass this flag if the handle is not "flat" + (i.e. has pointers or handles hanging off of it). + Basically, this gives you a chance to alter the + handle contents before it is written out to disk, + so you won't get invalid handles or pointers. Once + you have flattened a handle, you will get an + opportunity to un-flatten it before the effect + needs to continue. For sequence data, you will be + invoked with a PF_Cmd_SEQUENCE_RESETUP call. You + should store a boolean at a common offset in your + unflattened and flattened data that says whether + the data is flat or not. If you get a + PF_Cmd_SEQUENCE_RESETUP and the boolean indicated + the data is flattened, you should unflatten the + data, free the flattened data handle, and set the + sequence_data handle in the PF_OutData. If you + ever set the data to NULL when you flatten it, you + will NOT get the sequence resetup call to + unflatten it. Instead, you may just get a RENDER + call with NULL data. Forewarned is forearmed. This + flag, indicating if the data will need to be + flattened, should be set at PF_Cmd_GLOBAL_SETUP time. + + PF_OutFlag_I_DO_DIALOG + Set this is the effect responds to a PF_Cmd_DO_DIALOG, i.e. Does this + effect bring up an options dialog box. PF_Cmd_DO_DIALOG is generated + when the user presses the Options button on the Effect floater. + This flag should be set at PF_Cmd_GLOBAL_SETUP time. + + PF_OutFlag_USE_OUTPUT_EXTENT + The output layer is passed with an "extent rect" indicating + the area of the layer that actually contains visible image data. If + the effect changes its behavior based on the extent rect (for instance, + by not iterating over the entire image), set this flag, so the + application will know whether having the extent change should cause + the frame to re-render. Specify this flag at PF_Cmd_GLOBAL_SETUP. + + PF_OutFlag_SEND_DO_DIALOG + Some filters need their options dialog box to be brought up at least + once to be valid. You can set this flag, and the driver app will + automatically send a PF_Cmd_DO_DIALOG to the effect when it is applied. + The DO_DIALOG will be sent after PF_Cmd_SEQUENCE_SETUP. This flag + should be set in PF_Cmd_SEQUENCE_SETUP if it is going to be set. + + PF_OutFlag_DISPLAY_ERROR_MESSAGE + Whenever the return_msg field in the PF_OutData is set to a string, + After Effects will bring up a simple dialog box containing that + string. If you set this flag, the dialog box will be made to look + like an error message dialog box. If you don't set this flag, it + will be an undecorated dialog box. Using this flag, an effects module + can have and display its own error messages and not worry about the + code for dialog boxes -- the program will do it for you. + This flag can be sent after any command. + + PF_OutFlag_I_EXPAND_BUFFER + Starting with After Effects 2.0, effects will be able to expand their buffers + beyond the current layer's dimensions. This has always been part of the + PF specification, but as an extra precaution (and hint to the AE rendering + engine) set this flag at PF_Cmd_GLOBAL_SETUP if you plan to expand your + buffer. + + PF_OutFlag_I_SHRINK_BUFFER + Set this flag if you can shrink your buffer based on the extent-rects passed + to you in order to be more memory efficient. + + PF_OutFlag_PIX_INDEPENDENT + Set this flag if the output at a given pixel is not dependent on the values + of the pixels around it. If this is set, the pixels After Effects does not + care about (because of field rendering, for example) could be filled with garbage + colors. Please set this flag at PF_Cmd_GLOBAL_SETUP. Can be over-ridden + dynamically during PF_Cmd_QUERY_DYNAMIC_FLAGS. + + PF_OutFlag_I_WRITE_INPUT_BUFFER + Set this flag if your effect would like to write into the input buffer. This + can be useful if you need an scratch buffer, but it also invalidates some speedups + in the AE rendering pipeline, so use it with some discretion. Please set this + flag at PF_Cmd_GLOBAL_SETUP. + + PF_OutFlag_KEEP_RESOURCE_OPEN + + Obsoleted in AE 2015 (does nothing when set). + + Set this flag if your effect expects its Macintosh resource fork to be open + at any time other than global setup. Note that this does not mean that + the resource fork will be kept open at all times, just whenever the + effect is being executed. + + PF_OutFlag_NOP_RENDER + + Set this flag in PF_Cmd_GLOBAL_SETUP if the render would never result in changes + to the source image (or audio?). For example, an expression control would set this. + + PF_OutFlag_CUSTOM_UI + + This flag must be set if your effect has a custom UI in the Effect Controls + Window, Layer Window or Comp Window. + + PF_OutFlag2_CUSTOM_UI_ASYNC_MANAGER (new in 13.5) + + This flags enables use of AEGP_CheckoutOrRender_*_AsyncManager() calls + which avoid the need for plugin management of the lifetime of async custom UI renders from the UI thread. + The plugin asks for what frames it needs and the manager calls PF_Event_DRAW again when they are available + (or cancels them as needed automatically). The plugin responds in PF_Event_DRAW by asking for what it needs + and drawing what it can from what is available. + + Due to separation of Render thread and UI thread in 13.5, frames for custom UI should no longer be + rendered synchronously (see RenderSuite5 for more details). The manager simplifies this, especially when + there are multiple requests needed for DRAW. + + When enabled, this flag associates a "PF_AsyncManager" with the NEW_CONTEXT/CLOSE_CONTEXT and PF_Event_DRAW + that will automatically track completion of 1 or more asynch render requests made for drawing custom UI. + As requests complete, PF_Event_DRAW will be called again and the current state of the CUSTOM_UI can be drawn. + Such requests may be canceled automatically as the user scrubs the time needle or project changes are made and + become invalid. + + This flag is used in addition to the CUSTOM_UI flag during PF_Cmd_GLOBAL_SETUP + + PF_OutFlag_REFRESH_UI + + Can be returned from PF_Cmd_EVENT, PF_Cmd_RENDER, and PF_Cmd_DO_DIALOG. + Causes the effects control window, layer window, and comp window to be re-drawn. + + PF_OutFlag_I_USE_SHUTTER_ANGLE + + Must be set at PF_Cmd_GLOBAL_SETUP time if the effect uses + the shutter_angle or the shutter_phase. Can be over-ridden dynamically during + PF_Cmd_QUERY_DYNAMIC_FLAGS. + + PF_OutFlag_I_USE_AUDIO + + Must be set at PF_Cmd_GLOBAL_SETUP time for a visual effect + that calls the audio checkout calls. + + PF_OutFlag_I_AM_OBSOLETE + + Set at PF_Cmd_GLOBAL_SETUP time for effects that don't + want to appear in the AE Effects menu (but will still be invoked + if you load a project that has an old copy of the effect applied). + + PF_OutFlag_FORCE_RERENDER + + Set at PF_Cmd_EVENT if the effect modified sequence data, + or did anything else that requires the effect needs to re-render. + Note that setting PF_ChangeFlag_CHANGED_VALUE automatically + causes a re-render, so don't worry about setting PF_OutFlag_FORCE_RERENDER + in that case. Also, I_MIX_GUID_DEPENDENCIES can be used to trigger a rerender on + dependant changes if sequence_data has not been changed. + + IMPORTANT: FORCE_RERENDER should be used as a last resort. Long term we should be eliminating the need for this + because it causes forced cache invalidation that doesn't work well with undo. + Once we have the full set of APIs in place needed to manage render state, we will be able to deprecate this. + Prefer using ARB data + CHANGED_VALUE or I_MIX_GUID_DEPENDENCIES when possible instead. + + In 13.5 the split between a UI and render threads means that FORCE_RERENDER will now also have the needed + side effect of copying sequence_data state to the render project. This can be expensive if the sequence_data is large. + Support GET_FLATTENED_SEQUENCE_DATA to prevent deallocation of your sequence_data, which can help. + GET_FLATTENED_SEQUENCE_DATA support is required for FORCE_RERENDER use in custom mouse/key events. + + PF_OutFlag_PiPL_OVERRIDES_OUTDATA_OUTFLAGS + + Valid only for setting in your PiPL. When set out_flags will be + ignored at PF_Cmd_GLOBAL_SETUP time (& thus don't need to match). + + PF_OutFlag_I_HAVE_EXTERNAL_DEPENDENCIES + + Set this flag at PF_Cmd_GLOBAL_SETUP time if the effect has dependencies + that the user should know about before transporting their project to a + different machine. For example, dependencies on an installed font, + or on an external file. If set, the effect will receive a + PF_Cmd_GET_EXTERNAL_DEPENDENCIES request, where the extra + param will be a PF_ExtDependenciesExtra, and the effect should + report its information based on the given sequence_data. + + PF_OutFlag_SEND_UPDATE_PARAMS_UI + + Set this flag at PF_Cmd_GLOBAL_SETUP time if you want to receive + PF_Cmd_UPDATE_PARAMS_UI messages. + + PF_OutFlag_AUDIO_FLOAT_ONLY + + Set this flag if you only want to receive PF_SIGNED_FLOAT data + when processing audio data. Requires PF_OutFlag_AUDIO_EFFECT_TOO + or PF_OutFlag_AUDIO_EFFECT_ONLY. + + PF_OutFlag_AUDIO_IIR + + Set this flag at PF_Cmd_GLOBAL_SETUP time if you are an + Infinite-Impulse-Response audio filter (i.e. your output at a given + time depends on your output from previous times). + + PF_OutFlag_I_SYNTHESIZE_AUDIO + + Set this flag at PF_Cmd_GLOBAL_SETUP time if you generate + audio even when handed silence. Requires PF_OutFlag_AUDIO_EFFECT_TOO + or PF_OutFlag_AUDIO_EFFECT_ONLY. + + PF_OutFlag_AUDIO_EFFECT_TOO + + Must be set at PF_Cmd_GLOBAL_SETUP time for an effect that + wants to filter the audio too (as opposed to just reading the audio). + + PF_OutFlag_AUDIO_EFFECT_ONLY + + Must be set at PF_Cmd_GLOBAL_SETUP time for an effect + that only filters audio (no video). + + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + + Set this during PF_Cmd_GLOBAL_SETUP if the effect handles PF_Cmd_QUERY_DYNAMIC_FLAGS. + Supporting this command can dramatically improve performance for certain + effects, because it provides dynamic information to the host about what + can be cached (as opposed to PIPL bits which cannot be changed at run-time) + + PF_OutFlag2_I_USE_3D_CAMERA + + This bit must be set if the effect ever uses the AEGP PF_Interface suite to + access camera layers. Can be over-ridden dynamically during PF_Cmd_QUERY_DYNAMIC_FLAGS. + + PF_OutFlag2_I_USE_3D_LIGHTS + + This bit must be set if the effect ever uses the AEGP PF_Interface suite to + access camera layers. Can be over-ridden dynamically during PF_Cmd_QUERY_DYNAMIC_FLAGS. + + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG + + If you want a parameter group to honor the PF_ParamFlag_COLLAPSE_TWIRLY or + PF_ParamFlag_START_COLLAPSED flag, set this bit. Otherwise, all parameter + groups will be collapsed by default. + + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS + + Added for render optimizations; shrinks the input buffer passed to the effect to + exclude any empty pixels (where empty means "zero alpha" unless + PF_OutFlag2_REVEALS_ZERO_ALPHA is set, in which case RGB must be zero as well.) + The origin of the trimmed buffer can be found in in_data->pre_effect_source_origin. + Effects with both this flag and PF_OutFlag_I_EXPAND_BUFFER set may get called with + a null input buffer if their input is completely empty, and must be able to handle + this case without crashing. This flag can be cleared dynamically during + PF_Cmd_QUERY_DYNAMIC_FLAGS. + + PF_OutFlag2_REVEALS_ZERO_ALPHA + + The effect can take pixels with zero alpha and reveal the RGB data in them (like + our Set Channels effect). This tells After Effects not to trim such pixels when + determining the input for the effect. This flag can be cleared dynamically during + PF_Cmd_QUERY_DYNAMIC_FLAGS. + + PF_OutFlag2_I_AM_DEPRECATED + this effect is still available, and shows up under user-visible "Obsolete" category + in the UI. Setting this flag means "there's a better way to do this, but this effect + may still be useful in some situations". distinct from PF_OutFlag_I_AM_OBSOLETE in + that these will still show up in the GUI and the user can still apply them to new + projects. The category that is set by the effect is pretty much ignored, as it will + instead always go into the "Obsolete" category + + PF_OutFlag2_I_USE_TIMECODE + New in AE 9.0. The effect depends on the Composition's timecode or a layer's + source footage timecode. If the underlying timecode changes the effects will + be asked to rerender. + + PF_OutFlag2_AUTOMATIC_WIDE_TIME_INPUT + New in AE 10. Requires setting of PF_OutFlag_WIDE_TIME_INPUT (which allows you + to support old hosts), but effectively overrides that flag. When set, all + parameter checkouts are tracked so over-time dependencies are known by AE. Note + that if you use this new flag, and you cache any time-dependent data in your + sequence data (or anywhere else), you must validate that cache using the + new PF_HaveInputsChangedOverTimeSpan() before using it. + + This only works for smart effects (those that set PF_OutFlag2_SUPPORTS_SMART_RENDER). If you haven't + set that, After Effects will silently treat this as PF_OutFlag_WIDE_TIME_INPUT instead. + + To test that it's working, apply your effect with one parameter keyframed on every frame. + RAM Preview to fill the cache, then change one of the keyframes. The related frame and + all dependent frames (e.g. later frames, in the case of a simulation) should lose their + cache marks and require re-rendering. Simlarly, upstream changes to sources of layer + parameters should cause time-selective invalidation of the cache. + + PF_OutFlag2_DEPENDS_ON_UNREFERENCED_MASKS + Set this if you are going to look at paths that aren't directly referenced by a path + param, e.g. if you are going to draw a stroke on all masks. + + PF_OutFlag2_OUTPUT_IS_WATERMARKED + Set this if your output is going to be watermarked in some way that makes it unsuitable for + final use, probably because the user is using an unlicensed demo version. It is ok to change + this state during the course of app session, if e.g. a floating license status changes. + Plugin authors that actually do have this state changing asynchronously must be careful to + have the next render match the last state returned from QUERY_DYNAMIC_FLAGS otherwise race conditions + could cause incorrect frames to be cached. (This is a non-issue if you only change this in response + to DO_DIALOG.) + + PF_OutFlag2_I_MIX_GUID_DEPENDENCIES (new in 13.5) + Smart effects only. With this option, FORCE_RERENDER becomes a cache-savvy more efficient MAYBE rerender. + If custom UI or DO_DIALOG change sequence data, returning FORCE_RERENDER requests AE to check whether + rerender needs to occur. During PreRender, the effect uses the GuidMixInPtr callback to mix + any additional state that affects the render into our internal GUID for the cached frame. + AE can then tell whether the frame already exists and if so, no longer needs to render. + This also means that DO_DIALOG no longer always blows the cache and that undo works across DO_DIALOG. + Cancelation of DO_DIALOG no longer blows the cache either. + This also means that I_USE_* flags are now basically redundant since any dependency could be mixed in. + Just be sure to mix in everything that can uniquely affect resulting rendered pixels (that is not already + an AE stream parameter). But don't mixin things that are disabled and have no render effect (this + results in less cache efficiency). + + PF_OutFlag2_SUPPORTS_THREADED_RENDERING + Indicates the effect supports rendering on multiple threads at the same time. Single or multiple + applications of this effect on a layer can be called to render at the same time on multiple threads. + + UI selectors are still sent on the main thread, however Sequence Setup, Sequence Resetup, Sequence SetDown, + PreRender, and Render may be sent on multiple threads at the same time as the UI selectors are being handled + so all of these selectors must be thread safe. + + Global Setup and Global Setdown selectors are unaffected by this flag. Regardless whether this flag is set + or not, they will only be sent on the main thread, and will not be sent at the same time as any other selectors. + + If the effect sets PF_OutFlag_SEQUENCE_DATA_NEEDS_FLATTENING indicating the sequence data needs flattening + then it must also set PF_OutFlag2_SUPPORTS_GET_FLATTENED_SEQUENCE_DATA. + + sequence_data is read-only at render time and must be accessed with PF_EffectSequenceDataSuite. + in_data->sequence_data will be NULL during render. AEGP_ComputeCacheSuite is suggested if writing to + sequence_data at render time is needed for caching. This suite unifies cache entries so multiple threads do + not recompute the same cache value. If neither of these solutions work, see the next flag, + PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWER. + + PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWER + Indicates the effect needs sequence_data replicated for each render thread, thus allowing each render to have + sequence_data which can be written to. Note that changes to sequence_data will be discarded regularly, currently + after each span of frames is rendered such as single RAM Preview or Render Queue export. + +**/ + +enum { + PF_OutFlag_NONE = 0L, + + // which PF_Cmds each flag is relevant for: + PF_OutFlag_KEEP_RESOURCE_OPEN = 1L << 0, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_WIDE_TIME_INPUT = 1L << 1, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag_NON_PARAM_VARY = 1L << 2, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag_RESERVED6 = 1L << 3, + PF_OutFlag_SEQUENCE_DATA_NEEDS_FLATTENING = 1L << 4, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_I_DO_DIALOG = 1L << 5, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_USE_OUTPUT_EXTENT = 1L << 6, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_SEND_DO_DIALOG = 1L << 7, // PF_Cmd_SEQUENCE_SETUP + PF_OutFlag_DISPLAY_ERROR_MESSAGE = 1L << 8, // all PF_Cmds + PF_OutFlag_I_EXPAND_BUFFER = 1L << 9, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_PIX_INDEPENDENT = 1L << 10, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag_I_WRITE_INPUT_BUFFER = 1L << 11, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_I_SHRINK_BUFFER = 1L << 12, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_WORKS_IN_PLACE = 1L << 13, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_RESERVED8 = 1L << 14, + PF_OutFlag_CUSTOM_UI = 1L << 15, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_RESERVED7 = 1L << 16, + PF_OutFlag_REFRESH_UI = 1L << 17, // PF_Cmd_EVENT, PF_Cmd_RENDER, PF_Cmd_DO_DIALOG + PF_OutFlag_NOP_RENDER = 1L << 18, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_I_USE_SHUTTER_ANGLE = 1L << 19, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag_I_USE_AUDIO = 1L << 20, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_I_AM_OBSOLETE = 1L << 21, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_FORCE_RERENDER = 1L << 22, // PF_Cmd_EVENT, PF_Cmd_USER_CHANGED_PARAM, PF_Cmd_UPDATE_PARAMS_UI + PF_OutFlag_PiPL_OVERRIDES_OUTDATA_OUTFLAGS = 1L << 23, // PiPL-only-flag + PF_OutFlag_I_HAVE_EXTERNAL_DEPENDENCIES = 1L << 24, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_DEEP_COLOR_AWARE = 1L << 25, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_SEND_UPDATE_PARAMS_UI = 1L << 26, // PF_Cmd_GLOBAL_SETUP + + // audio flags (PF_OutFlag_AUDIO_EFFECT_TOO or PF_OutFlag_AUDIO_EFFECT_ONLY required for audio effects) + PF_OutFlag_AUDIO_FLOAT_ONLY = 1L << 27, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_AUDIO_IIR = 1L << 28, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_I_SYNTHESIZE_AUDIO = 1L << 29, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_AUDIO_EFFECT_TOO = 1L << 30, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag_AUDIO_EFFECT_ONLY = 1L << 31 // PF_Cmd_GLOBAL_SETUP +}; +typedef A_long PF_OutFlags; + +enum { + PF_OutFlag2_NONE = 0L, + // which PF_Cmds each flag is relevant for: + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS = 1L << 0, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_I_USE_3D_CAMERA = 1L << 1, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_I_USE_3D_LIGHTS = 1L << 2, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG= 1L << 3, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_I_AM_THREADSAFE = 1L << 4, // PF_Cmd_GLOBAL_SETUP (unused) + PF_OutFlag2_CAN_COMBINE_WITH_DESTINATION = 1L << 5, // Premiere only (as of AE 6.0) + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS = 1L << 6, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_REVEALS_ZERO_ALPHA = 1L << 7, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_PRESERVES_FULLY_OPAQUE_PIXELS = 1L << 8, // Premiere only (as of AE 6.0) + PF_OutFlag2_SUPPORTS_SMART_RENDER = 1L << 10, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_RESERVED9 = 1L << 11, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_FLOAT_COLOR_AWARE = 1L << 12, // PF_Cmd_GLOBAL_SETUP, may require PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_I_USE_COLORSPACE_ENUMERATION = 1L << 13, // PF_Cmd_GLOBAL_SETUP, not implemented in AE7 (may be impl in Premiere Pro) + PF_OutFlag2_I_AM_DEPRECATED = 1L << 14, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_PPRO_DO_NOT_CLONE_SEQUENCE_DATA_FOR_RENDER = 1L << 15, // PF_Cmd_GLOBAL_SETUP, Premiere only, CS4.1 and later + PF_OutFlag2_RESERVED10 = 1L << 16, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_AUTOMATIC_WIDE_TIME_INPUT = 1L << 17, // PF_Cmd_GLOBAL_SETUP, falls back to PF_OutFlag_WIDE_TIME_INPUT if not PF_OutFlag2_SUPPORTS_SMART_RENDER + PF_OutFlag2_I_USE_TIMECODE = 1L << 18, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_DEPENDS_ON_UNREFERENCED_MASKS = 1L << 19, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_OUTPUT_IS_WATERMARKED = 1L << 20, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_QUERY_DYNAMIC_FLAGS + PF_OutFlag2_I_MIX_GUID_DEPENDENCIES = 1L << 21, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_AE13_5_THREADSAFE = 1L << 22, // PF_Cmd_GLOBAL_SETUP (unused) + PF_OutFlag2_SUPPORTS_GET_FLATTENED_SEQUENCE_DATA = 1L << 23, // PF_Cmd_GLOBAL_SETUP, support required if both PF_OutFlag_SEQUENCE_DATA_NEEDS_FLATTENING and PF_OutFlag2_SUPPORTS_THREADED_RENDERING is set + PF_OutFlag2_CUSTOM_UI_ASYNC_MANAGER = 1L << 24, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_SUPPORTS_GPU_RENDER_F32 = 1L << 25, // PF_Cmd_GLOBAL_SETUP, PF_Cmd_GPU_DEVICE_SETUP. Must also set PF_RenderOutputFlag_GPU_RENDER_POSSIBLE at pre-render to enable GPU rendering. + PF_OutFlag2_RESERVED12 = 1L << 26, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_SUPPORTS_THREADED_RENDERING = 1L << 27, // PF_Cmd_GLOBAL_SETUP + PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWER = 1L << 28 // PF_Cmd_GLOBAL_SETUP +}; +typedef A_long PF_OutFlags2; + + +/** -------------------- Input Flags -------------------- + + The in_flags field of the InData can be set to an OR-ed + combination of these flags to communicate various things from AE to an effect plugin + The flags are described here: + + PF_InFlag_NONE + This is the "empty" setting -- no inflags. + + PF_InFlag_PROJECT_IS_RENDER_ONLY (since 13.5) + + For efficiency, if a plugin sets up UI that is not used in render, this flag + can be tested to skip that step when an effect is being RESETUP for render only. + Effect instances with this flag on in RESETUP are in read-only AE projects and will not receive UI related selectors. + + This is an optimization hint. If you don't make such optimizations in render your plugin should still work. + + This flag should generally not be used to suppress errors in render. Errors should still be reported as usual via AE standard mechanisms, + and AE will then handle the differences in context reporting. + + If this is off, UI should be set up normally (and the effect could also be running in an earlier version of + AE that assumed render and UI on the same effect instance.) + +**/ + +enum { + PF_InFlag_NONE = 0L, + PF_InFlag_PROJECT_IS_RENDER_ONLY = 1L << 0 // since 13.5 and only in PF_Cmd_SEQUENCE_RESETUP +}; +typedef A_long PF_InFlags; + + + + + +/** -------------------- Command Selectors -------------------- + + The first parameter to the effect routine is one of t hese command + selectors. The commands are described here. + + PF_Cmd_ABOUT + This command should display an information dialog box about the + effect module. The easiest thing to do is PF_SPRINTF the info + into the out_data->return_msg field. After Effects will bring + up a simple undecorated modal dialog with your text proudly displayed. + This command can be sent at _any_ time, so don't count on having + any global data or anything else set. (Except, as always, the + current resource file will be set to your effects module.) + + PF_Cmd_GLOBAL_SETUP + When you get this command, you should check the version of the + effect protocol with which you are being invoked, and set any of + the necessary out flags (described above) or out data fields + (described below). If your global data was flattened, the flat + data will be passed here and you should unflatten it, free the + flat global data, and set the OutData global_data to the new un-flat + data. Alternatively, the global data may come in NULL and you can + allocate new global data at this time. + + PF_Cmd_GLOBAL_SETDOWN + You should free any global data you have allocated when you get + this command. + + PF_Cmd_PARAMS_SETUP + Here you should add any params your effect wants using the + PF_ADD_PARAM callback described below. This is called after global + setup -- see the add_param callback described below. + + PF_Cmd_SEQUENCE_SETUP + This is called when the effect is first applied to a layer. + A sequence is a series of images that will usually be all be of the same + size and in the same context. You can allocate sequence data + at this time -- many more input fields are defined at this time. + See the PF_InData description below. + + As of 13.5 this only happens on the UI thread. + Except for legacy (no GET_FLATTENED_SEQUENCE_DATA) effects that do I_DO_DIALOG which can still hit this in render. + + PF_Cmd_SEQUENCE_RESETUP + This call is made to unflatten flattened sequence data. + There are at least three cases when this can happen: + 1) after the sequence data is written to disk, 2) after the + sequence data is read in from disk, 3) after a duplicate + is made (called on both original and the new sequence). + + This can happen in UI or Render thread (13.5), the effect must handle + initialization of a NULL sequence_data input if needed. See also PF_InFlag_PROJECT_IS_RENDER_ONLY. + + PF_Cmd_SEQUENCE_FLATTEN + This call is made to flatten unflat sequence data so it can be + cached to disk. After the data is flattened, free the un-flat data + and set the out_data->sequence_data to the new flat data. + If you don't want your sequence handle written to disk, you + can set it to NULL (after disposing it) at this time. Presumably + you would then reallocate it at another time. + + This command will be sent when saving and when duplicating + the sequence. + + PF_Cmd_GET_FLATTENED_SEQUENCE_DATA (new in 13.5) + Returns an independent allocation of the sequence data which can be written + to disk or used to initialise or update other instances of the effect plug-in. + + The host calls this command to serialize the sequence data without + having to flatten and resetup the UI plug-in as was legacy practice. (However, at present effects + still may need flattening in render if the sequence_data is about to be assigned.) + + An effect that implements GET_FLATTENED_SEQUENCE_DATA will only receive SEQUENCE_SETUP on the UI thread. + SEQUENCE_RESETUP can happen on either thread. Make sure you handle a NULL sequence_data in RESETUP. + (Without GET_FLATTENED, a legacy effect may still get SEQUENCE_SETUP in render but DO_DIALOG will not be called.) + + Also when enabled, this means that the effect is guaranteed to get a + SEQUENCE_SETDOWN cmd to dispose the effect's sequence_data (previously + it was possible for AE to bypass this if the sequence_data was flat, + but that lead to SEQUENCE_SETUP/SETDOWN imbalances for some plugins. + The imbalance should not happen when using this flag, but the plugin must + handle being called on SETDOWN with possibly flat data. For example, + try copy and pasting an effect onto itself. + + Support for this command is indicated by setting + PF_OutFlag2_SUPPORTS_GET_FLATTENED_SEQUENCE_DATA + + The ownership of the returned handle is transferred to the host. + + PF_Cmd_SEQUENCE_SETDOWN + You should free any sequence data you have allocated when you + get this command. + + PF_Cmd_DO_DIALOG + This command indicated that the Options button or command has + been selected and the effect should bring up its options dialog. + This command will only be sent it the effect has indicated that + it has an options dialog with PF_OutFlag_I_DO_DIALOG. This + command will automatically be sent once upon applying the filter + if PF_OutFlag_SEND_DO_DIALOG is set in SEQUENCE_SETUP. + + PF_Cmd_FRAME_SETUP + This is called immediately before each frame is invoked. You + can allocate frame data at this time, if you wish, or you can + just wait for the RENDER which will immediately follow. + + PF_Cmd_RENDER + This is the call to render the frame. All fields in the in_data + will be valid at this time and you can inquire parameters or + what-have-you. This should set the output frame with the new + image data. This is the main action command. + + PF_Cmd_FRAME_SETDOWN + If you allocated data in PF_Cmd_FRAME_SETUP, this is the time + to free it and clean up after rendering the frame. + + PF_Cmd_USER_CHANGED_PARAM + This command will be sent if you set the PF_ParamFlag_SUPERVISE + flag for a param. This allows you to modify the params array contents to + control values or make one control affect others, including arbitrary + data. This command will be sent whenever the user interacts with a + standard param controller that has PF_ParamFlag_SUPERVISE + set. + + The "extra" field will be a pointer to a PF_UserChangedParamExtra structure + which contains the param_index of the changed parameter. + + You can return PF_ChangeFlag_CHANGED_VALUE and/or call PF_UpdateParamUI() + for any param. + + PF_Cmd_UPDATE_PARAMS_UI + This command will be sent when the Effect Controls Window (ECW) + needs to updated (e.g. after opening the ECW or moving the comp to + a new time) if you have set PF_OutFlag_SEND_UPDATE_PARAMS_UI at + global setup time. + + This gives you a chance to call PF_UpdateParamUI() to modify certain + ui fields for the params. See the doc for PF_UpdateParamUI() + to see which fields can be modified. + + WARNING: When handling PF_Cmd_UPDATE_PARAMS_UI, you can call + PF_UpdateParamUI() for any param(s), but not PF_ChangeFlag_CHANGED_VALUE -- + only cosmetic changes can be made in response to this command. + + PF_Cmd_QUERY_DYNAMIC_FLAGS + This command will be sent at arbitrary times if PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS + is set during global setup. During this call the effect may examine the values + of its parameters at the current time (except layer parameters) by checking them out, + and decide whether any of the flags that support PF_Cmd_QUERY_DYNAMIC_FLAGS should be set. + + The appropriate flags must be set in out_data->out_flags and out_data->out_flags2 before + returning. The effect must decide what information is necessary to render a frame at + the current time, given only the values of parameters at that time. Clearing the + appropriate bits when possible can result in great performance improvements, but + incorrectly clearing bits will result in caching bugs, and you won't like that. Nope. + +**/ +enum { /* The order of this enumeration must not be altered! */ + PF_Cmd_ABOUT = 0, /* about can be called at any time */ + PF_Cmd_GLOBAL_SETUP, /* check versions, cpu, serial #, etc. always */ + PF_Cmd_UNUSED_0, + PF_Cmd_GLOBAL_SETDOWN, + PF_Cmd_PARAMS_SETUP, /* add parameters here */ + PF_Cmd_SEQUENCE_SETUP, + PF_Cmd_SEQUENCE_RESETUP, /* if part of in_data changed */ + PF_Cmd_SEQUENCE_FLATTEN, /* prepare handle to be written to disk */ + PF_Cmd_SEQUENCE_SETDOWN, + PF_Cmd_DO_DIALOG, /* called after SEQUENCE_SETUP only if effect requests */ + PF_Cmd_FRAME_SETUP, + PF_Cmd_RENDER, + PF_Cmd_FRAME_SETDOWN, + +/* most of these command types make use of the 'extra' field */ + + PF_Cmd_USER_CHANGED_PARAM, /* user just changed a param value, extra contains ptr to PF_UserChangedParamExtra */ + PF_Cmd_UPDATE_PARAMS_UI, /* UI fields in paramdefs need to be refreshed according to new values, no extra info */ + PF_Cmd_EVENT, /* handle some event. extra contains a ptr to a relevant structure */ + PF_Cmd_GET_EXTERNAL_DEPENDENCIES, /* new in AE4.1: return text description of things like fonts, etc. in PF_ExtDependenciesExtra */ + PF_Cmd_COMPLETELY_GENERAL, /* new in AE4.1: Used for completely general effect calls via AEGP */ + + PF_Cmd_QUERY_DYNAMIC_FLAGS, /* new in AE5.0: allows effect to control certain flags based on parameter values */ + + PF_Cmd_AUDIO_RENDER, /* For Audio Effects */ + PF_Cmd_AUDIO_SETUP, + PF_Cmd_AUDIO_SETDOWN, + + PF_Cmd_ARBITRARY_CALLBACK, /* used for arbitrary data, passes PF_ArbParamsExtra * in extra */ + + PF_Cmd_SMART_PRE_RENDER, /* used with Smart Render effect interface */ + PF_Cmd_SMART_RENDER, + + PF_Cmd_RESERVED1, /* private command */ + PF_Cmd_RESERVED2, /* private command */ + PF_Cmd_RESERVED3, /* private command */ + + PF_Cmd_GET_FLATTENED_SEQUENCE_DATA, + PF_Cmd_TRANSLATE_PARAMS_TO_PREFS, + + PF_Cmd_RESERVED4, /* private command */ + PF_Cmd_SMART_RENDER_GPU, /* used when rendering on the GPU */ + PF_Cmd_GPU_DEVICE_SETUP, + PF_Cmd_GPU_DEVICE_SETDOWN, + + PF_Cmd_NUM_CMDS +}; +typedef A_long PF_Cmd; + + +/** -------------------- Simple Types -------------------- +**/ + +typedef struct _PF_LayerAudio *PF_LayerAudio; + +typedef void *PF_SndSamplePtr; + +/* The following is an opaque type you pass to callback routines */ +struct PF_ProgressInfo; +typedef struct PF_ProgressInfo *PF_ProgPtr; + +typedef A_long PF_ParamValue; + +typedef struct { + A_short major; + A_short minor; +} PF_SpecVersion; + +typedef A_long PF_ParamIndex; + +typedef A_u_long PF_UFixed; + +#ifndef A_INTERNAL + + #if defined(_WINDOWS) || defined(__ANDROID__) + + typedef A_long PF_Fixed; + typedef A_char PF_Boolean; + typedef void **PF_Handle; + + typedef struct { + A_short v; + A_short h; + } PF_LegacyPoint; + + typedef struct { + A_short top, left, bottom, right; + } PF_LegacyRect; + + #else + + typedef Fixed PF_Fixed; + typedef Boolean PF_Boolean; + typedef Handle PF_Handle; + + #endif + + typedef struct { + #ifdef LPOINT_RENAME_COMPONENTS + A_long x; + A_long y; + #else + A_long h; + A_long v; + #endif + } PF_Point; + + typedef struct { + A_long left, top, right, bottom; + } PF_LRect; + + typedef PF_LRect PF_Rect; + + typedef PF_Rect PF_UnionableRect; + + typedef struct { + A_long num; /* numerator */ + A_u_long den; /* denominator */ + } PF_RationalScale; + +#endif + +#define PF_Fixed_MINVAL ((PF_Fixed)0x80000000) // Maximally negative value +#define PF_Fixed_MAXVAL ((PF_Fixed)0x7fffffff) // Maximally positive value + + +typedef struct { + PF_Fixed x, y; +} PF_FixedPoint; + +typedef struct { + PF_Fixed left, top, right, bottom; +} PF_FixedRect; + +typedef struct { + PF_Fixed mat[3][3]; +} PF_Matrix; + + +#ifndef A_INTERNAL + + // Basic pixel defn's + typedef struct { + A_u_char alpha, red, green, blue; + } PF_Pixel; + + typedef PF_Pixel PF_Pixel8; + typedef PF_Pixel PF_UnionablePixel; + + typedef struct { + #ifdef PF_PIXEL16_RENAME_COMPONENTS + // this style is useful for debugging code converted from 8 bit + A_u_short alphaSu, redSu, greenSu, blueSu; + #else + A_u_short alpha, red, green, blue; + #endif + } PF_Pixel16; + + typedef A_FpShort PF_FpShort; + typedef A_FpLong PF_FpLong; + + typedef struct { + PF_FpShort alpha, red, green, blue; + } PF_PixelFloat, PF_Pixel32; + + typedef struct { + PF_FpLong mat[3][3]; + } PF_FloatMatrix; + +#endif + + +typedef A_u_long PF_PixLong; + +typedef struct _PF_PixelOpaque *PF_PixelOpaquePtr; + +#ifdef PF_DEEP_COLOR_AWARE + typedef PF_PixelOpaquePtr PF_PixelPtr; +#else + typedef PF_Pixel *PF_PixelPtr; +#endif + + + +#define PF_HUE_UNDEFINED 0x80000000 + +typedef PF_Fixed PF_RGB_Pixel[3]; +typedef PF_Fixed PF_YIQ_Pixel[3]; +typedef PF_Fixed PF_HLS_Pixel[3]; + + + + +/** -------------------- Pixel Access Macros -------------------- + + If you're using the PF_PixLong struct for pixel representation, + you can use these macros to guarantee correct channel access + for a given pixel. + +**/ + +#define PF_PixLong_ALPHA(pl) ((A_u_char)(0xff & ((pl) >> 24))) +#define PF_PixLong_RED(pl) ((A_u_char)(0xff & ((pl) >> 16))) +#define PF_PixLong_GREEN(pl) ((A_u_char)(0xff & ((pl) >> 8))) +#define PF_PixLong_BLUE(pl) ((A_u_char)(0xff & (pl))) + +#define PF_SET_PixLong_ALPHA(pl, v) (pl)&=0x00ffffff, (pl)|=((A_long)(v)<<24) +#define PF_SET_PixLong_RED(pl, v) (pl)&=0xff00ffff, (pl)|=((A_long)(v)<<16) +#define PF_SET_PixLong_GREEN(pl, v) (pl)&=0xffff00ff, (pl)|=((A_long)(v)<<8) +#define PF_SET_PixLong_BLUE(pl, v) (pl)&=0xffffff00, (pl)|=(0xff & (v)) +#define PF_MAKE_PixLong(a, r, g, b) \ + ((PF_PixLong)(((A_long)(a)<<24) | ((A_long)(r)<<16) | ((A_long)(g)<<8) | (b))) + + + +/*********************** multi-channel data *********************/ + +/** + ** the kinds of multichannels we understand + **/ +#define PF_ChannelType_DEPTH 'DPTH' +#define PF_ChannelType_DEPTHAA 'DPAA' // since 16.0 for 3D Precomp in some Artisans +#define PF_ChannelType_NORMALS 'NRML' +#define PF_ChannelType_OBJECTID 'OBID' +#define PF_ChannelType_MOTIONVECTOR 'MTVR' +#define PF_ChannelType_BK_COLOR 'BKCR' +#define PF_ChannelType_TEXTURE 'TEXR' +#define PF_ChannelType_COVERAGE 'COVR' +#define PF_ChannelType_NODE 'NODE' +#define PF_ChannelType_MATERIAL 'MATR' +#define PF_ChannelType_UNCLAMPED 'UNCP' +#define PF_ChannelType_UNKNOWN 'UNKN' + +typedef A_long PF_ChannelType; + + +/** + ** These are the elementary data types we understand. + ** By convention we reserve the last characters of the type + ** to designate the size in bytes of a plane of data. This together + ** with the dimension tells us the size of each pixel. + ** For example, data of PF_ChannelType_COLOR with PF_DataType_DOUBLE would + ** consist of 32 bytes per pixel. + **/ +#define PF_DataType_FLOAT 'FLT4' /* 4 byte */ +#define PF_DataType_DOUBLE 'DBL8' /* 8 byte */ +#define PF_DataType_LONG 'LON4' /* 4 bytes */ +#define PF_DataType_SHORT 'SHT2' /* 2 bytes */ +#define PF_DataType_FIXED_16_16 'FIX4' /* 4 bytes */ +#define PF_DataType_CHAR 'CHR1' /* 1 byte */ +#define PF_DataType_U_BYTE 'UBT1' /* 1 byte */ +#define PF_DataType_U_SHORT 'UST2' /* 2 bytes */ +#define PF_DataType_U_FIXED_16_16 'UFX4' /* 4 bytes */ +#define PF_DataType_RGB 'RBG ' /* 3 bytes */ + +typedef A_long PF_DataType; + + + + + +/** + ** for enumerating over all the channels + **/ +typedef A_long PF_ChannelIndex; + + + + + +/** + ** a description of the channel + ** use this when iterating through channels to determine + ** the characteristics of the channel + ** + **/ +#define PF_CHANNEL_NAME_LEN 63 + +typedef struct { + PF_ChannelType channel_type; + A_char name[PF_CHANNEL_NAME_LEN+1]; + PF_DataType data_type; + A_long dimension; // the number of data per pixel +} PF_ChannelDesc; // eg 3 for normals + + + + + +/** + ** the opaque type representing the channel data + **/ +typedef struct { + A_intptr_t opaque[8]; +} PF_ChannelRef, *PF_ChannelRefPtr; + + + + + + +/** + ** the channel data parallels the image data in size and shape. + ** the width is the number of pixels, the height is the number of scanlines + ** the height is image_height + ** the dimension is the number of planes in a pixel + ** the row_bytes is the length of a scanline in bytes + ** the data type is the type of data in a plane + ** Note : a pixel consists of dimensionL * sizeof(data_type) bytes + ** dataH is a handle to the data. + ** dataPV is a pointer to the dereferenced locked handle + ** effects should always have dataPV non null. + **/ +typedef struct { + PF_ChannelRef channel_ref; + A_long widthL; + A_long heightL; + A_long dimensionL; + A_long row_bytesL; + PF_DataType data_type; + PF_Handle dataH; + void *dataPV; +} PF_ChannelChunk; + + + +/** -------------------- Effect Parameter Description Structures -------------------- + + In general each structure is divided into two parts: + a) description of the parameter + b) setting of parameter at the current invocation time + + A number of these structures end in A_char*, A_char[] unions. These + structures are "flattened" between the add_param callback (in which + the A_char * should be used) and the read-only values accessible when + the effect is later invoked (at which time the A_char [] is used and + the string data is concatenated right at the end of the struct). + +**/ + + +enum { + PF_LayerDefault_MYSELF = -1, /* default to this layer */ + PF_LayerDefault_NONE = 0 /* default to no layer */ +}; + +/** Layer -- PF_Param_LAYER + + Layer parameters represent movie or image layers in the composition. + All effects automatically have 1 layer param, param[0], which is the + layer to which they have been applied. Some effects may have additional + layer parameters to do compound effects or multi-channel effects. If + your effects module has a layer parameter other than the param[0] default, + you will have to call the checkout_param callback to access the contents + of that layer. There is a special case for all layer params (except the + param[0] automatic layer) which is that the user can set them to , + indicating that no layer is selected. The effect can detect this, because + the checkout_param callback will not return an error, but the "data" pointer + in the returned LayerDef struct will be NULL. For the NULL-layers, the + effect should attempt some logical interpretation, like pretending there + is an all alpha-zero layer or perhaps just using param[0]. + +**/ + +#ifndef A_INTERNAL + + + +typedef struct PF_LayerDef { + /* PARAMETER VALUE */ + + void *reserved0; + void *reserved1; + + PF_WorldFlags world_flags; + + PF_PixelPtr data; + + A_long rowbytes; + A_long width; + A_long height; + PF_UnionableRect extent_hint; + /* For source, extent_hint is the smallest rect encompassing all opaque + * (non-zero alpha) areas of the layer. For output, this encompasses + * the area that needs to be rendered (i.e. not covered by other layers, + * needs refreshing, etc.). if your plug-in varies based on extent (like + * a diffusion dither, for example) you should ignore this param and + * render the full frame each time. + */ + void *platform_ref; /* unused since CS5 */ + + A_long reserved_long1; + + void *reserved_long4; + + PF_RationalScale pix_aspect_ratio; /* pixel aspect ratio of checked out layer */ + + void *reserved_long2; + + A_long origin_x; /* origin of buffer in layer coords; smart effect checkouts only */ + A_long origin_y; + + A_long reserved_long3; + + /* PARAMETER DESCRIPTION */ + A_long dephault; /* use a PF_LayerDefault constant defined above */ + +} PF_LayerDef; + + + +typedef PF_LayerDef PF_EffectWorld; + +#endif + +#ifdef PF_USE_OLD_WORLD /* set this for source code compatibility with older effects */ + typedef PF_EffectWorld PF_World; +#endif + +enum { + PF_UNSIGNED_PCM = 0, + PF_SIGNED_PCM = 1, + PF_SIGNED_FLOAT = 2 +}; +typedef A_short PF_SoundFormat; + + +// Sound encoding is always SIGNED +enum { + PF_SSS_1 = 1, + PF_SSS_2 = 2, + PF_SSS_4 = 4 +}; +typedef A_short PF_SoundSampleSize; // in bytes + +enum { + PF_Channels_MONO = 1, + PF_Channels_STEREO = 2 +}; +typedef A_short PF_SoundChannels; + + +typedef struct { + PF_FpLong rateF; + PF_SoundChannels num_channels; + PF_SoundFormat format; + PF_SoundSampleSize sample_size; +} PF_SoundFormatInfo; + +typedef struct { + PF_SoundFormatInfo fi; + A_long num_samples; + void *dataP; +} PF_SoundWorld; + + + +enum { + PF_ValueDisplayFlag_NONE = 0, + PF_ValueDisplayFlag_PERCENT = 1 << 0, // append % to value display for A_FpShort sliders (for fixed-point sliders, also maps range into 0-100%) + PF_ValueDisplayFlag_PIXEL = 1 << 1, // assume 0..1 is a pixel value, either 0..255, 0..32768, or 0..1.0 in UI (value will always be 0..1), + PF_ValueDisplayFlag_RESERVED1 = 1 << 2, // reserved for After Effects + PF_ValueDisplayFlag_REVERSE = 1 << 3 // presentation negates values. eg: a true -5 would be presented as "5", and typing in "22" would store in the model as -22 +}; + +#define PF_VALUEFLAG_IS_PERCENT(A) (((A) & PF_ValueDisplayFlag_PERCENT) != 0) +#define PF_VALUEFLAG_IS_PIXEL(A) (((A) & PF_ValueDisplayFlag_PIXEL) != 0) +#define PF_VALUEFLAG_IS_REVERSED(A) (((A) & PF_ValueDisplayFlag_REVERSE) != 0) + +typedef A_short PF_ValueDisplayFlags; + + +/** Slider -- PF_Param_SLIDER +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_ParamValue value; + A_char value_str[PF_MAX_PARAM_VALUE_LEN + 1]; /* string for value */ + A_char value_desc[PF_MAX_PARAM_DESCRIPTION_LEN + 1]; /* qualitative descr */ + + /* PARAMETER DESCRIPTION */ + PF_ParamValue valid_min, valid_max; /* acceptable input range */ + PF_ParamValue slider_min, slider_max; /* range represented by width of slider */ + PF_ParamValue dephault; +} PF_SliderDef; + + +/** Fixed Point Slider -- PF_Param_FIX_SLIDER +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_Fixed value; + A_char value_str[PF_MAX_PARAM_VALUE_LEN + 1]; /* string for value */ + A_char value_desc[PF_MAX_PARAM_DESCRIPTION_LEN + 1]; /* qualitative descr */ + + /* PARAMETER DESCRIPTION */ + PF_Fixed valid_min, valid_max; /* acceptable input range */ + PF_Fixed slider_min, slider_max; /* range represented by width of slider */ + PF_Fixed dephault; + A_short precision; /* decimal places to display */ + PF_ValueDisplayFlags display_flags; /* set bit to 1 to enable special display: + * --> bit 0 == append percent sign + */ +} PF_FixedSliderDef; + + +#define AEFX_AUDIO_DEFAULT_CURVE_TOLERANCE 0.05f + + +enum { + PF_FSliderFlag_NONE = 0, + PF_FSliderFlag_WANT_PHASE = 1L << 0 /* works for audio effects only */ +}; +typedef A_u_long PF_FSliderFlags; + +/** Floating Point Slider -- PF_Param_FLOAT_SLIDER +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_FpLong value; + PF_FpLong phase; /* used for PF_FSliderFlag_WANT_PHASE */ + A_char value_desc[PF_MAX_PARAM_DESCRIPTION_LEN + 1]; /* qualitative descr */ + + /* PARAMETER DESCRIPTION */ + PF_FpShort valid_min, valid_max; /* acceptable input range */ + PF_FpShort slider_min, slider_max; /* range represented by width of slider */ + PF_FpShort dephault; + A_short precision; /* decimal places to display */ + PF_ValueDisplayFlags display_flags; /* set bit to 1 to enable special display: + * --> bit 0 == append percent sign + */ + PF_FSliderFlags fs_flags; + PF_FpShort curve_tolerance; /* used for subdividing audio effects + set to zero for default, or non-audio */ + + /* next 2 fields are used in Premiere Pro and ignored in AE */ + PF_Boolean useExponent; /* use exponential value display */ + PF_FpShort exponent; /* typical values from 0.01 to 100 */ +} PF_FloatSliderDef; + + +/** Angle -- PF_Param_ANGLE +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_Fixed value; /* degrees with fixed point accuracy; + * this is NOT limited in range to 0 to 360. + */ + + /* PARAMETER DESCRIPTION */ + PF_Fixed dephault; + + /* Min and max values. Note!! Not supported for effect plugins. + ** Angle properties in effects are always unlimited in range. + */ + PF_Fixed valid_min, valid_max; +} PF_AngleDef; + + +/** CheckBox -- PF_Param_CHECKBOX +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_ParamValue value; + + /* PARAMETER DESCRIPTION */ + PF_Boolean dephault; + A_char reserved; /* padding */ + A_short reserved1; + union { + const A_char *nameptr; + } u; +} PF_CheckBoxDef; + + +/** Color -- PF_Param_COLOR +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_UnionablePixel value; + + /* PARAMETER DESCRIPTION */ + PF_UnionablePixel dephault; +} PF_ColorDef; + + +/** Point -- PF_Param_POINT + + The values for the point use the source's coordinate system, with the + origin at the top left. The values are expressed in fixed point, with + 16 bits of fractional precision (out of a total of 32 bits). + + The dephaults (sorry) are expressed as percentages (with 16 bits of + fraction) with the origin at the top left. The percent can be negative, + but should not be smaller than -600%. It should not be greater than 600%. + + If restrict_bounds is TRUE, the user will not be allowed to specify + points outside the bounds of the layer to which they are applying the + effect. If this is TRUE, the dephaults should be between 0.0 and 100.0. + +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_Fixed x_value; + PF_Fixed y_value; + + /* PARAMETER DESCRIPTION */ + A_char reserved[3]; + PF_Boolean restrict_bounds; /* restrict bounds to size of src */ + PF_Fixed x_dephault; /* percentage */ + PF_Fixed y_dephault; /* percentage */ +} PF_PointDef; + + +/** 3D Point -- PF_Param_POINT_3D + + Just like POINT, with an extra dimension. Supported in AE starting with version 10.5 (CS 5.5). + +**/ +typedef struct { + /* PARAMETER VALUE */ + PF_FpLong x_value; + PF_FpLong y_value; + PF_FpLong z_value; + + /* PARAMETER DESCRIPTION */ + PF_FpLong x_dephault; /* percentage of layer width; note: use 50 for halfway, not 0.5; this matches the old PF_PointDef behavior */ + PF_FpLong y_dephault; /* percentage of layer height */ + PF_FpLong z_dephault; /* percentage of layer _height_ (since typical layers are zero depth) */ + + char reserved[16]; /* set to zeros */ +} PF_Point3DDef; + +/** Popup Menu -- PF_Param_POPUP + ** + ** can also be used as a radio-button group in some hosts + ** when PF_PUI_RADIO_BUTTON is set + ** + **/ +typedef struct { + /* PARAMETER VALUE */ + PF_ParamValue value; + + /* PARAMETER DESCRIPTION */ + A_short num_choices; + A_short dephault; + union { + const A_char *namesptr; /* menu manager standard, '|' separator */ + } u; +} PF_PopupDef; + + +/** Momentary Buttons -- PF_Param_BUTTON + ** + ** supported by AE starting with CS 5.5 (AE 10.5); may be supported in other hosts + ** + **/ +typedef struct { + /* PARAMETER VALUE */ + PF_ParamValue value; // not used at this time + + union { + const A_char *namesptr; /* button name */ + } u; +} PF_ButtonDef; + + + + +enum { + PF_PathID_NONE = 0 +}; +typedef A_u_long PF_PathID; + + +enum { + PF_MaskMode_NONE = 0, // mask shape does nothing + PF_MaskMode_ADD, // shape is added into mask (normal behavior (really screen!)) + PF_MaskMode_SUBTRACT, + PF_MaskMode_INTERSECT, + PF_MaskMode_LIGHTEN, + PF_MaskMode_DARKEN, + PF_MaskMode_DIFFERENCE, + PF_MaskMode_ACCUM, // real add, not screen (not exposed in UI!) + + PF_NUM_MASKMODES +}; +#define PF_NUM_USER_MASKMODES (PF_NUM_MASKMODES - 1) +typedef A_long PF_MaskMode; + + + +/** Path -- PF_Param_PATH + + Path parameters give access to the mask/path/shapes of the layer on which + the effect is applied. For more information + on how to use these paths, see the PF_PathQuerySuite, and the PF_PathDataSuite + in AE_EffectSuites.h + +**/ +typedef struct PF_PathDef { + + /* PARAMETER VALUE */ + PF_PathID path_id; /* to be used with PF_CheckoutPath() + note that path_id != PF_PathID_NONE does not + guarantee that PF_CheckoutPath will return a + valid path (it may have been deleted) */ + + /* PARAMETER DESCRIPTION */ + A_long reserved0; /* not currently used, set to zero */ + + A_long dephault; /* 0 means that the default is NONE, + other numbers are the 1-based index of the + path, if the path doesn't exist, the + path_idLu value will be PF_PathID_NONE. + */ +} PF_PathDef; + + +/* --------------------- ARBITRARY DATA ----------------------------------- + * new arbitrary data type - you supply functions for various activities + * needed by After Effects to manipulate your arbitrary data. + */ + +typedef PF_Handle PF_ArbitraryH; + + +typedef struct { + A_short id; /* for effect use: lets effect distinguish between */ + /* different arbitrary data param types in the same effect */ + A_short pad; /* padding, set to zero */ + PF_ArbitraryH dephault; /* becomes owned by host at ADD_PARAM time */ + PF_ArbitraryH value; /* pass NULL at ADD_PARAM time; owned by host at render time */ + void *refconPV; /* passed into all callbacks, for effect use */ +} PF_ArbitraryDef; + + + +enum { + PF_Arbitrary_NEW_FUNC = 0, + PF_Arbitrary_DISPOSE_FUNC, + PF_Arbitrary_COPY_FUNC, + PF_Arbitrary_FLAT_SIZE_FUNC, + PF_Arbitrary_FLATTEN_FUNC, + PF_Arbitrary_UNFLATTEN_FUNC, + PF_Arbitrary_INTERP_FUNC, + PF_Arbitrary_COMPARE_FUNC, + PF_Arbitrary_PRINT_SIZE_FUNC, + PF_Arbitrary_PRINT_FUNC, + PF_Arbitrary_SCAN_FUNC +}; +typedef A_long PF_FunctionSelector; + + + +enum { + PF_ArbCompare_EQUAL = 0, + PF_ArbCompare_LESS, + PF_ArbCompare_MORE, + PF_ArbCompare_NOT_EQUAL +}; +typedef A_long PF_ArbCompareResult; + + +enum { + PF_ArbPrint_NONE = 0, + PF_ArbPrint_ABBREVIATED = 1 << 0 +}; +typedef A_long PF_ArbPrintFlags; + + + +/* this is what gets passed in the extra parameter with + * PF_Cmd_ARBITRARY_CALLBACKS + */ +typedef struct { + + PF_FunctionSelector which_function; + + A_short id; + A_short padding; + + union { + + /* PF_Arbitrary_NEW_FUNC + * + * allocate and initialize the data + * the passed in parameter,v, will already have its non data fields filled in + * you just allocate and optionally fill out the data. + */ + struct { + void *refconPV; /* >> */ + PF_ArbitraryH *arbPH; /* << */ + } new_func_params; + + + + /* PF_Arbitrary_DISPOSE_FUNC + * + * dispose of any allocated data + */ + struct { + void *refconPV; + PF_ArbitraryH arbH; + } dispose_func_params; + + + + /* PF_Arbitrary_COPY_FUNC + * + * make a copy of src_dataP into dst_dataP. refconPV was assigned from parameter def. + */ + struct { + void *refconPV; + PF_ArbitraryH src_arbH; + PF_ArbitraryH *dst_arbPH; /* << allocated by copy func, owned by caller */ + } copy_func_params; + + + + /* PF_Arbitrary_FLAT_SIZE_FUNC + * + * return in flat_data_sizePLu the number of bytes that are needed to flatten the object. + */ + struct { + void *refconPV; + PF_ArbitraryH arbH; + A_u_long *flat_data_sizePLu; /* << */ + } flat_size_func_params; + + + + /* PF_Arbitrary_FLATTEN_FUNC + * + * Flatten the arbH and place it into the supplied buffer, honoring its size. + */ + struct { + void *refconPV; + PF_ArbitraryH arbH; + A_u_long buf_sizeLu; // size of buffer + void *flat_dataPV; // buffer already allocated + } flatten_func_params; + + + + /* PF_Arbitrary_UNFLATTEN_FUNC + * + * opposite of FlattenFunc, unpack the buffer into a PF_ArbitraryH. + */ + struct { + void *refconPV; + A_u_long buf_sizeLu; /* size of buffer */ + const void *flat_dataPV; /* >> */ + PF_ArbitraryH *arbPH; /* << */ // owned by caller + } unflatten_func_params; + + + + /* PF_Arbitrary_INTERP_FUNC + * + * The interpolation function takes a left and a right keyframe and a value between + * 0 and 1, 0 being the left keyframe, 1 represents the right keyframe. + * allocate PF_ArbitraryH and fill it with interpolated data. + * The velocity curves have already been accounted for when the normalized time value was + * calculated. + */ + struct { + void *refconPV; + PF_ArbitraryH left_arbH; /* >> */ // left keyframe + PF_ArbitraryH right_arbH; /* >> */ // right keyframe + PF_FpLong tF; /* >> */ // range [0,1] + PF_ArbitraryH *interpPH; /* << */ // becomes owned by caller + } interp_func_params; + + + /* PF_Arbitrary_COMPARE_FUNC + * + * compare two arbitrary data types for equality + * return 0 if equal, otherwise return 1 in comparePL + */ + struct { + void *refconPV; + PF_ArbitraryH a_arbH; /* >> */ // value 1 + PF_ArbitraryH b_arbH; /* >> */ // value 2 + PF_ArbCompareResult *compareP; /* << */ // result of compare use enumeration above + } compare_func_params; + + + + /* PF_Arbitrary_PRINT_SIZE_FUNC + * + * return in print_sizePLu the number of bytes that are needed to print the object. + */ + struct { + void *refconPV; + PF_ArbitraryH arbH; /* >> */ // the data + A_u_long *print_sizePLu; /* << */ // size of buffer needed to print + } print_size_func_params; + + + /* PF_Arbitrary_PRINT_FUNC + * + * return in buff a user-readable description of your arb data + */ + struct { + void *refconPV; /* >> */ + PF_ArbPrintFlags print_flags; /* >> */ // PF_ArbPrint_NONE means print the complete description + PF_ArbitraryH arbH; /* >> */ + A_u_long print_sizeLu; /* >> */ // size of buffer + A_char *print_bufferPC; /* << */ + } print_func_params; + + + + /* PF_Arbitrary_SCAN_FUNC + * + * return a PF_ArbitraryH from the text description of your arb data + */ + struct { + void *refconPV; /* >> */ + const A_char *bufPC; /* >> */ + A_u_long bytes_to_scanLu; /* >> */ + PF_ArbitraryH *arbPH; /* << */ + } scan_func_params; + + } u; + +} PF_ArbParamsExtra; + + +typedef struct { + PF_ParamIndex param_index; +} PF_UserChangedParamExtra; // passed as extra for PF_Cmd_USER_CHANGED_PARAM + + +/* The following is an opaque type you pass to PF_Cmd_TRANSLATE_PARAMS_TO_PREFS */ +typedef struct PF_ImporterPrefsData *PF_ImporterPrefsDataPtr; + +/* prefsPC is a pointer to an importer opaque data (prefs) that coincides + * with its matching importer. It's an in/out param. The host owns it, + * but the filter will modify it. + * prefs_sizeLU is the size of the prefs object pointed to. + * This is part of a Premiere Pro feature that requires a matching Importer/Source Settings effect + * and will only be used in that particular case. + */ +typedef struct { + PF_ImporterPrefsDataPtr prefsPC; + A_u_long prefs_sizeLu; +} PF_TranslateParamsToPrefsExtra; // passed as extra for PF_Cmd_TRANSLATE_PARAMS_TO_PREFS + + +enum { + PF_DepCheckType_NONE = 0, + PF_DepCheckType_ALL_DEPENDENCIES, + PF_DepCheckType_MISSING_DEPENDENCIES +}; +typedef A_long PF_DepCheckType; + +typedef struct { + PF_DepCheckType check_type; /* >> */ // effect should ignore any unknown type + PF_Handle dependencies_strH; /* << */ // NULL terminated string. Flat and disposed of by the host +} PF_ExtDependenciesExtra; + + +#ifdef PREMIERE_INTERNAL + #include "PF_Private_Premiere.h" +#else + + +typedef union { + PF_LayerDef ld; + PF_SliderDef sd; + PF_FixedSliderDef fd; + PF_AngleDef ad; + PF_CheckBoxDef bd; + PF_ColorDef cd; + PF_PointDef td; + PF_PopupDef pd; + PF_FloatSliderDef fs_d; + PF_ArbitraryDef arb_d; + PF_PathDef path_d; + PF_ButtonDef button_d; + PF_Point3DDef point3d_d; +} PF_ParamDefUnion; + +#endif + +/** Param UI Flags + + PF_PUI_TOPIC + + Set this flag if you handle PF_Cmd_EVENTs for the "topic" of + the parameter. The "topic" is the portion of the param UI + in the Effect Controls Window (ECW) that is still visible + when the twirly-arrow is twirled up for that param. + + If you set this flag, you must also set PF_OutFlag_CUSTOM_UI + at PF_Cmd_GLOBAL_SETUP time. + + PF_PUI_CONTROL + + Set this flag if you handle PF_Cmd_EVENTs for the control + area in the ECW. This is the area that becomes invisible + when you twirl up a parameter's twirly arrow (and is the + usual place to have your custom UI). + + If you set this flag, you must also set PF_OutFlag_CUSTOM_UI + at PF_Cmd_GLOBAL_SETUP time. + + PF_PUI_STD_CONTROL_ONLY + + Set this flag if you want the standard control only -- no + data stream will be associated with this parameter, and + thus no keyframes (nothing appears in the Time Layout window + for this type of param). + + You might want to do this to control something in your + sequence data with a standard control. Or in your arb + data, or custom UI in the comp window, or to group-set multiple + other controls. + + + This flag can be used with these param types: + PF_Param_SLIDER, PF_Param_FIX_SLIDER, PF_Param_ANGLE, + PF_Param_CHECKBOX, PF_Param_COLOR, PF_Param_POINT, + PF_Param_POPUP, PF_Param_FLOAT_SLIDER, PF_Param_POINT_3D + + but NOT: + + PF_Param_CUSTOM, PF_Param_NO_DATA, + PF_Param_LAYER, PF_Param_ARBITRARY_DATA, PF_Param_PATH + + If you set this flag, you must also set PF_ParamFlag_SUPERVISE + (otherwise you would never find out about value changes, and + the setting would never be used for anything). This flag + does not require the setting of PF_OutFlag_CUSTOM_UI. + + If you want a standard control for PF_Param_ARBITRARY_DATA, + just add one (or more) using PF_PUI_STD_CONTROL_ONLY with + the supported param types, and then when handling + PF_Cmd_USER_CHANGED_PARAM you can modify your arb data. + + + PF_PUI_NO_ECW_UI + + Set this flag if you want no UI to appear in the Effect Controls + Window. Presumably, you are setting the value of the parameter + through some other method (e.g. custom UI in the comp window, + or while handling PF_Cmd_USER_CHANGED_PARAM for a different param with + PF_ParamFlag_SUPERVISE set). In AE, this doesn't affect keyframe + visibility in the timeline. In PPro it does remove the entire row, + so you won't see keyframes. + + PF_PUI_ECW_SEPARATOR + + Set this flag if you'd like a thick line above this parameter + in the effect control window. This is provided so that parameters + can be grouped visually, if needed (without adding groups). + This flag can be changed at runtime through the PF_UpdateParamUI() + method. Not used by AE. + + PF_PUI_INVISIBLE + + Set this flag if you'd like the parameter to be initially invisible. This is useful + if your effect needs hidden data parameters that affect rendering. + + Premiere only: The parameter can later be made visible by clearing the flag + during the PF_UpdateParamUI() callback. + +**/ + +enum { + PF_PUI_NONE = 0, + PF_PUI_TOPIC = 1L << 0, // effect has custom UI and wants events for this params' title (portion visible when twirled up) + PF_PUI_CONTROL = 1L << 1, // effect has custom UI and wants events for this params' control (portion invisible when twirled up) + // use the width and height below + + // following flags are new in AE 4.0 + + PF_PUI_STD_CONTROL_ONLY = 1L << 2, // param will be used as UI only, no data (new in AE 4.0) */ + PF_PUI_NO_ECW_UI = 1L << 3, // stop param from appearing in Effect Controls (which in PPro also means you won't see a keyframe track there) + PF_PUI_ECW_SEPARATOR = 1L << 4, // draw a thick separating line above this param; not used by AE + PF_PUI_DISABLED = 1L << 5, // disable (gray-out) UI for this param + + // following flags are new in AE 4.1 + + // AE will not erase the ECW topic, it's up to the FX to erase/draw every pixel. + // Handy if FX author implements an offscreen, prevents flashing. + PF_PUI_DONT_ERASE_TOPIC = 1L << 6, + PF_PUI_DONT_ERASE_CONTROL = 1L << 7, + + PF_PUI_RADIO_BUTTON = 1L << 8, // display as a radio-button group; only valid for PF_Param_POPUP; ignored by AE + + PF_PUI_INVISIBLE = 1L << 9 // in AE as of CS6, this hides the parameter UI in both the Effect Controls and Timeline. + // in Premiere since earlier than that, this hides the parameter UI in the Effect Controls, + // which includes the keyframe track; for PPro only, the flag is dynamic and can be cleared + // to make the parameter visible again. +}; +typedef A_long PF_ParamUIFlags; + +/** PF_ChangeFlags + + New in AE 4.0 (although PF_ChangeFlag_CHANGED_VALUE was implemented + by setting low bit of old changed field). + + PF_ChangeFlag_CHANGED_VALUE + + Set this flag for each param whose value you change when handling + a PF_Cmd_USER_CHANGED_PARAM or specific PF_Cmd_EVENT events + (PF_Event_DO_CLICK, PF_Event_DRAG, & PF_Event_KEYDOWN). If set during + PF_Cmd_EVENT, but sure to also set PF_EO_HANDLED_EVENT before returning. + You can change as many params as you want at once. These changes are undoable and + re-doable by the user. Exception: do not set PF_PUI_STD_CONTROL_ONLY + param values with this flag, use PF_UpdateParamUI() instead. + + PF_ChangeFlag_SET_TO_VARY + + Not yet implemented. Same restrictions as PF_ChangeFlag_CHANGED_VALUE. + + PF_ChangeFlag_SET_TO_CONSTANT + + Not yet implemented. Same restrictions as PF_ChangeFlag_CHANGED_VALUE. + +**/ + +enum { + PF_ChangeFlag_NONE = 0, + PF_ChangeFlag_CHANGED_VALUE = 1L << 0, + PF_ChangeFlag_RESERVED = 1L << 1, + PF_ChangeFlag_SET_TO_VARY = 1L << 2, + PF_ChangeFlag_SET_TO_CONSTANT = 1L << 3 +}; +typedef A_long PF_ChangeFlags; + + +/** ParamDef +**/ +typedef struct { + /* PARAMETER VALUE */ + union { + A_long id; // used by PF_ADD_PARAM callback, see doc + PF_ChangeFlags change_flags; // set when handling PF_Cmd_USER_CHANGED_PARAM & PF_Cmd_UPDATE_PARAMS_UI + } uu; + + PF_ParamUIFlags ui_flags; + A_short ui_width; /* ignored if !PF_PUI_CONTROL */ + A_short ui_height; /* ignored if !PF_PUI_CONTROL */ + + /* PARAMETER DESCRIPTION */ + PF_ParamType param_type; + A_char name[PF_MAX_EFFECT_PARAM_NAME_LEN + 1]; + PF_ParamFlags flags; + + A_long unused; // Once upon a time was reserved_tdb + PF_ParamDefUnion u; + +} PF_ParamDef, *PF_ParamDefPtr, **PF_ParamDefH; + +typedef PF_ParamDef** PF_ParamList; + +#define PF_ParamDef_IS_PUI_FLAG_SET(_defP, _puiFlag) \ + (((_defP)->ui_flags & _puiFlag) != 0) + +#define PF_ParamDef_IS_PARAM_FLAG_SET(_defP, _paramFlag) \ + (((_defP)->flags & _paramFlag) != 0) + + + + /** -------------------- Smart Render Interface Constants and Structures -------------------- + + PF_Cmd_SMART_PRE_RENDER gets a PF_PreRenderExtra struct in the extra pointer, and must + fill out the "output" field before returning. + + PF_Cmd_SMART_RENDER gets a PF_SmartRenderExtra struct in the extra pointer, if pre-render was invoked. + + */ + + enum { + PF_ChannelMask_ALPHA = 0x1, + PF_ChannelMask_RED = 0x2, + PF_ChannelMask_GREEN = 0x4, + PF_ChannelMask_BLUE = 0x8, + PF_ChannelMask_ARGB = 0xF + }; + typedef A_long PF_ChannelMask; + + enum { + PF_GPU_Framework_NONE = 0, + PF_GPU_Framework_OPENCL, + PF_GPU_Framework_METAL, + PF_GPU_Framework_CUDA, + }; + typedef A_long PF_GPU_Framework; + + typedef struct { + PF_LRect rect; + PF_Field field; + PF_ChannelMask channel_mask; + PF_Boolean preserve_rgb_of_zero_alpha; // whether the effect should attempt to preserve RGB when A=0 + char unused[3]; // keep this zeroed! + A_long reserved[4]; // this too + } PF_RenderRequest; + + typedef struct { + PF_RenderRequest output_request; // what the effect is being asked to render + short bitdepth; // bitdepth the effect is being driven in (in bpc) + const void *gpu_data; + PF_GPU_Framework what_gpu; + A_u_long device_index; + } PF_PreRenderInput; + + typedef void (*PF_DeletePreRenderDataFunc)(void *pre_render_data); + + + enum { + PF_RenderOutputFlag_RETURNS_EXTRA_PIXELS = 0x1, // if it's just as cheap to compute more pixels at once, set this to allow result > request rect + PF_RenderOutputFlag_GPU_RENDER_POSSIBLE = 0x2 // if the GPU render is possible given the params and frame render context + }; + typedef short PF_RenderOutputFlags; + + typedef struct { + PF_LRect result_rect; // the rectangle actually available from this request (can be empty) + PF_LRect max_result_rect; // the maximum size the output could possibly be, if AE asked for all of it + // (this must not vary depending on requested output size!) + + PF_Boolean solid; // optimization hint; set this if there is full alpha at every pixel in the result rect + PF_Boolean reserved; + PF_RenderOutputFlags flags; // RETURNS_EXTRA_PIXELS, other things later + + void* pre_render_data; // will be passed back to render + PF_DeletePreRenderDataFunc delete_pre_render_data_func; // and eventually passed to this function for deletion, if set + + } PF_PreRenderOutput; + +typedef struct { + PF_LRect result_rect; // the rectangle actually available from this request (can be empty) + PF_LRect max_result_rect; // the maximum size the output could possibly be, if AE asked for all of it + PF_RationalScale par; // aspect ratio of pixels + PF_Boolean solid; // boolean; true if result has full alpha throughout result rect + PF_Boolean reservedB[3]; + A_long ref_width; // original size of layer, pre-effects (without DSF, comp size for collapsed layers) + A_long ref_height; + A_long reserved[6]; + } PF_CheckoutResult; + + + typedef struct { + + PF_Err (*checkout_layer)( + PF_ProgPtr effect_ref, // reference from in_data + PF_ParamIndex index, // 0 = input, 1..n = param + A_long checkout_idL, // chosen by effect, must be >=0 and unique + const PF_RenderRequest *req, + A_long what_time, + A_long time_step, + A_u_long time_scale, + PF_CheckoutResult *checkout_result); // out + + PF_Err (*GuidMixInPtr)( + PF_ProgPtr effect_ref, // reference from in_data + //const PF_RenderRequest *req, + A_u_long buf_sizeLu, /* >> size of buffer to mix into guid */ + const void *buf ); + + } PF_PreRenderCallbacks; + + // This is passed as the extra parameter to PF_Cmd_PRE_RENDER when an effect is using the pre-render interface. + // Effect must fill out output. + typedef struct { + PF_PreRenderInput *input; + PF_PreRenderOutput *output; + PF_PreRenderCallbacks *cb; + } PF_PreRenderExtra; + + typedef struct { + PF_RenderRequest output_request; // what the effect is being asked to render + short bitdepth; // bitdepth the effect is being driven in (in bpc) + void *pre_render_data;// passed back from value placed in extra->output->pre_render_data during PF_Cmd_PRE_RENDER + const void *gpu_data; + PF_GPU_Framework what_gpu; + A_u_long device_index; // For use in conjunction with PrSDKGPUDeviceSuite + } PF_SmartRenderInput; + + typedef struct { + + PF_Err (*checkout_layer_pixels)( + PF_ProgPtr effect_ref, // reference from in_data + A_long checkout_idL, // passed during checkout_layer + PF_EffectWorld **pixels); // out, valid for duration of current command or until checked in + + PF_Err (*checkin_layer_pixels)( // not strictly necessary to call, but useful to free up memory early + PF_ProgPtr effect_ref, + A_long checkout_idL); + + PF_Err (*checkout_output)( + PF_ProgPtr effect_ref, // reference from in_data + PF_EffectWorld **output); // out + + } PF_SmartRenderCallbacks; + + // Passed as extra param during PF_Cmd_SMART_RENDER + typedef struct { + PF_SmartRenderInput *input; + PF_SmartRenderCallbacks *cb; + } PF_SmartRenderExtra; + + + /** -------------------- GPU Setup/Setdown Constants and Structures -------------------- + + PF_Cmd_GPU_DEVICE_SETUP gets a PF_GPUDeviceSetupExtra struct in the extra pointer. + + PF_Cmd_GPU_DEVICE_SETDOWN gets a PF_GPUDeviceSetdownExtra struct in the extra pointer. + + */ + + + typedef struct { + PF_GPU_Framework what_gpu; + A_u_long device_index; // For use in conjunction with PrSDKGPUDeviceSuite + } PF_GPUDeviceSetupInput; + + typedef struct { + void *gpu_data; // effect owned pointer. + } PF_GPUDeviceSetupOutput; + + typedef struct { + PF_GPUDeviceSetupInput *input; + PF_GPUDeviceSetupOutput *output; + } PF_GPUDeviceSetupExtra; + + + + typedef struct { + void *gpu_data; // effect must dispose. + PF_GPU_Framework what_gpu; + A_u_long device_index; // For use in conjunction with PrSDKGPUDeviceSuite + } PF_GPUDeviceSetdownInput; + + typedef struct { + PF_GPUDeviceSetdownInput *input; + } PF_GPUDeviceSetdownExtra; + + + +/** -------------------- Interaction Callbacks -------------------- + + Effects modules use callbacks to define their parameters. When invoked, + they will be given the parameters values at the particular invocation + moment, but some effects may need to ask for the parameter values at + other times (notably of layer parameters for, say, a visual echo). + + While running, effects modules are responsible for checking for user + interrupts. This checking can be done with either the abort callback, + which will return a value indicating if the user has taken any action, + or with the progress callback, which performs user interrupt checking + just like the abort callback, and also displays a progress display. + + At the bottom of this section are macros for accessing these callback + routines. The first parameter to each macro is a pointer to a PF_InData + structure, defined below. This pointer will be passed to your effect. + + checkout_param + The checkout_param callback allows you to inquire param values at times + other than the current one, and allows you to access layer params other + than the default input layer and the output layer. See the notes on the + "params" structure at the end of this file. The PF_ParamDef you must + specify cannot point into the "params" array; the memory must exist else- + where, such as on the stack. + + If you checkout a layer parameter and the layer popup is currently set + to , the return value will be filled with zeros. You can check + the "data" pointer. If it is NULL, then the layer param is set to + and you should do something like faking an all alpha zero layer or some + such nonsense. IMPORTANT: Due to 13.5 threading changes, checking out + a layer param that is not inside of UPDATE_PARAMS_UI will return + a frame with black pixels to avoid render requests and possible deadlock. + In other selectors the actual render will be triggered as it did before. + + checkin_param + When you have called checkout_param, you must call checkin_param when you + are done, so After Effects can clean up after itself and you. This is + very important for smooth functioning and also to save memory where possible. + Once checked in, the fields in the PF_ParamDef will no longer be valid. + + add_param + When given the PARAMS_SETUP message, the effect will generally make a + series of calls to the add_param routine to define the interface that + the After Effects user will see. See the PF_ParamDefs defined above. + Currently you can only add params at the end, and only at PARAMS_SETUP + time. + + abort + Periodically, you should check if the user wants to interrupt the + current processing. The abort proc here will return non-zero if + the effects module should suspend its current processing. If you + call this routine and it returns a value other than zero, you should + return that value when your effect returns. That will let us know + if the effect completed rendering or not. + + progress + Alternatively, you may wish to display a progress bar while you are + processing the image. This routine combines the abort proc user + interrupt checking with code that will display a progress bar for + you. The current and total params represent a fraction (current/total) + that describes how far you are along in your processing. Current + should equal total when done. Additionally, this routine will return + non-zero if you should suspend/abort your current processing. You + should probably try not to call this too frequently (e.g. at every pixel). + It is better to call it, say, once per scanline, unless your filter is + really really slow. + +**/ + +typedef struct _PF_CustomUIInfo PF_CustomUIInfo; + + +typedef struct { + // IMPORTANT: This structure is FROZEN. Changing this would break binary compatibility with PF_InData + + PF_Err (*checkout_param)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_ParamIndex index, /* 0 = input, 1..n = param */ + A_long what_time, + A_long time_step, /* duration between frames in time_scale units */ + A_u_long time_scale, + PF_ParamDef *param); /* the param you've been waiting for... */ + + PF_Err (*checkin_param)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_ParamDef *param); + + PF_Err (*add_param)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_ParamIndex index, /* -1 = add to end */ + PF_ParamDefPtr def); + + PF_Err (*abort)( + PF_ProgPtr effect_ref); /* reference from in_data */ + + PF_Err (*progress)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_long current, + A_long total); + + PF_Err (*register_ui)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_CustomUIInfo *cust_info); + + PF_Err (*checkout_layer_audio)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_ParamIndex index, /* 0 = input, 1..n = param */ + A_long start_time, /* in time_scale units */ + A_long duration, /* in time_scale units */ + A_u_long time_scale, /* units/sec */ + PF_UFixed rate, /* unsigned! */ + A_long bytes_per_sample, + A_long num_channels, + A_long fmt_signed, /* non-zero for signed, zero for unsigned */ + PF_LayerAudio *audio); /* the LayerAudio you've been waiting for... */ + + PF_Err (*checkin_layer_audio)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_LayerAudio audio); + + PF_Err (*get_audio_data)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_LayerAudio audio, + PF_SndSamplePtr *data0, /* optional - packed array of samples, if stereo, left/right */ + A_long *num_samples0, /* optional */ + PF_UFixed *rate0, /* optional - unsigned! */ + A_long *bytes_per_sample0, /* optional */ + A_long *num_channels0, /* optional */ + A_long *fmt_signed0); /* optional - non-zero for signed, zero for unsigned */ + + void *reserved_str[3]; + + void *reserved[10]; + +} PF_InteractCallbacks; + + +#define PF_CHECKOUT_PARAM(IN_DATA, INDEX, TIME, STEP, SCALE, PARAM) \ + (*(IN_DATA)->inter.checkout_param)((IN_DATA)->effect_ref, \ + (INDEX), (TIME), (STEP), (SCALE), (PARAM)) + +#define PF_CHECKIN_PARAM(IN_DATA, PARAM) \ + (*(IN_DATA)->inter.checkin_param)((IN_DATA)->effect_ref, (PARAM)) + +#define PF_ADD_PARAM(IN_DATA, INDEX, DEF) \ + (*(IN_DATA)->inter.add_param)((IN_DATA)->effect_ref, (INDEX), (DEF)) + +#define PF_ABORT(IN_DATA) \ + (*(IN_DATA)->inter.abort)((IN_DATA)->effect_ref) + +#define PF_PROGRESS(IN_DATA, CURRENT, TOTAL) \ + (*(IN_DATA)->inter.progress)((IN_DATA)->effect_ref, (CURRENT), (TOTAL)) + +#define PF_REGISTER_UI(IN_DATA, CUST_INFO) \ + (*(IN_DATA)->inter.register_ui)((IN_DATA)->effect_ref, (CUST_INFO)) + +#define PF_CHECKOUT_LAYER_AUDIO(IN_DATA, INDEX, START_TIME, DURATION, SCALE, RATE, \ + BYTES_PER_SAMPLE, NUM_CHANNELS, FMT_SIGNED, AUDIO) \ + (*(IN_DATA)->inter.checkout_layer_audio)((IN_DATA)->effect_ref, \ + (INDEX), (START_TIME), (DURATION), (SCALE), (RATE), (BYTES_PER_SAMPLE), \ + (NUM_CHANNELS), (FMT_SIGNED), (AUDIO)) + +#define PF_CHECKIN_LAYER_AUDIO(IN_DATA, AUDIO) \ + (*(IN_DATA)->inter.checkin_layer_audio)((IN_DATA)->effect_ref, (AUDIO)) + +#define PF_GET_AUDIO_DATA(IN_DATA, AUDIO, DATA_0, NUM_SAMPLES_0, RATE_0, \ + BYTES_PER_SAMPLE_0, NUM_CHANNELS_0, FMT_SIGNED_0) \ + (*(IN_DATA)->inter.get_audio_data)((IN_DATA)->effect_ref, \ + (AUDIO), (DATA_0), (NUM_SAMPLES_0), (RATE_0), (BYTES_PER_SAMPLE_0), \ + (NUM_CHANNELS_0), (FMT_SIGNED_0)) + + +/** -------------------- Effect Parameter Blocks -------------------- + + The effects module itself is invoked with input and output blocks + of parameters for various messages that it needs to handle. The + output block (values returned from the effect to the program) and + the input block (values provided by the program for the edification + of the effect) are defined here. Discussion follows. + + The Output Block + + Most fields of the output block are only examined for changes after + certain commands have been sent to the effect module. Each field + below describes when it will be checked. + + my_version + This is the version number of your plug-in effect, not to be confused + with the version of the plug-in specification. Please set this + at PF_Cmd_GLOBAL_SETUP. + + name + This lets you override the name of the effect in the Time Layout and + in the Effect Controls windows when the effect is applied. The name from + the PiPL resource is always used in the Effect menu. This field is + checked after PF_Cmd_SEQUENCE_SETUP. You will almost always leave + this field empty. + + global_data + This is a Handle that you can allocate at PF_Cmd_GLOBAL_SETUP + time. It will be passed back to you verbatim in the input + parameter block for use later on. In PF_Cmd_GLOBAL_SETUP, + the global_data field in the Input Block may be set to a + flattened version of your global data, in which case you should + unflatten it, free the flat version, and set this field to the + unflattened new global data. + + It will be locked & unlocked for you automatically like sequence_data. + + num_params + The calling application will sanity check the num_params field + vs the times add_param is called. The implicit main + layer parameter MUST be included in the parameter count. Use the + num_params value in the in_data as a starting value (it will + include the implicit layer parameter). + Set this field when you get PF_Cmd_PARAMS_SETUP. + + sequence_data + This is a Handle that you can allocate (using PF_NEW_HANDLE) + at PF_Cmd_SEQUENCE_SETUP time. + It will be passed back to you in the input parameter block + for later use. + + WARNING: this handle is always locked for you before your plugin + is called, and the lock-state is restored on the way out. If you + have arbitrary data, your plugin can be called re-entrantly, so + if you have a lock/unlock inside your plugin, the handle will + become unlocked prematurely -- instead simply depend on the host + to lock & unlock your sequence data for you. Of course during + PF_Cmd_SEQUENCE_SETUP the handle you allocate will not be + locked unless you explicitly lock it at that time. + + The contents of this handle will be written out to + disk. If other handles hang off this block, you must specify the + PF_OutFlag_SEQUENCE_DATA_NEEDS_FLATTENING out flag when you get + the PF_Cmd_GLOBAL_SETUP command. You will then receive the + PF_Cmd_SEQUENCE_FLATTEN before your handle is written out. At that + time, you should create a flat version of the handle contents, + free the old unflat handle, and set this field to the flattened + version of the handle. Or after disposing, simply set to NULL + and nothing will be written to disk. + + You will receive a PF_Cmd_SEQUENCE_RESETUP + call to unflatten this handle (as well as to adjust the sequence + data to altered frame rates, etc). If your + sequence data can be flat or unflat, you should store its current + state along with the other data, and check that value in Resetup. + If the handle is flat, Resetup should unflatten it, free the flat + handle, and set this field to the new unflat usable handle. + + flat_sdata_size + OBSOLETE. Turns out, it was never used. Since the handle + set in sequence_data must be allocated using PF_NEW_HANDLE, + the host can find out the size of the handle without asking. + + frame_data + This is a Handle that you can allocated at PF_Cmd_FRAME_SETUP + time. It will be passed to you in the input parameters, as + with the global_data and the sequence_data. This will not + be written out to disk. There is no particular use for this. + Set this field in PF_Cmd_FRAME_SETUP, if you must. + + It will be locked & unlocked for you like sequence_data. + + width + height + origin + You set these fields at PF_Cmd_FRAME_SETUP time to indicate + that the output image will be larger than the input image. + You should set width and height to the size that you want the + output buffer to be. Set origin to the place that the + point (0,0) in the input should map to in the new larger + output. Thus, if you created a 5 pixel drop shadow up and left, + you would set origin to (5, 5). + + out_flags + out_flags2 + This field can be set to an OR-ed combination of the PF_OutFlag + and PF_OutFlag2 constants (don't mix them up!) to communicate + things to After Effects. This will be checked after every + command, but only certain flags are relevant at given times. + Check the PF_OutFlag constants above. + + return_msg + This is a message string (in C string format) that will be + interpreted as either an error message or a useful display + message (for instance, for handling PF_Cmd_ABOUT). Fill + this string with a message you want After Effects to report + to the user for you. It will come up in a simple dialog + with an OK button. Set the first byte of this string to '\0' + to indicate no string -- it is set that way upon entry. This + field is examined after every PF_Cmd. + + The Input Block + + Many parts of the input block are actually structures defined elsewhere + in this file, or in the companion file AE_EffectCB.h. See the documentation + where those structures are defined to understand their contents. + With any given PF_Cmd, only certain fields in the Input Block will + have valid values. Each field described below tells when it is valid. + + in_flags + in_flags2 + These are various flags indicating some boolean value to + the effect module. This is a combination of PF_InFlag values + OR-ed together. This is set for all commands, though most + flags make sense only at certain times. Usually this is + just a copy of the PiPL global flags. See PF_OutFlags and + PF_OutFlags2 above. + + inter + This is a structure defined above containing callbacks + related to user interaction. This has callbacks to add parameters, + to check if the user has interrupted the effect, to display + a progress bar, and to inquire parameter values outside of the + current moment. See the doc above. When each callback can + validly be executed is defined above. + + utils + This is a pointer to a block of useful graphical and mathematical + callbacks provided for the effects module. The documentation + for this block is in the AE_EffectCB.h file. This is a void *, + which can be confusing. See AE_EffectCB.h for macros to use these + functions. This pointer will be defined at all times. + + effect_ref + This is a opaque piece of data that needs to be passed to + most of the various callback routines. Don't worry about it. + + quality + This is set to one of the PF_Quality constants above to + describe the Quality currently chosen by the user. Ideally, + your effect should do a faster version with LO quality, and + a better, "broadcast"-able version with HI quality. Also, + some of the utility callbacks perform differently between + LO and HI quality. This is defined for all PF_Cmds related + to SEQUENCE and FRAME (obviously, including RENDER). + + version + This is the version of the effects spec with which you are + being invoked. This will not be defined until after GLOBAL_SETUP. + + serial_num + This is the serial number of the invoking application. + + appl_id + This is the identifier of the invoking application. It will + be the creator A_long of the app. + + freq + This is an estimate of the frequency with which you should + call the abort check callback. You can ignore this. + + num_params + This is set to the number of input parameters you are receiving. + + what_cpu + This is set to the return value from Gestalt asking what sort + of CPU your machine has. If your effect requires a certain + type of CPU it should check this value and return an error + indicating that it cannot run. After Effects only runs on + 68020s and higher, so don't sweat it if you require that. + + what_fpu + This is set to the return value from Gestalt asking what sort + of FPU your machine has. If you require a floating point unit, + you should return the OutFlag indicating that in GLOBAL_SETUP, + and then do not execute your floating point code if this value + is set to 0 -- just do a PF_COPY of the input to the output when + you get the PF_Cmd_RENDER. See OutFlag description above. + + current_time + This is the time of the current frame. It will be set in RENDER. + The number of the current frame is current_time / time_step. + All effects sequences start at time 0. + + time_step + This is the time difference to the next or last frame. This value + and current_time and total_time are in units given by time_scale. + The time between frames is time_step, not 1. This value will be 0 + at SEQUENCE_SETUP if it is not constant for all frames. It will + be set correctly in the FRAME calls, even if it's not constant. + + total_time + This is the amount of time from the start to the end of the + image sequence on which this effect is being invoked. The total + number of frames is total_time / time_step. + + time_scale + These are the units that current_time, time_step, and total_time + are in. See QuickTime for an explanation of how these time values work. + + width + height + These are the size of the input image. As Stoney Ballard points out, + these are certainly NOT the same as the width and height fields in param[0], + but rather reflect the full-resolution dimensions of the input layer. + + field + Will be set to PF_Field_UPPER or PF_Field_LOWER during field-rendering + if certain conditions are met -- for example: effect must have + PF_OutFlag_PIX_INDEPENDENT set, and the layer to which the effect is + applied must not be rotated, scaled nor positioned on a subpixel. + You can safely ignore the setting of this field, but might be able to + optimize things by only processing the specified field. + + extent_hint + This is a rectangle that indicates the intersection of the visible + portions of the input and output layers. For an effect that does + not do a geometric distortion of the image, copying just this rectangle + from the source image to the destination image is sufficient to copy + all the image data that the user will see. This can speed up effects + very much. Just iterate over only this rectangle of pixels. + + output_origin_x + output_origin_y + These fields correspond to the origin returned in the out_data at + PF_Cmd_FRAME_SETUP time. They indicate the position of the top left + corner of the input buffer in the output buffer. + + downsample_x + downsample_y + For speed, the user may have asked for only every Nth vertical or + horizontal pixel to be actually rendered by After Effects. The width + and height of all effect parameters (including layers) will be + automatically adjusted to compensate, but the effect needs to know + the downsampling factors to correctly interpret scalar parameters + (ie. sliders) that represent pixel distances in the image. + Downsample factors will be in the range 1 to 999+. This is set in + SEQUENCE_SETUP or RESETUP as the case may be. As of PF_PLUG_IN_VERSION 2, + this factor is a rational quantity. + + global_data + sequence_data + frame_data + These fields are copied from the out data on previous invocations + and set here for you to access as you need them. They will only + be set if they have been allocated during previous commands. + + pre_effect_source_origin_x + pre_effect_source_origin_y + These fields are the origin of the source image in the input buffer. They are set + only during frame calls (PF_Cmd_FRAME_SETUP, PF_Cmd_RENDER, PF_Cmd_FRAME_SETDOWN). + They will be non-zero only if one or more effects that preceded this effect + on the same layer resized the output buffer (i.e. specified that the output + image will be larger or smaller than the input image). + +**/ + + +typedef struct { + A_u_long my_version; /* version # for plug-in code */ + A_char name[PF_MAX_EFFECT_NAME_LEN + 1]; /* only used at seq setup to change */ + PF_Handle global_data; + A_long num_params; + PF_Handle sequence_data; + A_long flat_sdata_size;/* obsolete */ + PF_Handle frame_data; + A_long width; /* change if you want resized output */ + A_long height; + PF_Point origin; + PF_OutFlags out_flags; /* ORed combo of PF_OutFlag values */ + A_char return_msg[PF_MAX_EFFECT_MSG_LEN + 1]; + A_long start_sampL; /* used only for audio commands */ + A_long dur_sampL; /* used only for audio commands */ + PF_SoundWorld dest_snd; /* used only for audio commands */ + PF_OutFlags2 out_flags2; /* ORed combo of PF_OutFlag2 values */ +} PF_OutData; + + +typedef struct { + PF_InteractCallbacks inter; /* effect interaction related callbacks */ + struct _PF_UtilCallbacks *utils; /* utility callbacks -- see AE_EffectCB.h */ + PF_ProgPtr effect_ref; /* opaque value for callbacks */ + PF_Quality quality; /* quality user has selected */ + PF_SpecVersion version; + A_long serial_num; + A_long appl_id; + A_long num_params; + A_long reserved; + A_long what_cpu; /* return value from Gestalt asking CPU */ + A_long what_fpu; /* as above for FPU */ + A_long current_time; + A_long time_step; /* time diff between calls or to next call */ + A_long total_time; + A_long local_time_step;/* time step in local comp */ + A_u_long time_scale; /* units per second of time system */ + PF_Field field; /* if field is specified, other field may be garbage */ + PF_Fixed shutter_angle; /* motion blur shutter angle (range is 0 to 1) */ + A_long width; /* full resolution width of source layer */ + A_long height; /* full resolution height of source layer */ + PF_Rect extent_hint; /* intersection of input and output extents */ + A_long output_origin_x; /* origin of input buffer in output buffer */ + A_long output_origin_y; /* non-zero only when effect changes buffer size */ + PF_RationalScale downsample_x; + PF_RationalScale downsample_y; + PF_RationalScale pixel_aspect_ratio; /* h/v of pixel aspect ratio (NTSC D-1 -> 0.9) */ + PF_InFlags in_flags; + PF_Handle global_data; /* the data created by global_setup */ + PF_Handle sequence_data; /* data from sequence_setup */ + PF_Handle frame_data; /* data from frame_data -- state for this render */ + A_long start_sampL; /* used only for audio commands */ + A_long dur_sampL; /* used only for audio commands */ + A_long total_sampL; /* used only for audio commands */ + PF_SoundWorld src_snd; /* used only for audio commands */ + struct SPBasicSuite *pica_basicP; /* pointer to PICA basic suite. Enjoy! */ + A_long pre_effect_source_origin_x; /* origin of original source in input buffer */ + A_long pre_effect_source_origin_y; /* non-zero only during frame calls (setup, render, setdown) + when effect follows an effect that resizes its output buffer */ + PF_Fixed shutter_phase; /* offset from frame time to shutter open time as a percentage of a frame */ +} PF_InData; + + +/** -------------------- Effect Prototype -------------------- + + The effects module provides a single entry point corresponding to the + below prototype through which all messages are dispatched to the + appropriate code. + + The cmd parameter is one of the PF_Cmd enumeration defined above. + All commands are discussed at that enumeration. There are a lot. + + The in_data and out_data parameters are respectively, PF_InData and + PF_OutData blocks defined and described above. The in_data contains + read only information that the effect can use. The out_data contains + write only information through which the effect communicates back to + the calling program. The descriptions above give a lot more detail. + + The params list is an array of pointers to variably sized PF_ParamDef + structs. This is in typical Unix-like argv format, where the last item + points to NULL. The entries in this array describe the current settings + of the parameters to the effect. Params[0] is the layer to which the + effect has been applied and is a PF_LayerDef param. Other parameters + are defined by the effect. + + The output param is also a PF_LayerDef param, like params[0], and is + an output buffer into which your effect should write the new contents + of the layer. + + A brief explanation about parameter passing to effects: + + When you are invoked to Render, all "params" array entries will be filled + with their value at the current time, except for layer params other than + the default input layer parameter (ie. param[0]). To get other layer param + values, you must call the checkout_param callback. (See callbacks above.) + + In other words, on PF_Cmd_RENDER, params[0] will be a valid ready-to-use + PF_EffectWorld and output will be a valid ready-to-use PF_EffectWorld. Other params that + are not layer params (i.e. sliders, popups, etc.) will be ready-to-use, filled + with their value at the current time; you do not need to call checkout_param for + them. However, other params (besides [0]) that are layer params will NOT be + filled in correctly -- you must make a checkout_param callback to get them. + + ANY param which you call checkout_param on, you must also call checkin_param + before you exit. If not, After Effects will automatically erase your effect + module code resource from the users hard disk, along with any files that contain + your name or any nicknames you have. Sorry. Calling checkin_param is important! + +**/ + +typedef PF_Err (*PF_FilterProc)( + PF_Cmd cmd, + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamList params, + PF_LayerDef *output, + void *extra); + + +#ifdef __cplusplus +} // end extern "C" +#endif + + + +#include + + +#endif /* _H_AE_Effect */ + diff --git a/External/AE SDK/Headers/AE_EffectCB.h b/External/AE SDK/Headers/AE_EffectCB.h new file mode 100644 index 00000000..c5c0360f --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectCB.h @@ -0,0 +1,1223 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + +/** AE_EffectCB.h + + Part of the After Effects SDK + + NOTES + This file describes utility functions and macros for accessing + those utilities that are provided to every filter. These functions + provide graphical tools, mathematical utilities, and other basic + library functions. + + An effect will want to use these callbacks for three primary reasons: + + 1) The mathematical and graphics callbacks will be efficiently + implemented, and will adaptively take advantage of any hardware + acceleration transparent to the effects module. + 2) The callbacks will maximize portability of the effect code + and consistency of results from platform to platform and from + effect to effect. + 3) The callbacks will simplify construction of complex filters, + both making filters easier to write and resulting in smaller + code for each filter. + + The After Effects standard for routine parameters is to list input + parameters first, then list parameters whose contents will be modified, + and then pass output parameters whose old value will be completely + replaced. Large or significant params tend to be listed earlier within + their segment. Most callbacks we provide follow this standard, so with a + convolution callback, we generally would order parameters: + convolve(src_world, convolution_details, dst_world) + However, not all Mac routines follow this, so to be easily + brain-compatible with Mac programmers, we structure some routines + (actually just CopyBits) that we provide to be as much like the + corresponding Mac routine as possible. + +**/ + +#ifndef _H_AE_EffectCB +#define _H_AE_EffectCB + + +#include + +#include + +#ifdef __cplusplus + extern "C" { +#endif + + +/** ---------- Useful Constants ---------- **/ + +#define PF_PI 3.14159265358979323846 +#define PF_2PI 6.28318530717958647692 +#define PF_HALF_PI 1.57079632679489661923 +#define PF_E 2.7182818284590452354 +#define PF_SQRT2 1.41421356237309504880 +#define PF_RAD_PER_DEGREE 0.01745329251994329576 + + + +/** ---------- PF_KernelFlags ---------- + + Many functions work with "kernels" or matrices of values. These matrices + can be of different types, of different arrangements, and can be generated + or treated in different ways. The KernelFlags are used in a variety of + functions to determine how the matrices should be created and used. You + should OR together any flags you need. Which flags are relevant for a + given routine are documented along with the prototype for the routine below. + + The most important information to consider is the type of data. + You will have to choose whether to use Fixeds, Chars, or Longs. + See the information on the USE_... flags below. + + Note, the default for each flag is listed first and passing zero for + the flags parameter will automatically get you the defaults. + + ??? Some of the non-default parameters may not be implemented. Where + a flag is not implemented it will be commented with ??? beside it. + +**/ + +/* pass bottom flag for 1 dimensional kernel, or top for 2D kernel */ +#define PF_KernelFlag_2D 0 +#define PF_KernelFlag_1D (1L << 0) + +/* pass bottom flag to equalize kernel, forcing the volume under the + * kernel surface to be the same as the volume under the covered area + * of pixels. Otherwise, it will be unnormalized. + */ +#define PF_KernelFlag_UNNORMALIZED 0 +#define PF_KernelFlag_NORMALIZED (1L << 1) + +/* use the first flag to force values to be clamped into their valid + * range (that is determined by the type of item (A_char, fixed, A_long). + */ +#define PF_KernelFlag_CLAMP 0 +#define PF_KernelFlag_NO_CLAMP (1L << 2) + +/* pass the first flag to treat kernel as an array of longs valued from 0 to 255. + * pass the second to treat kernel as an array of unsigned chars from 0 to 255, + * pass the third to treat kernel as an array of Fixeds from 0 to 1. + * ??? NOTE! For now, only USE_LONG is implemented! ??? + */ +#define PF_KernelFlag_USE_LONG 0 +#define PF_KernelFlag_USE_CHAR (1L << 3) +#define PF_KernelFlag_USE_FIXED (1L << 4) +#define PF_KernelFlag_USE_UNDEFINED ((1L << 4) | (1L << 3)) + +/* pass the top flag to apply a 1D convolution horizontally, + * the second to apply it vertically. + */ +#define PF_KernelFlag_HORIZONTAL 0 +#define PF_KernelFlag_VERTICAL (1L << 5) + +/* pass the second flag to replicate border pixels when sampling + * off the edge; pass the first flag to treat pixels off the + * edge as alpha zero (black). ??? NOTE! The replicate borders + * flag is unimplemented and this will be ignored. ??? + */ +#define PF_KernelFlag_TRANSPARENT_BORDERS 0 +#define PF_KernelFlag_REPLICATE_BORDERS (1L << 6) + +/* top flag indicates straight convolution, second tells the + * convolution code to alpha-weight the contributions of pixels + * to the resulting convolved output. ??? NOTE! The alpha weighted + * convolve is not implemented and this will be ignored. ??? + */ +#define PF_KernelFlag_STRAIGHT_CONVOLVE 0 +#define PF_KernelFlag_ALPHA_WEIGHT_CONVOLVE (1L << 7) + +typedef A_u_long PF_KernelFlags; + + + +/** ---------- PF_SampleEdgeBehav ---------- + + The sampling routines always deal with 32 bit images, and thus + need to compute properly alpha-weighted samples. An issue arises + when an attempt is made to sample outside of the image content area. + + Before PF_PLUG_IN_VERSION 2, After Effects always treated pixels + outside of the image content area as having alpha = 0, which is desirable + in many cases. Distortions and other effects may want different sampling + behaviors, however, hence the PF_SampleEdgeBehav. + + +**/ + +enum { + PF_SampleEdgeBehav_ZERO = 0L /* Treat pixels outside image as alpha 0; + * Default behavior in After Effects 1.x */ +/* Sorry, not supported! + PF_SampleEdgeBehav_REPEAT = 1L, // Samples are clamped to nearest edge + PF_SampleEdgeBehav_WRAP = 2L // Image wraps around horizontally and vertically +*/ + +}; + +typedef A_u_long PF_SampleEdgeBehav; + +enum { + PF_Xfer_NONE = -1, + PF_Xfer_COPY, + PF_Xfer_BEHIND, + PF_Xfer_IN_FRONT, + PF_Xfer_DISSOLVE, + PF_Xfer_ADD, + PF_Xfer_MULTIPLY, + PF_Xfer_SCREEN, + PF_Xfer_OVERLAY, + PF_Xfer_SOFT_LIGHT, + PF_Xfer_HARD_LIGHT, + PF_Xfer_DARKEN, + PF_Xfer_LIGHTEN, + PF_Xfer_DIFFERENCE, // original < PS5.5 Difference + PF_Xfer_HUE, + PF_Xfer_SATURATION, + PF_Xfer_COLOR, + PF_Xfer_LUMINOSITY, + PF_Xfer_MULTIPLY_ALPHA, // dest alpha *= src alpha + PF_Xfer_MULTIPLY_ALPHA_LUMA, // dest alpha *= src luminance + PF_Xfer_MULTIPLY_NOT_ALPHA, // dest alpha *= ~(src alpha) + PF_Xfer_MULTIPLY_NOT_ALPHA_LUMA, // dest alpha *= ~(src luminance) + PF_Xfer_ADDITIVE_PREMUL, + PF_Xfer_ALPHA_ADD, + PF_Xfer_COLOR_DODGE, // original < PS5.5 Color Dodge + PF_Xfer_COLOR_BURN, // original < PS5.5 Color Burn + PF_Xfer_EXCLUSION, + + PF_Xfer_DIFFERENCE2, // PS >= 6.0, PDF 1.4 Difference + PF_Xfer_COLOR_DODGE2, // PS >= 6.0, PDF 1.4 Color Dodge + PF_Xfer_COLOR_BURN2, // PS >= 6.0, PDF 1.4 Color Burn + + PF_Xfer_LINEAR_DODGE, + PF_Xfer_LINEAR_BURN, + PF_Xfer_LINEAR_LIGHT, + PF_Xfer_VIVID_LIGHT, + PF_Xfer_PIN_LIGHT, + + PF_Xfer_HARD_MIX, + + PF_Xfer_LIGHTER_COLOR, // new in AE8 + PF_Xfer_DARKER_COLOR, + + PF_Xfer_SUBTRACT, // new in AE10 + PF_Xfer_DIVIDE, + + PF_Xfer_RESERVED0, // private/useless + PF_Xfer_RESERVED1, // ditto + + PF_Xfer_NUM_MODES +}; +typedef A_long PF_TransferMode; +typedef PF_TransferMode PF_XferMode; + +// obsolete xfer mode names +enum { + PF_Xfer_TINT = PF_Xfer_LINEAR_DODGE, + PF_Xfer_SHADE = PF_Xfer_LINEAR_BURN, + PF_Xfer_INTENSE_LIGHT = PF_Xfer_VIVID_LIGHT +}; + +typedef struct { + PF_TransferMode xfer; + A_long rand_seed; // for PF_Xfer_DISSOLVE_RANDOMIZED + A_u_char opacity; // 0 - 255 + PF_Boolean rgb_only; // ignored for PF_Xfer_MULTIPLY_ALPHA modes + A_u_short opacitySu; // for deep color only +} PF_CompositeMode; + + + +#define PF_TransferMode_ZERO_SRC_ALPHA_CLEARS_DST_ALPHA(TMODE) \ + ((TMODE) == PF_Xfer_MULTIPLY_ALPHA || \ + (TMODE) == PF_Xfer_MULTIPLY_ALPHA_LUMA) + + +// PF_TransferMode_ZERO_ALPHA_NOP is deprecated because it was +// confusing -- you probably want PF_TransferMode_ZERO_SRC_ALPHA_CLEARS_DST_ALPHA +// instead + +// WARNING: this macro is incorrect for PF_Xfer_COPY (returns true), but it's been like this for so long +// that we are leaving it unchanged so as not to create bugs by changing it. +#define PF_TransferMode_ZERO_SRC_ALPHA_LEAVES_DST_UNCHANGED(TMODE) \ + (((TMODE) == PF_Xfer_MULTIPLY_ALPHA || \ + (TMODE) == PF_Xfer_MULTIPLY_ALPHA_LUMA || \ + (TMODE) == PF_Xfer_ADDITIVE_PREMUL) == 0) + +enum { + PF_MaskFlag_NONE = 0, /* just use the alpha, thank you */ + PF_MaskFlag_INVERTED = 1L << 0, /* invert the result of the mask */ + PF_MaskFlag_LUMINANCE = 1L << 1 /* use the luminance values */ + +}; + + +typedef A_long PF_MaskFlags; + + +typedef struct { + + PF_EffectWorld mask; + PF_Point offset; + PF_MaskFlags what_is_mask; + +} PF_MaskWorld; + + +/** ---------- PF_SampPB ---------- + + There are calls to sample an a non-integral point in an image, + and to sample an area of an image. This parameter block describes + some information needed for these image resampling routines. + +**/ +typedef struct { + + /* parameters needed for single point or area sample */ + + PF_Fixed x_radius; /* radii are used for area sample, 0 for point sample */ + PF_Fixed y_radius; + PF_Fixed area; /* must fit in a Fixed; must be correct */ + PF_EffectWorld *src; /* the world to sample from */ + PF_SampleEdgeBehav samp_behave; + A_long allow_asynch; /* It's okay if I don't get the result until end_sampling */ + + + /* parameters needed for batch sampling & compositing, motion blur, etc. */ + + A_long motion_blur; /* requires pointer to 2 starting points and 2 dxdy's */ + PF_CompositeMode comp_mode; /* compositing mode info */ + PF_PixelPtr mask0; /* per-pixel extra masking, before xfer mode */ + + A_u_char *fcm_table; + A_u_char *fcd_table; + A_long reserved[8]; /* Set to zero at beginsampling */ + +} PF_SampPB; + + +/** ---------- Callback Selectors ---------- + + Some callbacks have different high and low quality versions. + The parameter block of function pointers will automatically + be filled with the appropriate versions for the current quality + setting, but some filters may wish to override this and access + a callback of different quality. To do this, a get_callback_addr + callback is provided which will take a callback selector and a + desired quality and return the callback of that quality. The + selectors for the various callbacks are listed here. Also, a + typedef for the function pointer that will be returned is given. + +**/ + +enum { + PF_Callback_NONE = 0, + PF_Callback_BEGIN_SAMPLING, + PF_Callback_SUBPIXEL_SAMPLE, + PF_Callback_AREA_SAMPLE, + PF_Callback_OBSOLETE0, + PF_Callback_END_SAMPLING, + PF_Callback_COMPOSITE_RECT, + PF_Callback_BLEND, + PF_Callback_CONVOLVE, + PF_Callback_COPY, + PF_Callback_FILL, + PF_Callback_GAUSSIAN, + PF_Callback_ITERATE, + PF_Callback_PREMUL, + PF_Callback_PREMUL_COLOR, + PF_Callback_RGB_TO_HLS, + PF_Callback_HLS_TO_RGB, + PF_Callback_RGB_TO_YIQ, + PF_Callback_YIQ_TO_RGB, + PF_Callback_LUMINANCE, + PF_Callback_HUE, + PF_Callback_LIGHTNESS, + PF_Callback_SATURATION, + PF_Callback_NEW_WORLD, + PF_Callback_DISPOSE_WORLD, + PF_Callback_ITERATE_ORIGIN, + PF_Callback_ITERATE_LUT, + PF_Callback_TRANSFER_RECT, + PF_Callback_TRANSFORM_WORLD, + PF_Callback_ITERATE_ORIGIN_NON_CLIP_SRC, + PF_Callback_ITERATE_GENERIC, + PF_Callback_SUBPIXEL_SAMPLE16, + PF_Callback_AREA_SAMPLE16, + PF_Callback_FILL16, + PF_Callback_PREMUL_COLOR16, + PF_Callback_ITERATE16, + PF_Callback_ITERATE_ORIGIN16, + PF_Callback_ITERATE_ORIGIN_NON_CLIP_SRC16, + PF_Callback_ITERATE_GENERIC_NO_MAX_THREADS, + PF_Callback_ITERATE_NO_MAX_THREADS, + PF_Callback_ITERATE_ORIGIN_NO_MAX_THREADS, + PF_Callback_ITERATE_ORIGIN_NON_CLIP_SRC_NO_MAX_THREADS, + PF_Callback_ITERATE16_NO_MAX_THREADS, + PF_Callback_ITERATE_ORIGIN16_NO_MAX_THREADS, + PF_Callback_ITERATE_ORIGIN_NON_CLIP_SRC16_NO_MAX_THREADS, +}; +typedef A_long PF_CallbackID; + +/** + Previous versions of PF_CallbackFunc were defined using varargs in attempt to enforce + the effect_ref passed as the first argument to all callbacks. The actual host + implementations are generally *not* varargs, and on some platforms the calling + conventions between normal C ABI and C varargs ABI are not compatible. If your + code is trying to call through a PF_CallbackFunc it is unsafe; with this definition + it will now no longer compile. To fix, cast to the proper API signature before + calling. Or better, use the extensive Suite implementations which are explicitly typed +**/ + +typedef struct PF_YouMustCastThisToActualFunctionType *PF_CallbackFunc; + +#define AEFX_MAX_PATH 260 + +enum { + PF_PlatData_MAIN_WND = 0, // windows only (output data => HWND) + PF_PlatData_EXE_FILE_PATH_DEPRECATED, // deprecated in CS6. Use _W versions below + PF_PlatData_RES_FILE_PATH_DEPRECATED, // deprecated in CS6. Use _W versions below + PF_PlatData_RES_REFNUM, // deprecated in AE 2015. Use PF_PlatData_BUNDLE_REF instead + PF_PlatData_RES_DLLINSTANCE, // windows only (output data => HANDLE) + PF_PlatData_SP_PLUG_REF, // unimplemented + PF_PlatData_BUNDLE_REF, // mac only (output data => CFBundleRef) + PF_PlatData_EXE_FILE_PATH_W, // mac and windows (output data => A_UTF16Char[AEFX_MAX_PATH]) + PF_PlatData_RES_FILE_PATH_W //// mac and windows (output data => A_UTF16Char[AEFX_MAX_PATH]) +}; + +typedef A_long PF_PlatDataID; + + +/** ---------- Image Plane Selectors ---------- + + These constants can be used to specify a subset + of the planes of the 32-bit image. + +**/ + +enum { + PF_Plane_ALPHA = 1, + PF_Plane_RED = 2, + PF_Plane_GREEN = 4, + PF_Plane_BLUE = 8 +}; +typedef A_u_long PF_Plane; + + +/** ---------- ANSI Routines Block ---------- + + Within the callback routines block there is a block of ANSI + routines, so that the filter will not need to link with the + ANSI library. The following structure describes that block + and is included in the larger Callback Routines block below. + + All angles are expressed in radians; use PF_RAD_PER_DEGREE + to convert from degrees to radians, if necessary. Be aware + that angle parameter types use degrees (in fixed point). + + Sprintf and strcpy are provided to facilitate string usage, + such as printing for names and supervised controls. + + None of these callbacks vary based on the Quality setting. + +**/ + +typedef struct { + A_FpLong (*atan)(A_FpLong); + A_FpLong (*atan2)(A_FpLong y, A_FpLong x); /* returns atan(y/x) - note param order! */ + A_FpLong (*ceil)(A_FpLong); /* returns next int above x */ + A_FpLong (*cos)(A_FpLong); + A_FpLong (*exp)(A_FpLong); /* returns e to the x power */ + A_FpLong (*fabs)(A_FpLong); /* returns absolute value of x */ + A_FpLong (*floor)(A_FpLong); /* returns closest int below x */ + A_FpLong (*fmod)(A_FpLong x, A_FpLong y); /* returns x mod y */ + A_FpLong (*hypot)(A_FpLong x, A_FpLong y); /* returns sqrt(x*x + y*y) */ + A_FpLong (*log)(A_FpLong); /* returns natural log of x */ + A_FpLong (*log10)(A_FpLong); /* returns log base 10 of x */ + A_FpLong (*pow)(A_FpLong x, A_FpLong y); /* returns x to the y power */ + A_FpLong (*sin)(A_FpLong); + A_FpLong (*sqrt)(A_FpLong); + A_FpLong (*tan)(A_FpLong); + + int (*sprintf)(A_char *, const A_char *, ...); + A_char * (*strcpy)(A_char *, const A_char *); + + A_FpLong (*asin)(A_FpLong); + A_FpLong (*acos)(A_FpLong); + + A_long ansi_procs[1]; +} PF_ANSICallbacks; + + + +/** ---------- Colorspace Conversion Callbacks + ** + **/ + +typedef struct { + PF_Err (*RGBtoHLS)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + PF_HLS_Pixel hls); + + PF_Err (*HLStoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_HLS_Pixel hls, + PF_Pixel *rgb); + + PF_Err (*RGBtoYIQ)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + PF_YIQ_Pixel yiq); + + PF_Err (*YIQtoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_YIQ_Pixel yiq, + PF_Pixel *rgb); + + PF_Err (*Luminance)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *lum100); /* << 100 * luminance */ + + PF_Err (*Hue)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *hue); /* << 0-255 maps to 0-360 */ + + PF_Err (*Lightness)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *lightness); /* << goes from 0-255 */ + + PF_Err (*Saturation)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *saturation); /* << goes from 0-255 */ + +} PF_ColorCallbacks; + + + +typedef void * PF_BatchSampleFunc; /* <<> see comment above !! */ + A_long xL, /* >> */ + A_long yL, /* >> */ + PF_Pixel *inP, /* <> */ + PF_Pixel *outP); /* <> */ + +typedef PF_Err (*PF_IteratePixel16Func) ( void* refconP, /* >> see comment above !! */ + A_long xL, /* >> */ + A_long yL, /* >> */ + PF_Pixel16 *inP, /* <> */ + PF_Pixel16 *outP); /* <> */ + +typedef PF_Err (*PF_IteratePixelFloatFunc) ( void* refconP, /* >> see comment above !! */ + A_long xL, /* >> */ + A_long yL, /* >> */ + PF_PixelFloat *inP, /* <> */ + PF_PixelFloat *outP); /* <> */ + + +typedef struct _PF_UtilCallbacks { + PF_Err (*begin_sampling)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Quality qual, + PF_ModeFlags mf, + PF_SampPB *params); + + PF_Err (*subpixel_sample)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel *dst_pixel); + + PF_Err (*area_sample)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel *dst_pixel); + + void *get_batch_func_is_deprecated; + + PF_Err (*end_sampling)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Quality qual, + PF_ModeFlags mf, + PF_SampPB *params); + + PF_Err (*composite_rect)( + PF_ProgPtr effect_ref, /* from in_data */ + PF_Rect *src_rect, /* rectangle in source image */ + A_long src_opacity, /* opacity of src */ + PF_EffectWorld *source_wld, /* src PF world */ + A_long dest_x, /* upper left-hand corner of src rect...*/ + A_long dest_y, /* ... in composite image */ + PF_Field field_rdr, /* which scanlines to render (all, upper, lower) */ + PF_XferMode xfer_mode, /* Copy, Composite Behind, Composite In Front */ + PF_EffectWorld *dest_wld); /* Destination buffer. Already filled */ + + PF_Err (*blend)( + PF_ProgPtr effect_ref, /* reference from in_data */ + const PF_EffectWorld *src1, + const PF_EffectWorld *src2, + PF_Fixed ratio, /* 0 == full src1, 0x00010000 == full src2 */ + PF_EffectWorld *dst); + + PF_Err (*convolve)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + PF_KernelFlags flags, + A_long kernel_size, + void *a_kernel, + void *r_kernel, + void *g_kernel, + void *b_kernel, + PF_EffectWorld *dst); + + PF_Err (*copy)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + PF_EffectWorld *dst, + PF_Rect *src_r, /* pass NULL for whole world */ + PF_Rect *dst_r); /* pass NULL for whole world */ + + PF_Err (*fill)( + PF_ProgPtr effect_ref, /* reference from in_data */ + const PF_Pixel *color, + const PF_Rect *dst_rect, /* pass NULL for whole world */ + PF_EffectWorld *world); + + PF_Err (*gaussian_kernel)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_FpLong kRadius, /* desired gaussian radius */ + PF_KernelFlags flags, /* see kernel flags commented above */ + A_FpLong multiplier, + A_long *diameter, + void *kernel); + + PF_Err (*iterate)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void* refcon, + PF_IteratePixel8Func pix_fn, + PF_EffectWorld *dst); + + PF_Err (*premultiply)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_long forward, /* TRUE means convert non-premul to premul, FALSE mean reverse */ + PF_EffectWorld *dst); + + PF_Err (*premultiply_color)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + const PF_Pixel *color, /* color to premultiply/unmultiply with */ + A_long forward, /* TRUE means convert non-premul to premul, FALSE mean reverse */ + PF_EffectWorld *dst); + + PF_Err (*new_world)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_long width, + A_long height, + PF_NewWorldFlags flags, /* should would be pre-cleared to zeroes */ + PF_EffectWorld *world); /* always 32 bit */ + + PF_Err (*dispose_world)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *world); + + PF_Err (*iterate_origin)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void* refcon, + PF_IteratePixel8Func pix_fn, + PF_EffectWorld *dst); + + PF_Err (*iterate_lut)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + A_u_char *a_lut0, /* pass NULL for identity */ + A_u_char *r_lut0, /* pass NULL for identity */ + A_u_char *g_lut0, /* pass NULL for identity */ + A_u_char *b_lut0, /* pass NULL for identity */ + PF_EffectWorld *dst); + + + PF_Err (*transfer_rect)( + PF_ProgPtr effect_ref, + PF_Quality quality, + PF_ModeFlags m_flags, + PF_Field field, + const PF_Rect *src_rec, + const PF_EffectWorld *src_world, + const PF_CompositeMode *comp_mode, + const PF_MaskWorld *mask_world0, + A_long dest_x, + A_long dest_y, + PF_EffectWorld *dst_world); + + PF_Err (*transform_world)( + PF_ProgPtr effect_ref, + PF_Quality quality, + PF_ModeFlags m_flags, + PF_Field field, + const PF_EffectWorld *src_world, + const PF_CompositeMode *comp_mode, + const PF_MaskWorld *mask_world0, + const PF_FloatMatrix *matrices, + A_long num_matrices, + PF_Boolean src2dst_matrix, + const PF_Rect *dest_rect, + PF_EffectWorld *dst_world); + + PF_Handle (*host_new_handle)( + A_u_longlong size); + + void * (*host_lock_handle)( + PF_Handle pf_handle); + + void (*host_unlock_handle)( + PF_Handle pf_handle); + + void (*host_dispose_handle)( + PF_Handle pf_handle); + + PF_Err (*get_callback_addr)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Quality quality, + PF_ModeFlags mode_flags, + PF_CallbackID which_callback, + PF_CallbackFunc *fn_ptr); + + PF_Err (*app)(PF_ProgPtr, A_long, ...); /* application specific callback */ + + PF_ANSICallbacks ansi; /* ANSI callback block, see above */ + PF_ColorCallbacks colorCB; /* colorspace conversion callbacks */ + + PF_Err (*get_platform_data)( + PF_ProgPtr effect_ref, + PF_PlatDataID which, + void *data); + + A_u_longlong (*host_get_handle_size)( + PF_Handle pf_handle); + + PF_Err (*iterate_origin_non_clip_src)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void* refcon, + PF_IteratePixel8Func pix_fn, + PF_EffectWorld *dst); + + PF_Err (*iterate_generic)( + A_long iterationsL, /* >> */ // can be PF_Iterations_ONCE_PER_PROCESSOR + void *refconPV, /* >> */ + PF_Err (*fn_func)( void *refconPV, /* >> */ + A_long thread_indexL, // only call abort and progress from thread_indexL == 0. + A_long i, + A_long iterationsL)); // never sends PF_Iterations_ONCE_PER_PROCESSOR + + PF_Err (*host_resize_handle)( + A_u_longlong new_sizeL, /* >> */ + PF_Handle *handlePH); /* <> Handle Value May Change */ + + + PF_Err (*subpixel_sample16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel16 *dst_pixel); + + PF_Err (*area_sample16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel16 *dst_pixel); + + PF_Err (*fill16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + const PF_Pixel16 *color, + const PF_Rect *dst_rect, /* pass NULL for whole world */ + PF_EffectWorld *world); + + PF_Err (*premultiply_color16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + const PF_Pixel16 *color, /* color to premultiply/unmultiply with */ + A_long forward, /* TRUE means convert non-premul to premul, FALSE mean reverse */ + PF_EffectWorld *dst); + + PF_Err (*iterate16)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void* refcon, + PF_IteratePixel16Func pix_fn, + PF_EffectWorld *dst); + + PF_Err (*iterate_origin16)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void* refcon, + PF_IteratePixel16Func pix_fn, + PF_EffectWorld *dst); + + PF_Err (*iterate_origin_non_clip_src16)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void* refcon, + PF_IteratePixel16Func pix_fn, + PF_EffectWorld *dst); + + PF_Err (*get_pixel_data8)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_Pixel8 **pixPP); // will return NULL if depth mismatch + + PF_Err (*get_pixel_data16)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_Pixel16 **pixPP); // will return NULL if depth mismatch + + + // and we're done. all future expansion + // is thru suite mechanism. (for example, + // this is where you'll find the floating + // pt pixel callbacks) + A_long reserved[1]; + +} PF_UtilCallbacks; + + +/** ---------- Callback Access Macros ---------- + + Each of these macros _ASSUMES_ that the (PF_InData *) parameter to + the effects module was passed as a parameter named "in_data". I know + this is a heinous assumption, but the template code all declares the + parameter like that, and by making that assumption, I can simplify + all these macros very much. If you absolutely need to change the + name of that parameter, you will have to pick apart these macros and + invoke the callbacks by yourself. It's not too hard... + + For efficiency, most notably with the image resampling functions (i.e. + subpixel_sample and area_sample), you may wish to declare a local function + pointer and bypass these macros to avoid the multiple dereferences in + your inner loop. The sample code will show how to do this. + + The prototypes and comments about each function are given above in + the PF_UtilCallbacks structure definition. + +**/ +#define PF_BEGIN_SAMPLING(QUALITY, PARAMS) \ + (*in_data->utils->begin_sampling)( \ + in_data->effect_ref, (QUALITY), PF_MF_Alpha_STRAIGHT, (PARAMS)) + +#define PF_SUBPIXEL_SAMPLE(X, Y, PARAMS, DST_PXL) \ + (*in_data->utils->subpixel_sample)( \ + in_data->effect_ref, (X), (Y), (PARAMS), (DST_PXL)) + +#define PF_AREA_SAMPLE(X, Y, PARAMS, DST_PXL) \ + (*in_data->utils->area_sample)( \ + in_data->effect_ref, (X), (Y), (PARAMS), (DST_PXL)) + +#define PF_END_SAMPLING(QUALITY, PARAMS) \ + (*in_data->utils->end_sampling)( \ + in_data->effect_ref, (QUALITY), PF_MF_Alpha_STRAIGHT, (PARAMS)) + +#define PF_BLEND(SRC1, SRC2, RATIO, DST) \ + (*in_data->utils->blend)( \ + in_data->effect_ref, (SRC1), (SRC2), (RATIO), (DST)) + +#define PF_CONVOLVE(SRC, RCT_P, FLAGS, KRNL_SZ, AK, RK, GK, BK, DST) \ + (*in_data->utils->convolve)( \ + in_data->effect_ref, (SRC), (RCT_P), (FLAGS), (KRNL_SZ), (AK), (RK), (GK), (BK), (DST)) + +#define PF_COPY(SRC, DST, SRC_RECT, DST_RECT) \ + (*in_data->utils->copy)( \ + in_data->effect_ref, (SRC), (DST), (SRC_RECT), (DST_RECT)) + +#define PF_FILL(COLOR, DST_RECT, DST) \ + (*in_data->utils->fill)( \ + in_data->effect_ref, (COLOR), (DST_RECT), (DST)) + +#define PF_GAUSSIAN_KERNEL(K_RAD, FLAGS, MULT, DIAM, KERNEL) \ + (*in_data->utils->gaussian_kernel)( \ + in_data->effect_ref, (K_RAD), (FLAGS), (MULT), (DIAM), (KERNEL)) + +#define PF_ITERATE(PROG_BASE, PROG_FINAL, SRC, RCT_P, REFCON, PIX_FUNC, DST) \ + (*in_data->utils->iterate)( \ + in_data, (PROG_BASE), (PROG_FINAL), (SRC), (RCT_P), (REFCON), (PIX_FUNC), (DST)) + +#define PF_ITERATE16(PROG_BASE, PROG_FINAL, SRC, RCT_P, REFCON, PIX_FUNC, DST) \ + (*in_data->utils->iterate16)( \ + in_data, (PROG_BASE), (PROG_FINAL), (SRC), (RCT_P), (REFCON), (PIX_FUNC), (DST)) + +#define PF_PREMUL(FORWARD, DST) \ + (*in_data->utils->premultiply)( \ + in_data->effect_ref, (FORWARD), (DST)) + +#define PF_PREMUL_COLOR(SRC, COLOR, FORWARD, DST) \ + (*in_data->utils->premultiply_color)( \ + in_data->effect_ref, (SRC), (COLOR), (FORWARD), (DST)) + +#define PF_NEW_WORLD(WIDTH, HEIGHT, FLAGS, WORLD) \ + (*in_data->utils->new_world)( \ + in_data->effect_ref, (WIDTH), (HEIGHT), (FLAGS), (WORLD)) + +#define PF_DISPOSE_WORLD(WORLD) \ + (*in_data->utils->dispose_world)( \ + in_data->effect_ref, (WORLD)) + +#define PF_ITERATE_ORIGIN(PROG_BASE, PROG_FINAL, SRC, RCT_P, OR, REFCON, PIX_FUNC, DST) \ + (*in_data->utils->iterate_origin)( \ + in_data, (PROG_BASE), (PROG_FINAL), (SRC), (RCT_P), (OR), (REFCON), (PIX_FUNC), (DST)) + +#define PF_ITERATE_ORIGIN16(PROG_BASE, PROG_FINAL, SRC, RCT_P, OR, REFCON, PIX_FUNC, DST) \ + (*in_data->utils->iterate_origin16)( \ + in_data, (PROG_BASE), (PROG_FINAL), (SRC), (RCT_P), (OR), (REFCON), (PIX_FUNC), (DST)) + +#define PF_ITERATE_LUT(PROG_BASE, PROG_FINAL, SRC, RCT_P, A_LUT, R_LUT, G_LUT, B_LUT, DST) \ + (*in_data->utils->iterate_lut)( \ + in_data, (PROG_BASE), (PROG_FINAL), (SRC), (RCT_P), (A_LUT), \ + (R_LUT), (G_LUT), (B_LUT), (DST)) + +#define PF_TRANSFER_RECT(QUALITY, M_FLAGS, FIELD, SRC_REC, SRC_WORLD, COMP_MODE, \ + MASK_WORLD_0, DST_X, DST_Y, DST) \ + (*in_data->utils->transfer_rect)( \ + in_data->effect_ref, (QUALITY), (M_FLAGS), (FIELD), (SRC_REC), (SRC_WORLD), \ + (COMP_MODE), (MASK_WORLD_0), (DST_X), (DST_Y), (DST)) + +#define PF_TRANSFORM_WORLD(QUALITY, M_FLAGS, FIELD, SRC_WORLD, COMP_MODE, \ + MASK_WORLD_0, MATRICES, NUM_MATRICES, SRC2DST_MATRIX, \ + DST_RECT, DST) \ + (*in_data->utils->transform_world)( \ + in_data->effect_ref, (QUALITY), (M_FLAGS), (FIELD), (SRC_WORLD), \ + (COMP_MODE), (MASK_WORLD_0), (MATRICES), (NUM_MATRICES), (SRC2DST_MATRIX), \ + (DST_RECT), (DST)) + +#define PF_ITERATE_ORIGIN_NON_SRC_CLIP(PROG_BASE, PROG_FINAL, SRC, RCT_P, OR, REFCON, PIX_FUNC, DST) \ + (*in_data->utils->iterate_origin_non_clip_src)( \ + in_data, (PROG_BASE), (PROG_FINAL), (SRC), (RCT_P), (OR), (REFCON), (PIX_FUNC), (DST)) + + +#define PF_NEW_HANDLE(SIZE) \ + (*in_data->utils->host_new_handle)((SIZE)) + +#define PF_DISPOSE_HANDLE(PF_HANDLE) \ + (*in_data->utils->host_dispose_handle)((PF_Handle)(PF_HANDLE)) + +#define PF_LOCK_HANDLE(PF_HANDLE) \ + (*in_data->utils->host_lock_handle)((PF_Handle)(PF_HANDLE)) + +#define PF_UNLOCK_HANDLE(PF_HANDLE) \ + (*in_data->utils->host_unlock_handle)((PF_Handle)(PF_HANDLE)) + +#define PF_GET_HANDLE_SIZE(PF_HANDLE) \ + (*in_data->utils->host_get_handle_size)((PF_Handle)(PF_HANDLE)) + + +// Takes a pointer to a handle. Handle may change. 4.1 and later ONLY. +#define PF_RESIZE_HANDLE(NEW_SIZE, PF_HANDLE_P) \ + (*in_data->utils->host_resize_handle)((NEW_SIZE), (PF_Handle*)(PF_HANDLE_P)) + + + +#define PF_GET_PLATFORM_DATA(ID, DATA) \ + (*in_data->utils->get_platform_data)(in_data->effect_ref, (ID), (DATA)) + +#define PF_GET_PIXEL_DATA8(WORLDP, PIXELPTR0, PIXEL8PP) \ + (*in_data->utils->get_pixel_data8)((WORLDP), (PIXELPTR0), (PIXEL8PP)) + +#define PF_GET_PIXEL_DATA16(WORLDP, PIXELPTR0, PIXEL16PP) \ + (*in_data->utils->get_pixel_data16)((WORLDP), (PIXELPTR0), (PIXEL16PP)) + + + + +#define PF_ACOS(X) (*in_data->utils->ansi.acos)(X) +#define PF_ASIN(X) (*in_data->utils->ansi.asin)(X) +#define PF_ATAN(X) (*in_data->utils->ansi.atan)(X) +#define PF_ATAN2(Y, X) (*in_data->utils->ansi.atan2)((Y), (X)) +#define PF_CEIL(X) (*in_data->utils->ansi.ceil)(X) +#define PF_COS(X) (*in_data->utils->ansi.cos)(X) +#define PF_EXP(X) (*in_data->utils->ansi.exp)(X) +#define PF_FABS(X) (*in_data->utils->ansi.fabs)(X) +#define PF_FLOOR(X) (*in_data->utils->ansi.floor)(X) +#define PF_FMOD(X, Y) (*in_data->utils->ansi.fmod)((X), (Y)) +#define PF_HYPOT(X, Y) (*in_data->utils->ansi.hypot)((X), (Y)) +#define PF_LOG(X) (*in_data->utils->ansi.log)(X) +#define PF_LOG10(X) (*in_data->utils->ansi.log10)(X) +#define PF_POW(X, Y) (*in_data->utils->ansi.pow)((X), (Y)) +#define PF_SIN(X) (*in_data->utils->ansi.sin)(X) +#define PF_SQRT(X) (*in_data->utils->ansi.sqrt)(X) +#define PF_TAN(X) (*in_data->utils->ansi.tan)(X) + +/* This is kind of a hack to deal with the varargs params to sprintf */ + +#define PF_SPRINTF (*in_data->utils->ansi.sprintf) + +#define PF_STRCPY(DST, SRC) \ + (*in_data->utils->ansi.strcpy)((DST), (SRC)) + + + +#define PF_RGB_TO_HLS(RGB, HLS) \ + (*in_data->utils->colorCB.RGBtoHLS)(in_data->effect_ref, (RGB), (HLS)) + +#define PF_HLS_TO_RGB(HLS, RGB) \ + (*in_data->utils->colorCB.HLStoRGB)(in_data->effect_ref, (HLS), (RGB)) + +#define PF_RGB_TO_YIQ(RGB, YIQ) \ + (*in_data->utils->colorCB.RGBtoYIQ)(in_data->effect_ref, (RGB), (YIQ)) + +#define PF_YIQ_TO_RGB(YIQ, RGB) \ + (*in_data->utils->colorCB.YIQtoRGB)(in_data->effect_ref, (YIQ), (RGB)) + +#define PF_LUMINANCE(RGB, LUM100) \ + (*in_data->utils->colorCB.Luminance)(in_data->effect_ref, (RGB), (LUM100)) + +#define PF_HUE(RGB, HUE) \ + (*in_data->utils->colorCB.Hue)(in_data->effect_ref, (RGB), (HUE)) + +#define PF_LIGHTNESS(RGB, LIGHTNESS) \ + (*in_data->utils->colorCB.Lightness)(in_data->effect_ref, (RGB), (LIGHTNESS)) + +#define PF_SATURATION(RGB, SATURATION) \ + (*in_data->utils->colorCB.Saturation)(in_data->effect_ref, (RGB), (SATURATION)) + + + + +#ifdef __cplusplus + } // end extern "C" +#endif + + + +#include + + +#endif /* _H_AE_EffectCB */ diff --git a/External/AE SDK/Headers/AE_EffectCBSuites.h b/External/AE SDK/Headers/AE_EffectCBSuites.h new file mode 100644 index 00000000..901023fe --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectCBSuites.h @@ -0,0 +1,914 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + +#ifndef _H_AE_EffectCBSuites +#define _H_AE_EffectCBSuites + + +#include +#include +#include + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +// note: many of these suites are not SPAPI because they are shared with the +// old-style PF_UtilCallback definitions and we want calls to them to +// be object compatible + +#define kPFHandleSuite "PF Handle Suite" +#define kPFHandleSuiteVersion1 2 /* frozen in AE 10.0 */ + +//Keeping the same version for compatibility reasons but bumping the actual value for 64-bit SDK. Please define A_HandleSize +//as A_u_long to get the same suite working with 32-bit SDK. + +typedef struct PF_HandleSuite1 { + PF_Handle (*host_new_handle)( + A_HandleSize size); + + void * (*host_lock_handle)( + PF_Handle pf_handle); + + void (*host_unlock_handle)( + PF_Handle pf_handle); + + void (*host_dispose_handle)( + PF_Handle pf_handle); + + A_HandleSize (*host_get_handle_size)( + PF_Handle pf_handle); + + PF_Err (*host_resize_handle)( + A_HandleSize new_sizeL, /* >> */ + PF_Handle *handlePH); /* <> Handle Value May Change */ + +} PF_HandleSuite1; + + +#define kPFANSISuite "PF ANSI Suite" +#define kPFANSISuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct PF_ANSICallbacksSuite1 { + A_FpLong (*atan)(A_FpLong); + A_FpLong (*atan2)(A_FpLong y, A_FpLong x); /* returns atan(y/x) - note param order! */ + A_FpLong (*ceil)(A_FpLong); /* returns next int above x */ + A_FpLong (*cos)(A_FpLong); + A_FpLong (*exp)(A_FpLong); /* returns e to the x power */ + A_FpLong (*fabs)(A_FpLong); /* returns absolute value of x */ + A_FpLong (*floor)(A_FpLong); /* returns closest int below x */ + A_FpLong (*fmod)(A_FpLong x, A_FpLong y); /* returns x mod y */ + A_FpLong (*hypot)(A_FpLong x, A_FpLong y); /* returns sqrt(x*x + y*y) */ + A_FpLong (*log)(A_FpLong); /* returns natural log of x */ + A_FpLong (*log10)(A_FpLong); /* returns log base 10 of x */ + A_FpLong (*pow)(A_FpLong x, A_FpLong y); /* returns x to the y power */ + A_FpLong (*sin)(A_FpLong); + A_FpLong (*sqrt)(A_FpLong); + A_FpLong (*tan)(A_FpLong); + + int (*sprintf)(A_char *, const A_char *, ...); + A_char * (*strcpy)(A_char *, const A_char *); + + A_FpLong (*asin)(A_FpLong); + A_FpLong (*acos)(A_FpLong); + +} PF_ANSICallbacksSuite1; + + +#define kPFPixelDataSuite "PF Pixel Data Suite" +#define kPFPixelDataSuiteVersion1 1 /* frozen in AE 7.0 */ + +typedef struct PF_PixelDataSuite1 { + + PF_Err (*get_pixel_data8)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_Pixel8 **pixPP); // will return NULL if depth mismatch + + PF_Err (*get_pixel_data16)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_Pixel16 **pixPP); // will return NULL if depth mismatch + + PF_Err (*get_pixel_data_float)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_PixelFloat **pixPP); // will return NULL if depth mismatch + + +} PF_PixelDataSuite1; + + +#define kPFPixelDataSuiteVersion2 2 /* frozen in AE 16.0 */ + +typedef struct PF_PixelDataSuite2 { + + PF_Err (*get_pixel_data8)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_Pixel8 **pixPP); // will return NULL if depth mismatch + + PF_Err (*get_pixel_data16)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_Pixel16 **pixPP); // will return NULL if depth mismatch + + PF_Err (*get_pixel_data_float)( + PF_EffectWorld *worldP, + PF_PixelPtr pixelsP0, // NULL to use data in PF_EffectWorld + PF_PixelFloat **pixPP); // will return NULL if depth mismatch + + PF_Err (*get_pixel_data_float_gpu)( + PF_EffectWorld *worldP, + void **pixPP); // will return NULL if depth mismatch + +} PF_PixelDataSuite2; + + +#define kPFColorCallbacksSuite "PF Color Suite" +#define kPFColorCallbacksSuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_ColorCallbacksSuite1 { + PF_Err (*RGBtoHLS)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + PF_HLS_Pixel hls); + + PF_Err (*HLStoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_HLS_Pixel hls, + PF_Pixel *rgb); + + PF_Err (*RGBtoYIQ)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + PF_YIQ_Pixel yiq); + + PF_Err (*YIQtoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_HLS_Pixel yiq, + PF_Pixel *rgb); + + PF_Err (*Luminance)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *lum100); /* << 100 * luminance */ + + PF_Err (*Hue)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *hue); /* << 0-255 maps to 0-360 */ + + PF_Err (*Lightness)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *lightness); /* << goes from 0-255 */ + + PF_Err (*Saturation)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel *rgb, + A_long *saturation); /* << goes from 0-255 */ + +} PF_ColorCallbacksSuite1; + +#define kPFColorCallbacks16Suite "PF Color16 Suite" +#define kPFColorCallbacks16SuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_ColorCallbacks16Suite1 { + PF_Err (*RGBtoHLS)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel16 *rgb, + PF_HLS_Pixel hls); + + PF_Err (*HLStoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_HLS_Pixel hls, + PF_Pixel16 *rgb); + + PF_Err (*RGBtoYIQ)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel16 *rgb, + PF_YIQ_Pixel yiq); + + PF_Err (*YIQtoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_HLS_Pixel yiq, + PF_Pixel16 *rgb); + + PF_Err (*Luminance)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel16 *rgb, + A_long *lum100); /* << 100 * luminance */ + + PF_Err (*Hue)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel16 *rgb, + A_long *hue); /* << 0-255 maps to 0-360 */ + + PF_Err (*Lightness)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel16 *rgb, + A_long *lightness); /* << goes from 0-32768 */ + + PF_Err (*Saturation)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Pixel16 *rgb, + A_long *saturation); /* << goes from 0-32768 */ + +} PF_ColorCallbacks16Suite1; + + + + +#define kPFColorCallbacksFloatSuite "PF ColorFloat Suite" +#define kPFColorCallbacksFloatSuiteVersion1 1 /* frozen in AE 7.0 */ + + +typedef struct PF_ColorCallbacksFloatSuite1 { + PF_Err (*RGBtoHLS)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_PixelFloat *rgb, + PF_HLS_Pixel hls); + + PF_Err (*HLStoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_HLS_Pixel hls, + PF_PixelFloat *rgb); + + PF_Err (*RGBtoYIQ)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_PixelFloat *rgb, + PF_YIQ_Pixel yiq); + + PF_Err (*YIQtoRGB)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_HLS_Pixel yiq, + PF_PixelFloat *rgb); + + PF_Err (*Luminance)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_PixelFloat *rgb, + float *lumP); /* << luminance -- note *not* 100*lum */ + + PF_Err (*Hue)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_PixelFloat *rgb, + float *hue); /* 0..360 float */ + + PF_Err (*Lightness)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_PixelFloat *rgb, + float *lightness); /* << */ + + PF_Err (*Saturation)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_PixelFloat *rgb, + float *saturation); /* << */ + +} PF_ColorCallbacksFloatSuite1; + + + +#define kPFBatchSamplingSuite "PF Batch Sampling Suite" +#define kPFBatchSamplingSuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_BatchSamplingSuite1 { + PF_Err (*begin_sampling)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Quality qual, + PF_ModeFlags mf, + PF_SampPB *params); + + PF_Err (*end_sampling)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Quality qual, + PF_ModeFlags mf, + PF_SampPB *params); + + PF_Err (*get_batch_func)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Quality quality, + PF_ModeFlags mode_flags, + const PF_SampPB *params, + PF_BatchSampleFunc *batch); + + PF_Err (*get_batch_func16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Quality quality, + PF_ModeFlags mode_flags, + const PF_SampPB *params, + PF_BatchSample16Func *batch); + +} PF_BatchSamplingSuite1; + + +#define kPFSampling8Suite "PF Sampling8 Suite" +#define kPFSampling8SuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct PF_Sampling8Suite1 { + + PF_Err (*nn_sample)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel *dst_pixel); + + PF_Err (*subpixel_sample)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel *dst_pixel); + + PF_Err (*area_sample)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel *dst_pixel); + + +} PF_Sampling8Suite1; + +#define kPFSampling16Suite "PF Sampling16 Suite" +#define kPFSampling16SuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_Sampling16Suite1 { + + PF_Err (*nn_sample16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel16 *dst_pixel); + + PF_Err (*subpixel_sample16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel16 *dst_pixel); + + PF_Err (*area_sample16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_Pixel16 *dst_pixel); + +} PF_Sampling16Suite1; + + +#define kPFSamplingFloatSuite "PF SamplingFloat Suite" +#define kPFSamplingFloatSuiteVersion1 1 /* frozen in AE 7.0 */ + + +typedef struct PF_SamplingFloatSuite1 { + + PF_Err (*nn_sample_float)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_PixelFloat *dst_pixel); + + PF_Err (*subpixel_sample_float)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_PixelFloat *dst_pixel); + + PF_Err (*area_sample_float)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_Fixed x, + PF_Fixed y, + const PF_SampPB *params, + PF_PixelFloat *dst_pixel); + +} PF_SamplingFloatSuite1; + + + + +#define kPFWorldSuite "PF World Suite" +#define kPFWorldSuiteVersion2 2 /* frozen in AE 7.0 */ + + +typedef struct PF_WorldSuite2 { + + PF_Err (*PF_NewWorld)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_long widthL, + A_long heightL, + PF_Boolean clear_pixB, + PF_PixelFormat pixel_format, + PF_EffectWorld *worldP); + + PF_Err (*PF_DisposeWorld)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *worldP); + + + PF_Err (*PF_GetPixelFormat)( + const PF_EffectWorld *worldP, /* the pixel buffer of interest */ + PF_PixelFormat *pixel_formatP); /* << OUT. one of the above PF_PixelFormat types */ + + +} PF_WorldSuite2; + + + + + +#define kPFPixelFormatSuite "PF Pixel Format Suite" +#define kPFPixelFormatSuiteVersion2 2 + + +// call during global setup + +typedef struct PF_PixelFormatSuite2 { + + PF_Err (*PF_AddSupportedPixelFormat)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_PixelFormat pixel_format); /* add a supported pixel format */ + + + PF_Err (*PF_ClearSupportedPixelFormats)( + PF_ProgPtr effect_ref); /* reference from in_data */ + +} PF_PixelFormatSuite2; + + + + + +#define kPFWorldSuite "PF World Suite" +#define kPFWorldSuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_WorldSuite1 { + + PF_Err (*new_world)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_long width, + A_long height, + PF_NewWorldFlags flags, /* should would be pre-cleared to zeroes */ + PF_EffectWorld *world); /* always 32 bit */ + + PF_Err (*dispose_world)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *world); + + +} PF_WorldSuite1; + + + +#define kPFIterate8Suite "PF Iterate8 Suite" +#define kPFIterate8SuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_Iterate8Suite1 { + PF_Err (*iterate)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void* refcon, + PF_Err (*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out), + PF_EffectWorld *dst); + + + PF_Err (*iterate_origin)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void* refcon, + PF_Err (*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out), + PF_EffectWorld *dst); + + PF_Err (*iterate_lut)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + A_u_char *a_lut0, /* pass NULL for identity */ + A_u_char *r_lut0, /* pass NULL for identity */ + A_u_char *g_lut0, /* pass NULL for identity */ + A_u_char *b_lut0, /* pass NULL for identity */ + PF_EffectWorld *dst); + + PF_Err (*iterate_origin_non_clip_src)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void* refcon, + PF_Err (*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out), + PF_EffectWorld *dst); + + PF_Err (*iterate_generic)( + A_long iterationsL, /* >> */ // can be PF_Iterations_ONCE_PER_PROCESSOR + void *refconPV, /* >> */ + PF_Err (*fn_func)( void *refconPV, /* >> */ + A_long thread_indexL, // only call abort and progress from thread_indexL == 0. + A_long i, + A_long iterationsL)); // never sends PF_Iterations_ONCE_PER_PROCESSOR + +} PF_Iterate8Suite1; + +#define kPFIterate8SuiteVersion2 2 /* frozen in AE 22.0 */ + +typedef struct PF_Iterate8Suite2 { + PF_Err(*iterate)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void *refcon, + PF_Err(*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel* in, PF_Pixel* out), + PF_EffectWorld *dst); + + + PF_Err(*iterate_origin)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void *refcon, + PF_Err(*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel* in, PF_Pixel* out), + PF_EffectWorld *dst); + + PF_Err(*iterate_lut)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + A_u_char *a_lut0, /* pass NULL for identity */ + A_u_char *r_lut0, /* pass NULL for identity */ + A_u_char *g_lut0, /* pass NULL for identity */ + A_u_char *b_lut0, /* pass NULL for identity */ + PF_EffectWorld *dst); + + PF_Err(*iterate_origin_non_clip_src)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void *refcon, + PF_Err(*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel* in, PF_Pixel* out), + PF_EffectWorld *dst); + + PF_Err(*iterate_generic)( + A_long iterationsL, /* >> */ // can be PF_Iterations_ONCE_PER_PROCESSOR + void *refconPV, /* >> */ + PF_Err(*fn_func)( + void *refconPV, /* >> */ + A_long thread_indexL, // only call abort and progress from thread_indexL == 0. + A_long i, + A_long iterationsL)); // never sends PF_Iterations_ONCE_PER_PROCESSOR + +} PF_Iterate8Suite2; + +#define kPFIterate16Suite "PF iterate16 Suite" +#define kPFIterate16SuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_iterate16Suite1 { + PF_Err (*iterate)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void* refcon, + PF_Err (*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out), + PF_EffectWorld *dst); + + + PF_Err (*iterate_origin)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void* refcon, + PF_Err (*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out), + PF_EffectWorld *dst); + + PF_Err (*iterate_origin_non_clip_src)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void* refcon, + PF_Err (*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out), + PF_EffectWorld *dst); + +} PF_Iterate16Suite1; + +#define kPFIterate16SuiteVersion2 2 /* frozen in AE 22.0 */ + +typedef struct PF_iterate16Suite2 { + PF_Err(*iterate)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void *refcon, + PF_Err(*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel16* in, PF_Pixel16* out), + PF_EffectWorld *dst); + + + PF_Err(*iterate_origin)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void *refcon, + PF_Err(*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel16* in, PF_Pixel16* out), + PF_EffectWorld *dst); + + PF_Err(*iterate_origin_non_clip_src)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void *refcon, + PF_Err(*pix_fn)(void* refcon, A_long x, A_long y, PF_Pixel16* in, PF_Pixel16* out), + PF_EffectWorld *dst); + +} PF_Iterate16Suite2; + +#define kPFIterateFloatSuite "PF iterateFloat Suite" +#define kPFIterateFloatSuiteVersion1 1 /* frozen in AE 7.0 */ + + +typedef struct PF_iterateFloatSuite1 { + PF_Err (*iterate)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void* refcon, + PF_IteratePixelFloatFunc pix_fn, + PF_EffectWorld *dst); + + + PF_Err (*iterate_origin)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void* refcon, + PF_IteratePixelFloatFunc pix_fn, + PF_EffectWorld *dst); + + PF_Err (*iterate_origin_non_clip_src)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void* refcon, + PF_IteratePixelFloatFunc pix_fn, + PF_EffectWorld *dst); + +} PF_IterateFloatSuite1; + +#define kPFIterateFloatSuiteVersion2 2 /* frozen in AE 22.0 */ + +typedef struct PF_iterateFloatSuite2 { + PF_Err (*iterate)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + void* refcon, + PF_IteratePixelFloatFunc pix_fn, + PF_EffectWorld *dst); + + + PF_Err (*iterate_origin)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + const PF_Point *origin, + void* refcon, + PF_IteratePixelFloatFunc pix_fn, + PF_EffectWorld *dst); + + PF_Err (*iterate_origin_non_clip_src)( + PF_InData *in_data, + A_long progress_base, + A_long progress_final, + PF_EffectWorld *src, + const PF_Rect *area, + const PF_Point *origin, + void* refcon, + PF_IteratePixelFloatFunc pix_fn, + PF_EffectWorld *dst); + +} PF_IterateFloatSuite2; + +#define kPFWorldTransformSuite "PF World Transform Suite" +#define kPFWorldTransformSuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct PF_WorldTransformSuite1 { + + PF_Err (*composite_rect)( + PF_ProgPtr effect_ref, /* from in_data */ + PF_Rect *src_rect, /* rectangle in source image */ + A_long src_opacity, /* opacity of src */ + PF_EffectWorld *source_wld, /* src PF world */ + A_long dest_x, /* upper left-hand corner of src rect...*/ + A_long dest_y, /* ... in composite image */ + PF_Field field_rdr, /* which scanlines to render (all, upper, lower) */ + PF_XferMode xfer_mode, /* Copy, Composite Behind, Composite In Front */ + PF_EffectWorld *dest_wld); /* Destination buffer. Already filled */ + + PF_Err (*blend)( + PF_ProgPtr effect_ref, /* reference from in_data */ + const PF_EffectWorld *src1, + const PF_EffectWorld *src2, + PF_Fixed ratio, /* 0 == full src1, 0x00010000 == full src2 */ + PF_EffectWorld *dst); + + PF_Err (*convolve)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + const PF_Rect *area, /* pass NULL for all pixels */ + PF_KernelFlags flags, + A_long kernel_size, + void *a_kernel, + void *r_kernel, + void *g_kernel, + void *b_kernel, + PF_EffectWorld *dst); + + PF_Err (*copy)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + PF_EffectWorld *dst, + PF_Rect *src_r, /* pass NULL for whole world */ + PF_Rect *dst_r); /* pass NULL for whole world */ + + PF_Err (*copy_hq)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + PF_EffectWorld *dst, + PF_Rect *src_r, /* pass NULL for whole world */ + PF_Rect *dst_r); /* pass NULL for whole world */ + + + PF_Err (*transfer_rect)( + PF_ProgPtr effect_ref, + PF_Quality quality, + PF_ModeFlags m_flags, + PF_Field field, + const PF_Rect *src_rec, + const PF_EffectWorld *src_world, + const PF_CompositeMode *comp_mode, + const PF_MaskWorld *mask_world0, + A_long dest_x, + A_long dest_y, + PF_EffectWorld *dst_world); + + PF_Err (*transform_world)( + PF_ProgPtr effect_ref, + PF_Quality quality, + PF_ModeFlags m_flags, + PF_Field field, + const PF_EffectWorld *src_world, + const PF_CompositeMode *comp_mode, + const PF_MaskWorld *mask_world0, + const PF_FloatMatrix *matrices, + A_long num_matrices, + PF_Boolean src2dst_matrix, + const PF_Rect *dest_rect, + PF_EffectWorld *dst_world); + + +} PF_WorldTransformSuite1; + + +#define kPFFillMatteSuite "PF Fill Matte Suite" + + +#define kPFFillMatteSuiteVersion2 2 /* frozen in AE 7.0 */ +typedef struct PF_FillMatteSuite2 { + + PF_Err (*fill)( + PF_ProgPtr effect_ref, /* reference from in_data */ + const PF_Pixel *color, + const PF_Rect *dst_rect, /* pass NULL for whole world */ + PF_EffectWorld *world); + + PF_Err (*fill16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + const PF_Pixel16 *color, + const PF_Rect *dst_rect, /* pass NULL for whole world */ + PF_EffectWorld *world); + + PF_Err (*fill_float)( + PF_ProgPtr effect_ref, /* reference from in_data */ + const PF_PixelFloat *color, + const PF_Rect *dst_rect, /* pass NULL for whole world */ + PF_EffectWorld *world); + + PF_Err (*premultiply)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_long forward, /* TRUE means convert non-premul to premul, FALSE mean reverse */ + PF_EffectWorld *dst); + + PF_Err (*premultiply_color)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + const PF_Pixel *color, /* color to premultiply/unmultiply with */ + A_long forward, /* TRUE means convert non-premul to premul, FALSE mean reverse */ + PF_EffectWorld *dst); + + PF_Err (*premultiply_color16)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + const PF_Pixel16 *color, /* color to premultiply/unmultiply with */ + A_long forward, /* TRUE means convert non-premul to premul, FALSE mean reverse */ + PF_EffectWorld *dst); + + PF_Err (*premultiply_color_float)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *src, + const PF_PixelFloat *color, /* color to premultiply/unmultiply with */ + A_long forward, /* TRUE means convert non-premul to premul, FALSE mean reverse */ + PF_EffectWorld *dst); + +} PF_FillMatteSuite2; + + + +#ifdef __cplusplus + } // end extern "C" +#endif + + + +#include + + +#endif + diff --git a/External/AE SDK/Headers/AE_EffectGPUSuites.h b/External/AE SDK/Headers/AE_EffectGPUSuites.h new file mode 100644 index 00000000..9874b46f --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectGPUSuites.h @@ -0,0 +1,221 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2018 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _H_AE_EffectGPUSuites +#define _H_AE_EffectGPUSuites + +#include +#include + +#include + +#ifdef __cplusplus + extern "C" { +#endif + + +#define PF_CUDAVersion 10010 + + +#define kPFGPUDeviceSuite "PF GPU Device Suite" +#define kPFGPUDeviceSuiteVersion1 1 /* frozen in AE 16.0 */ + +typedef struct +{ + PF_GPU_Framework device_framework; + PF_Boolean compatibleB; // device meets minimum requriement for acceleration + + void* platformPV; // cl_platform_id + void* devicePV; // CUdevice or cl_device_id or MTLDevice + void* contextPV; // CUcontext or cl_context + void* command_queuePV; // CUstream or cl_command_queue or MTLCommandQueue + void* offscreen_opengl_contextPV; // CGLContextObj or HGLRC - only available on the primary device + void* offscreen_opengl_devicePV; // HDC - only available on the primary device + +} PF_GPUDeviceInfo; + + + +typedef struct PF_GPUDeviceSuite1 { + + /** + ** This will return the number of gpu devices the host supports. + ** + ** @param effect_ref Comes with PF_InData. + ** @param device_countP Return number of devices available. + */ + SPAPI PF_Err (*GetDeviceCount)( PF_ProgPtr effect_ref, + A_u_long *device_countP); /* << */ + + /** + ** This will return the device info with given device index, which includes necessary context/queue information + ** needed to dispatch task to the device. Refer PF_GPUDeviceInfo for details. + ** + ** @param effect_ref Comes with PF_InData. + ** @param device_index The device index for the requested device. + ** @param PF_GPUDeviceInfo The device info will to be filled. + */ + SPAPI PF_Err (*GetDeviceInfo)( PF_ProgPtr effect_ref, + A_u_long device_index, + PF_GPUDeviceInfo *device_infoP); /* << */ + + + /** + ** Acquire/release exclusive access to inDeviceIndex. All calls below this point generally require access be held. + ** For full GPU plugins (those that use a separate entry point for GPU rendering) exclusive access is always held. + ** These calls do not need to be made in that case. + ** For CUDA calls cuCtxPushCurrent/cuCtxPopCurrent on the current thread to manage the devices context. + */ + SPAPI PF_Err (*AcquireExclusiveDeviceAccess)( PF_ProgPtr effect_ref, + A_u_long device_index); + + SPAPI PF_Err (*ReleaseExclusiveDeviceAccess)( PF_ProgPtr effect_ref, + A_u_long device_index); + + /** + ** All device memory must be allocated through this suite. + ** Purge should be called only in emergency situations when working with GPU memory + ** that cannot be allocated through this suite (eg OpenGL memory). + ** Returned pointer value represents memory allocated through cuMemAlloc or clCreateBuffer. + */ + + SPAPI PF_Err (*AllocateDeviceMemory)( PF_ProgPtr effect_ref, + A_u_long device_index, + size_t size_bytes, + void **memoryPP); /* << */ + + SPAPI PF_Err (*FreeDeviceMemory)( PF_ProgPtr effect_ref, + A_u_long device_index, + void *memoryP); + + SPAPI PF_Err (*PurgeDeviceMemory)( PF_ProgPtr effect_ref, + A_u_long device_index, + size_t size_bytes, + size_t *bytes_purgedP0); /* << */ + + /** + ** All host (pinned) memory must be allocated through this suite. + ** Purge should be called only in emergency situations when working with GPU memory + ** that cannot be allocated through this suite (eg OpenGL memory). + ** Returned pointer value represents memory allocated through cuMemHostAlloc or malloc. + */ + SPAPI PF_Err (*AllocateHostMemory)( PF_ProgPtr effect_ref, + A_u_long device_index, + size_t size_bytes, + void **memoryPP); /* << */ + + + SPAPI PF_Err (*FreeHostMemory)( PF_ProgPtr effect_ref, + A_u_long device_index, + void *memoryP); + + + SPAPI PF_Err (*PurgeHostMemory)( PF_ProgPtr effect_ref, + A_u_long device_index, + size_t bytes_to_purge, + size_t *bytes_purgedP0); /* << */ + + /** + ** This will allocate a gpu effect world. Caller is responsible for deallocating the buffer with + ** PF_GPUDeviceSuite1::DisposeGPUWorld. + ** + ** @param effect_ref Comes with PF_InData. + ** @param device_index The device you want your gpu effect world allocated with. + ** @param width Width of the effect world. + ** @param height Height of the effect world. + ** @param pixel_aspect_ratio Pixel Aspect Ratio of the effect world. + ** @param field_type The field of the effect world. + ** @param pixel_format The pixel format of the effect world, only gpu formats are accepted. + ** @param clear_pixB Pass in 'true' for a transparent black frame. + ** @param worldPP The handle to the effect world to be created. + */ + SPAPI PF_Err (*CreateGPUWorld)( PF_ProgPtr effect_ref, + A_u_long device_index, + A_long width, + A_long height, + PF_RationalScale pixel_aspect_ratio, + PF_Field field_type, + PF_PixelFormat pixel_format, + PF_Boolean clear_pixB, + PF_EffectWorld **worldPP); /* << */ + + + /** + ** This will free this effect world. The effect world is no longer valid after this function is called. + ** Plugin module is only allowed to dispose of effect worlds they create. + ** + ** @param effect_ref Comes with PF_InData. + ** @param worldP The effect world you want to dispose. + */ + SPAPI PF_Err (*DisposeGPUWorld)( PF_ProgPtr effect_ref, + PF_EffectWorld *worldP); + + + /** + ** This will return the gpu buffer address of the given effect world. + ** + ** @param effect_ref Comes with PF_InData. + ** @param worldP The effect world you want to operate on, has to be a gpu effect world. + ** @param pixPP Returns the gpu buffer address. + */ + SPAPI PF_Err (*GetGPUWorldData)( PF_ProgPtr effect_ref, + PF_EffectWorld *worldP, + void **pixPP); /* << */ + + /** + ** This will return the size of the total data in the effect world. + ** + ** @param effect_ref Comes with PF_InData. + ** @param worldP The effect world you want to operate on, has to be a gpu effect world. + ** @param device_indexP Returns the size of the total data in the effect world. + */ + SPAPI PF_Err (*GetGPUWorldSize)( PF_ProgPtr effect_ref, + PF_EffectWorld *worldP, + size_t *size_in_bytesP); /* << */ + + + /** + ** This will return device index the gpu effect world is associated with. + ** + ** @param effect_ref Comes with PF_InData. + ** @param worldP The effect world you want to operate on, has to be a gpu effect world. + ** @param device_indexP Returns the device index of the given effect world. + */ + SPAPI PF_Err (*GetGPUWorldDeviceIndex)( PF_ProgPtr effect_ref, + PF_EffectWorld *worldP, + A_u_long *device_indexP); /* << */ + + +} PF_GPUDeviceSuite1; + + + +/**********************************************************/ +/**********************************************************/ + +#ifdef __cplusplus + } +#endif + + +#include + +#endif diff --git a/External/AE SDK/Headers/AE_EffectPixelFormat.h b/External/AE SDK/Headers/AE_EffectPixelFormat.h new file mode 100644 index 00000000..44635a64 --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectPixelFormat.h @@ -0,0 +1,110 @@ +#ifndef _H_AE_PIXEL_FORMAT +#define _H_AE_PIXEL_FORMAT + +#include "A.h" + +/* data types for PF_EffectWorlds that are not just 8bpc ARGB + * + * see AE_EffectCBSuites.h for more details + * + */ + +#ifndef MAKE_PIXEL_FORMAT_FOURCC + +#define MAKE_PIXEL_FORMAT_FOURCC(ch0, ch1, ch2, ch3) \ + ((A_u_long)(A_u_char)(ch0) | ((A_u_long)(A_u_char)(ch1) << 8) | \ + ((A_u_long)(A_u_char)(ch2) << 16) | ((A_u_long)(A_u_char)(ch3) << 24 )) + +#endif + + +// +// note! MAKE_PIXEL_FORMAT_FOURCC('a', 'r', 'g', 'b') does not give the same result +// as the literal 'argb' in your compiler +// +// MS image compression interfaces define FOURCC this way (unlike QuickTime) so please +// be careful and use the enums as defined rather than rolling your own. +// + +enum { + PF_PixelFormat_ARGB32 = MAKE_PIXEL_FORMAT_FOURCC('a', 'r', 'g', 'b'), // After Effects-style ARGB, 8 bits per channel, range 0...255 + // trillions of pixels served since 1992. support required for After Effects + + PF_PixelFormat_ARGB64 = MAKE_PIXEL_FORMAT_FOURCC('a', 'e', '1', '6'), // After Effects-style ARGB, 16 bits per channel, range 0...32768 + PF_PixelFormat_ARGB128 = MAKE_PIXEL_FORMAT_FOURCC('a', 'e', '3', '2'), // After Effects-style ARGB, 32 bits floating point per channel, 1.0 is "white" + + + /* -------------------------------------------------------------------------------------- */ + + PF_PixelFormat_GPU_BGRA128 = MAKE_PIXEL_FORMAT_FOURCC('@', 'C', 'D', 'A'), // GPU, BGRA, 32 bits floating point per channel. + + PF_PixelFormat_RESERVED = MAKE_PIXEL_FORMAT_FOURCC('@', 'C', 'D', 'a'), // reserved for future use. + + /* -------------------------------------------------------------------------------------- */ + + PF_PixelFormat_BGRA32 = MAKE_PIXEL_FORMAT_FOURCC('b', 'g', 'r', 'a'), // Premiere-style BGRA, 8 bits per channel. Premiere-only; support required for Premiere + PF_PixelFormat_VUYA32 = MAKE_PIXEL_FORMAT_FOURCC('v', 'u', 'y', 'a'), // Premiere-style YUVA, 8 bits per channel. Premiere-only + + PF_PixelFormat_NTSCDV25 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'n', '2'), // compressed DV-25. Premiere only. + PF_PixelFormat_PALDV25 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'p', '2'), // compressed DV-25. Premiere only. + + PF_PixelFormat_INVALID = MAKE_PIXEL_FORMAT_FOURCC('b', 'a', 'd', 'f'), // invalid pixel format - this is used for intialization and error conditions + + + PF_PixelFormat_FORCE_LONG_INT = 0xFFFFFFFF +}; + +typedef A_long PF_PixelFormat; + + +#ifdef PREMIERE +// for Premiere-specific pixel format support +// some of these are aliases of formats already available as a PF_PixelFormat + +#ifndef PRSDKPIXELFORMAT_H +typedef PF_PixelFormat PrPixelFormat; + +enum { + // Uncompressed formats - these are most common for effects + PrPixelFormat_BGRA_4444_8u = PF_PixelFormat_BGRA32, + PrPixelFormat_VUYA_4444_8u = PF_PixelFormat_VUYA32, + PrPixelFormat_ARGB_4444_8u = PF_PixelFormat_ARGB32, + PrPixelFormat_BGRA_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('B', 'g', 'r', 'a'), // 16 bit integer per component BGRA + PrPixelFormat_VUYA_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('V', 'u', 'y', 'a'), // 16 bit integer per component VUYA + PrPixelFormat_ARGB_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('A', 'r', 'g', 'b'), // 16 bit integer per component ARGB + PrPixelFormat_BGRA_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('B', 'G', 'r', 'a'), // 32 bit float per component BGRA + PrPixelFormat_VUYA_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('V', 'U', 'y', 'a'), // 32 bit float per component VUYA + PrPixelFormat_ARGB_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('A', 'R', 'g', 'b'), // 32 bit float per component ARGB + + // Packed formats + PrPixelFormat_YUYV_422_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('y', 'u', 'y', '2'), // 8 bit 422 YUY2 601 colorspace + PrPixelFormat_YUYV_422_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('y', 'u', 'y', '3'), // 8 bit 422 YUY2 709 colorspace + PrPixelFormat_UYVY_422_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('u', 'y', 'v', 'y'), // 8 bit 422 UYVY 601 colorspace + PrPixelFormat_UYVY_422_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('u', 'y', 'v', '7'), // 8 bit 422 UYVY 709 colorspace + PrPixelFormat_V210_422_10u_601 = MAKE_PIXEL_FORMAT_FOURCC('v', '2', '1', '0'), // packed uncompressed 10 bit 422 YUV aka V210 601 colorspace + PrPixelFormat_V210_422_10u_709 = MAKE_PIXEL_FORMAT_FOURCC('v', '2', '1', '1'), + + // Planar formats + PrPixelFormat_YUV_420_MPEG2_FRAME_PICTURE_PLANAR_8u = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', '1', '2'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) + PrPixelFormat_YUV_420_MPEG2_FIELD_PICTURE_PLANAR_8u = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', 'i', '2'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) + + // Compressed formats + PrPixelFormat_NTSCDV25 = PF_PixelFormat_NTSCDV25, // compressed DV-25 + PrPixelFormat_PALDV25 = PF_PixelFormat_PALDV25, // compressed DV-25 + PrPixelFormat_720pDV100 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', '7', '1'), // compressed DV-100 720p + PrPixelFormat_1080iDV100 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', '1', '1'), // compressed DV-100 1080i + + // Raw, opaque data formats + PrPixelFormat_Raw = MAKE_PIXEL_FORMAT_FOURCC('r', 'a', 'w', 'w'), // raw, opaque data, with no row bytes or height + + // Invalid + PrPixelFormat_Invalid = PF_PixelFormat_INVALID, // invalid pixel format - this is used for intialization and error conditions + + PrPixelFormat_Any = 0 +}; + +#endif // PRSDKPIXELFORMAT_H + +#endif // PREMIERE + +#endif // AE_PixelFormat diff --git a/External/AE SDK/Headers/AE_EffectSuites.h b/External/AE SDK/Headers/AE_EffectSuites.h new file mode 100644 index 00000000..63a85492 --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectSuites.h @@ -0,0 +1,728 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _H_AE_EffectSuites +#define _H_AE_EffectSuites + +#include +#include // for PF_CursorType +#include + +#include + +#ifdef __cplusplus + extern "C" { +#endif + + + +#define kPFPathQuerySuite "PF Path Query Suite" +#define kPFPathQuerySuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct PF_PathOutline *PF_PathOutlinePtr; +typedef struct PF_PathSegPrep *PF_PathSegPrepPtr; + +typedef struct PF_PathQuerySuite1 { + + SPAPI PF_Err (*PF_NumPaths)( PF_ProgPtr effect_ref, + A_long *num_pathsPL); /* << */ + + SPAPI PF_Err (*PF_PathInfo)( PF_ProgPtr effect_ref, + A_long indexL, + PF_PathID *unique_idP); /* << */ + + SPAPI PF_Err (*PF_CheckoutPath)( PF_ProgPtr effect_ref, + PF_PathID unique_id, + A_long what_time, + A_long time_step, + A_u_long time_scale, + PF_PathOutlinePtr *pathPP); /* << */ // can return NULL ptr if path doesn't exist + + SPAPI PF_Err (*PF_CheckinPath)( PF_ProgPtr effect_ref, + PF_PathID unique_id, + PF_Boolean changedB, + PF_PathOutlinePtr pathP); + +} PF_PathQuerySuite1; + + + +/* -------------------------------------------------------------------- */ + + +#define kPFPathDataSuite "PF Path Data Suite" +#define kPFPathDataSuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct { + + PF_FpLong x, y; + PF_FpLong tan_in_x, tan_in_y; + PF_FpLong tan_out_x, tan_out_y; + +} PF_PathVertex; + +#define PF_MAX_PATH_NAME_LEN 31 + + +typedef struct PF_PathDataSuite1 { + + SPAPI PF_Err (*PF_PathIsOpen)( PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + PF_Boolean *openPB); + + // N segments means there are segments [0..N-1]; segment J is defined by vertex J & J+1 + SPAPI PF_Err (*PF_PathNumSegments)( PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + A_long *num_segmentsPL); + + // which_pointL range: [0..num_segments]; for closed paths vertex[0] == vertex[num_segments] + SPAPI PF_Err (*PF_PathVertexInfo)( PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + A_long which_pointL, + PF_PathVertex *vertexP); + + SPAPI PF_Err (*PF_PathPrepareSegLength)( + PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + A_long which_segL, + A_long frequencyL, + PF_PathSegPrepPtr *lengthPrepPP); + + SPAPI PF_Err (*PF_PathGetSegLength)( PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + A_long which_segL, + PF_PathSegPrepPtr *lengthPrepP0, + PF_FpLong *lengthPF); + + SPAPI PF_Err (*PF_PathEvalSegLength)(PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + PF_PathSegPrepPtr *lengthPrepPP0, + A_long which_segL, + PF_FpLong lengthF, + PF_FpLong *x, + PF_FpLong *y); + + SPAPI PF_Err (*PF_PathEvalSegLengthDeriv1)( + PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + PF_PathSegPrepPtr *lengthPrepPP0, + A_long which_segL, + PF_FpLong lengthF, + PF_FpLong *x, + PF_FpLong *y, + PF_FpLong *deriv1x, + PF_FpLong *deriv1y); + + + SPAPI PF_Err (*PF_PathCleanupSegLength)( + PF_ProgPtr effect_ref0, + PF_PathOutlinePtr pathP, + A_long which_segL, + PF_PathSegPrepPtr *lengthPrepPP); + + + SPAPI PF_Err (*PF_PathIsInverted)( PF_ProgPtr effect_ref, + PF_PathID unique_id, + PF_Boolean *invertedB); + + SPAPI PF_Err (*PF_PathGetMaskMode)( PF_ProgPtr effect_ref, + PF_PathID unique_id, + PF_MaskMode *modeP); + + SPAPI PF_Err (*PF_PathGetName)( PF_ProgPtr effect_ref, + PF_PathID unique_id, + A_char *nameZ); /* << can be up to PF_MAX_PATH_NAME_LEN+1 bytes long */ + + +} PF_PathDataSuite1; + + +/* -------------------------------------------------------------------- */ + +// New versions of state related APIs added in CS6 + +#define kPFParamUtilsSuite "PF Param Utils Suite" +#define kPFParamUtilsSuiteVersion3 3 // Frozen in AE CS6 [aka AE11.0] + +typedef struct { + A_long reservedAL[4]; +} PF_State; + + +#define PF_ParamIndex_NONE (-1L) +#define PF_ParamIndex_CHECK_ALL (-2L) +#define PF_ParamIndex_CHECK_ALL_EXCEPT_LAYER_PARAMS (-3L) +#define PF_ParamIndex_CHECK_ALL_HONOR_EXCLUDE (-4L) // Like PF_ParamIndex_CHECK_ALL, but honor PF_ParamFlag_EXCLUDE_FROM_HAVE_INPUTS_CHANGED + +#define PF_KeyIndex_NONE (-1L) + + +enum { + PF_TimeDir_GREATER_THAN = 0x0000, + PF_TimeDir_LESS_THAN = 0x0001, + PF_TimeDir_GREATER_THAN_OR_EQUAL = 0x1000, + PF_TimeDir_LESS_THAN_OR_EQUAL = 0x1001 +}; +typedef A_long PF_TimeDir; + +typedef A_long PF_KeyIndex; + + +/** PF_ParamUtilsSuite3 + + PF_UpdateParamUI() + + You can call this function for each param whose UI settings you + want to change when handling a PF_Cmd_USER_CHANGED_PARAM or + PF_Cmd_UPDATE_PARAMS_UI. These changes are cosmetic only, and don't + go into the undo buffer. + + The ONLY fields that can be changed in this way are: + + PF_ParamDef + ui_flags: PF_PUI_ECW_SEPARATOR, PF_PUI_DISABLED only (and PF_PUI_INVISIBLE in Premiere). + ui_width + ui_height + name + flags: PF_ParamFlag_COLLAPSE_TWIRLY only + + PF_ParamDefUnion: + slider_min, slider_max, precision, display_flags of any slider type + + For PF_PUI_STD_CONTROL_ONLY params, you can also change the value field by setting + PF_ChangeFlag_CHANGED_VALUE before returning. But you are not allowed to change + the value during PF_Cmd_UPDATE_PARAMS_UI. + + PF_GetCurrentState() / PF_AreStatesIdentical() + This API lets you determine if a set of your inputs (either layers, other properties, or both) + are different between when you first called PF_GetCurrentState() and a current call, so it can + be used for caching. You can specify a range of time to consider or all of time. + + For effects that do simulation across time and therefore set PF_OutFlag2_AUTOMATIC_WIDE_TIME_INPUT, + when you ask about a time range, it will be expanded to include any times needed to produce + that range. + + See doc on the old PF_HaveInputsChangedOverTimeSpan() for historical context. + +**/ + +typedef struct PF_ParamUtilsSuite3 { + + SPAPI PF_Err (*PF_UpdateParamUI)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + const PF_ParamDef *defP); + + // IMPORTANT: as of 13.5 to avoid threading deadlock problems, PF_GetCurrentState() returns a random state + // if used in the context of UPDATE_PARAMS_UI only. In other selectors this will behave normally. + SPAPI PF_Err (*PF_GetCurrentState)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + const A_Time *startPT0, // NULL for both start & duration means over all of time + const A_Time *durationPT0, + PF_State *stateP); /* << */ + + SPAPI PF_Err (*PF_AreStatesIdentical)( + PF_ProgPtr effect_ref, + const PF_State *state1P, + const PF_State *state2P, + A_Boolean *samePB); /* << */ + + SPAPI PF_Err (*PF_IsIdenticalCheckout)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + A_long what_time1, + A_long time_step1, + A_u_long time_scale1, + A_long what_time2, + A_long time_step2, + A_u_long time_scale2, + PF_Boolean *identicalPB); /* << */ + + SPAPI PF_Err (*PF_FindKeyframeTime)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + A_long what_time, + A_u_long time_scale, + PF_TimeDir time_dir, + PF_Boolean *foundPB, /* << */ + PF_KeyIndex *key_indexP0, /* << */ + A_long *key_timeP0, /* << */ // you can ask for either: + A_u_long *key_timescaleP0); /* << */ // time×cale OR neither + + SPAPI PF_Err (*PF_GetKeyframeCount)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + PF_KeyIndex *key_countP); /* << */ // returns PF_KeyIndex_NONE for constant + + SPAPI PF_Err (*PF_CheckoutKeyframe)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + PF_KeyIndex key_index, // zero-based + A_long *key_timeP0, /* << */ // you can ask for either: + A_u_long *key_timescaleP0, /* << */ // time×cale OR neither + PF_ParamDef *paramP0); /* << */ + + SPAPI PF_Err (*PF_CheckinKeyframe)( + PF_ProgPtr effect_ref, + PF_ParamDef *paramP); + + SPAPI PF_Err (*PF_KeyIndexToTime)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + PF_KeyIndex key_indexP, /* >> */ + A_long *key_timeP, /* >> */ + A_u_long *key_timescaleP); /* << */ + +} PF_ParamUtilsSuite3; + + + + +/* -------------------------------------------------------------------- */ + + +#define kPFColorParamSuite "PF ColorParamSuite" +#define kPFColorParamSuiteVersion1 1 /* frozen in AE 7.0 */ + +/** PF_ColorParamSuite1 + +**/ + +typedef struct PF_ColorParamSuite1 { + + // floating point color is in the working space of + // your effect, i.e. the same color space + // as the pixels you get + + // note that overrange and underrange values are possible + // even when project is not set to 32bpc + + SPAPI PF_Err (*PF_GetFloatingPointColorFromColorDef)( + PF_ProgPtr effect_ref, /* >> */ + const PF_ParamDef *color_defP, /* >> */ + PF_PixelFloat *fp_colorP); /* << */ + +} PF_ColorParamSuite1; + + + + +/* -------------------------------------------------------------------- */ + +#define kPFPointParamSuite "PF PointParamSuite" +#define kPFPointParamSuiteVersion1 1 /* frozen in AE 10.5 */ + +/** PF_PointParamSuite1 + +**/ + +typedef struct PF_PointParamSuite1 { + + // this api returns floating point value of a point parameter. + + SPAPI PF_Err (*PF_GetFloatingPointValueFromPointDef)( + PF_ProgPtr effect_ref, /* >> */ + const PF_ParamDef *point_defP, /* >> */ + A_FloatPoint *fp_pointP); /* << */ + +} PF_PointParamSuite1; + + +/* -------------------------------------------------------------------- */ + +#define kPFAngleParamSuite "PF AngleParamSuite" +#define kPFAngleParamSuiteVersion1 1 /* frozen in AE 11.0.x */ + +/** PF_AngleParamSuite1 + +**/ + +typedef struct PF_AngleParamSuite1 { + + // this api returns floating point value of an angle parameter. + + SPAPI PF_Err (*PF_GetFloatingPointValueFromAngleDef)( + PF_ProgPtr effect_ref, /* >> */ + const PF_ParamDef *angle_defP, /* >> */ + A_FpLong *fp_valueP); /* << */ + +} PF_AngleParamSuite1; + + +/* -------------------------------------------------------------------- */ + +#define kPFAppSuite "PF AE App Suite" +#define kPFAppSuiteVersion6 1 /* frozen in AE 13.1 */ + +enum { + PF_App_Color_NONE = -1, + + PF_App_Color_FRAME, + PF_App_Color_FILL, + PF_App_Color_TEXT, + PF_App_Color_LIGHT_TINGE, + PF_App_Color_DARK_TINGE, + PF_App_Color_HILITE, + PF_App_Color_SHADOW, + + PF_App_Color_BUTTON_FRAME, + PF_App_Color_BUTTON_FILL, + PF_App_Color_BUTTON_TEXT, + PF_App_Color_BUTTON_LIGHT_TINGE, + PF_App_Color_BUTTON_DARK_TINGE, + PF_App_Color_BUTTON_HILITE, + PF_App_Color_BUTTON_SHADOW, + + PF_App_Color_BUTTON_PRESSED_FRAME, + PF_App_Color_BUTTON_PRESSED_FILL, + PF_App_Color_BUTTON_PRESSED_TEXT, + PF_App_Color_BUTTON_PRESSED_LIGHT_TINGE, + PF_App_Color_BUTTON_PRESSED_DARK_TINGE, + PF_App_Color_BUTTON_PRESSED_HILITE, + PF_App_Color_BUTTON_PRESSED_SHADOW, + + /********************************/ + + PF_App_Color_FRAME_DISABLED, + PF_App_Color_FILL_DISABLED, + PF_App_Color_TEXT_DISABLED, + PF_App_Color_LIGHT_TINGE_DISABLED, + PF_App_Color_DARK_TINGE_DISABLED, + PF_App_Color_HILITE_DISABLED, + PF_App_Color_SHADOW_DISABLED, + + PF_App_Color_BUTTON_FRAME_DISABLED, + PF_App_Color_BUTTON_FILL_DISABLED, + PF_App_Color_BUTTON_TEXT_DISABLED, + PF_App_Color_BUTTON_LIGHT_TINGE_DISABLED, + PF_App_Color_BUTTON_DARK_TINGE_DISABLED, + PF_App_Color_BUTTON_HILITE_DISABLED, + PF_App_Color_BUTTON_SHADOW_DISABLED, + + PF_App_Color_BUTTON_PRESSED_FRAME_DISABLED, + PF_App_Color_BUTTON_PRESSED_FILL_DISABLED, + PF_App_Color_BUTTON_PRESSED_TEXT_DISABLED, + PF_App_Color_BUTTON_PRESSED_LIGHT_TINGE_DISABLED, + PF_App_Color_BUTTON_PRESSED_DARK_TINGE_DISABLED, + PF_App_Color_BUTTON_PRESSED_HILITE_DISABLED, + PF_App_Color_BUTTON_PRESSED_SHADOW_DISABLED, + + /********************************/ + PF_App_Color_BLACK, + PF_App_Color_WHITE, + PF_App_Color_GRAY, + PF_App_Color_RED, + PF_App_Color_YELLOW, + PF_App_Color_GREEN, + PF_App_Color_CYAN, + + /********************************/ + PF_App_Color_TLW_NEEDLE_CURRENT_TIME, + PF_App_Color_TLW_NEEDLE_PREVIEW_TIME, + PF_App_Color_TLW_CACHE_MARK_MEM, + PF_App_Color_TLW_CACHE_MARK_DISK, + PF_App_Color_TLW_CACHE_MARK_MIX, + PF_App_Color_FILL_LIGHT, + PF_App_Color_HOT_TEXT, + PF_App_Color_HOT_TEXT_DISABLED, + + /********************************/ + PF_App_Color_LABEL_0, + PF_App_Color_LABEL_1, + PF_App_Color_LABEL_2, + PF_App_Color_LABEL_3, + PF_App_Color_LABEL_4, + PF_App_Color_LABEL_5, + PF_App_Color_LABEL_6, + PF_App_Color_LABEL_7, + PF_App_Color_LABEL_8, + PF_App_Color_LABEL_9, + PF_App_Color_LABEL_10, + PF_App_Color_LABEL_11, + PF_App_Color_LABEL_12, + PF_App_Color_LABEL_13, + PF_App_Color_LABEL_14, + PF_App_Color_LABEL_15, + PF_App_Color_LABEL_16, + + /********************************/ + PF_App_Color_TLW_CACHE_MARK_MEM_DUBIOUS, + PF_App_Color_TLW_CACHE_MARK_DISK_DUBIOUS, + PF_App_Color_TLW_CACHE_MARK_MIX_DUBIOUS, + PF_App_Color_HOT_TEXT_PRESSED, + PF_App_Color_HOT_TEXT_WARNING, + PF_App_Color_PURE_BLACK, + PF_App_Color_PURE_WHITE, + + PF_App_Color_PANEL_BACKGROUND = 1000, + PF_App_Color_LIST_BOX_FILL, + PF_App_Color_DARK_CAPTION_FILL, + PF_App_Color_DARK_CAPTION_TEXT, + PF_App_Color_TEXT_ON_LIGHTER_BG, + + PF_App_Color_NUMTYPES +}; +typedef A_short PF_App_ColorType; + +enum { + // the first entry allows the user to do it the way they normally do with + // ae native color pickers (straight is the default, shift gives you premul) + PF_EyeDropperSampleMode_DEFAULT, + PF_EyeDropperSampleMode_STRAIGHT, + PF_EyeDropperSampleMode_PREMUL +}; + +typedef A_short PF_EyeDropperSampleMode; + +typedef struct PF_App_Color { + A_u_short red; + A_u_short green; + A_u_short blue; +} PF_App_Color; + + +#define PF_APP_MAX_PERS_LEN 63 + +typedef struct PF_AppPersonalTextInfo { + A_char name[PF_APP_MAX_PERS_LEN + 1]; + A_char org[PF_APP_MAX_PERS_LEN + 1]; + A_char serial_str[PF_APP_MAX_PERS_LEN + 1]; +} PF_AppPersonalTextInfo; + + +enum { + PF_FontStyle_NONE = -1, // sentinel + PF_FontStyle_SYS = 0, // system font, system size, system style (0, 0, 0) + PF_FontStyle_SMALL, // usually small annotation text + PF_FontStyle_SMALL_BOLD, // more important small annotations + PF_FontStyle_SMALL_ITALIC, // missing things, etc. + PF_FontStyle_MED, // times in in/out panels + PF_FontStyle_MED_BOLD, // + PF_FontStyle_APP, // + PF_FontStyle_APP_BOLD, // time in TL window + PF_FontStyle_APP_ITALIC // +}; +typedef A_LegacyEnumType PF_FontStyleSheet; + + + +#define PF_FONT_NAME_LEN 255 + +typedef struct PF_FontName { + A_char font_nameAC[PF_FONT_NAME_LEN+1]; +} PF_FontName; + + +#define PF_APP_LANG_TAG_SIZE (5 + 1) + +typedef struct _PF_AppProgressDialog *PF_AppProgressDialogP; + + +typedef struct PFAppSuite6 { /* frozen in AE 13.1 */ + + SPAPI PF_Err (*PF_AppGetBgColor)( PF_App_Color *bg_colorP); /* << */ + + SPAPI PF_Err (*PF_AppGetColor)( PF_App_ColorType color_type, /* >> */ + PF_App_Color *app_colorP); /* << */ + + // Provides the active displayed language of AE UI so plugin can match. e.g. "en_US" + SPAPI PF_Err (*PF_AppGetLanguage)( A_char *lang_tagZ); /* << up to PF_APP_LANG_TAG_SIZE-1 */ + + SPAPI PF_Err (*PF_GetPersonalInfo)( PF_AppPersonalTextInfo *ptiP); /* << */ + + SPAPI PF_Err (*PF_GetFontStyleSheet)(PF_FontStyleSheet sheet, /* >> */ + PF_FontName *font_nameP0, /* << */ + A_short *font_numPS0, /* << */ + A_short *sizePS0, /* << */ + A_short *stylePS0); /* << */ + + // normally the effect should respond to PF_Event_ADJUST_CURSOR, but for changing + // the cursor during modal situations, you can use this API + SPAPI PF_Err (*PF_SetCursor)( PF_CursorType cursor); /* >> */ + + // as of AE6.5, this function returns TRUE if installed app is the render engine (as before) + // OR if the app is being run with no UI OR if the app is in watch-folder mode + SPAPI PF_Err (*PF_IsRenderEngine)( PF_Boolean *render_enginePB); /* >> */ + + // will return PF_Interrupt_CANCEL if user cancels dialog. color is in project working colorspace + // if use_ws_to_monitor_xformB is TRUE, then the color chips and pickers are run through the + // working space -> display transformation while interacting. set FALSE to have the raw RGB values + // pushed directly to the screen. TRUE is intended for when the returned color is used in rendering, FALSE + // is intended if the color is for UI elements or other nonrenderables. + + SPAPI PF_Err (*PF_AppColorPickerDialog)( const A_char *dialog_titleZ0, /* >> */ + const PF_PixelFloat *sample_colorP, /* >> */ + PF_Boolean use_ws_to_monitor_xformB, /* >> */ + PF_PixelFloat *new_colorP); /* << */ + + // for use only when processing an event in an effect with custom UI + SPAPI PF_Err (*PF_GetMouse)(PF_Point* pointP); + + // NEW api in version 4. + // Use it to invalidate rect of current window being drawn. Invalidated rect will be updated during idle time. + // Specify PF_EO_UPDATE_NOW out flag to update the window immediately after the event returns. Specify rectP0 + // as NULL to invalidate the whole window. + // Only valid while handling an non-draw event in the effect. + SPAPI PF_Err (*PF_InvalidateRect)( const PF_ContextH contextH, + const PF_Rect* rectP0); + + // only safe to use when processing an event from a custom UI event. + SPAPI PF_Err (*PF_ConvertLocalToGlobal)(const PF_Point* localP, PF_Point* globalP); + + // this will return a deep color if over a content window containing 32bpc. + // eyeSize == 0 will use the application pref as set by the user. + SPAPI PF_Err (*PF_GetColorAtGlobalPoint)(const PF_Point* globalP, A_short eyeSize, PF_EyeDropperSampleMode mode, PF_PixelFloat* outColorP); + + + // Manages a modal progress dialog session for use inside of time-consuming AEGP commands + // Only one dialog active at a time is supported, and it may not get displayed in cases where AE UI is disabled (become no-ops) + // These calls must be used from the AE main/UI thread + // The app busy cursor will automatically set/reset as needed, regardless of whether dialog is displayed + SPAPI PF_Err (*PF_CreateNewAppProgressDialog)( + const A_UTF16Char* titleZ, // >> title of the progress dialog + const A_UTF16Char* cancel_strZ0, // >> [optional] what the name on the button should be. + // If NULL, AE localized Cancel used by default + PF_Boolean indeterminateB, // >> TRUE shows "barber pole" style animation with no incremental progress + PF_AppProgressDialogP *prog_dlgPP); // <> Returns allocated ProgressDialog session (may not display actual dialog yet) + + // This will trigger initial dialog display once timeout elapses. + // While dialog is displayed, this updates animation/progress status. + // If the session is disposed before the elapsed time the dialog is never displayed. + // This must be called frequently during your algorithm to keep UI responsive and animation moving. About 100ms interval would be a good target. + // Returns PF_Interrupt_CANCEL if user canceled the dialog + SPAPI PF_Err (*PF_AppProgressDialogUpdate)( + PF_AppProgressDialogP prog_dlgP, // >> The allocated session + A_long countL, A_long totalL); // >> count/total is the fraction of progress to display (when not indeterminate style) + // (pass zeros to keep barber-pole animation alive) + + // PF_AppProgressDialogP MUST be disposed whether the actual dialog is displayed or not + SPAPI PF_Err (*PF_DisposeAppProgressDialog)(PF_AppProgressDialogP prog_dlgP); // >> The allocated session. MUST be disposed. + +} PFAppSuite6; + + + +#define kPFEffectUISuite "PF Effect UI Suite" +#define kPFEffectUISuiteVersion1 1 /* frozen in 5.5 */ + +typedef struct PF_EffectUISuite1 { + + SPAPI PF_Err (*PF_SetOptionsButtonName)( PF_ProgPtr effect_ref, + const A_char *nameZ); + +} PF_EffectUISuite1; + + + + +#define kPFEffectCustomUISuite "PF Effect Custom UI Suite" +#define kPFEffectCustomUISuiteVersion2 2 /* frozen in 13.5 */ + +typedef struct _PF_AsyncManager *PF_AsyncManagerP; // manage multiple asynchronous render requests during lifetime, especially for better caching on UI thread + +// apis that relate to + +typedef struct PF_EffectCustomUISuite2 { + + // This provides basic apis needed for custom ui drawing in any window (Comp/Layer/ECW) + // Get the drawing reference for custom ui drawing. + SPAPI PF_Err (*PF_GetDrawingReference)( const PF_ContextH effect_contextH, /* >> */ + DRAWBOT_DrawRef *referenceP0); /* << */ + + // NEW in version 2 (ae13.5) + // When using PF_OutFlag2_CUSTOM_UI_ASYNC_MANAGER, use this to get the async manager associated with the effect PF_ContextH. + // The managed can then be asked to do Async render requests + SPAPI PF_Err (*PF_GetContextAsyncManager)( PF_InData* in_data, PF_EventExtra* extra, PF_AsyncManagerP* managerPP0); + +} PF_EffectCustomUISuite2; + + + + +#define kPFEffectCustomUIOverlayThemeSuite "PF Effect Custom UI Overlay Theme Suite" +#define kPFEffectCustomUIOverlayThemeSuiteVersion1 1 /* frozen in 10.0 */ + +// This suite should be used for stroking/filling paths, vertices etc on Comp/Layer window. After Effects is internally using it +// so use it to make custom ui look consistent across effects. The foreground/shadow colors are computed based on the app brightness +// level so custom ui is always visible regardless of app brightness. + +typedef struct PF_EffectCustomUIOverlayThemeSuite1 { + + // Get foreground/shadow colors preferred for custom ui drawing in AE. + // These colors are used by AE custom ui effects. + SPAPI PF_Err (*PF_GetPreferredForegroundColor)( DRAWBOT_ColorRGBA *foreground_colorP); /* << */ + + SPAPI PF_Err (*PF_GetPreferredShadowColor) ( DRAWBOT_ColorRGBA *shadow_colorP); /* << */ + + + // Get foreground & shadow stroke width, vertex size and shadow offset preferred for custom ui drawing in AE. + // These settings are used by AE custom ui effects. + SPAPI PF_Err (*PF_GetPreferredStrokeWidth)( float *stroke_widthPF); /* << for both foreground and shadow stroke */ + + SPAPI PF_Err (*PF_GetPreferredVertexSize)( float *vertex_sizePF); /* << */ + + SPAPI PF_Err (*PF_GetPreferredShadowOffset)( A_LPoint *shadow_offsetP); /* << */ + + + // Stroke the path with overlay theme foreground color. It can also draw shadow using overlay theme shadow color. + // It uses overlay theme stroke width for stroking foreground and shadow strokes. + SPAPI PF_Err (*PF_StrokePath) ( const DRAWBOT_DrawRef drawbot_ref, /* >> */ + const DRAWBOT_PathRef path_ref, /* >> */ + PF_Boolean draw_shadowB); /* >> */ + + + // Fills the path with overlay theme foreground color. It can also draw shadow using overlay theme shadow color. + // It can be used for drawing in any Comp/Layer/EC windows. + SPAPI PF_Err (*PF_FillPath) ( const DRAWBOT_DrawRef drawbot_ref, /* >> */ + const DRAWBOT_PathRef path_ref, /* >> */ + PF_Boolean draw_shadowB); /* >> */ + + + // Fills a square (vertex) around the center point using overlay theme foreground color and vertex size. + SPAPI PF_Err (*PF_FillVertex) ( const DRAWBOT_DrawRef drawbot_ref, /* >> */ + const A_FloatPoint *center_pointP, /* >> */ + PF_Boolean draw_shadowB); /* >> */ + +} PF_EffectCustomUIOverlayThemeSuite1; + + +// we include this at the end here to maintain source-level compatibility with +// files that #include AE_EffectSuite but are still using the old suites +// note: this is _inside_ the pre/post & ifdefs, as this is just a snippet, +// and not designed to be #include by anyone else +#define _H_AE_EffectSuitesOld + #include "AE_EffectSuitesOld.h" +#undef _H_AE_EffectSuitesOld + +/**********************************************************/ +/**********************************************************/ + +#ifdef __cplusplus + } +#endif + + +#include + +#endif diff --git a/External/AE SDK/Headers/AE_EffectSuitesHelper.h b/External/AE SDK/Headers/AE_EffectSuitesHelper.h new file mode 100644 index 00000000..0dc74657 --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectSuitesHelper.h @@ -0,0 +1,152 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/* Adobe Premiere Device Control plug-in definitions */ +/* */ +/* AE_EffectSuitesHelper.h */ +/* */ +/* After Effects 5.0 PICA Suites (extended 3/8/00) */ +/* */ +/* */ +/*******************************************************************/ + +#ifndef _H_AE_EffectSuitesHelper +#define _H_AE_EffectSuitesHelper + +#include +#include + +#include + +#ifdef __cplusplus + extern "C" { +#endif + + +/** PF_HelperSuite1 + + PF_GetCurrentTool() + + retrieves the type of the current tool palette tool selected + +**/ + +#define kPFHelperSuite "AE Plugin Helper Suite" +#define kPFHelperSuiteVersion1 1 +#define kPFHelperSuiteVersion kPFHelperSuiteVersion1 + +enum { + PF_SuiteTool_NONE = 0, + PF_SuiteTool_ARROW, + PF_SuiteTool_ROTATE, + PF_SuiteTool_SHAPE, + PF_SuiteTool_OBSOLETE, + PF_SuiteTool_PEN, + PF_SuiteTool_PAN, + PF_SuiteTool_HAND, + PF_SuiteTool_MAGNIFY, + PF_SuiteTool_ROUNDED_RECT, + PF_SuiteTool_POLYGON, + PF_SuiteTool_STAR, + PF_SuiteTool_PIN, + PF_SuiteTool_PIN_STARCH, + PF_SuiteTool_PIN_DEPTH +}; +typedef A_LegacyEnumType PF_SuiteTool; + + + +typedef struct PF_HelperSuite1 { + // obsolete, use PF_HelperSuite2 + SPAPI PF_Err (*PF_GetCurrentTool)( PF_SuiteTool *toolP ); /* << */ +} PF_HelperSuite1; + + +/** PF_HelperSuite2 + + PF_ParseClipboard() + + causes After Effects to parse the clipboard immediately + +**/ +enum { + PF_ExtendedSuiteTool_NONE = 0, + PF_ExtendedSuiteTool_ARROW, + PF_ExtendedSuiteTool_ROTATE, + PF_ExtendedSuiteTool_PEN_NORMAL, + PF_ExtendedSuiteTool_PEN_ADD_POINT, + PF_ExtendedSuiteTool_PEN_DELETE_POINT, + PF_ExtendedSuiteTool_PEN_CONVERT_POINT, + PF_ExtendedSuiteTool_RECT, + PF_ExtendedSuiteTool_OVAL, + PF_ExtendedSuiteTool_CAMERA_ORBIT_CAMERA, + PF_ExtendedSuiteTool_CAMERA_PAN_CAMERA, //changed from PF_ExtendedSuiteTool_CAMERA_TRACK_XY + PF_ExtendedSuiteTool_CAMERA_DOLLY_CAMERA, //changed from PF_ExtendedSuiteTool_CAMERA_TRACK_Z + PF_ExtendedSuiteTool_PAN_BEHIND, + PF_ExtendedSuiteTool_HAND, + PF_ExtendedSuiteTool_MAGNIFY, + PF_ExtendedSuiteTool_PAINTBRUSH, // All below added in 6.0 + PF_ExtendedSuiteTool_PENCIL, + PF_ExtendedSuiteTool_CLONE_STAMP, + PF_ExtendedSuiteTool_ERASER, + PF_ExtendedSuiteTool_TEXT, + PF_ExtendedSuiteTool_TEXT_VERTICAL, + PF_ExtendedSuiteTool_PIN, + PF_ExtendedSuiteTool_PIN_STARCH, + PF_ExtendedSuiteTool_PIN_DEPTH, + PF_ExtendedSuiteTool_ROUNDED_RECT, + PF_ExtendedSuiteTool_POLYGON, + PF_ExtendedSuiteTool_STAR, + PF_ExtendedSuiteTool_QUICKSELECT, + PF_ExtendedSuiteTool_CAMERA_MAYA, + PF_ExtendedSuiteTool_HAIRBRUSH, + PF_ExtendedSuiteTool_FEATHER, + PF_ExtendedSuiteTool_PIN_BEND, + PF_ExtendedSuiteTool_PIN_ADVANCED, + PF_ExtendedSuiteTool_CAMERA_ORBIT_CURSOR, //new cursors should go at the end to avoid messing with sdk order + PF_ExtendedSuiteTool_CAMERA_ORBIT_SCENE, + PF_ExtendedSuiteTool_CAMERA_PAN_CURSOR, + PF_ExtendedSuiteTool_CAMERA_DOLLY_TOWARDS_CURSOR, + PF_ExtendedSuiteTool_CAMERA_DOLLY_TO_CURSOR, +}; +typedef A_LegacyEnumType PF_ExtendedSuiteTool; + + +#define kPFHelperSuite2 "AE Plugin Helper Suite2" +#define kPFHelperSuite2Version1 1 +#define kPFHelperSuite2Version2 2 +#define kPFHelperSuite2Version kPFHelperSuite2Version2 + +typedef struct PF_HelperSuite2 { + SPAPI PF_Err (*PF_ParseClipboard)( void ); + // Do not call PF_SetCurrentExtendedTool until the UI is built. i.e. Do not call it from + // your plugin init function. + SPAPI PF_Err (*PF_SetCurrentExtendedTool)(PF_ExtendedSuiteTool tool); + SPAPI PF_Err (*PF_GetCurrentExtendedTool)(PF_ExtendedSuiteTool *tool); +} PF_HelperSuite2; + +#ifdef __cplusplus + } +#endif + +#include + + + +#endif diff --git a/External/AE SDK/Headers/AE_EffectSuitesOld.h b/External/AE SDK/Headers/AE_EffectSuitesOld.h new file mode 100644 index 00000000..a3f0d51a --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectSuitesOld.h @@ -0,0 +1,283 @@ +// AE_EffectSuitesOld.h +// +// Copyright (c) 2011 Adobe Systems Inc, Seattle WA +// All Rights Reserved +// +// These are old, deprecated versions of some suites. Please use the ones in AE_EffectSuites.h instead if at all possible. +// +// + +// +#ifndef _H_AE_EffectSuitesOld + #error this file is designed to be included only by AE_EffectSuites.h; do not include directly +#endif + +/** PF_ParamUtilsSuite1 + + PF_UpdateParamUI() + + You can call this function for each param whose UI settings you + want to change when handling a PF_Cmd_USER_CHANGED_PARAM or + PF_Cmd_UPDATE_PARAMS_UI. These changes are cosmetic only, and don't + go into the undo buffer. + + The ONLY fields that can be changed in this way are: + + PF_ParamDef + ui_flags: PF_PUI_ECW_SEPARATOR, PF_PUI_DISABLED only (and PF_PUI_INVISIBLE in Premiere). + ui_width + ui_height + name + flags: PF_ParamFlag_COLLAPSE_TWIRLY only + + PF_ParamDefUnion: + slider_min, slider_max, precision, display_flags of any slider type + + For PF_PUI_STD_CONTROL_ONLY params, you can also change the value field by setting + PF_ChangeFlag_CHANGED_VALUE before returning. But you are not allowed to change + the value during PF_Cmd_UPDATE_PARAMS_UI. + + PF_HaveInputsChangedOverTimeSpan() -- OBSOLETE, see PF_AreStatesIdentical() instead. + This API is handy for effects that do simulation across time, where frame N is + dependent on frame N-1, and you have a cache in your sequence data that needs validating. + When asked to render frame N, assume you have your cached data from frame N-1, you'd call + PF_HaveInputsChangedOverTimeSpan(start=0, duration=N-1) to see if your cache is still valid. + The state of all parameters (except those with PF_ParamFlag_EXCLUDE_FROM_HAVE_INPUTS_CHANGED + set), including layer parameters (including param[0]) are checked over the passed time + span. This is done efficiently, as the change tracking is done with timestamps. + + Requires PF_OutFlag2_AUTOMATIC_WIDE_TIME_INPUT to be set by the effect. If validating a + cache for use during a render, the call to PF_HaveInputsChangedOverTimeSpan() must + happen during one of the rendering PF_Cmds (PF_Cmd_FRAME_SETUP, PF_Cmd_RENDER, + PF_Cmd_FRAME_SETDOWN,PF_Cmd_SMART_PRE_RENDER, PF_Cmd_SMART_RENDER). + + If *changedPB is returned FALSE, you can safely use your cache, AND the internal + caching system will assume that you have a temporal dependency on the passed range, + so if something changes upstream, AE's caches will be properly invalidated. + +**/ + +#define kPFParamUtilsSuiteVersion1 2 /* 64-bit version frozen in AE 10.0 */ + + +typedef struct PF_ParamUtilsSuite1 { + + SPAPI PF_Err (*PF_UpdateParamUI)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + const PF_ParamDef *defP); + + // The next 3 methods have had "Obsolete" added to their name to intentionally + // break compile compatibility. They continue to work and are binary compatible, but + // are more conservative and inefficient than in previous versions. Please + // switch to the current version of this suite for maximum benefit. + SPAPI PF_Err (*PF_GetCurrentStateObsolete)( + PF_ProgPtr effect_ref, + PF_State *stateP); /* << */ + + SPAPI PF_Err (*PF_HasParamChangedObsolete)( + PF_ProgPtr effect_ref, + const PF_State *stateP, // has param changed since this state was grabbed + PF_ParamIndex param_index, // ignored, always treated as PF_ParamIndex_CHECK_ALL_HONOR_EXCLUDE - go use the modern version of this suite! + // have changed including layer param[0]; + // pass PF_ParamIndex_CHECK_ALL_EXCEPT_LAYER_PARAMS to see + // if any non-layer param values have changed + PF_Boolean *changedPB); /* << */ + + SPAPI PF_Err (*PF_HaveInputsChangedOverTimeSpanObsolete)( // see comment above + PF_ProgPtr effect_ref, + const PF_State *stateP, // has param changed since this state was grabbed + const A_Time *startPT0, // NULL for both start & duration mean at any time + const A_Time *durationPT0, + PF_Boolean *changedPB); /* << */ + + SPAPI PF_Err (*PF_IsIdenticalCheckout)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + A_long what_time1, + A_long time_step1, + A_u_long time_scale1, + A_long what_time2, + A_long time_step2, + A_u_long time_scale2, + PF_Boolean *identicalPB); /* << */ + + + SPAPI PF_Err (*PF_FindKeyframeTime)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + A_long what_time, + A_u_long time_scale, + PF_TimeDir time_dir, + PF_Boolean *foundPB, /* << */ + PF_KeyIndex *key_indexP0, /* << */ + A_long *key_timeP0, /* << */ // you can ask for either: + A_u_long *key_timescaleP0); /* << */ // time×cale OR neither + + SPAPI PF_Err (*PF_GetKeyframeCount)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + PF_KeyIndex *key_countP); /* << */ // returns PF_KeyIndex_NONE for constant + + SPAPI PF_Err (*PF_CheckoutKeyframe)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + PF_KeyIndex key_index, // zero-based + A_long *key_timeP0, /* << */ // you can ask for either: + A_u_long *key_timescaleP0, /* << */ // time×cale OR neither + PF_ParamDef *paramP0); /* << */ + + SPAPI PF_Err (*PF_CheckinKeyframe)( + PF_ProgPtr effect_ref, + PF_ParamDef *paramP); + + SPAPI PF_Err (*PF_KeyIndexToTime)( + PF_ProgPtr effect_ref, + PF_ParamIndex param_index, + PF_KeyIndex key_indexP, /* >> */ + A_long *key_timeP, /* >> */ + A_u_long *key_timescaleP); /* << */ + +} PF_ParamUtilsSuite1; + + +/* -------------------------------------------------------------------- */ + +#define kPFAppSuite "PF AE App Suite" +#define kPFAppSuiteVersion4 6 /* frozen in AE 10.0 */ + + +typedef struct PFAppSuite4 { /* frozen in AE 10.0 */ + + SPAPI PF_Err (*PF_AppGetBgColor)( PF_App_Color *bg_colorP); /* << */ + + SPAPI PF_Err (*PF_AppGetColor)( PF_App_ColorType color_type, /* >> */ + PF_App_Color *app_colorP); /* << */ + + SPAPI PF_Err (*PF_GetPersonalInfo)( PF_AppPersonalTextInfo *ptiP); /* << */ + + SPAPI PF_Err (*PF_GetFontStyleSheet)(PF_FontStyleSheet sheet, /* >> */ + PF_FontName *font_nameP0, /* << */ + A_short *font_numPS0, /* << */ + A_short *sizePS0, /* << */ + A_short *stylePS0); /* << */ + + // normally the effect should respond to PF_Event_ADJUST_CURSOR, but for changing + // the cursor during modal situations, you can use this API + SPAPI PF_Err (*PF_SetCursor)( PF_CursorType cursor); /* >> */ + + // as of AE6.5, this function returns TRUE if installed app is the render engine (as before) + // OR if the app is being run with no UI OR if the app is in watch-folder mode + SPAPI PF_Err (*PF_IsRenderEngine)( PF_Boolean *render_enginePB); /* >> */ + + // will return PF_Interrupt_CANCEL if user cancels dialog. color is in project working colorspace + // if use_ws_to_monitor_xformB is TRUE, then the color chips and pickers are run through the + // working space -> display transformation while interacting. set FALSE to have the raw RGB values + // pushed directly to the screen. TRUE is intended for when the returned color is used in rendering, FALSE + // is intended if the color is for UI elements or other nonrenderables. + + SPAPI PF_Err (*PF_AppColorPickerDialog)( const A_char *dialog_titleZ0, /* >> */ + const PF_PixelFloat *sample_colorP, /* >> */ + PF_Boolean use_ws_to_monitor_xformB, /* >> */ + PF_PixelFloat *new_colorP); /* << */ + + // for use only when processing an event in an effect with custom UI + SPAPI PF_Err (*PF_GetMouse)(PF_Point* pointP); + + // NEW api in version 4. + // Use it to invalidate rect of current window being drawn. Invalidated rect will be updated during idle time. + // Specify PF_EO_UPDATE_NOW out flag to update the window immediately after the event returns. Specify rectP0 + // as NULL to invalidate the whole window. + // Only valid while handling an non-draw event in the effect. + SPAPI PF_Err (*PF_InvalidateRect)( const PF_ContextH contextH, + const PF_Rect* rectP0); + + // only safe to use when processing an event from a custom UI event. + SPAPI PF_Err (*PF_ConvertLocalToGlobal)(const PF_Point* localP, PF_Point* globalP); + + // this will return a deep color if over a content window containing 32bpc. + // eyeSize == 0 will use the application pref as set by the user. + SPAPI PF_Err (*PF_GetColorAtGlobalPoint)(const PF_Point* globalP, A_short eyeSize, PF_EyeDropperSampleMode mode, PF_PixelFloat* outColorP); + +} PFAppSuite4; + + +/* -------------------------------------------------------------------- */ + + +#define kPFAppSuiteVersion5 7 /* frozen in AE 12.0 */ + +typedef struct PFAppSuite5 { /* frozen in AE 12.0 */ + + SPAPI PF_Err (*PF_AppGetBgColor)( PF_App_Color *bg_colorP); /* << */ + + SPAPI PF_Err (*PF_AppGetColor)( PF_App_ColorType color_type, /* >> */ + PF_App_Color *app_colorP); /* << */ + + // Provides the active displayed language of AE UI so plugin can match. e.g. "en_US" + SPAPI PF_Err (*PF_AppGetLanguage)( A_char *lang_tagZ); /* << up to PF_APP_LANG_TAG_SIZE-1 */ + + SPAPI PF_Err (*PF_GetPersonalInfo)( PF_AppPersonalTextInfo *ptiP); /* << */ + + SPAPI PF_Err (*PF_GetFontStyleSheet)(PF_FontStyleSheet sheet, /* >> */ + PF_FontName *font_nameP0, /* << */ + A_short *font_numPS0, /* << */ + A_short *sizePS0, /* << */ + A_short *stylePS0); /* << */ + + // normally the effect should respond to PF_Event_ADJUST_CURSOR, but for changing + // the cursor during modal situations, you can use this API + SPAPI PF_Err (*PF_SetCursor)( PF_CursorType cursor); /* >> */ + + // as of AE6.5, this function returns TRUE if installed app is the render engine (as before) + // OR if the app is being run with no UI OR if the app is in watch-folder mode + SPAPI PF_Err (*PF_IsRenderEngine)( PF_Boolean *render_enginePB); /* >> */ + + // will return PF_Interrupt_CANCEL if user cancels dialog. color is in project working colorspace + // if use_ws_to_monitor_xformB is TRUE, then the color chips and pickers are run through the + // working space -> display transformation while interacting. set FALSE to have the raw RGB values + // pushed directly to the screen. TRUE is intended for when the returned color is used in rendering, FALSE + // is intended if the color is for UI elements or other nonrenderables. + + SPAPI PF_Err (*PF_AppColorPickerDialog)( const A_char *dialog_titleZ0, /* >> */ + const PF_PixelFloat *sample_colorP, /* >> */ + PF_Boolean use_ws_to_monitor_xformB, /* >> */ + PF_PixelFloat *new_colorP); /* << */ + + // for use only when processing an event in an effect with custom UI + SPAPI PF_Err (*PF_GetMouse)(PF_Point* pointP); + + // NEW api in version 4. + // Use it to invalidate rect of current window being drawn. Invalidated rect will be updated during idle time. + // Specify PF_EO_UPDATE_NOW out flag to update the window immediately after the event returns. Specify rectP0 + // as NULL to invalidate the whole window. + // Only valid while handling an non-draw event in the effect. + SPAPI PF_Err (*PF_InvalidateRect)( const PF_ContextH contextH, + const PF_Rect* rectP0); + + // only safe to use when processing an event from a custom UI event. + SPAPI PF_Err (*PF_ConvertLocalToGlobal)(const PF_Point* localP, PF_Point* globalP); + + // this will return a deep color if over a content window containing 32bpc. + // eyeSize == 0 will use the application pref as set by the user. + SPAPI PF_Err (*PF_GetColorAtGlobalPoint)(const PF_Point* globalP, A_short eyeSize, PF_EyeDropperSampleMode mode, PF_PixelFloat* outColorP); + + +} PFAppSuite5; + +/* -------------------------------------------------------------------- */ + +#define kPFEffectCustomUISuite "PF Effect Custom UI Suite" +#define kPFEffectCustomUISuiteVersion1 1 /* frozen in 10.0 */ + +// This suite provides basic apis needed for custom ui drawing in any window (Comp/Layer/ECW) + +typedef struct PF_EffectCustomUISuite1 { + + // Get the drawing reference for custom ui drawing. + SPAPI PF_Err (*PF_GetDrawingReference)( const PF_ContextH effect_contextH, /* >> */ + DRAWBOT_DrawRef *referenceP0); /* << */ + +} PF_EffectCustomUISuite1; + + diff --git a/External/AE SDK/Headers/AE_EffectUI.h b/External/AE SDK/Headers/AE_EffectUI.h new file mode 100644 index 00000000..18371a00 --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectUI.h @@ -0,0 +1,580 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +/** AE_EffectUI.h + + Part of the After Effects SDK. + + Describes structures and callbacks used by plug-ins with Custom + composition window and effect palette UIs. + +**/ + +#ifndef _H_AE_EffectUI +#define _H_AE_EffectUI + + +#include + +#ifdef ADOBE_SDK_INTERNAL + #include +#else + #include +#endif + + +#include + + + + + +#ifdef __cplusplus + extern "C" { +#endif + + +/** PF_CustomFlags + ** + ** kinds of events and actions the custom parameter type might require + ** + **/ + +enum { + PF_CustomEFlag_NONE = 0, + + PF_CustomEFlag_COMP = 1L << 0, + PF_CustomEFlag_LAYER = 1L << 1, + PF_CustomEFlag_EFFECT = 1L << 2, + PF_CustomEFlag_PREVIEW = 1L << 3 +}; +typedef A_long PF_CustomEventFlags; + + +enum { + PF_Window_NONE = -1, + PF_Window_COMP, + PF_Window_LAYER, + PF_Window_EFFECT, + PF_Window_PREVIEW +}; +typedef A_long PF_WindowType; + + +/* $$$ document! + + new context -> evt extra has context and type, but everything else should be ignored + fill in plugin_state[4] + close context -> + all other evts -> params set up, but no layers + +*/ +enum { + PF_Event_NONE = -1, + PF_Event_NEW_CONTEXT, + PF_Event_ACTIVATE, + PF_Event_DO_CLICK, + PF_Event_DRAG, + PF_Event_DRAW, + PF_Event_DEACTIVATE, + PF_Event_CLOSE_CONTEXT, + PF_Event_IDLE, + PF_Event_KEYDOWN_OBSOLETE, // As of AE 7, this is no longer used. + PF_Event_ADJUST_CURSOR, // new for AE 4.0, sent when mouse moves over custom UI + PF_Event_KEYDOWN, // new for AE 7.0, replaces previous keydown event with cross platform codes and unicode characters. + PF_Event_MOUSE_EXITED, // new for AE 11.0, notification that the mouse is no longer over a specific view (layer or comp only). + + PF_Event_NUM_EVENTS +}; +typedef A_long PF_EventType; + + +enum { + PF_Cursor_NONE = 0, // see comment in PF_AdjustCursorEventInfo + PF_Cursor_CUSTOM, // means effect set cursor itself with platform-specific calls + PF_Cursor_ARROW, + PF_Cursor_HOLLOW_ARROW, + PF_Cursor_WATCH_N_WAIT, // watch on the Mac, wait (hourglass) on Windows + PF_Cursor_MAGNIFY, + PF_Cursor_MAGNIFY_PLUS, + PF_Cursor_MAGNIFY_MINUS, + PF_Cursor_CROSSHAIRS, + PF_Cursor_CROSS_RECT, + PF_Cursor_CROSS_OVAL, + PF_Cursor_CROSS_ROTATE, + PF_Cursor_PAN, + PF_Cursor_EYEDROPPER, + PF_Cursor_HAND, + PF_Cursor_PEN, + PF_Cursor_PEN_ADD, + PF_Cursor_PEN_DELETE, + PF_Cursor_PEN_CLOSE, + PF_Cursor_PEN_DRAG, + PF_Cursor_PEN_CORNER, + PF_Cursor_RESIZE_VERTICAL, + PF_Cursor_RESIZE_HORIZONTAL, + PF_Cursor_FINGER_POINTER, + PF_Cursor_SCALE_HORIZ, + PF_Cursor_SCALE_DIAG_LR, + PF_Cursor_SCALE_VERT, + PF_Cursor_SCALE_DIAG_UR, + PF_Cursor_ROT_TOP, + PF_Cursor_ROT_TOP_RIGHT, + PF_Cursor_ROT_RIGHT, + PF_Cursor_ROT_BOT_RIGHT, + PF_Cursor_ROT_BOTTOM, + PF_Cursor_ROT_BOT_LEFT, + PF_Cursor_ROT_LEFT, + PF_Cursor_ROT_TOP_LEFT, + PF_Cursor_DRAG_CENTER, + PF_Cursor_COPY, + PF_Cursor_ALIAS, + PF_Cursor_CONTEXT, + PF_Cursor_SLIP_EDIT, + PF_Cursor_CAMERA_ORBIT_CAMERA, //changed from PF_Cursor_ORBIT + PF_Cursor_CAMERA_PAN_CAMERA, //changed from PF_Cursor_TRACK_XY + PF_Cursor_CAMERA_DOLLY_CAMERA, //changed from PF_Cursor_TRACK_Z + PF_Cursor_ROTATE_X, + PF_Cursor_ROTATE_Y, + PF_Cursor_ROTATE_Z, + PF_Cursor_ARROW_X, + PF_Cursor_ARROW_Y, + PF_Cursor_ARROW_Z, + PF_Cursor_SCISSORS, + PF_Cursor_FAT_EYEDROPPER, + PF_Cursor_FINGER_POINTER_SCRUB, + PF_Cursor_HORZ_I_BEAM, + PF_Cursor_VERT_I_BEAM, + PF_Cursor_HORZ_BOX_I_BEAM, + PF_Cursor_VERT_BOX_I_BEAM, + PF_Cursor_I_BEAM_0, + PF_Cursor_I_BEAM_11_25, + PF_Cursor_I_BEAM_22_5, + PF_Cursor_I_BEAM_33_75, + PF_Cursor_I_BEAM_45, + PF_Cursor_I_BEAM_56_25, + PF_Cursor_I_BEAM_67_5, + PF_Cursor_I_BEAM_78_75, + PF_Cursor_I_BEAM_90, + PF_Cursor_I_BEAM_101_25, + PF_Cursor_I_BEAM_112_5, + PF_Cursor_I_BEAM_123_75, + PF_Cursor_I_BEAM_135, + PF_Cursor_I_BEAM_146_25, + PF_Cursor_I_BEAM_157_5, + PF_Cursor_I_BEAM_168_75, + PF_Cursor_CROSSHAIRS_PICKUP, + PF_Cursor_ARROW_SELECTOR, + PF_Cursor_LAYER_MOVE, + PF_Cursor_MOVE_START_MARGIN, + PF_Cursor_MOVE_END_MARGIN, + PF_Cursor_SOLID_ARROW, + PF_Cursor_HOLLOW_ARROW_PLUS, + PF_Cursor_BRUSH_CENTER, + PF_Cursor_CLONE_SOURCE, + PF_Cursor_CLONE_SOURCE_OFFSET, + PF_Cursor_HOLLOW_LAYER_MOVE, + PF_Cursor_MOVE_TRACK_SEARCH_REGION, + PF_Cursor_MOVE_TRACK_ATTACH_POINT, + PF_Cursor_COLOR_CUBE_CROSS_SECTION, + PF_Cursor_PEN_CORNER_ROTOBEZ_TENSION, + PF_Cursor_PIN, + PF_Cursor_PIN_ADD, + PF_Cursor_MESH_ADD, + PF_Cursor_MARQUEE, + PF_Cursor_CROSS_ROUNDED_RECT, + PF_Cursor_CROSS_POLYGON, + PF_Cursor_CROSS_STAR, + PF_Cursor_PIN_STARCH, + PF_Cursor_PIN_OVERLAP, + PF_Cursor_STOPWATCH, + PF_Cursor_DRAG_DOT, + PF_Cursor_DRAG_CIRCLE, + PF_Cursor_DIRECT_SELECT, + PF_Cursor_DRAG_COPY_MOVE, + PF_Cursor_DRAG_COPY_ROTATE, + PF_Cursor_CAMERA_MAYA, //Changed from PF_Cursor_MAYA + PF_Cursor_RESIZE_HORIZONTAL_LEFT, + PF_Cursor_RESIZE_HORIZONTAL_RIGHT, + PF_Cursor_FEATHER, + PF_Cursor_FEATHER_ADD, + PF_Cursor_FEATHER_DELETE, + PF_Cursor_FEATHER_MOVE, + PF_Cursor_FEATHER_TENSION, + PF_Cursor_FEATHER_MARQUEE, + PF_Cursor_LASSO_ARROW, + PF_Cursor_DRAG_NO_DROP, + PF_Cursor_DRAG_COPY, + PF_Cursor_DRAG_LINK, + PF_Cursor_PIN_BEND, + PF_Cursor_PIN_ADVANCED, + PF_Cursor_CAMERA_ORBIT_CURSOR, + PF_Cursor_CAMERA_ORBIT_SCENE, + PF_Cursor_CAMERA_PAN_CURSOR, + PF_Cursor_CAMERA_DOLLY_TOWARDS_CURSOR, + PF_Cursor_CAMERA_DOLLY_TO_CURSOR, + + PF_MAX_CURSOR_PLUS_ONE +}; +typedef A_long PF_CursorType; + + +enum { + PF_Mod_NONE = 0x0000, + PF_Mod_CMD_CTRL_KEY = 0x0100, // cmd on Mac, ctrl on Windows + PF_Mod_SHIFT_KEY = 0x0200, + PF_Mod_CAPS_LOCK_KEY = 0x0400, + PF_Mod_OPT_ALT_KEY = 0x0800, // option on Mac, alt on Windows + PF_Mod_MAC_CONTROL_KEY = 0x1000 // Mac control key only +}; +typedef A_long PF_Modifiers; + + +typedef struct { + PF_Point screen_point; /* >> where the mouse is right now */ + PF_Modifiers modifiers; /* >> modifiers right now */ + PF_CursorType set_cursor; /* << set this to your desired cursor, or PF_Cursor_CUSTOM if you + set the cursor yourself, or PF_Cursor_NONE if you don't + want to override the cursor (i.e. the app will set the + cursor however it wants) */ +} PF_AdjustCursorEventInfo; + +typedef struct { + A_u_long when; + PF_Point screen_point; + A_long num_clicks; + PF_Modifiers modifiers; + A_intptr_t continue_refcon[4]; /* <> if send_drag is TRUE, set this */ + PF_Boolean send_drag; /* << set this from a do_click to get a drag */ + PF_Boolean last_time; /* >> set the last time you get a drag */ +} PF_DoClickEventInfo; + + +typedef struct { + PF_UnionableRect update_rect; // in window's coordinate system + A_long depth; +} PF_DrawEventInfo; + + +typedef struct { + A_u_long when; + PF_Point screen_point; + A_long char_code; + A_long key_code; + PF_Modifiers modifiers; +} PF_KeyDownEventObsolete; // As of AE 7, this is no longer used. + + +typedef A_u_long PF_KeyCode; // For printable characters, we use the unshifted upper case version (A not a, 7 not &). +typedef A_u_short PF_ControlCode; + +typedef struct { + A_u_long when; + PF_Point screen_point; + PF_KeyCode keycode; // as of AE 7, this is either a control code, or character code + PF_Modifiers modifiers; + +} PF_KeyDownEvent; + + +enum { + PF_KEYCODE_FLAG_Printable = 1 << 31, // a printable key, otherwise a control code like page up + PF_KEYCODE_FLAG_Extended = 1 << 30 // an alternate key, typically on the numeric keypad. +}; + +#define PF_GENERATE_KEYBOARD_CODE_VALUE(CODE_VALUE, FLAGS) (((CODE_VALUE) & 0xFFFF) | (FLAGS)) +#define PF_GENERATE_KEYBOARD_CODE_VALUE_FROM_CHARACTER(CHAR) PF_GENERATE_KEYBOARD_CODE_VALUE(CHAR, PF_KEYCODE_FLAG_Printable) +#define PF_GENERATE_KEYBOARD_CODE_VALUE_FROM_CHARACTER_EXTENDED(CHAR) PF_GENERATE_KEYBOARD_CODE_VALUE(CHAR, PF_KEYCODE_FLAG_Printable | PF_KEYCODE_FLAG_Extended) +#define PF_GENERATE_KEYBOARD_CODE_VALUE_FROM_CONTROL_CODE(CODE) PF_GENERATE_KEYBOARD_CODE_VALUE(CODE, 0) +#define PF_GENERATE_KEYBOARD_CODE_VALUE_FROM_CONTROL_CODE_EXTENDED(CODE) PF_GENERATE_KEYBOARD_CODE_VALUE(CODE, PF_KEYCODE_FLAG_Extended) + +#define PF_KEYCODE_IS_PRINTABLE(_KEY_CODE) (((_KEY_CODE) & PF_KEYCODE_FLAG_Printable ) != 0) +#define PF_KEYCODE_IS_EXTENDED(_KEY_CODE) (((_KEY_CODE) & PF_KEYCODE_FLAG_Extended ) != 0) + +#define PF_KEYCODE_GET_SHORTCUT_CHARACTER(_KEY_CODE) (PF_KEYCODE_IS_PRINTABLE(_KEY_CODE)) ? ((_KEY_CODE) & 0xFFFF) : 0 +#define PF_KEYCODE_GET_CONTROL_CODE(_KEY_CODE) (!PF_KEYCODE_IS_PRINTABLE(_KEY_CODE)) ? ((_KEY_CODE) & 0xFFFF) : 0 + +enum { + PF_ControlCode_Unknown = (PF_ControlCode)0xFFFF, + + PF_ControlCode_Space = 1, + PF_ControlCode_Backspace, + PF_ControlCode_Tab, + PF_ControlCode_Return, + PF_ControlCode_Enter, + + PF_ControlCode_Escape, + + PF_ControlCode_F1, + PF_ControlCode_F2, + PF_ControlCode_F3, + PF_ControlCode_F4, + PF_ControlCode_F5, + PF_ControlCode_F6, + PF_ControlCode_F7, + PF_ControlCode_F8, + PF_ControlCode_F9, + PF_ControlCode_F10, + PF_ControlCode_F11, + PF_ControlCode_F12, + PF_ControlCode_F13, + PF_ControlCode_F14, + PF_ControlCode_F15, + PF_ControlCode_F16, + PF_ControlCode_F17, + PF_ControlCode_F18, + PF_ControlCode_F19, + PF_ControlCode_F20, + PF_ControlCode_F21, + PF_ControlCode_F22, + PF_ControlCode_F23, + PF_ControlCode_F24, + + PF_ControlCode_PrintScreen, + PF_ControlCode_ScrollLock, + PF_ControlCode_Pause, + + PF_ControlCode_Insert, + PF_ControlCode_Delete, + PF_ControlCode_Home, + PF_ControlCode_End, + PF_ControlCode_PageUp, + PF_ControlCode_PageDown, + PF_ControlCode_Help, + PF_ControlCode_Clear, + + PF_ControlCode_Left, + PF_ControlCode_Right, + PF_ControlCode_Up, + PF_ControlCode_Down, + + PF_ControlCode_NumLock, + + PF_ControlCode_Command, + PF_ControlCode_Option, + PF_ControlCode_Alt = PF_ControlCode_Option, + PF_ControlCode_Control, + PF_ControlCode_Shift, + PF_ControlCode_CapsLock, + + PF_ControlCode_ContextMenu +}; + + +typedef union { + PF_DoClickEventInfo do_click; // also drag + PF_DrawEventInfo draw; + PF_KeyDownEvent key_down; + PF_AdjustCursorEventInfo adjust_cursor; + + // add other event types here + +} PF_EventUnion; + +#if defined(A_INTERNAL) && defined (__cplusplus) + class FLT_FCSeqSpec; + typedef FLT_FCSeqSpec *PF_ContextRefcon; +#else + typedef struct _PF_ContextRefcon *PF_ContextRefcon; +#endif + +#define PF_CONTEXT_MAGIC 0x05ea771e +typedef struct { + A_u_long magic; + PF_WindowType w_type; + PF_ContextRefcon reserved_flt; + A_intptr_t plugin_state[4]; // plug-in specific data + DRAWBOT_DrawRef reserved_drawref; + void *reserved_paneP; + void *reserved_job_manageP; // used for managing async job requests for UI in the context of Effect pane custom UI +} PF_Context, *PF_ContextPtr, **PF_ContextH; + +typedef enum { + PenTip, + PenEraser +} PF_StylusTool; + +typedef struct { + // only applies when stylus_dataB == true; + A_FpShort stylus_tiltxF; // -1.0 to 1.0 0.0 == vertical + A_FpShort stylus_tiltyF; // -1.0 to 1.0 0.0 == vertical + A_FpShort stylus_pressureF; // 0.0 to 1.0 1.0 == full pressure + A_FpShort stylus_wheelF; // -1.0 to 1.0 0.0 == none +} PF_StylusEventInfo; + +typedef struct PF_PointerEventInfo { + A_FpLong when_secondsF; + PF_Point screen_point; + A_short num_clicksS; + A_long mod_keysL; + + PF_StylusTool stylus_tool; // set to PenTip when using mouse + PF_Boolean stylus_extra_dataB; + PF_StylusEventInfo stylus_extra_data; // only valid when stylus_extra_dataB == true +} PF_PointerEventInfo; + +typedef struct { + void *refcon; // front-end's refcon + + PF_Err (*layer_to_comp)(void *refcon, /* >> */ + PF_ContextH context, /* >> */ + A_long curr_time, /* >> */ + A_long time_scale, /* >> */ + PF_FixedPoint *pt); /* << */ + + PF_Err (*comp_to_layer)(void *refcon, /* >> */ + PF_ContextH context, /* >> */ + A_long curr_time, /* >> */ + A_long time_scale, /* >> */ + PF_FixedPoint *pt); /* << */ + + PF_Err (*get_comp2layer_xform)(void *refcon, /* >> */ + PF_ContextH context, /* >> */ + A_long curr_time, /* >> */ + A_long time_scale, /* >> */ + A_long *exists, /* << non-zero if exists */ + PF_FloatMatrix *c2l); /* << */ + + PF_Err (*get_layer2comp_xform)(void *refcon, /* >> */ + PF_ContextH context, /* >> */ + A_long curr_time, /* >> */ + A_long time_scale, /* >> */ + PF_FloatMatrix *l2c); /* << */ + + PF_Err (*source_to_frame)(void *refcon, PF_ContextH context, PF_FixedPoint *pt); + PF_Err (*frame_to_source)(void *refcon, PF_ContextH context, PF_FixedPoint *pt); + + PF_Err (*info_draw_color)(void *refcon, PF_Pixel color); + + // 2 lines of text, same as calling PF_InfoDrawText3( line1Z0, line2Z0, NULL) + PF_Err (*info_draw_text)(void *refcon, const A_char *text1Z0, const A_char *text2Z0); // Cstrings + + // Due to this structure's containment within PF_EventExtra, + // we are unable to add new functions to this structure in order + // to remain backwards compatible. In other words, do not add any + // new functions here, add them to the PF_AdvAppSuite1 suite + // within AE_AdvEffectSuites.h. -jja 10-24-2000 + +} PF_EventCallbacks, *PF_EventCallbacksPtr; + +enum { + PF_EA_NONE = 0, + PF_EA_PARAM_TITLE, + PF_EA_CONTROL +}; +typedef A_long PF_EffectArea; + +typedef struct { + PF_ParamIndex index; + PF_EffectArea area; + PF_UnionableRect current_frame; // full frame of the current area + PF_UnionableRect param_title_frame; // full frame of the param title area + A_long horiz_offset; // h offset to draw into title +} PF_EffectWindowInfo; + +enum { + PF_EO_NONE = 0, + PF_EO_HANDLED_EVENT = (1L << 0), + PF_EO_ALWAYS_UPDATE = (1L << 1), //rerender the comp + PF_EO_NEVER_UPDATE = (1L << 2), //do not rerender the comp + PF_EO_UPDATE_NOW = (1L << 3) //update the view immediately after the event returns when using PF_InvalidateRect +}; +typedef A_long PF_EventOutFlags; + +enum { + PF_EI_NONE = 0, + PF_EI_DONT_DRAW = 1L << 0 // don't draw controls in comp or layer window +}; +typedef A_long PF_EventInFlags; + +// this info is passed for ALL event types, except those in the Effect Control Window +// in ECW, you get the PF_EffectWindowInfo, during all events +typedef struct { + PF_UnionableRect port_rect; +} PF_ItemWindowInfo; + +/* + to know what union to take, look in + (**contextH).w_type. if == effect win, you get effect win, else you get item win +*/ +typedef union { + PF_EffectWindowInfo effect_win; /* >> only for Effect window do_click, draw, and adjust-cursor */ + PF_ItemWindowInfo item_win; /* >> comp or layer */ +} PF_WindowUnion; + +// uncomment if you want to get the port rect during most events +// #define PF_USE_NEW_WINDOW_UNION +typedef struct { + PF_ContextH contextH; /* >> */ + PF_EventType e_type; /* >> */ + PF_EventUnion u; /* >> based on e_type */ + + #ifdef PF_USE_NEW_WINDOW_UNION + PF_WindowUnion window_union; /* >> union of window-specific handy information */ + #else + PF_EffectWindowInfo effect_win; /* >> only for Effect window do_click, draw, and adjust-cursor */ + #endif + + PF_EventCallbacks cbs; /* >> not for new_context or close_context */ + PF_EventInFlags evt_in_flags; /* >> */ + PF_EventOutFlags evt_out_flags; /* << */ +} PF_EventExtra; + +enum { + PF_UIAlignment_NONE = 0, // No values other than PF_UIAlignment_NONE are honored, in AE or PPro. + PF_UIAlignment_TOP = 1L << 0, + PF_UIAlignment_LEFT = 1L << 1, + PF_UIAlignment_BOTTOM = 1L << 2, + PF_UIAlignment_RIGHT = 1L << 3 +}; + +typedef A_long PF_UIAlignment; + +struct _PF_CustomUIInfo { + + A_long reserved; + PF_CustomEventFlags events; + + A_long comp_ui_width; + A_long comp_ui_height; + PF_UIAlignment comp_ui_alignment; // unused + + A_long layer_ui_width; + A_long layer_ui_height; + PF_UIAlignment layer_ui_alignment; // unused + + A_long preview_ui_width; // unused + A_long preview_ui_height; // unused + PF_UIAlignment preview_ui_alignment; // unused + +}; + + +#ifdef __cplusplus +} +#endif + + +#include + + + +#endif /* _H_AE_EffectUI */ diff --git a/External/AE SDK/Headers/AE_EffectVers.h b/External/AE SDK/Headers/AE_EffectVers.h new file mode 100644 index 00000000..f9ab54a3 --- /dev/null +++ b/External/AE SDK/Headers/AE_EffectVers.h @@ -0,0 +1,17 @@ +#ifndef _H_AE_EffectVers +#define _H_AE_EffectVers + + +#define AEFX_API_VERSION 8 +#define AEFX_API_SUBVERS ' ' +#define AEFXp_CODE_VERSION 0 // no longer user, we have p4 now + +// these are here as copies -> when these change in AE_Effect.h, AEFX won't compile +// when they change, decide how to update above versions +// NOTE: this file is included by effect\shared\AEFX_PiPL.r and these versions are +// used when building PiPLs +#define PF_PLUG_IN_VERSION 13 // auto-set by prep_codeline_for_release.py, adjust comment if manually edit is okay +#define PF_PLUG_IN_SUBVERS 27 // manually set for SDK changes to allow more than 32 max threads for PF_Iterate + + +#endif diff --git a/External/AE SDK/Headers/AE_GeneralPlug.h b/External/AE SDK/Headers/AE_GeneralPlug.h new file mode 100644 index 00000000..ea0f7de9 --- /dev/null +++ b/External/AE SDK/Headers/AE_GeneralPlug.h @@ -0,0 +1,5779 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _H_AE_PlugGeneral +#define _H_AE_PlugGeneral + +#include +#include +#include +#include +#include + +#include +#include +#include +#ifdef AEGP_INTERNAL +#include +#endif +#include +#include + + +#include + +#define AEGP_PLUGIN_TYPE 'AEgx' + +#define AEGP_INITFUNC_MAJOR_VERSION 1 +#define AEGP_INITFUNC_MINOR_VERSION 9 + +#ifndef AEGP_INTERNAL + typedef struct _AEGP_Project **AEGP_ProjectH; + typedef struct _AEGP_Item **AEGP_ItemH; + typedef struct _AEGP_Comp **AEGP_CompH; + typedef struct _AEGP_Footage **AEGP_FootageH; + typedef struct _AEGP_Layer **AEGP_LayerH; + typedef struct _AEGP_Effect **AEGP_EffectRefH; + typedef struct _AEGP_Mask **AEGP_MaskRefH; + typedef struct _AEGPp_Stream **AEGP_StreamRefH; + typedef struct _AEGP_LayerContext **AEGP_RenderLayerContextH; + typedef struct _AEGP_PersistentBlob **AEGP_PersistentBlobH; + typedef struct _AEGP_MaskOutline **AEGP_MaskOutlineValH; + typedef struct _AEGP_Collection **AEGP_CollectionH; + typedef struct _AEGP_Collection2 **AEGP_Collection2H; + typedef struct _AEGP_SoundData **AEGP_SoundDataH; + typedef struct _AEGP_AddKeyframesInfo **AEGP_AddKeyframesInfoH; + typedef struct _AEGP_RenderReceipt **AEGP_RenderReceiptH; + typedef struct _AEGP_World **AEGP_WorldH; + typedef struct _AEGP_RenderOptions **AEGP_RenderOptionsH; + typedef struct _AEGP_LayerRenderOptions **AEGP_LayerRenderOptionsH; + typedef struct _AEGP_FrameReceipt **AEGP_FrameReceiptH; + typedef struct _AEGP_RenderQueueItem **AEGP_RQItemRefH; + typedef struct _AEGP_OutputModule **AEGP_OutputModuleRefH; + typedef struct _AEGP_TextDocument **AEGP_TextDocumentH; + typedef struct _AEGP_MarkerVal *AEGP_MarkerValP; + // AEGP_ConstMarkerValP is defined in AE_IO.h; + typedef struct _AEGP_TextOutlines **AEGP_TextOutlinesH; + typedef struct _AEGP_TimeStamp{A_char a[4];} AEGP_TimeStamp; + typedef struct _AEGP_PlatformWorld **AEGP_PlatformWorldH; + typedef struct _AEGP_ItemView *AEGP_ItemViewP; + typedef struct _AEGP_ColorProfile *AEGP_ColorProfileP; + typedef const struct _AEGP_ColorProfile *AEGP_ConstColorProfileP; +#endif + +typedef A_long AEGP_SubLayerIndex; + +#define AEGP_SubLayer_ALL (-1L) + +typedef A_long AEGP_PluginID; +// define a _AEGP_Refcon1 struct to use a typesafe refcon. +typedef struct _AEGP_GlobalRefcon *AEGP_GlobalRefcon; +typedef struct _AEGP_CommandRefcon *AEGP_CommandRefcon; +typedef struct _AEGP_UpdateMenuRefcon *AEGP_UpdateMenuRefcon; +typedef struct _AEGP_DeathRefcon *AEGP_DeathRefcon; +typedef struct _AEGP_VersionRefcon *AEGP_VersionRefcon; +typedef struct _AEGP_AboutStringRefcon *AEGP_AboutStringRefcon; +typedef struct _AEGP_AboutRefcon *AEGP_AboutRefcon; +typedef struct _AEGP_AsyncFrameRequestRefcon *AEGP_AsyncFrameRequestRefcon; +typedef struct _AEGP_IdleRefcon *AEGP_IdleRefcon; +typedef struct _AEGP_IORefcon *AEGP_IORefcon; +typedef struct _AEGP_CancelRefcon *AEGP_CancelRefcon; + + +// _SIZE constants include space for the terminating null. -1 for string length. +#define AEGP_MAX_PATH_SIZE 260 +#define AEGP_MAX_ABOUT_STRING_SIZE 256 +#define AEGP_MAX_RQITEM_COMMENT_SIZE 256 +#define AEGP_MAX_TYPE_NAME_SIZE 32 +#define AEGP_MAX_ITEM_NAME_SIZE 32 +#define AEGP_MAX_ITEM_NAME_SIZE 32 +#define AEGP_MAX_LAYER_NAME_SIZE 32 +#define AEGP_MAX_MASK_NAME_SIZE 32 +#define AEGP_MAX_EFFECT_NAME_SIZE (PF_MAX_EFFECT_NAME_LEN + 17) +#define AEGP_MAX_EFFECT_MATCH_NAME_SIZE (PF_MAX_EFFECT_NAME_LEN + 17) +#define AEGP_MAX_EFFECT_CATEGORY_NAME_SIZE (PF_MAX_EFFECT_CATEGORY_NAME_LEN + 1) +#define AEGP_MAX_STREAM_NAME_SIZE (PF_MAX_EFFECT_PARAM_NAME_LEN + 1) +#define AEGP_MAX_STREAM_UNITS_SIZE (PF_MAX_EFFECT_PARAM_NAME_LEN + 1) +#define AEGP_MAX_PROJ_NAME_SIZE 48 +#define AEGP_MAX_PLUGIN_NAME_SIZE 32 + +#define AEGP_MAX_MARKER_NAME_SIZE 64 +#define AEGP_MAX_MARKER_URL_SIZE 1024 +#define AEGP_MAX_MARKER_TARGET_SIZE 128 +#define AEGP_MAX_MARKER_CHAPTER_SIZE 128 + + +enum { + AEGP_Platform_MAC, + AEGP_Platform_WIN +}; +typedef A_long AEGP_Platform; + +enum { + AEGP_ProjBitDepth_8 = 0, + AEGP_ProjBitDepth_16, + AEGP_ProjBitDepth_32, + AEGP_ProjBitDepth_NUM_VALID_DEPTHS +}; +typedef A_char AEGP_ProjBitDepth; + +#define AEGP_Index_NONE ((A_long)0x80000000) +#define AEGP_Index_START ((A_long)0) +#define AEGP_Index_END ((A_long)-1) + +typedef A_long AEGP_Index; + +#define AEGP_LayerIDVal_NONE (0L) + +typedef A_long AEGP_LayerIDVal; + +#define AEGP_MaskIDVal_NONE (0L) + +typedef A_long AEGP_MaskIDVal; + +typedef struct { + A_FpLong alphaF, redF, greenF, blueF; // in the range [0.0 - 1.0] +} AEGP_ColorVal; + + +enum { + AEGP_CameraType_NONE = -1, + + AEGP_CameraType_PERSPECTIVE, + AEGP_CameraType_ORTHOGRAPHIC, + + AEGP_CameraType_NUM_TYPES +}; + +typedef A_u_long AEGP_CameraType; + +enum { + AEGP_FootageDepth_1 = 1, + AEGP_FootageDepth_2 = 2, + AEGP_FootageDepth_4 = 4, + AEGP_FootageDepth_8 = 8, + AEGP_FootageDepth_16 = 16, + AEGP_FootageDepth_24 = 24, + AEGP_FootageDepth_30 = 30, + AEGP_FootageDepth_32 = 32, + AEGP_FootageDepth_GRAY_2 = 34, + AEGP_FootageDepth_GRAY_4 = 36, + AEGP_FootageDepth_GRAY_8 = 40, + AEGP_FootageDepth_48 = 48, + AEGP_FootageDepth_64 = 64, + AEGP_FootageDepth_GRAY_16 = -16 +}; + + +enum { + AEGP_FilmSizeUnits_NONE = 0, + AEGP_FilmSizeUnits_HORIZONTAL, + AEGP_FilmSizeUnits_VERTICAL, + AEGP_FilmSizeUnits_DIAGONAL +}; +typedef A_long AEGP_FilmSizeUnits; + + +enum { + AEGP_LightType_NONE = -1, + + AEGP_LightType_PARALLEL, + AEGP_LightType_SPOT, + AEGP_LightType_POINT, + AEGP_LightType_AMBIENT, + + AEGP_LightType_NUM_TYPES +}; + +typedef A_u_long AEGP_LightType; + + +enum { + AEGP_LightFalloff_NONE = 0, + AEGP_LightFalloff_SMOOTH, + AEGP_LightFalloff_INVERSE_SQUARE_CLAMPED +}; + +typedef A_u_long AEGP_LightFalloffType; + + +/* -------------------------------------------------------------------- */ + +enum { + AEGP_TimeDisplayType_TIMECODE = 0, + AEGP_TimeDisplayType_FRAMES, + AEGP_TimeDisplayType_FEET_AND_FRAMES +}; +typedef A_char AEGP_TimeDisplayType; + +#define AEGP_FramesPerFoot_35MM 16 +#define AEGP_FramesPerFoot_16MM 40 + +typedef struct { // note: unused values are still stored in settings and used when cycling through + // the 3 types using cmd/ctrl-click on timecode + AEGP_TimeDisplayType time_display_type; + A_char timebaseC; // only used for AEGP_TimeDisplayType_TIMECODE, 1 to 100 + A_Boolean non_drop_30B; // only used for AEGP_TimeDisplayType_TIMECODE, + // when timebaseC == 30 && item framerate == 29.97, use drop frame or non-drop? + A_char frames_per_footC; // only used for AEGP_TimeDisplayType_FEET_AND_FRAMES + A_long starting_frameL; // usually 0 or 1, not used for AEGP_TimeDisplayType_TIMECODE + A_Boolean auto_timecode_baseB; +} AEGP_TimeDisplay2; + +enum { + AEGP_TimeDisplay_TIMECODE = 0, + AEGP_TimeDisplay_FRAMES +}; +typedef char AEGP_TimeDisplayMode; + +enum { + AEGP_SourceTimecode_ZERO = 0, + AEGP_SourceTimecode_SOURCE_TIMECODE +}; +typedef char AEGP_SourceTimecodeDisplayMode; + +enum { + AEGP_Frames_ZERO_BASED = 0, + AEGP_Frames_ONE_BASED, + AEGP_Frames_TIMECODE_CONVERSION +}; +typedef char AEGP_FramesDisplayMode; + +typedef struct { + AEGP_TimeDisplayMode display_mode; + AEGP_SourceTimecodeDisplayMode footage_display_mode; + A_Boolean display_dropframeB; + A_Boolean use_feet_framesB; + A_char timebaseC; + A_char frames_per_footC; + AEGP_FramesDisplayMode frames_display_mode; +} AEGP_TimeDisplay3; + + + +#define kAEGPProjSuite "AEGP Proj Suite" +#define kAEGPProjSuiteVersion6 9 /* frozen in AE 10.5 */ + +typedef struct AEGP_ProjSuite6 { + + SPAPI A_Err (*AEGP_GetNumProjects)( /* will always (in 5.0) return 1 if project is open */ + A_long *num_projPL); /* << */ + + SPAPI A_Err (*AEGP_GetProjectByIndex)( + A_long proj_indexL, /* >> */ + AEGP_ProjectH *projPH); /* << */ + + SPAPI A_Err (*AEGP_GetProjectName)( + AEGP_ProjectH projH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_PROJ_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetProjectPath)( + AEGP_ProjectH projH, /* >> */ + AEGP_MemHandle *unicode_pathPH); // << empty string if no file. handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetProjectRootFolder)( + AEGP_ProjectH projH, /* >> */ + AEGP_ItemH *root_folderPH); /* << */ + + SPAPI A_Err (*AEGP_SaveProjectToPath)( + AEGP_ProjectH projH, /* >> */ + const A_UTF16Char *pathZ); // >> null terminated unicode path with platform separators + + SPAPI A_Err (*AEGP_GetProjectTimeDisplay)( + AEGP_ProjectH projH, /* >> */ + AEGP_TimeDisplay3 *time_displayP); /* << */ + + SPAPI A_Err (*AEGP_SetProjectTimeDisplay)( /* UNDOABLE */ + AEGP_ProjectH projH, /* <> */ + const AEGP_TimeDisplay3 *time_displayP); /* >> */ + + SPAPI A_Err (*AEGP_ProjectIsDirty)( + AEGP_ProjectH projH, /* >> */ + A_Boolean *is_dirtyPB); /* << */ + + SPAPI A_Err (*AEGP_SaveProjectAs)( + AEGP_ProjectH projH, /* >> */ + const A_UTF16Char *pathZ); // >> null terminated unicode path with platform separators + + SPAPI A_Err (*AEGP_NewProject)( + AEGP_ProjectH *new_projectPH); /* << WARNING: Will close any open projects! */ + + // WARNING: Will close any open projects! + SPAPI A_Err (*AEGP_OpenProjectFromPath)( + const A_UTF16Char *pathZ, // >> null terminated unicode path with platform separators + AEGP_ProjectH *projectPH); /* << */ + + SPAPI A_Err (*AEGP_GetProjectBitDepth)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ProjBitDepth *bit_depthP); /* << */ + + SPAPI A_Err (*AEGP_SetProjectBitDepth)( /* UNDOABLE */ + AEGP_ProjectH projectH, /* >> */ + AEGP_ProjBitDepth bit_depth); /* >> */ + +} AEGP_ProjSuite6; + +/* -------------------------------------------------------------------- */ + +enum { + AEGP_SoundEncoding_UNSIGNED_PCM = 3, + AEGP_SoundEncoding_SIGNED_PCM, + AEGP_SoundEncoding_FLOAT, + AEGP_SoundEncoding_END, + AEGP_SoundEncoding_BEGIN = AEGP_SoundEncoding_UNSIGNED_PCM +}; +typedef A_long AEGP_SoundEncoding; + +typedef struct AEGP_SoundDataFormat { + A_FpLong sample_rateF; + AEGP_SoundEncoding encoding; + A_long bytes_per_sampleL; /* 1, 2, or 4 only (ignored if encoding == AEGP_SoundEncoding_FLOAT) */ + A_long num_channelsL; /* 1 for mono, 2 for stereo */ +}AEGP_SoundDataFormat; + + +enum { + AEGP_ItemType_NONE, + AEGP_ItemType_FOLDER, + AEGP_ItemType_COMP, + AEGP_ItemType_SOLID_defunct, // as of AE6, solids are now just AEGP_ItemType_FOOTAGE with AEGP_FootageSignature_SOLID + AEGP_ItemType_FOOTAGE, + AEGP_ItemType_NUM_TYPES1 +}; +typedef A_short AEGP_ItemType; + + +enum { + AEGP_ItemFlag_MISSING = 0x1, /* footage property: here for convenience */ + AEGP_ItemFlag_HAS_PROXY = 0x2, + AEGP_ItemFlag_USING_PROXY = 0x4, /* is using the proxy as source */ + AEGP_ItemFlag_MISSING_PROXY = 0x8, /* footage property: here for convenience */ + AEGP_ItemFlag_HAS_VIDEO = 0x10, /* is there a video track? */ + AEGP_ItemFlag_HAS_AUDIO = 0x20, /* is there an audio track? */ + AEGP_ItemFlag_STILL = 0x40, /* are all frames exactly the same */ + AEGP_ItemFlag_HAS_ACTIVE_AUDIO = 0x80 /* new in AE CS 5.5: is there an audio track, and is it also turned on right now? */ +}; +typedef A_long AEGP_ItemFlags; + + +enum { + AEGP_Label_NONE = -1, /* undefined sentinel value */ + AEGP_Label_NO_LABEL = 0, + AEGP_Label_1, + AEGP_Label_2, + AEGP_Label_3, + AEGP_Label_4, + AEGP_Label_5, + AEGP_Label_6, + AEGP_Label_7, + AEGP_Label_8, + AEGP_Label_9, + AEGP_Label_10, + AEGP_Label_11, + AEGP_Label_12, + AEGP_Label_13, + AEGP_Label_14, + AEGP_Label_15, + AEGP_Label_16, // label 16 is new in AE 10.0 (CS5) + + AEGP_Label_NUMTYPES +}; +typedef A_char AEGP_LabelID; + +/* -------------------------------------------------------------------- */ + +enum { + AEGP_PersistentType_MACHINE_SPECIFIC, + AEGP_PersistentType_MACHINE_INDEPENDENT, + AEGP_PersistentType_MACHINE_INDEPENDENT_RENDER, + AEGP_PersistentType_MACHINE_INDEPENDENT_OUTPUT, + AEGP_PersistentType_MACHINE_INDEPENDENT_COMPOSITION, + AEGP_PersistentType_MACHINE_SPECIFIC_TEXT, + AEGP_PersistentType_MACHINE_SPECIFIC_PAINT, + + AEGP_PersistentType_NUMTYPES +}; +typedef A_long AEGP_PersistentType; + + +#define kAEGPItemSuite "AEGP Item Suite" +#define kAEGPItemSuiteVersion9 14 /* frozen in AE 14.1 */ + +typedef struct AEGP_ItemSuite9 { + + SPAPI A_Err (*AEGP_GetFirstProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_PluginID pluginID, // in + AEGP_ItemH itemH, /* >> */ + AEGP_MemHandle *unicode_namePH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_SetItemName)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> */ + const A_UTF16Char *nameZ); /* >> null terminated UTF16 */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_SetItemParentFolder)( + AEGP_ItemH itemH, /* <> */ + AEGP_ItemH parent_folder_itemH); /* >> */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_UTF16Char *nameZ, /* >> null terminated UTF16 */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << allocated and owned by AE */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* UNDOABLE. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + SPAPI A_Err (*AEGP_GetItemComment)( + AEGP_ItemH itemH, /* >> */ + AEGP_MemHandle *unicode_namePH); /* << */ + + SPAPI A_Err (*AEGP_SetItemComment)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + const A_UTF16Char *commentZ); /* >> */ + + SPAPI A_Err (*AEGP_GetItemLabel)( + AEGP_ItemH itemH, /* >> */ + AEGP_LabelID *labelP); /* << */ + + SPAPI A_Err (*AEGP_SetItemLabel)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + AEGP_LabelID label); /* >> */ + + SPAPI A_Err (*AEGP_GetItemMRUView)( + AEGP_ItemH itemH, // >> + AEGP_ItemViewP *mru_viewP); // << + +} AEGP_ItemSuite9; + + +/* -------------------------------------------------------------------- */ + +#define kAEGPItemViewSuite "AEGP Item View Suite" +#define kAEGPItemViewSuiteVersion1 1 /* frozen in AE 13.6 */ + +typedef struct AEGP_ItemViewSuite1 { + // Each item view can have its own playback time, if previewing is active, otherwise the current associated item time + SPAPI A_Err (*AEGP_GetItemViewPlaybackTime)( + AEGP_ItemViewP item_viewP, /* >> */ + A_Boolean *is_currently_previewingPB0, /* >> whether the time is actually playback time (TRUE), FALSE is default item current_time */ + A_Time *curr_timePT ); /* << */ + +} AEGP_ItemViewSuite1; + + + +/* -------------------------------------------------------------------- */ + +#define kAEGPSoundDataSuite "AEGP Sound Data Suite" +#define kAEGPSoundDataVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct AEGP_SoundDataSuite1 { + SPAPI A_Err (*AEGP_NewSoundData)( /* Must be disposed with DisposeSoundData */ + const AEGP_SoundDataFormat* sound_formatP, + AEGP_SoundDataH *new_sound_dataPH); /* << can return NULL if no audio */ + + SPAPI A_Err (*AEGP_DisposeSoundData)( + AEGP_SoundDataH sound_dataH); /* >> */ + + SPAPI A_Err (*AEGP_GetSoundDataFormat)( + AEGP_SoundDataH soundH, /* >> */ + AEGP_SoundDataFormat *sound_formatP); /* << */ + + + /* + If the sound format has two channels, the data is interleaved + left (0), right(1), left(0), right(1), ... + + AEGP_SoundEncoding_FLOAT has a type of FpShort + + For bytes_per_sample == 1 + AEGP_SoundEncoding_UNSIGNED_PCM == A_u_char + AEGP_SoundEncoding_SIGNED_PCM == A_char + + For bytes_per_sample == 2 + AEGP_SoundEncoding_UNSIGNED_PCM == A_u_short + AEGP_SoundEncoding_SIGNED_PCM == A_short + + For bytes_per_sample == 4 + AEGP_SoundEncoding_UNSIGNED_PCM == A_u_long + AEGP_SoundEncoding_SIGNED_PCM == A_long + + usage: + void * sound_dataP; + sds->AEGP_LockSoundDataSamples( soundH, &sound_dataP); + A_u_long* correct_samples = (A_u_long*)sound_dataP; // for AEGP_SoundEncoding_UNSIGNED_PCM + */ + + SPAPI A_Err (*AEGP_LockSoundDataSamples)( + AEGP_SoundDataH soundH, /* >> */ + void **samples); /* << use the correct combination of unsigned/signed/float and bytes_per_sample to determine type */ + + SPAPI A_Err (*AEGP_UnlockSoundDataSamples)( + AEGP_SoundDataH soundH); /* >> */ + + SPAPI A_Err (*AEGP_GetNumSamples)( + AEGP_SoundDataH soundH, /* >> */ + A_long *num_samplesPL); /* << */ + +} AEGP_SoundDataSuite1 ; + + + +/* -------------------------------------------------------------------- */ + + +typedef struct { + A_short xS, yS; +} AEGP_DownsampleFactor; + +enum { + AEGP_CompFlag_SHOW_ALL_SHY = 0x1, + AEGP_CompFlag_RESERVED_1 = 0x2, + AEGP_CompFlag_RESERVED_2 = 0x4, + AEGP_CompFlag_ENABLE_MOTION_BLUR = 0x8, + AEGP_CompFlag_ENABLE_TIME_FILTER = 0x10, + AEGP_CompFlag_GRID_TO_FRAMES = 0x20, + AEGP_CompFlag_GRID_TO_FIELDS = 0x40, + AEGP_CompFlag_USE_LOCAL_DSF = 0x80, // If on, use the dsf in the comp, not the RO + AEGP_CompFlag_DRAFT_3D = 0x100, + AEGP_CompFlag_SHOW_GRAPH = 0x200, + AEGP_CompFlag_RESERVED_3 = 0x400 + +}; +typedef A_long AEGP_CompFlags; + + + + +#define kAEGPCompSuite "AEGP Comp Suite" +#define kAEGPCompSuiteVersion11 25 /* frozen in AE 14.2 */ + +typedef struct AEGP_CompSuite11 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_SetCompBGColor)( + AEGP_CompH compH, /* >> */ + const AEGP_ColorVal *bg_colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_GetShowLayerNameOrSourceName)( + AEGP_CompH compH, /* >> */ + A_Boolean *layer_names_shownPB); /* << true if layer names, false if source names */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_SetShowLayerNameOrSourceName)( + AEGP_CompH compH, /* >> */ + A_Boolean show_layer_namesB); /* >> true to show layer names, false to show source names */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_GetShowBlendModes)( + AEGP_CompH compH, /* >> */ + A_Boolean *blend_modes_shownPB); /* << */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_SetShowBlendModes)( + AEGP_CompH compH, /* >> */ + A_Boolean show_blend_modesB); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompSuggestedMotionBlurSamples)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompSuggestedMotionBlurSamples)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompMotionBlurAdaptiveSampleLimit)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompMotionBlurAdaptiveSampleLimit)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + const A_Time *work_area_startPT, /* >> */ + const A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_UTF16Char *utf_nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + A_Boolean select_new_layerB, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_CreateBoxTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + A_Boolean select_new_layerB, /* >> */ + A_FloatPoint box_dimensions, /* >> */ // (width and height) + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)( + AEGP_CompH compH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_GetMostRecentlyUsedComp)( + AEGP_CompH *compPH); /* << If compPH returns NULL, there's no available comp */ + + SPAPI A_Err (*AEGP_CreateVectorLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_vector_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCompMarkerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller */ + + SPAPI A_Err (*AEGP_GetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean *dropFramePB); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean dropFrameB); /* << */ + + SPAPI A_Err (*AEGP_ReorderCompSelection)( + AEGP_CompH compH, /* >> */ + A_long index); /* >> */ + +} AEGP_CompSuite11; + + +/* -------------------------------------------------------------------- */ + + +#define kAEGPMemorySuite "AEGP Memory Suite" +#define kAEGPMemorySuiteVersion1 1 /* frozen in AE 5.0 */ + +enum { + AEGP_MemFlag_NONE = 0x0, + AEGP_MemFlag_CLEAR = 0x01, + AEGP_MemFlag_QUIET = 0x02 +}; +typedef A_long AEGP_MemFlag; + +typedef A_u_long AEGP_MemSize; + + +typedef struct AEGP_MemorySuite1 { + + + SPAPI A_Err (*AEGP_NewMemHandle)( AEGP_PluginID plugin_id, /* >> */ + const A_char *whatZ, /* >> */ + AEGP_MemSize size, /* >> */ + AEGP_MemFlag flags, /* >> */ + AEGP_MemHandle *memPH); /* << */ + + SPAPI A_Err (*AEGP_FreeMemHandle)( AEGP_MemHandle memH); + + SPAPI A_Err (*AEGP_LockMemHandle)( AEGP_MemHandle memH, /* nestable */ + void **ptr_to_ptr); /* << */ + + SPAPI A_Err (*AEGP_UnlockMemHandle)( AEGP_MemHandle memH); + + SPAPI A_Err (*AEGP_GetMemHandleSize)( AEGP_MemHandle memH, + AEGP_MemSize *sizeP); /* << */ + + SPAPI A_Err (*AEGP_ResizeMemHandle)( const A_char *whatZ, /* >> */ + AEGP_MemSize new_size, /* >> */ + AEGP_MemHandle memH); /* <> */ + + SPAPI A_Err (*AEGP_SetMemReportingOn)( A_Boolean turn_OnB); + + SPAPI A_Err (*AEGP_GetMemStats)( AEGP_PluginID plugin_id, /* >> */ + A_long *countPL, /* << */ + A_long *sizePL); /* << */ +} AEGP_MemorySuite1; + +/* -------------------------------------------------------------------- */ + + +enum { + AEGP_TransferFlag_PRESERVE_ALPHA = 0x1, + AEGP_TransferFlag_RANDOMIZE_DISSOLVE = 0x2 +}; +typedef A_long AEGP_TransferFlags; + +enum { + AEGP_TrackMatte_NO_TRACK_MATTE, + AEGP_TrackMatte_ALPHA, + AEGP_TrackMatte_NOT_ALPHA, + AEGP_TrackMatte_LUMA, + AEGP_TrackMatte_NOT_LUMA +}; +typedef A_long AEGP_TrackMatte; + +typedef struct { + PF_TransferMode mode; // defined in AE_EffectCB.h + AEGP_TransferFlags flags; + AEGP_TrackMatte track_matte; +} AEGP_LayerTransferMode; + + + +enum { + AEGP_LayerQual_NONE = -1, // sentinel + AEGP_LayerQual_WIREFRAME, // wire-frames only + AEGP_LayerQual_DRAFT, // LO-qual filters, LO-qual geom + AEGP_LayerQual_BEST // HI-qual filters, HI-qual geom +}; +typedef A_short AEGP_LayerQuality; + + +enum { + AEGP_LayerSamplingQual_BILINEAR, // bilinear interpolation + AEGP_LayerSamplingQual_BICUBIC // bicubic interpolation +}; +typedef A_short AEGP_LayerSamplingQuality; + +enum { + AEGP_LayerFlag_NONE = 0x00000000, + AEGP_LayerFlag_VIDEO_ACTIVE = 0x00000001, + AEGP_LayerFlag_AUDIO_ACTIVE = 0x00000002, + AEGP_LayerFlag_EFFECTS_ACTIVE = 0x00000004, + AEGP_LayerFlag_MOTION_BLUR = 0x00000008, + AEGP_LayerFlag_FRAME_BLENDING = 0x00000010, + AEGP_LayerFlag_LOCKED = 0x00000020, + AEGP_LayerFlag_SHY = 0x00000040, + AEGP_LayerFlag_COLLAPSE = 0x00000080, + AEGP_LayerFlag_AUTO_ORIENT_ROTATION = 0x00000100, + AEGP_LayerFlag_ADJUSTMENT_LAYER = 0x00000200, + AEGP_LayerFlag_TIME_REMAPPING = 0x00000400, + AEGP_LayerFlag_LAYER_IS_3D = 0x00000800, + AEGP_LayerFlag_LOOK_AT_CAMERA = 0x00001000, + AEGP_LayerFlag_LOOK_AT_POI = 0x00002000, + AEGP_LayerFlag_SOLO = 0x00004000, + AEGP_LayerFlag_MARKERS_LOCKED = 0x00008000, + AEGP_LayerFlag_NULL_LAYER = 0x00010000, + AEGP_LayerFlag_HIDE_LOCKED_MASKS = 0x00020000, + AEGP_LayerFlag_GUIDE_LAYER = 0x00040000, + AEGP_LayerFlag_ADVANCED_FRAME_BLENDING = 0x00080000, + AEGP_LayerFlag_SUBLAYERS_RENDER_SEPARATELY = 0x00100000, + AEGP_LayerFlag_ENVIRONMENT_LAYER = 0x00200000 +}; +typedef A_long AEGP_LayerFlags; + + +// Layers are always one of the following types. + +enum { + AEGP_ObjectType_NONE = -1, + AEGP_ObjectType_AV, /* Includes all pre-AE 5.0 layer types (audio or video source, including adjustment layers) */ + AEGP_ObjectType_LIGHT, + AEGP_ObjectType_CAMERA, + AEGP_ObjectType_TEXT, + AEGP_ObjectType_VECTOR, + + AEGP_ObjectType_NUM_TYPES +}; +typedef A_long AEGP_ObjectType; + +enum { + AEGP_LTimeMode_LayerTime, + AEGP_LTimeMode_CompTime +}; +typedef A_short AEGP_LTimeMode; + +#define AEGP_REORDER_LAYER_TO_END -1 + +#define kAEGPLayerSuite "AEGP Layer Suite" +#define kAEGPLayerSuiteVersion7 13 /* frozen AE 10.0 build 396 */ + +typedef struct AEGP_LayerSuite7 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << returns non null only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItemID)( + AEGP_LayerH layerH, /* >> */ + A_long *source_item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_PluginID pluginID, // in + AEGP_LayerH layerH, /* >> */ + AEGP_MemHandle *utf_layer_namePH0, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *utf_source_namePH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags single_flag, /* >> */ + A_Boolean valueB); /* >> */ + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Time *layer_timePT); /* << */ + + SPAPI A_Err (*AEGP_ConvertLayerToCompTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *layer_timePT, /* >> */ + A_Time *comp_timePT) ; /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_UTF16Char *new_nameZ); /* >> null terminated UTF16 */ + + SPAPI A_Err (*AEGP_GetLayerParent)( + const AEGP_LayerH layerH, /* >> */ + AEGP_LayerH *parent_layerPH); /* << NULL if no parent */ + + SPAPI A_Err (*AEGP_SetLayerParent)( + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerH parent_layerH0); /* >> */ + + SPAPI A_Err (*AEGP_DeleteLayer)( + AEGP_LayerH layerH); /* >> UNDOABLE */ + + SPAPI A_Err (*AEGP_DuplicateLayer)( + AEGP_LayerH orig_layerH, /* >> */ + AEGP_LayerH *duplicate_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerID)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerIDVal id, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerLabel)( + AEGP_LayerH layerH, /* >> */ + AEGP_LabelID *labelP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerLabel)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LabelID label); /* >> */ + +} AEGP_LayerSuite7; + +#define kAEGPLayerSuiteVersion8 14 /* frozen AE 12.0 x300 */ + +typedef struct AEGP_LayerSuite8 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << returns non null only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItemID)( + AEGP_LayerH layerH, /* >> */ + A_long *source_item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_PluginID pluginID, // in + AEGP_LayerH layerH, /* >> */ + AEGP_MemHandle *utf_layer_namePH0, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *utf_source_namePH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags single_flag, /* >> */ + A_Boolean valueB); /* >> */ + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Time *layer_timePT); /* << */ + + SPAPI A_Err (*AEGP_ConvertLayerToCompTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *layer_timePT, /* >> */ + A_Time *comp_timePT) ; /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_UTF16Char *new_nameZ); /* >> null terminated UTF16 */ + + SPAPI A_Err (*AEGP_GetLayerParent)( + const AEGP_LayerH layerH, /* >> */ + AEGP_LayerH *parent_layerPH); /* << NULL if no parent */ + + SPAPI A_Err (*AEGP_SetLayerParent)( + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerH parent_layerH0); /* >> */ + + SPAPI A_Err (*AEGP_DeleteLayer)( + AEGP_LayerH layerH); /* >> UNDOABLE */ + + SPAPI A_Err (*AEGP_DuplicateLayer)( + AEGP_LayerH orig_layerH, /* >> */ + AEGP_LayerH *duplicate_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerID)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerIDVal id, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerLabel)( + AEGP_LayerH layerH, /* >> */ + AEGP_LabelID *labelP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerLabel)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LabelID label); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerSamplingQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerSamplingQuality *qualityP); /* << */ + + /* Option is explicitly set on the layer independent of layer quality. + If you want to force it on you must also set the layer quality to + AEGP_LayerQual_BEST with AEGP_SetLayerQuality. Otherwise it will only be using + the specified layer sampling quality whenever the layer quality is set to AEGP_LayerQual_BEST*/ + SPAPI A_Err (*AEGP_SetLayerSamplingQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerSamplingQuality quality); /* >> */ + +} AEGP_LayerSuite8; + + + + + + +/* -------------------------------------------------------------------- */ + + +enum { + /* + WARNING!! + don't reorder these items, don't add in the middle + these IDs are saved to disk! + + only ever add to the end of the list, right before AEGP_LayerStream_NUMTYPES + */ + + AEGP_LayerStream_NONE = -1, + AEGP_LayerStream_ANCHORPOINT, + AEGP_LayerStream_POSITION, + AEGP_LayerStream_SCALE, + AEGP_LayerStream_ROTATION, + AEGP_LayerStream_ROTATE_Z = AEGP_LayerStream_ROTATION, /* for 3D streams */ + AEGP_LayerStream_OPACITY, + AEGP_LayerStream_AUDIO, + AEGP_LayerStream_MARKER, + AEGP_LayerStream_TIME_REMAP, + AEGP_LayerStream_ROTATE_X, + AEGP_LayerStream_ROTATE_Y, + AEGP_LayerStream_ORIENTATION, + + // only valid for AEGP_ObjectType == AEGP_ObjectType_CAMERA + AEGP_LayerStream_ZOOM, + AEGP_LayerStream_DEPTH_OF_FIELD, + AEGP_LayerStream_FOCUS_DISTANCE, + AEGP_LayerStream_APERTURE, + AEGP_LayerStream_BLUR_LEVEL, + + // only valid for AEGP_ObjectType == AEGP_ObjectType_LIGHT + AEGP_LayerStream_INTENSITY, + AEGP_LayerStream_COLOR, + AEGP_LayerStream_CONE_ANGLE, + AEGP_LayerStream_CONE_FEATHER, + AEGP_LayerStream_SHADOW_DARKNESS, + AEGP_LayerStream_SHADOW_DIFFUSION, + + // only valid for AEGP_ObjectType == AEGP_ObjectType_AV + AEGP_LayerStream_ACCEPTS_SHADOWS, + AEGP_LayerStream_ACCEPTS_LIGHTS, + AEGP_LayerStream_AMBIENT_COEFF, + AEGP_LayerStream_DIFFUSE_COEFF, + AEGP_LayerStream_SPECULAR_INTENSITY, + AEGP_LayerStream_SPECULAR_SHININESS, + + AEGP_LayerStream_CASTS_SHADOWS, // LIGHT, and AV only, no CAMERA + AEGP_LayerStream_LIGHT_TRANSMISSION, // AV Layer only + AEGP_LayerStream_METAL, // AV layer only + + AEGP_LayerStream_SOURCE_TEXT, + + // only valid for AEGP_ObjectType == AEGP_ObjectType_CAMERA + AEGP_LayerStream_IRIS_SHAPE, + AEGP_LayerStream_IRIS_ROTATION, + AEGP_LayerStream_IRIS_ROUNDNESS, + AEGP_LayerStream_IRIS_ASPECT_RATIO, + AEGP_LayerStream_IRIS_DIFFRACTION_FRINGE, + AEGP_LayerStream_IRIS_HIGHLIGHT_GAIN, + AEGP_LayerStream_IRIS_HIGHLIGHT_THRESHOLD, + AEGP_LayerStream_IRIS_HIGHLIGHT_SATURATION, + + // only valid for AEGP_ObjectType == AEGP_ObjectType_LIGHT + AEGP_LayerStream_LIGHT_FALLOFF_TYPE, + AEGP_LayerStream_LIGHT_FALLOFF_START, + AEGP_LayerStream_LIGHT_FALLOFF_DISTANCE, + + // only valid for AEGP_ObjectType == AEGP_ObjectType_AV + AEGP_LayerStream_REFLECTION_INTENSITY, + AEGP_LayerStream_REFLECTION_SHARPNESS, + AEGP_LayerStream_REFLECTION_ROLLOFF, + AEGP_LayerStream_TRANSPARENCY_COEFF, + AEGP_LayerStream_TRANSPARENCY_ROLLOFF, + AEGP_LayerStream_INDEX_OF_REFRACTION, + + AEGP_LayerStream_EXTRUSION_BEVEL_STYLE, + AEGP_LayerStream_EXTRUSION_BEVEL_DIRECTION, + AEGP_LayerStream_EXTRUSION_BEVEL_DEPTH, + AEGP_LayerStream_EXTRUSION_HOLE_BEVEL_DEPTH, + AEGP_LayerStream_EXTRUSION_DEPTH, + AEGP_LayerStream_PLANE_CURVATURE, + AEGP_LayerStream_PLANE_SUBDIVISION, + + /*********************************************************/ + AEGP_LayerStream_NUMTYPES, + AEGP_LayerStream_BEGIN = AEGP_LayerStream_NONE + 1, + AEGP_LayerStream_END = AEGP_LayerStream_NUMTYPES + +}; +typedef A_long AEGP_LayerStream; + +enum { + AEGP_MaskStream_OUTLINE = 400, + AEGP_MaskStream_OPACITY, + AEGP_MaskStream_FEATHER, + AEGP_MaskStream_EXPANSION, + + // useful for iteration + AEGP_MaskStream_BEGIN = AEGP_MaskStream_OUTLINE, + AEGP_MaskStream_END = AEGP_MaskStream_EXPANSION+1 +}; +typedef A_long AEGP_MaskStream; + + +enum { + AEGP_StreamFlag_NONE = 0, + AEGP_StreamFlag_HAS_MIN = 0x01, + AEGP_StreamFlag_HAS_MAX = 0x02, + AEGP_StreamFlag_IS_SPATIAL = 0x04 +}; +typedef A_long AEGP_StreamFlags; + + +typedef A_FpLong AEGP_OneDVal; + +typedef struct { + A_FpLong x,y; +} AEGP_TwoDVal; // if audio, rt is x, left is y + +typedef struct { + A_FpLong x,y,z; +} AEGP_ThreeDVal; + +typedef A_FpLong AEGP_FourDVal[4]; + +typedef A_Handle AEGP_ArbBlockVal; + +enum { + AEGP_KeyInterp_NONE = 0, + AEGP_KeyInterp_LINEAR, + AEGP_KeyInterp_BEZIER, + AEGP_KeyInterp_HOLD, + + AEGP_Interp_NUM_VALUES +}; +typedef A_long AEGP_KeyframeInterpolationType; + +/* AEGP_KeyInterpMask -- allowed interpolation mask constants and type + */ +enum { + AEGP_KeyInterpMask_NONE = 0, + AEGP_KeyInterpMask_LINEAR = 1 << 0, + AEGP_KeyInterpMask_BEZIER = 1 << 1, + AEGP_KeyInterpMask_HOLD = 1 << 2, + AEGP_KeyInterpMask_CUSTOM = 1 << 3, + + AEGP_KeyInterpMask_ANY = 0xFFFF +}; +typedef A_long AEGP_KeyInterpolationMask; + +typedef struct { + A_FpLong speedF; + A_FpLong influenceF; +} AEGP_KeyframeEase; + + +typedef union { + AEGP_FourDVal four_d; + AEGP_ThreeDVal three_d; + AEGP_TwoDVal two_d; + AEGP_OneDVal one_d; + AEGP_ColorVal color; + AEGP_ArbBlockVal arbH; + AEGP_MarkerValP markerP; + AEGP_LayerIDVal layer_id; + AEGP_MaskIDVal mask_id; + AEGP_MaskOutlineValH mask; + AEGP_TextDocumentH text_documentH; +} AEGP_StreamVal2; + +typedef struct { + AEGP_StreamRefH streamH; + AEGP_StreamVal2 val; +} AEGP_StreamValue2; + +enum { + AEGP_StreamType_NO_DATA, + AEGP_StreamType_ThreeD_SPATIAL, + AEGP_StreamType_ThreeD, + AEGP_StreamType_TwoD_SPATIAL, + AEGP_StreamType_TwoD, + AEGP_StreamType_OneD, + AEGP_StreamType_COLOR, + AEGP_StreamType_ARB, + AEGP_StreamType_MARKER, + AEGP_StreamType_LAYER_ID, + AEGP_StreamType_MASK_ID, + AEGP_StreamType_MASK, + AEGP_StreamType_TEXT_DOCUMENT +}; +typedef A_long AEGP_StreamType; + + +#define kAEGPStreamSuite "AEGP Stream Suite" +#define kAEGPStreamSuiteVersion5 10 /* frozen in AE 15 */ + +typedef struct AEGP_StreamSuite5 { + // the only diff from this vs. last rev is that routines that pass AEGP_StreamValue2, when referring to a marker, + // (comp or layer) the struct now contains the NEW markerP type, which is compatible with the new Marker Suite + + SPAPI A_Err (*AEGP_IsStreamLegal)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + A_Boolean* is_legalP); /* << */ + + + SPAPI A_Err (*AEGP_CanVaryOverTime)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean* can_varyPB); /* << */ + + SPAPI A_Err (*AEGP_GetValidInterpolations)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyInterpolationMask* valid_interpolationsP); /* << */ + + SPAPI A_Err (*AEGP_GetNewLayerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetEffectNumParamStreams)( + AEGP_EffectRefH effect_refH, /* >> */ + A_long *num_paramsPL); /* << */ + + SPAPI A_Err (*AEGP_GetNewEffectStreamByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewMaskStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskStream which_stream, /* >> */ + AEGP_StreamRefH *mask_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DisposeStream)( + AEGP_StreamRefH streamH); /* >> */ + + SPAPI A_Err (*AEGP_GetStreamName)( + AEGP_PluginID pluginID, // in + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + AEGP_MemHandle *utf_stream_namePH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetStreamUnitsText)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *unitsZ); /* << space for A_char[AEGP_MAX_STREAM_UNITS_SIZE] */ + + SPAPI A_Err (*AEGP_GetStreamProperties)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamFlags *flagsP, /* << */ + A_FpLong *minP0, /* << */ + A_FpLong *maxP0); /* << */ + + SPAPI A_Err (*AEGP_IsStreamTimevarying)( /* takes expressions into account */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *is_timevaryingPB); /* << */ + + SPAPI A_Err (*AEGP_GetStreamType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamType *stream_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNewStreamValue)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamValue2 *valueP); /* << must be disposed */ + + SPAPI A_Err (*AEGP_DisposeStreamValue)( + AEGP_StreamValue2 *valueP); /* <> */ + + + SPAPI A_Err (*AEGP_SetStreamValue)( // only legal to call when AEGP_GetStreamNumKFs==0 or NO_DATA + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamValue2 *valueP); /* << */ + + // this is only valid on streams with primitive types. It is illegal on + // AEGP_ArbBlockVal || AEGP_MarkerValP || AEGP_MaskOutlineValH + + SPAPI A_Err (*AEGP_GetLayerStreamValue)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamVal2 *stream_valP, /* << */ + AEGP_StreamType *stream_typeP0); /* << */ + + SPAPI A_Err (*AEGP_GetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *enabledPB); /* >> */ + + SPAPI A_Err (*AEGP_SetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean enabledB); /* >> */ + + SPAPI A_Err(*AEGP_GetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_MemHandle *unicodeHZ); /* << must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err(*AEGP_SetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + const A_UTF16Char* expressionP); /* >> not adopted */ + + SPAPI A_Err (*AEGP_DuplicateStreamRef)( // must dispose yourself + AEGP_PluginID aegp_plugin_id, // in + AEGP_StreamRefH streamH, // in + AEGP_StreamRefH *dup_streamPH); // out +} AEGP_StreamSuite5; + + +/* -------------------------------------------------------------------- */ +/* new Dynamic Streams API for AE6 + + Used to access new tracker, text, & paint streams. Eventually + will work for all streams & groups on a layer. + +*/ + +#define AEGP_MAX_STREAM_MATCH_NAME_SIZE 40 + + +enum { + AEGP_StreamGroupingType_NONE = -1, + AEGP_StreamGroupingType_LEAF, + AEGP_StreamGroupingType_NAMED_GROUP, + AEGP_StreamGroupingType_INDEXED_GROUP +}; +typedef A_long AEGP_StreamGroupingType; + +enum { + AEGP_DynStreamFlag_ACTIVE_EYEBALL = 1L << 0, // read/write + AEGP_DynStreamFlag_HIDDEN = 1L << 1, // read/write, shown in UI at the moment? + AEGP_DynStreamFlag_DISABLED = 1L << 4, // read-only, greyed out in UI? + AEGP_DynStreamFlag_ELIDED = 1L << 5, // read-only, user never sees, children still seen and not indented + AEGP_DynStreamFlag_SHOWN_WHEN_EMPTY = 1L << 10, // read-only, should this group be shown when empty? + AEGP_DynStreamFlag_SKIP_REVEAL_WHEN_UNHIDDEN = 1L << 16 // read-only, do not auto reveal this property when un-hidden +}; +typedef A_u_long AEGP_DynStreamFlags; + +// Here are some matchnames for use with +// AEGP_GetNewStreamRefByMatchname(). + +#define AEGP_StreamGroupName_MASK_PARADE "ADBE Mask Parade" +#define AEGP_StreamGroupName_MASK_ATOM "ADBE Mask Atom" +#define AEGP_StreamName_MASK_FEATHER "ADBE Mask Feather" +#define AEGP_StreamName_MASK_OPACITY "ADBE Mask Opacity" +#define AEGP_StreamName_MASK_OFFSET "ADBE Mask Offset" +#define AEGP_StreamGroupName_EFFECT_PARADE "ADBE Effect Parade" +#define AEGP_StreamGroupName_LAYER "ADBE Abstract Layer" +#define AEGP_StreamGroupName_AV_LAYER "ADBE AV Layer" +#define AEGP_StreamGroupName_TEXT_LAYER "ADBE Text Layer" +#define AEGP_StreamGroupName_CAMERA_LAYER "ADBE Camera Layer" +#define AEGP_StreamGroupName_LIGHT_LAYER "ADBE Light Layer" +#define AEGP_StreamGroupName_AUDIO "ADBE Audio Group" +#define AEGP_StreamGroupName_MATERIAL_OPTIONS "ADBE Material Options Group" +#define AEGP_StreamGroupName_TRANSFORM "ADBE Transform Group" +#define AEGP_StreamGroupName_LIGHT_OPTIONS "ADBE Light Options Group" +#define AEGP_StreamGroupName_CAMERA_OPTIONS "ADBE Camera Options Group" + +#define kAEGPDynamicStreamSuite "AEGP Dynamic Stream Suite" +#define kAEGPDynamicStreamSuiteVersion4 5 /* frozen in AE 9.0 */ + +typedef struct AEGP_DynamicStreamSuite4 { + + SPAPI A_Err (*AEGP_GetNewStreamRefForLayer)( // used to start recursive walk of layer, + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewStreamRefForMask)( // used to start recursive walk of layer, + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_MaskRefH maskH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + + SPAPI A_Err (*AEGP_GetStreamDepth)( // layer is depth 0 + AEGP_StreamRefH streamH, /* >> */ + A_long *depthPL); /* << */ + + + SPAPI A_Err (*AEGP_GetStreamGroupingType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamGroupingType *group_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNumStreamsInGroup)( // error on leaf + AEGP_StreamRefH streamH, /* >> */ + A_long *num_streamsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetDynamicStreamFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags *stream_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetDynamicStreamFlag)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags one_flag, /* >> */ + A_Boolean undoableB, /* true if you want this to be an undoable change */ + /* if false, the only legal flag is AEGP_DynStreamFlag_HIDDEN */ + A_Boolean setB); /* >> */ + + + SPAPI A_Err (*AEGP_GetNewStreamRefByIndex)( // legal for namedgroup, indexedgroup, not leaf + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + A_long indexL, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewStreamRefByMatchname)( // legal for namedgroup + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + const A_char *utf8_match_nameZ, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DeleteStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH); /* >> */ // must still dispose the streamref later + + SPAPI A_Err (*AEGP_ReorderStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* <> updated to refer to newly ordered stream */ + A_long new_indexL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_long *new_indexPL0); /* << */ + + /* GetStreamName is in main kAEGPStreamSuite, and works on dynamic streams including groups */ + + SPAPI A_Err (*AEGP_SetStreamName)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* >> */ + const A_UTF16Char *nameZ); /* >> null terminated UTF16 */ + + SPAPI A_Err (*AEGP_CanAddStream)( + AEGP_StreamRefH group_streamH, /* >> */ + const A_char *utf8_match_nameZ, /* >> make note: this is now defined as a UTF8 string! */ + A_Boolean *can_addPB); /* << */ + + SPAPI A_Err (*AEGP_AddStream)( /* UNDOABLE, only valid for AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH indexed_group_streamH, /* >> */ + const A_char *utf8_match_nameZ, /* >> make note: this is now defined as a UTF8 string! */ + AEGP_StreamRefH *streamPH0); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetMatchName)( + AEGP_StreamRefH streamH, /* >> */ + A_char *utf8_match_nameZ); /* << UTF8!! use A_char[AEGP_MAX_STREAM_MATCH_NAME_SIZE] for buffer */ + + SPAPI A_Err (*AEGP_GetNewParentStreamRef)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamRefH *parent_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetStreamIsModified)( // i.e. changed from defaults, like the UU key + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *modifiedPB); /* << */ + + SPAPI A_Err (*AEGP_GetStreamIndexInParent)( // only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP + AEGP_StreamRefH streamH, /* >> */ + A_long *indexPL); /* << */ + + // Valid on leaf streams only. Returns true if this stream is a multidimensional stream + // that can have its dimensions separated, though they may not be currently separated. + // Terminology: A Leader is the stream that can be separated, a Follower is one + // of N automatically streams that correspond to the N dimensions of the Leader. + // A Leader isn't always separated, call AEGP_AreDimensionsSeparated to find out if it is. + // As of 8/20/2007, the only stream that is ever separarated is the layer's Position property. + // Please *do not* write code assuming that, we anticipate allowing separation of more streams in the future. + SPAPI A_Err (*AEGP_IsSeparationLeader)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *leaderPB); /* << */ + + // Valid on leaf streams only. Returns true if AEGP_IsSeparationLeader() is true and the + // dimensions are currently separated. If this is the case, this stream will have + // AEGP_DynStreamFlag_HIDDEN set, and AEGP_GetSeparationFollower() will help you find the individual + // dimension streams. However, some simple APIs can continue to be used on this leader, and + // they will simply automatically propagate to the follower, including: + // + // AEGP_GetNewStreamValue + // AEGP_SetStreamValue + // AEGP_GetLayerStreamValue + // + // Methods such as AEGP_GetNewKeyframeValue that work on keyframe indices will most definitely *not* work on the Leader property, + // you will need to retrieve and operate on the Followers explicitly. + SPAPI A_Err (*AEGP_AreDimensionsSeparated)( + AEGP_StreamRefH leader_streamH, /* >> */ + A_Boolean *separatedPB); /* << */ + + // Valid only if AEGP_IsSeparationLeader() is true. + SPAPI A_Err (*AEGP_SetDimensionsSeparated)( + AEGP_StreamRefH leader_streamH, /* >> */ + A_Boolean separatedB); /* << */ + + // Retrieve the Follower stream corresponding to a given dimension of the Leader stream. dimS + // can range from 0 to AEGP_GetStreamValueDimensionality(leader_streamH) - 1. + SPAPI A_Err (*AEGP_GetSeparationFollower)( + AEGP_StreamRefH leader_streamH, /* >> */ + A_short dimS, /* >> */ + AEGP_StreamRefH *follower_streamPH); /* << */ + + // Valid on leaf streams only. Returns true if this stream is a one dimensional property + // that represents one of the dimensions of a Leader. You can retrieve stream from the Leader + // using AEGP_GetSeparationFollower(). + SPAPI A_Err (*AEGP_IsSeparationFollower)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *followerPB); /* << */ + + // Valid on separation Followers only, returns the Leader it is part of + SPAPI A_Err (*AEGP_GetSeparationLeader)( + AEGP_StreamRefH follower_streamH, /* >> */ + AEGP_StreamRefH *leader_streamPH); /* << */ + + // Valid on separation Followers only, returns which dimension of the Leader it corresponds to + SPAPI A_Err (*AEGP_GetSeparationDimension)( + AEGP_StreamRefH follower_streamH, /* >> */ + A_short *dimPS); /* << */ + +} AEGP_DynamicStreamSuite4; + + + +/* -------------------------------------------------------------------- */ + +typedef A_long AEGP_KeyframeIndex; + +enum { + AEGP_KeyframeFlag_NONE = 0x00, + AEGP_KeyframeFlag_TEMPORAL_CONTINUOUS = 0x01, + AEGP_KeyframeFlag_TEMPORAL_AUTOBEZIER = 0x02, + AEGP_KeyframeFlag_SPATIAL_CONTINUOUS = 0x04, + AEGP_KeyframeFlag_SPATIAL_AUTOBEZIER = 0x08, + AEGP_KeyframeFlag_ROVING = 0x10 +}; +typedef A_long AEGP_KeyframeFlags; + + +enum { + AEGP_NumKF_NO_DATA = -1 +}; + +#define kAEGPKeyframeSuite "AEGP Keyframe Suite" +#define kAEGPKeyframeSuiteVersion4 4 /* frozen in 8 */ + +typedef struct AEGP_KeyframeSuite4 { + // the only diff from this vs. last rev is that routines that pass AEGP_StreamValue2, when referring to a marker, + // (comp or layer) the struct now contains the NEW markerP type, which is compatible with the new Marker Suite + + // returns AEGP_NumKF_NO_DATA if it's a AEGP_StreamType_NO_DATA, and you can't retrieve any values + // returns zero if no keyframes (but might have an expression, so not necessarily constant) + SPAPI A_Err (*AEGP_GetStreamNumKFs)( + AEGP_StreamRefH streamH, /* >> */ + A_long *num_kfsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetKeyframeTime)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *timePT); /* << */ + + // leaves stream unchanged if a keyframe already exists at specified time + SPAPI A_Err (*AEGP_InsertKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + AEGP_KeyframeIndex *key_indexP); /* << */ + + SPAPI A_Err (*AEGP_DeleteKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_KeyframeIndex key_index); /* >> */ + + SPAPI A_Err (*AEGP_GetNewKeyframeValue)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue2 *valueP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeValue)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue2 *valueP); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetStreamValueDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + A_short *value_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetStreamTemporalDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + A_short *temporal_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetNewKeyframeSpatialTangents)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue2 *in_tanP0, /* << */ + AEGP_StreamValue2 *out_tanP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeSpatialTangents)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue2 *in_tanP0, /* >> not adopted */ + const AEGP_StreamValue2 *out_tanP0); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetKeyframeTemporalEase)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> ranges from 0..TemporalDimensionality-1 */ + AEGP_KeyframeEase *in_easeP0, /* << */ + AEGP_KeyframeEase *out_easeP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeTemporalEase)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> ranges from 0..TemporalDimensionality-1 */ + const AEGP_KeyframeEase *in_easeP0, /* >> not adopted */ + const AEGP_KeyframeEase *out_easeP0); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetKeyframeFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags *flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeFlag)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags flag, /* >> set one flag at a time */ + A_Boolean true_falseB); /* >> */ + + SPAPI A_Err (*AEGP_GetKeyframeInterpolation)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType *in_interpP0, /* << */ + AEGP_KeyframeInterpolationType *out_interpP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeInterpolation)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType in_interp, /* >> */ + AEGP_KeyframeInterpolationType out_interp); /* >> */ + + SPAPI A_Err (*AEGP_StartAddKeyframes)( + AEGP_StreamRefH streamH, + AEGP_AddKeyframesInfoH *akPH); /* << */ + + + SPAPI A_Err (*AEGP_AddKeyframes)( + AEGP_AddKeyframesInfoH akH, /* <> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_long *key_indexPL); /* >> */ + + SPAPI A_Err (*AEGP_SetAddKeyframe)( + AEGP_AddKeyframesInfoH akH, /* <> */ + A_long key_indexL, /* >> */ + const AEGP_StreamValue2 *valueP); /* >> */ + + SPAPI A_Err (*AEGP_EndAddKeyframes)( /* UNDOABLE */ + A_Boolean addB, + AEGP_AddKeyframesInfoH akH); /* >> */ + +} AEGP_KeyframeSuite4; + + +/* -------------------------------------------------------------------- */ + +#define kAEGPTextDocumentSuite "AEGP Text Document Suite" +#define kAEGPTextDocumentSuiteVersion1 1 /* frozen in AE 6.0 */ + +typedef struct AEGP_TextDocumentSuite1 { + + SPAPI A_Err (*AEGP_GetNewText)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_TextDocumentH text_documentH, /* >> */ + AEGP_MemHandle *unicodePH); /* << handle of A_u_short, UTF16, NULL terminated. must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err (*AEGP_SetText)( + AEGP_TextDocumentH text_documentH, /* >> */ + const A_u_short *unicodePS, /* >> */ + A_long lengthL); /* >> number of characters */ + +} AEGP_TextDocumentSuite1; + +/* -------------------------------------------------------------------- */ + +#define kAEGPMarkerSuite "AEGP Marker Suite" +#define kAEGPMarkerSuiteVersion3 3 /* frozen in AE 16.0 */ + +enum { + AEGP_MarkerString_NONE, + + AEGP_MarkerString_COMMENT, + AEGP_MarkerString_CHAPTER, + AEGP_MarkerString_URL, + AEGP_MarkerString_FRAME_TARGET, + AEGP_MarkerString_CUE_POINT_NAME, + + AEGP_MarkerString_NUMTYPES +}; +typedef A_long AEGP_MarkerStringType; + +enum { + AEGP_MarkerFlag_NONE = 0x00000000, + AEGP_MarkerFlag_NAVIGATION = 0x00000001, // if this bit is zero, then the marker is for "Event" rather than "Navigation" + AEGP_MarkerFlag_PROTECT_REGION = 0x00000002 // if this bit is 1, then the marker is for a protected region (protected against timestretching, when existing on a precomp layer) +}; +typedef A_long AEGP_MarkerFlagType; + +typedef struct AEGP_MarkerSuite3 { + + SPAPI A_Err (*AEGP_NewMarker)( + AEGP_MarkerValP *markerPP); + + SPAPI A_Err (*AEGP_DisposeMarker)( + AEGP_MarkerValP markerP); + + SPAPI A_Err (*AEGP_DuplicateMarker)( + AEGP_MarkerValP markerP, // >> + AEGP_MarkerValP *new_markerP); // << + + SPAPI A_Err (*AEGP_SetMarkerFlag)( + AEGP_MarkerValP markerP, // >> + AEGP_MarkerFlagType flagType, // >> + A_Boolean valueB); // >> + + SPAPI A_Err (*AEGP_GetMarkerFlag)( + AEGP_ConstMarkerValP markerP, // >> + AEGP_MarkerFlagType flagType, // >> + A_Boolean *valueBP); // << + + SPAPI A_Err (*AEGP_GetMarkerString)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_ConstMarkerValP markerP, // >> + AEGP_MarkerStringType strType, // >> + AEGP_MemHandle *unicodePH); /* << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err (*AEGP_SetMarkerString)( + AEGP_MarkerValP markerP, // <<>> + AEGP_MarkerStringType strType, // >> + const A_u_short *unicodeP, // >> + A_long lengthL); // >> number of characters + + SPAPI A_Err (*AEGP_CountCuePointParams)( + AEGP_ConstMarkerValP markerP, // >> + A_long *paramsLP); // << + + SPAPI A_Err (*AEGP_GetIndCuePointParam)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_ConstMarkerValP markerP, // >> + A_long param_indexL, // >> must be between 0 and count - 1. else error + AEGP_MemHandle *unicodeKeyPH, // << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *unicodeValuePH); // << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_SetIndCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL, // must be between 0 and count - 1. else error + const A_u_short *unicodeKeyP, // >> UTF16 + A_long key_lengthL, // >> number of characters + const A_u_short *unicodeValueP, // >> UTF16 + A_long value_lengthL); // >> number of characters + + // this call is followed by AEGP_SetIndCuePointParam() to actually set the data + // the ONLY thing this function does is reserve the space for the param, at the provided index + SPAPI A_Err (*AEGP_InsertCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL); // must be between 0 and count. else error + + SPAPI A_Err (*AEGP_DeleteIndCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL); // must be between 0 and count - 1. else error + + SPAPI A_Err (*AEGP_SetMarkerDuration)( + AEGP_MarkerValP markerP, // >> + const A_Time *durationPT); // >> + + + SPAPI A_Err (*AEGP_GetMarkerDuration)( + AEGP_ConstMarkerValP markerP, // >> + A_Time *durationPT); // << + + SPAPI A_Err (*AEGP_SetMarkerLabel)( + AEGP_MarkerValP markerP, // >> + A_long value); // >> + + SPAPI A_Err (*AEGP_GetMarkerLabel)( + AEGP_ConstMarkerValP markerP, // >> + A_long *valueP); // << + +} AEGP_MarkerSuite3; + + +/* -------------------------------------------------------------------- */ + +#define kAEGPTextLayerSuite "AEGP Text Layer Suite" +#define kAEGPTextLayerSuiteVersion1 1 /* frozen in AE 6.0 */ + +typedef struct AEGP_TextLayerSuite1 { + + SPAPI A_Err (*AEGP_GetNewTextOutlines)( + AEGP_LayerH layerH, /* >> must be a text layer */ + const A_Time *layer_timePT, /* >> */ + AEGP_TextOutlinesH *outlinesPH); /* << must be disposed with AEGP_DisposeTextOutlines */ + + SPAPI A_Err (*AEGP_DisposeTextOutlines)( + AEGP_TextOutlinesH outlinesH); /* >> */ + + SPAPI A_Err (*AEGP_GetNumTextOutlines)( + AEGP_TextOutlinesH outlinesH, /* >> */ + A_long *num_outlinesPL); /* << */ + + SPAPI A_Err (*AEGP_GetIndexedTextOutline)( + AEGP_TextOutlinesH outlinesH, /* >> */ + A_long path_indexL, /* >> */ + PF_PathOutlinePtr *pathPP); /* << DO NOT DISPOSE */ + +} AEGP_TextLayerSuite1; + + +/* -------------------------------------------------------------------- */ + + +typedef A_long AEGP_InstalledEffectKey; +#define AEGP_InstalledEffectKey_NONE 0 + +#define RQ_ITEM_INDEX_NONE -1 + +enum { + AEGP_EffectFlags_NONE =0, + AEGP_EffectFlags_ACTIVE =0x01L << 0, + AEGP_EffectFlags_AUDIO_ONLY =0x01L << 1, + AEGP_EffectFlags_AUDIO_TOO =0x01L << 2, + AEGP_EffectFlags_MISSING =0x01L << 3 +}; +typedef A_long AEGP_EffectFlags; + +typedef A_long AEGP_EffectIndex; + + +#define kAEGPEffectSuite "AEGP Effect Suite" +#define kAEGPEffectSuiteVersion4 4 /* frozen in AE 13.0 */ + +typedef struct AEGP_EffectSuite4 { + + SPAPI A_Err (*AEGP_GetLayerNumEffects)( + AEGP_LayerH layerH, /* >> */ + A_long *num_effectsPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerEffectByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_EffectIndex layer_effect_indexL, /* >> */ + AEGP_EffectRefH *effectPH); /* << MUST dispose with DisposeEffect*/ + + SPAPI A_Err (*AEGP_GetInstalledKeyFromLayerEffect)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_InstalledEffectKey *installed_effect_keyP); /* << */ + + SPAPI A_Err (*AEGP_GetEffectParamUnionByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + PF_ParamType *param_typeP, /* << */ + PF_ParamDefUnion *uP0); /* << DO NOT USE THE VALUE FROM THIS PARAMDEF! */ + + SPAPI A_Err (*AEGP_GetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags *effect_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags effect_flags_set_mask, /* >> */ + AEGP_EffectFlags effect_flags); /* >> */ + + SPAPI A_Err (*AEGP_ReorderEffect)( /* UNDOABLE */ + AEGP_EffectRefH effect_refH, /* >> */ + A_long effect_indexL); /* >> */ + + /** new command parameter addded. To get old behaviour pass in PF_Cmd_COMPLETELY_GENERAL for effect_command **/ + SPAPI A_Err (*AEGP_EffectCallGeneric)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + const A_Time *timePT, /* >> Use the timebase of the layer to which effect is applied. */ + PF_Cmd effect_cmd, /* >> new parameter from version 2 */ + void *effect_extraPV); /* <> */ + + SPAPI A_Err (*AEGP_DisposeEffect)( + AEGP_EffectRefH effect_refH ); /* >> */ + + SPAPI A_Err (*AEGP_ApplyEffect)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_EffectRefH *effect_refPH); /* << MUST BE DISPOSED with AEGP_DisposeEffect */ + + SPAPI A_Err (*AEGP_DeleteLayerEffect)( + AEGP_EffectRefH effect_refH); /* >> undoable */ + + SPAPI A_Err (*AEGP_GetNumInstalledEffects)( + A_long *num_installed_effectsPL); /* << */ + + // pass in AEGP_InstalledEffectKey_NONE for installed_effect_key to get first effect key + + SPAPI A_Err (*AEGP_GetNextInstalledEffect)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_InstalledEffectKey *next_effectPH); /* << */ + + SPAPI A_Err (*AEGP_GetEffectName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_EFFECT_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectMatchName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *utf8_match_nameZ); /* << UTF8!! space for A_char[AEGP_MAX_EFFECT_MATCH_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectCategory)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *categoryZ); /* << space for A_char[AEGP_MAX_EFFECT_CATEGORY_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_DuplicateEffect)( + AEGP_EffectRefH original_effect_refH, /* >> */ + AEGP_EffectRefH *duplicate_effect_refPH); /* << */ + + /** new in AE 13.0: effect masks */ + SPAPI A_Err (*AEGP_NumEffectMask)( + AEGP_EffectRefH effect_refH, /* >> */ + A_u_long *num_masksPL); /* << */ + + SPAPI A_Err (*AEGP_GetEffectMaskID)( + AEGP_EffectRefH effect_refH, /* >> */ + A_u_long mask_indexL, /* >> */ + AEGP_MaskIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_AddEffectMask)( /* UNDOABLE */ + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_MaskIDVal id_val, /* >> */ + AEGP_StreamRefH *streamPH0); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_RemoveEffectMask)( /* UNDOABLE */ + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_MaskIDVal id_val); /* >> */ + + SPAPI A_Err (*AEGP_SetEffectMask)( /* UNDOABLE */ + AEGP_EffectRefH effect_refH, /* >> */ + A_u_long mask_indexL, /* >> */ + AEGP_MaskIDVal id_val, /* >> */ + AEGP_StreamRefH *streamPH0); /* << must be disposed by caller! */ +} AEGP_EffectSuite4; + + +/* -------------------------------------------------------------------- */ + +typedef A_long AEGP_MaskIndex; + +enum { + AEGP_MaskMBlur_SAME_AS_LAYER, + AEGP_MaskMBlur_OFF, + AEGP_MaskMBlur_ON +}; +typedef A_u_char AEGP_MaskMBlur; // This must be A_u_char, used in disk safe BEE_MaskInfo + +enum { + AEGP_MaskFeatherFalloff_SMOOTH, + AEGP_MaskFeatherFalloff_LINEAR +}; +typedef A_u_char AEGP_MaskFeatherFalloff; // This must be A_u_char, used in disk safe BEE_MaskInfo + +enum { + AEGP_MaskFeatherInterp_NORMAL, + AEGP_MaskFeatherInterp_HOLD_CW +}; +typedef A_u_char AEGP_MaskFeatherInterp; + +enum { + AEGP_MaskFeatherType_OUTER, + AEGP_MaskFeatherType_INNER +}; +typedef A_u_char AEGP_MaskFeatherType; + +#define kAEGPMaskSuite "AEGP Layer Mask Suite" +#define kAEGPMaskSuiteVersion6 7 /* frozen AE 11 */ + +typedef struct AEGP_MaskSuite6 { + + SPAPI A_Err (*AEGP_GetLayerNumMasks)( + AEGP_LayerH aegp_layerH, /* >> */ + A_long *num_masksPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerMaskByIndex)( + AEGP_LayerH aegp_layerH, /* >> */ + AEGP_MaskIndex mask_indexL, /* >> */ + AEGP_MaskRefH *maskPH); /* << must be disposed by calling AEGP_DisposeMask() */ + + SPAPI A_Err (*AEGP_DisposeMask)( + AEGP_MaskRefH mask_refH); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean *invertPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean invertB); /* << */ + + SPAPI A_Err (*AEGP_GetMaskMode)( + AEGP_MaskRefH mask_refH, /* >> */ + PF_MaskMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMode)( + AEGP_MaskRefH maskH, /* >> */ + PF_MaskMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur *blur_stateP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur blur_state); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskFeatherFalloff)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskFeatherFalloff *feather_falloffP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskFeatherFalloff)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskFeatherFalloff feather_falloffP); /* >> */ + + // AEGP_GetMaskName/SetMaskName are obsoleted. Use AEGP_GetNewDynamicStreamForMask + // and the name functions there + + SPAPI A_Err (*AEGP_GetMaskID)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_CreateNewMask)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_MaskRefH *mask_refPH, /* << */ + A_long *mask_indexPL0); /* << */ + + SPAPI A_Err (*AEGP_DeleteMaskFromLayer)( /* UNDOABLE */ + AEGP_MaskRefH mask_refH); /* >> still need to Dispose MaskRefH */ + + SPAPI A_Err (*AEGP_GetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + const AEGP_ColorVal *colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_lockedPB); /* >> */ + + SPAPI A_Err (*AEGP_SetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean lockB); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_roto_bezierPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean is_roto_bezierB); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateMask)( + AEGP_MaskRefH orig_mask_refH, /* >> */ + AEGP_MaskRefH *duplicate_mask_refPH); /* << */ + +} AEGP_MaskSuite6; + + +/* -------------------------------------------------------------------- */ + +typedef struct { + A_long segment; /* mask segment where feather is located */ + PF_FpLong segment_sF; /* 0-1: feather location on segment */ + PF_FpLong radiusF; /* negative value allowed if type == AEGP_MaskFeatherType_INNER */ + PF_FpShort ui_corner_angleF; /* 0-1: angle of UI handle on corners */ + PF_FpShort tensionF; /* 0-1: tension of boundary at feather pt */ + AEGP_MaskFeatherInterp interp; + AEGP_MaskFeatherType type; +} AEGP_MaskFeather; + +typedef A_long AEGP_FeatherIndex; + +typedef PF_PathVertex AEGP_MaskVertex; + +typedef A_long AEGP_VertexIndex; +#define AEGP_VertexIndex_END 10922 + +#define kAEGPMaskOutlineSuite "AEGP Mask Outline Suite" +#define kAEGPMaskOutlineSuiteVersion3 5 /* frozen in AE 11 */ + +typedef struct AEGP_MaskOutlineSuite3 { + + SPAPI A_Err (*AEGP_IsMaskOutlineOpen)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_Boolean *openPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskOutlineOpen)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_Boolean openB); /* >> */ + + // N segments means there are segments [0..N-1]; segment J is defined by vertex J & J+1 + SPAPI A_Err (*AEGP_GetMaskOutlineNumSegments)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_long *num_segmentsPL); /* << */ + + // which_pointL range: [0..num_segments]; for closed masks vertex[0] == vertex[num_segments] + SPAPI A_Err (*AEGP_GetMaskOutlineVertexInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex which_pointL, /* >> */ + AEGP_MaskVertex *vertexP); /* << tangents are relative to position */ + + // Setting vertex 0 is special. Its in tangent will actually set the out tangent + // of the last vertex in the outline. + SPAPI A_Err (*AEGP_SetMaskOutlineVertexInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex which_pointL, /* >> must already exists (use Create) */ + const AEGP_MaskVertex *vertexP); /* >> tangents are relative to position */ + + SPAPI A_Err (*AEGP_CreateVertex)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex insert_position); /* >> will insert at this index. moving other verticies index++*/ + + SPAPI A_Err (*AEGP_DeleteVertex)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex index); /* >> */ + + + SPAPI A_Err (*AEGP_GetMaskOutlineNumFeathers)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_long *num_feathersPL); /* << */ + + SPAPI A_Err (*AEGP_GetMaskOutlineFeatherInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_FeatherIndex which_featherL, /* >> */ + AEGP_MaskFeather *featherP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskOutlineFeatherInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex which_featherL, /* >> must already exists (use Create) */ + const AEGP_MaskFeather *featherP); /* >> */ + + SPAPI A_Err (*AEGP_CreateMaskOutlineFeather)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + const AEGP_MaskFeather *featherP0, /* >> */ + AEGP_FeatherIndex *insert_positionP); /* << index of new feather */ + + SPAPI A_Err (*AEGP_DeleteMaskOutlineFeather)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_FeatherIndex index); /* >> */ + +} AEGP_MaskOutlineSuite3; + + +/* -------------------------------------------------------------------- */ + + +typedef FIEL_Label AEGP_InterlaceLabel; + +enum { + AEGP_AlphaPremul = 0x1, /* otherwise straight */ + AEGP_AlphaInverted = 0x2, /* 255 = transparent */ + AEGP_AlphaIgnore = 0x4 +}; +typedef A_u_long AEGP_AlphaFlags; + +typedef struct { + AEGP_AlphaFlags flags; + A_u_char redCu; // color that was matted (if premul) + A_u_char greenCu; + A_u_char blueCu; +} AEGP_AlphaLabel; + +enum { + AEGP_PulldownPhase_NO_PULLDOWN = 0, + AEGP_PulldownPhase_WSSWW = 1, + AEGP_PulldownPhase_SSWWW, + AEGP_PulldownPhase_SWWWS, + AEGP_PulldownPhase_WWWSS, + AEGP_PulldownPhase_WWSSW, + AEGP_PulldownPhase_WWWSW, + AEGP_PulldownPhase_WWSWW, + AEGP_PulldownPhase_WSWWW, + AEGP_PulldownPhase_SWWWW, + AEGP_PulldownPhase_WWWWS +}; +typedef A_long AEGP_PulldownPhase; + +typedef struct { + A_long loops; + A_long reserved; /* set to 0; reserved for future use (palindrome, etc.) */ +} AEGP_LoopBehavior; + +typedef struct { + AEGP_InterlaceLabel il; + AEGP_AlphaLabel al; + AEGP_PulldownPhase pd; + AEGP_LoopBehavior loop; + A_Ratio pix_aspect_ratio; + A_FpLong native_fpsF; + A_FpLong conform_fpsF; + A_long depthL; + A_Boolean motion_dB; +} AEGP_FootageInterp; + +#define AEGP_FOOTAGE_LAYER_NAME_LEN (63) +#define AEGP_LayerIndex_UNKNOWN (-2) +#define AEGP_LayerIndex_MERGED (-1) +#define AEGP_LayerID_UNKNOWN (-1) + +enum { + AEGP_LayerDrawStyle_LAYER_BOUNDS = 0, + AEGP_LayerDrawStyle_DOCUMENT_BOUNDS +}; + +typedef A_long AEGP_LayerDrawStyle; + + +typedef struct { + A_long layer_idL; /* unique ID for layer, as contained in a Photoshop document's 'lyid' resource. */ + /* pass AEGP_LayerID_UNKNOWN if you don't know this */ + A_long layer_indexL; /* zero-based layer index. pass AEGP_LayerIndex_MERGED for merged layers */ + A_char nameAC[AEGP_FOOTAGE_LAYER_NAME_LEN + 1]; /* used for sequences and backup for linking */ + AEGP_LayerDrawStyle layer_draw_style; + +} AEGP_FootageLayerKey; + +#define AEGP_ANY_FRAME -1 + +typedef struct { + A_Boolean all_in_folderB; /* TRUE means intepret as a sequence, FALSE means still frame. + If FALSE, other parameters in this structure have no effect. */ + A_Boolean force_alphabeticalB; /* if TRUE, filenames of sequence will be forced to alphabetical order */ + A_long start_frameL; /* first frame of sequence, AEGP_ANY_FRAME means earliest frame found */ + A_long end_frameL; /* last frame of sequence, AEGP_ANY_FRAME means last frame found */ +} AEGP_FileSequenceImportOptions; + +enum { + AEGP_FootageSignature_NONE = -1, // invalid sig + AEGP_FootageSignature_MISSING = 0, // placeholder + AEGP_FootageSignature_SOLID = 'Soli' +}; +typedef A_long AEGP_FootageSignature; + + +#define AEGP_FOOTAGE_MAIN_FILE_INDEX 0 + +#define kAEGPFootageSuite "AEGP Footage Suite" + +#define kAEGPFootageSuiteVersion5 11 /* frozen in AE 10.0 */ + + +enum { + AEGP_InterpretationStyle_NO_DIALOG_GUESS = 0, // FALSE for backwards compatability: will guess alpha interpretation even if file contains unknown alpha interpretation and user pref says to ask user + AEGP_InterpretationStyle_DIALOG_OK = 1, // TRUE for backwards comptability. Optionally can show a dialog. + AEGP_InterpretationStyle_NO_DIALOG_NO_GUESS = 2 // used for replace footage implementation +}; +typedef A_u_char AEGP_InterpretationStyle; + +typedef struct AEGP_FootageSuite5 { + + SPAPI A_Err (*AEGP_GetMainFootageFromItem)( /* error if item isn't AEGP_ItemType_FOOTAGE! */ + AEGP_ItemH itemH, /* >> */ + AEGP_FootageH *footagePH); /* << */ + + SPAPI A_Err (*AEGP_GetProxyFootageFromItem)( /* error if has_proxy is false! (note, item could still be a comp) */ + AEGP_ItemH itemH, /* >> */ + AEGP_FootageH *proxy_footagePH); /* << */ + + SPAPI A_Err (*AEGP_GetFootageNumFiles)( + AEGP_FootageH footageH, /* >> */ + A_long *num_main_filesPL0, /* << */ + A_long *files_per_framePL0); /* << includes main file. e.g. 1 for no aux data */ + + SPAPI A_Err (*AEGP_GetFootagePath)( + AEGP_FootageH footageH, /* >> */ + A_long frame_numL, /* >> range is 0 to num_main_files */ + A_long file_indexL, /* >> AEGP_FOOTAGE_MAIN_FILE_INDEX is main file */ + AEGP_MemHandle *unicode_pathPH); // << empty string if no file. handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetFootageSignature)( + AEGP_FootageH footageH, /* >> */ + AEGP_FootageSignature *sigP); /* << like filetype, but also for non-file types like solids, etc. */ + + SPAPI A_Err (*AEGP_NewFootage)( + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_UTF16Char *pathZ, // >> null terminated unicode path with platform separators + const AEGP_FootageLayerKey *layer_infoP0, /* >> optional layer info; pass NULL for merged layers */ + const AEGP_FileSequenceImportOptions *sequence_optionsP0, /* >> optional sequence info; passing NULL means not a sequence */ + AEGP_InterpretationStyle interp_style, /* >> (in) */ + void *reserved, /* >> pass NULL */ + AEGP_FootageH *footagePH); /* << caller owns until disposed or added to project */ + + SPAPI A_Err (*AEGP_AddFootageToProject)( /* UNDOABLE */ + AEGP_FootageH footageH, /* >> will be adopted by project, may not be added more than once */ + AEGP_ItemH folderH, /* >> add to this folder */ + AEGP_ItemH *added_itemPH0); /* << */ + + SPAPI A_Err (*AEGP_SetItemProxyFootage)( /* UNDOABLE */ + AEGP_FootageH footageH, /* >> will be adopted by project, may not be set more than once */ + AEGP_ItemH itemH); /* >> set for this item */ + + SPAPI A_Err (*AEGP_ReplaceItemMainFootage)( /* UNDOABLE */ + AEGP_FootageH footageH, /* >> will be adopted by project, may not be set more than once */ + AEGP_ItemH itemH); /* >> replace main footage for this item */ + + SPAPI A_Err (*AEGP_DisposeFootage)( + AEGP_FootageH footageH); /* >> do not dipose footage that is owned or has been adopted by project */ + + SPAPI A_Err (*AEGP_GetFootageInterpretation)( + AEGP_ItemH itemH, /* >> note: item that contains footage */ + A_Boolean proxyB, /* >> TRUE = get proxy interp; FALSE = get main interp */ + AEGP_FootageInterp *interpP); /* << */ + + SPAPI A_Err (*AEGP_SetFootageInterpretation)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> note: item that contains footage */ + A_Boolean proxyB, /* >> TRUE = set proxy interp; FALSE = set main interp */ + const AEGP_FootageInterp *interpP); /* >> */ + + SPAPI A_Err (*AEGP_GetFootageLayerKey) ( + AEGP_FootageH footageH, /* >> */ + AEGP_FootageLayerKey *layerKeyP); /* << the footages layer info */ + + SPAPI A_Err (*AEGP_NewPlaceholderFootage)( /* doesn't modify project, creates footage with AEGP_FootageSignature_MISSING */ + AEGP_PluginID plugin_id, /* >> */ + const A_char *nameZ, /* >> file name, not the path! */ + A_long width, /* >> */ + A_long height, /* >> */ + const A_Time *durationPT, /* >> */ + AEGP_FootageH *footagePH); /* << caller owns until disposed or added to project */ + + SPAPI A_Err (*AEGP_NewPlaceholderFootageWithPath)( /* doesn't modify project, creates footage with AEGP_FootageSignature_MISSING */ + AEGP_PluginID plugin_id, /* >> */ + const A_UTF16Char *pathZ, // >> null terminated unicode path with platform separators + AEGP_Platform path_platform, /* >> Mac or Win */ + AEIO_FileType file_type, // >> AEIO_FileType_NONE is now a warning condition. If you pass AEIO_FileType_ANY, then path MUST exist. if path may not exist: pass AEIO_FileType_DIR for folder, or AEIO_FileType_GENERIC for a file + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Time *durationPT, /* >> */ + AEGP_FootageH *footagePH); /* << caller owns until disposed or added to project */ + + SPAPI A_Err (*AEGP_NewSolidFootage)( /* doesn't modify project, creates footage with AEGP_FootageSignature_SOLID */ + const A_char *nameZ, /* >> file name, not the path! */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *colorP, /* >> */ + AEGP_FootageH *footagePH); /* << caller owns until disposed or added to project */ + + SPAPI A_Err (*AEGP_GetSolidFootageColor)( /* error if footage isn't AEGP_FootageSignature_SOLID */ + AEGP_ItemH itemH, /* >> note: item that contains footage */ + A_Boolean proxyB, /* >> TRUE = get proxy solid color; FALSE = get main solid color */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_SetSolidFootageColor)( /* UNDOABLE, error if footage isn't AEGP_FootageSignature_SOLID */ + AEGP_ItemH itemH, /* >> note: item that contains footage */ + A_Boolean proxyB, /* >> TRUE = set proxy solid color; FALSE = set main solid color */ + const AEGP_ColorVal *colorP); /* >> */ + + SPAPI A_Err (*AEGP_SetSolidFootageDimensions)( /* UNDOABLE, error if footage isn't AEGP_FootageSignature_SOLID */ + AEGP_ItemH itemH, /* >> note: item that contains footage */ + A_Boolean proxyB, /* >> TRUE = set proxy solid size; FALSE = set main solid size */ + A_long widthL, /* >> min 1, max 30,000 */ + A_long heightL); /* >> min 1, max 30,000 */ + + SPAPI A_Err (*AEGP_GetFootageSoundDataFormat)( + AEGP_FootageH footageH, /* >> */ + AEGP_SoundDataFormat* sound_formatP); /* << */ + + SPAPI A_Err (*AEGP_GetFootageSequenceImportOptions)( + AEGP_FootageH footageH, /* >> */ + AEGP_FileSequenceImportOptions *optionsP); /* << */ + +} AEGP_FootageSuite5; + +/* -------------------------------------------------------------------- */ + + +typedef A_long AEGP_Command; + +#define AEGP_Command_ALL 0 + +enum { + AEGP_WindType_NONE, + AEGP_WindType_PROJECT, + AEGP_WindType_COMP, + AEGP_WindType_TIME_LAYOUT, + AEGP_WindType_LAYER, + AEGP_WindType_FOOTAGE, + AEGP_WindType_RENDER_QUEUE, + AEGP_WindType_QT, + AEGP_WindType_DIALOG, + AEGP_WindType_FLOWCHART, + AEGP_WindType_EFFECT, + AEGP_WindType_OTHER +}; +typedef A_LegacyEnumType AEGP_WindowType; + + +enum { + AEGP_HP_BeforeAE = 0x1, // call hook before AE handles event (if AE handles) + AEGP_HP_AfterAE = 0x2 // call hook after AE handles event (if AE handles) +}; +typedef A_u_long AEGP_HookPriority; + + +typedef A_Err (*AEGP_CommandHook)( + AEGP_GlobalRefcon plugin_refconP, /* >> */ + AEGP_CommandRefcon refconP, /* >> */ + AEGP_Command command, /* >> */ + AEGP_HookPriority hook_priority, /* >> currently always AEGP_HP_BeforeAE */ + A_Boolean already_handledB, /* >> */ + A_Boolean *handledPB); /* << whether you handled */ + +typedef A_Err (*AEGP_UpdateMenuHook)( + AEGP_GlobalRefcon plugin_refconP, /* >> */ + AEGP_UpdateMenuRefcon refconP, /* >> */ + AEGP_WindowType active_window); /* >> */ + +typedef A_Err (*AEGP_DeathHook)( + AEGP_GlobalRefcon plugin_refconP, /* >> */ + AEGP_DeathRefcon refconP); /* >> */ + +typedef A_Err (*AEGP_VersionHook)( /* As of 5.0, not called */ + AEGP_GlobalRefcon plugin_refconP, /* >> */ + AEGP_VersionRefcon refconP, /* >> */ + A_u_long *pf_versionPLu); /* << use PF_VERSION() macro to build and PF_Version_XXX() macros to access */ + + // one line description. when displaying, AE will prepend name and version information. + // this will be used to display a list of about info for all plugins + +typedef A_Err (*AEGP_AboutStringHook)( /* As of 5.0, not called */ + AEGP_GlobalRefcon plugin_refconP, /* >> */ + AEGP_AboutStringRefcon refconP, /* >> */ + A_char *aboutZ); /* << space for A_char[AEGP_MAX_ABOUT_STRING_SIZE] */ + + // bring up a dialog and tell us about yourself +typedef A_Err (*AEGP_AboutHook)( /* As of 5.0, not called */ + AEGP_GlobalRefcon plugin_refconP, /* >> */ + AEGP_AboutRefcon refconP); /* >> */ + +typedef A_Err (*AEGP_IdleHook)( + AEGP_GlobalRefcon plugin_refconP, /* >> */ + AEGP_IdleRefcon refconP, /* >> */ + A_long *max_sleepPL); /* <> in 1/60 of a second*/ + + + + +#define kAEGPRegisterSuite "AEGP Register Suite" +#define kAEGPRegisterSuiteVersion5 6 /* frozen AE 10.0 */ + +typedef struct AEGP_RegisterSuite5 { + + SPAPI A_Err (*AEGP_RegisterCommandHook)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_HookPriority hook_priority, /* >> */ + AEGP_Command command, /* >> use AEGP_Command_ALL to get all commands */ + AEGP_CommandHook command_hook_func, /* >> */ + AEGP_CommandRefcon refconP); /* >> */ + + // this will be called anytime any menu is about to be drawn. it isn't specific to a menu so you + // must enable all appropriate menu items when this hook is called. + + SPAPI A_Err (*AEGP_RegisterUpdateMenuHook)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_UpdateMenuHook update_menu_hook_func, /* >> */ + AEGP_UpdateMenuRefcon refconP); /* >> */ + + SPAPI A_Err (*AEGP_RegisterDeathHook)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_DeathHook death_hook_func, /* >> */ + AEGP_DeathRefcon refconP); /* >> */ + + SPAPI A_Err (*AEGP_RegisterVersionHook)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_VersionHook version_hook_func, /* >> */ + AEGP_VersionRefcon refconP); /* >> */ + + SPAPI A_Err (*AEGP_RegisterAboutStringHook)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_AboutStringHook about_string_hook_func, /* >> */ + AEGP_AboutStringRefcon refconP); /* >> */ + + SPAPI A_Err (*AEGP_RegisterAboutHook)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_AboutHook about_hook_func, /* >> */ + AEGP_AboutRefcon refconP); /* >> */ + + SPAPI A_Err (*AEGP_RegisterArtisan) ( + A_Version api_version, /* >> */ + A_Version artisan_version, /* >> */ + AEGP_PluginID aegp_plugin_id, /* >> */ + void *aegp_refconPV, /* <> */ + const A_char *utf8_match_nameZ, /* >> */ + const A_char *artisan_nameZ, /* >> */ + PR_ArtisanEntryPoints *entry_funcs); /* >> */ + + SPAPI A_Err (*AEGP_RegisterIO) ( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_IORefcon aegp_refconP, /* >> */ + const AEIO_ModuleInfo *io_infoP, /* >> */ + const AEIO_FunctionBlock4 *aeio_fcn_blockP); /* >> */ + + SPAPI A_Err (*AEGP_RegisterIdleHook)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_IdleHook idle_hook_func, /* >> */ + AEGP_IdleRefcon refconP); /* >> */ + + + SPAPI A_Err (*AEGP_RegisterTracker)( + A_Version api_version, /* >> */ + A_Version tracker_version, /* >> */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const AEGP_GlobalRefcon refconP, /* >> */ + const A_char *utf8_match_nameZ, /* >> */ + const A_char *tracker_nameZ, /* >> */ + const PT_TrackerEntryPoints *entry_pointsP); /* >> */ + + SPAPI A_Err (*AEGP_RegisterInteractiveArtisan) ( + A_Version api_version, /* >> */ + A_Version artisan_version, /* >> */ + AEGP_PluginID aegp_plugin_id, /* >> */ + void *aegp_refconPV, /* <> */ + const A_char *utf8_match_nameZ, /* >> */ + const A_char *artisan_nameZ, /* >> */ + PR_ArtisanEntryPoints *entry_funcs); /* >> */ + + // Call this to register as many strings as you like for name-replacement + // when presets are loaded. Any time a Property name is found, or referred + // to in an expression, and it starts with an ASCII tab character ('\t'), followed + // by one of the english names, it will be replaced with the localized name. (In + // English the tab character will simply be removed). + SPAPI A_Err (*AEGP_RegisterPresetLocalizationString) ( + const A_char *english_nameZ, /* >> */ + const A_char *localized_nameZ); /* >> */ + + + +} AEGP_RegisterSuite5; + + +/* -------------------------------------------------------------------- */ + + +enum { + AEGP_Menu_NONE, + AEGP_Menu_APPLE, + AEGP_Menu_FILE, + AEGP_Menu_EDIT, + AEGP_Menu_COMPOSITION, + AEGP_Menu_LAYER, + AEGP_Menu_EFFECT, + AEGP_Menu_WINDOW, + AEGP_Menu_FLOATERS, + AEGP_Menu_KF_ASSIST, + AEGP_Menu_IMPORT, + AEGP_Menu_SAVE_FRAME_AS, + AEGP_Menu_PREFS, + AEGP_Menu_EXPORT, + AEGP_Menu_ANIMATION, + AEGP_Menu_PURGE, + //the following menu options only valid for AE 12.0 and up + AEGP_Menu_NEW +}; +typedef A_LegacyEnumType AEGP_MenuID; + + +#define AEGP_MENU_INSERT_SORTED (-2) +#define AEGP_MENU_INSERT_AT_BOTTOM (-1) +#define AEGP_MENU_INSERT_AT_TOP 0 + + +#define kAEGPCommandSuite "AEGP Command Suite" +#define kAEGPCommandSuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct AEGP_CommandSuite1 { + + SPAPI A_Err (*AEGP_GetUniqueCommand)( + AEGP_Command *unique_commandP); /* << */ + + SPAPI A_Err (*AEGP_InsertMenuCommand)( + AEGP_Command command, /* >> */ + const A_char *nameZ, /* >> */ + AEGP_MenuID menu_id, /* >> */ + A_long after_itemL); /* >> */ + + SPAPI A_Err (*AEGP_RemoveMenuCommand)( + AEGP_Command command); /* >> */ + + SPAPI A_Err (*AEGP_SetMenuCommandName)( + AEGP_Command command, /* >> */ + const A_char *nameZ); /* >> */ + + SPAPI A_Err (*AEGP_EnableCommand)( + AEGP_Command command); /* >> */ + + SPAPI A_Err (*AEGP_DisableCommand)( + AEGP_Command command); /* >> */ + + SPAPI A_Err (*AEGP_CheckMarkMenuCommand)( + AEGP_Command command, /* >> */ + A_Boolean checkB); /* >> */ + + SPAPI A_Err (*AEGP_DoCommand)( + AEGP_Command command); /* >> */ + +} AEGP_CommandSuite1; + + + + +/* -------------------------------------------------------------------- */ + + +typedef struct { + A_long reservedAL[12]; +} AEGP_ErrReportState; + + +enum { + AEGP_GetPathTypes_PLUGIN = 0, // (Not Implemented) The path to the executable of the plugin itself. + AEGP_GetPathTypes_USER_PLUGIN, // The suite specific location of user specific plugins. + AEGP_GetPathTypes_ALLUSER_PLUGIN, // The suite specific location of plugins shared by all users. + AEGP_GetPathTypes_APP // The After Effects exe or .app location. Not plugin specific. + }; +typedef A_u_long AEGP_GetPathTypes; + + +#define kAEGPUtilitySuite "AEGP Utility Suite" +#define kAEGPUtilitySuiteVersion6 13 /* frozen in AE 12.0 */ + +typedef struct AEGP_UtilitySuite6 { + + SPAPI A_Err (*AEGP_ReportInfo)( /* displays dialog with name of plugin followed by info string. See also: ReportInfoUnicode */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_char *info_stringZ); /* >> */ + + SPAPI A_Err (*AEGP_ReportInfoUnicode)( /* displays dialog with name of plugin followed by info string */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_UTF16Char *info_stringP); /* >> */ + + SPAPI A_Err (*AEGP_GetDriverPluginInitFuncVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_GetDriverImplementationVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_StartQuietErrors)( + AEGP_ErrReportState *err_stateP); /* << */ + + SPAPI A_Err (*AEGP_EndQuietErrors)( + A_Boolean report_quieted_errorsB, /* >> currently reports last quieted error */ + AEGP_ErrReportState *err_stateP); /* >> */ + + SPAPI A_Err (*AEGP_GetLastErrorMessage)( + A_long buffer_size, /* >> size of character buffer */ + A_char *error_string, /* << */ + A_Err *error_num); /* << */ + + SPAPI A_Err (*AEGP_StartUndoGroup)( /* MUST be balanced with call to AEGP_EndUndoGroup() */ + const A_char *undo_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_EndUndoGroup)(void); + + SPAPI A_Err (*AEGP_RegisterWithAEGP)( + AEGP_GlobalRefcon global_refcon, /* >> global refcon passed in command handlers */ + const A_char *plugin_nameZ, /* >> name of this plugin. AEGP_MAX_PLUGIN_NAME_SIZE */ + AEGP_PluginID *plugin_id); /* << id for plugin to use in other AEGP calls */ + + SPAPI A_Err (*AEGP_GetMainHWND)( + void *main_hwnd); /* << */ + + SPAPI A_Err (*AEGP_ShowHideAllFloaters)( + A_Boolean include_tool_palB); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalGetForeColor)( + AEGP_ColorVal *fore_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalGetBackColor)( + AEGP_ColorVal *back_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalSetForeColor)( + const AEGP_ColorVal *fore_colorP); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalSetBackColor)( + const AEGP_ColorVal *back_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalGetFillColor)( + A_Boolean *is_fill_color_definedPB, /* << */ + AEGP_ColorVal *fill_colorP); /* << only valid if is_fill_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalGetStrokeColor)( + A_Boolean *is_stroke_color_definedPB, /* << */ + AEGP_ColorVal *stroke_colorP); /* << only valid if is_stroke_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalSetFillColor)( + const AEGP_ColorVal *fill_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalSetStrokeColor)( + const AEGP_ColorVal *stroke_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalIsFillColorUIFrontmost)( /* Otherwise, StrokeColor is frontmost */ + A_Boolean *is_fill_color_selectedPB); /* << */ + + SPAPI A_Err (*AEGP_ConvertFpLongToHSFRatio)( + A_FpLong numberF, /* >> */ + A_Ratio *ratioPR); /* << */ + + SPAPI A_Err (*AEGP_ConvertHSFRatioToFpLong)( + A_Ratio ratioR, /* << */ + A_FpLong *numberPF); /* >> */ + + // this routine is safe to call from the non-main + // thread. It is asynchronous and will return before the idle handler is called. + // The Suite routines to get this pointer are not + // thread safe, therefore you need to save it off + // in the main thread for use by the child thread. + SPAPI A_Err (*AEGP_CauseIdleRoutinesToBeCalled)(void); + + + // Determine if after effects is running in a mode where there is no + // user interface, and attempting to interact with the user (via a modal dialog) + // will hang the application. + // This will not change during a run. Use it to optimize your plugin at startup + // to not create a user interface and make AE launch faster, and not break + // when running multiple instances of a service. + SPAPI A_Err (*AEGP_GetSuppressInteractiveUI)(A_Boolean* ui_is_suppressedPB); // out + + // this call writes text to the console if one is available. One is guaranteed to be available + // if ui_is_suppressedB == true. + // In general use the call AEGP_ReportInfo() as it will write to the console in + // non-interactive modes, and use a dialog in interactive modes. + SPAPI A_Err (*AEGP_WriteToOSConsole)(const A_char* textZ); // in + + // this writes an entry into the debug log, or to the command line if launched + // with the -debug flag. + SPAPI A_Err (*AEGP_WriteToDebugLog)(const A_char* subsystemZ, // in + const A_char* event_typeZ, // in + const A_char * infoZ); // in + + + SPAPI A_Err (*AEGP_IsScriptingAvailable)(A_Boolean* outAvailablePB); + + // Execute a script. + // The script text can either be in UTF-8, or the current + // application encoding. + // The result is the result string if OK. It is optional. + // The error is the error string if an error occurred. It is optional. + // the result and error are in the encoding specified by platform_encodingB + SPAPI A_Err (*AEGP_ExecuteScript)(AEGP_PluginID inPlugin_id, + const A_char* inScriptZ, // in + const A_Boolean platform_encodingB, // in + AEGP_MemHandle* outResultPH0, + AEGP_MemHandle* outErrorStringPH0); + + SPAPI A_Err (*AEGP_HostIsActivated)(A_Boolean *is_activatedPB); + + SPAPI A_Err (*AEGP_GetPluginPlatformRef)(AEGP_PluginID plug_id, void** plat_refPPV); // on the Mac, it is a CFBundleRef to your mach-o plugin or NULL for a CFM plug-in; on Windows it is set to NULL for now + + SPAPI A_Err (*AEGP_UpdateFontList)(void); // Rescan the system font list. This will return quickly if the font list hasn't changed. + + // return a particular path associated with the plugin + SPAPI A_Err (*AEGP_GetPluginPaths)( + AEGP_PluginID aegp_plugin_id, // >> which plugin we are talking about + AEGP_GetPathTypes path_type, // >> which path type to retrieve + AEGP_MemHandle *unicode_pathPH); // << UTF16 mem handle must be disposed with AEGP_FreeMemHandle + +} AEGP_UtilitySuite6; + + + +/* -------------------------------------------------------------------- */ + + +#define kAEGPMathSuite "AEGP Math Suite" +#define kAEGPMathSuiteVersion1 1 /* frozen AE 15.0 */ + +typedef struct AEGP_MathSuite1 { + + // Matrices + // right-hand rule, Y down, origin in upper left corner of comp. + + SPAPI A_Err(*AEGP_IdentityMatrix4)(A_Matrix4 *matrixP); + + SPAPI A_Err(*AEGP_MultiplyMatrix4)(const A_Matrix4 *A, const A_Matrix4 *B, A_Matrix4 *resultP); + + SPAPI A_Err(*AEGP_Matrix3ToMatrix4)(const A_Matrix3 *A, A_Matrix4 *B); + + SPAPI A_Err(*AEGP_MultiplyMatrix4by3)(const A_Matrix4 *A, const A_Matrix3 *B, A_Matrix4 *resultP); + + SPAPI A_Err(*AEGP_MatrixDecompose4)(const A_Matrix4 *A, A_FloatPoint3* posVP, A_FloatPoint3* scaleVP, A_FloatPoint3* shearVP, A_FloatPoint3* rotVP); + +} AEGP_MathSuite1; + + +/* -------------------------------------------------------------------- */ + + + +typedef struct _PF_OpaqueBlendingTables *PF_EffectBlendingTables; + +#define kAEGPColorSettingsSuite "PF Color Settings Suite" +#define kAEGPColorSettingsSuiteVersion3 4 // frozen in AE 16.1; adding an API to set working color space + +typedef struct AEGP_ColorSettingsSuite3 { + + SPAPI A_Err (*AEGP_GetBlendingTables)( + PR_RenderContextH render_contextH, + PF_EffectBlendingTables *blending_tables); + + SPAPI A_Err (*AEGP_DoesViewHaveColorSpaceXform)( + AEGP_ItemViewP viewP, // >> + A_Boolean *has_xformPB); // << + + SPAPI A_Err (*AEGP_XformWorkingToViewColorSpace)( + AEGP_ItemViewP viewP, // >> + AEGP_WorldH srcH, // in + AEGP_WorldH dstH); // out; must be the same size (can be the same as source) + + SPAPI A_Err (*AEGP_GetNewWorkingSpaceColorProfile)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_CompH compH, // >> + AEGP_ColorProfileP *color_profilePP); // << caller must dispose with AEGP_DisposeColorProfile + + SPAPI A_Err (*AEGP_GetNewColorProfileFromICCProfile)( + AEGP_PluginID aegp_plugin_id, // >> + A_long icc_sizeL, // >> icc profile size + const void *icc_dataPV, // >> icc profile + AEGP_ColorProfileP *color_profilePP); // << builds AEGP_ColorProfile from icc profile; caller must dispose with AEGP_DisposeColorProfile + + SPAPI A_Err (*AEGP_GetNewICCProfileFromColorProfile)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_ConstColorProfileP color_profileP, // >> + AEGP_MemHandle *icc_profilePH); // << extract icc profile from AEGP_ColorProfile; caller must dispose with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetNewColorProfileDescription)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_ConstColorProfileP color_profileP, // >> + AEGP_MemHandle *unicode_descPH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_DisposeColorProfile)( + AEGP_ColorProfileP color_profileP); // >> + + SPAPI A_Err (*AEGP_GetColorProfileApproximateGamma)( + AEGP_ConstColorProfileP color_profileP, // >> + A_FpShort *approx_gammaP); // << + + SPAPI A_Err (*AEGP_IsRGBColorProfile)( + AEGP_ConstColorProfileP color_profileP, // << + A_Boolean *is_rgbPB); // >> + + SPAPI A_Err (*AEGP_SetWorkingColorSpace)( + AEGP_PluginID aegp_plugin_id, + AEGP_CompH compH, // >> + AEGP_ConstColorProfileP color_profileP); // >> + + +} AEGP_ColorSettingsSuite3; + + +/* -------------------------------------------------------------------- */ +/* + Render Queue Suite + Used to add, remove, and modify items in the reder queue. + + */ + +#define kAEGPRenderQueueSuite "AEGP Render Queue Suite" +#define kAEGPRenderQueueSuiteVersion1 1 /* frozen in AE 5.0 */ + +enum { + AEGP_RenderQueueState_STOPPED, + AEGP_RenderQueueState_PAUSED, + AEGP_RenderQueueState_RENDERING +}; + +typedef A_u_long AEGP_RenderQueueState; + +enum { + AEGP_RenderItemStatus_NONE = -2, + + AEGP_RenderItemStatus_WILL_CONTINUE, // -1 + AEGP_RenderItemStatus_NEEDS_OUTPUT, // 0 + AEGP_RenderItemStatus_UNQUEUED, // 1 ready to be rendered, but not included in the queue + AEGP_RenderItemStatus_QUEUED, // 2 ready AND queued + AEGP_RenderItemStatus_RENDERING, + AEGP_RenderItemStatus_USER_STOPPED, + AEGP_RenderItemStatus_ERR_STOPPED, + AEGP_RenderItemStatus_DONE, + + AEGP_RenderItemStatus_LAST_PLUS_ONE +}; + +typedef A_long AEGP_RenderItemStatusType; + +typedef struct AEGP_RenderQueueSuite1 { + SPAPI A_Err (*AEGP_AddCompToRenderQueue)( + AEGP_CompH comp, /* >> */ + const A_char* pathZ); + + // not legal to go from STOPPED to PAUSED. + SPAPI A_Err (*AEGP_SetRenderQueueState)( + AEGP_RenderQueueState state); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderQueueState)( + AEGP_RenderQueueState *stateP); /* << */ + +} AEGP_RenderQueueSuite1; + +/* -------------------------------------------------------------------- */ + +enum { + AEGP_LogType_NONE = -1, + AEGP_LogType_ERRORS_ONLY, + AEGP_LogType_PLUS_SETTINGS, + AEGP_LogType_PER_FRAME_INFO, + AEGP_LogType_NUM_TYPES +}; + +typedef A_long AEGP_LogType; + +enum { + AEGP_Embedding_NONE = -1, + AEGP_Embedding_NOTHING, + AEGP_Embedding_LINK, + AEGP_Embedding_LINK_AND_COPY, + AEGP_Embedding_NUM_TYPES +}; + +typedef A_long AEGP_EmbeddingType; + +enum { + AEGP_PostRenderOptions_NONE = -1, + AEGP_PostRenderOptions_IMPORT, + AEGP_PostRenderOptions_IMPORT_AND_REPLACE_USAGE, + AEGP_PostRenderOptions_SET_PROXY, + AEGP_PostRenderOptions_NUM_OPTIONS +}; + +typedef A_long AEGP_PostRenderAction; + +enum { + AEGP_OutputType_NONE = 0, + AEGP_OutputType_VIDEO = 1L << 0, + AEGP_OutputType_AUDIO = 1L << 1, + AEGP_OutputType_NUM_TYPES +}; + +typedef A_long AEGP_OutputTypes; + +enum { + AEGP_VideoChannels_NONE = -1, + AEGP_VideoChannels_RGB, + AEGP_VideoChannels_RGBA, + AEGP_VideoChannels_ALPHA, + AEGP_VideoChannels_NUMTYPES +}; + +typedef A_long AEGP_VideoChannels; + +enum { + AEGP_StretchQual_NONE = -1, + + AEGP_StretchQual_LOW, + AEGP_StretchQual_HIGH, + + AEGP_StretchQual_NUMTYPES +}; +typedef A_long AEGP_StretchQuality; + +enum { + AEGP_OutputColorType_STRAIGHT = -1, + AEGP_OutputColorType_PREMUL +}; + +typedef A_long AEGP_OutputColorType; + +#define kAEGPRQItemSuite "AEGP Render Queue Item Suite" +#define kAEGPRQItemSuiteVersion4 5 /* frozen in AE 14.1 */ + +typedef struct AEGP_RQItemSuite4 { + + SPAPI A_Err (*AEGP_GetNumRQItems)( + A_long *num_itemsPL); /* << */ + + /* NOTE: All AEGP_RQItemRefH are invalidated by ANY + re-ordering, addition or removal of render + items. DO NOT CACHE THEM. + */ + + SPAPI A_Err (*AEGP_GetRQItemByIndex)( + A_long rq_item_index, /* >> */ + AEGP_RQItemRefH *rq_item_refPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextRQItem)( /* Pass RQ_ITEM_INDEX_NONE for current_rq_itemH to get first RQItemH. */ + AEGP_RQItemRefH current_rq_itemH, /* >> */ + AEGP_RQItemRefH *next_rq_itemH); /* << */ + + SPAPI A_Err (*AEGP_GetNumOutputModulesForRQItem)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_long *num_outmodsPL); /* << */ + + SPAPI A_Err (*AEGP_GetRenderState)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType *statusP); /* << */ + + /* + the following now returns: + Err_PARAMETER if you try to call while AEGP_RenderQueueState != AEGP_RenderQueueState_STOPPED + + if that's okay then: + Err_RANGE if you pass a status that is illegal in any case + Err_PARAMETER if you try to pass a status that doesn't make sense right now (eg: trying to Que something for which you haven't set the output path) + */ + SPAPI A_Err (*AEGP_SetRenderState)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType status); /* >> */ + + SPAPI A_Err (*AEGP_GetStartedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *started_timePT); /* << Returns {0,1} if not started. */ + + SPAPI A_Err (*AEGP_GetElapsedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *render_timePT); /* << Returns {0,1} if not rendered. */ + + SPAPI A_Err (*AEGP_GetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType *logtypeP); /* << */ + + SPAPI A_Err (*AEGP_SetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType logtype); /* << */ + + SPAPI A_Err (*AEGP_RemoveOutputModule)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH); /* >> */ + + SPAPI A_Err (*AEGP_GetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_MemHandle *unicodeH); /* << */ + + SPAPI A_Err (*AEGP_SetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + const A_UTF16Char *commentZ); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFromRQItem)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_DeleteRQItem)( + AEGP_RQItemRefH rq_itemH); /* <> UNDOABLE */ + +} AEGP_RQItemSuite4; + + +#define kAEGPOutputModuleSuite "AEGP Output Module Suite" +#define kAEGPOutputModuleSuiteVersion4 4 /* frozen in AE 10.0 */ + +typedef struct AEGP_OutputModuleSuite4 { + + /* NOTE: All AEGP_OutputModuleRefHs are invalidated by ANY + re-ordering, addition or removal of output modules + from a render item. DO NOT CACHE THEM. + */ + + SPAPI A_Err (*AEGP_GetOutputModuleByIndex)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_long outmod_indexL, /* >> */ + AEGP_OutputModuleRefH *outmodPH); /* << */ + + SPAPI A_Err (*AEGP_GetEmbedOptions)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_EmbeddingType *embed_optionsP); /* << */ + + SPAPI A_Err (*AEGP_SetEmbedOptions)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_EmbeddingType embed_options); /* >> */ + + SPAPI A_Err (*AEGP_GetPostRenderAction)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_PostRenderAction *post_render_actionP); /* << */ + + SPAPI A_Err (*AEGP_SetPostRenderAction)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_PostRenderAction post_render_action); /* >> */ + + SPAPI A_Err (*AEGP_GetEnabledOutputs)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_OutputTypes *enabled_typesP); /* << */ + + SPAPI A_Err (*AEGP_SetEnabledOutputs)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_OutputTypes enabled_types); /* >> */ + + SPAPI A_Err (*AEGP_GetOutputChannels)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_VideoChannels *output_channelsP); /* << */ + + SPAPI A_Err (*AEGP_SetOutputChannels)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_VideoChannels output_channels); /* >> */ + + SPAPI A_Err (*AEGP_GetStretchInfo)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + A_Boolean *is_enabledPB, /* << */ + AEGP_StretchQuality *stretch_qualityP, /* << */ + A_Boolean *lockedPB); /* << */ + + SPAPI A_Err (*AEGP_SetStretchInfo)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + A_Boolean is_enabledB, /* >> */ + AEGP_StretchQuality stretch_quality); /* >> */ + + SPAPI A_Err (*AEGP_GetCropInfo)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + A_Boolean *is_enabledBP, /* << */ + A_Rect *crop_rectP); /* << */ + + SPAPI A_Err (*AEGP_SetCropInfo)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + A_Boolean enableB, /* >> */ + A_Rect crop_rect); /* >> */ + + SPAPI A_Err (*AEGP_GetSoundFormatInfo)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_SoundDataFormat *sound_format_infoP, /* << */ + A_Boolean *audio_enabledPB); /* << */ + + SPAPI A_Err (*AEGP_SetSoundFormatInfo)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_SoundDataFormat sound_format_info, /* >> */ + A_Boolean audio_enabledB); /* >> */ + + SPAPI A_Err (*AEGP_GetOutputFilePath)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + AEGP_MemHandle *unicode_pathPH); // << empty string if not specified. handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_SetOutputFilePath)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH, /* >> */ + const A_UTF16Char *pathZ); // >> null terminated unicode path with platform separators + + SPAPI A_Err (*AEGP_AddDefaultOutputModule)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH *outmodPH); /* << */ + + SPAPI A_Err (*AEGP_GetExtraOutputModuleInfo)( + AEGP_RQItemRefH rq_itemH, + AEGP_OutputModuleRefH outmodH, + AEGP_MemHandle *format_unicodePH, /* << handle of A_u_short, (contains null terminated UTF16 string) must be disposed with AEGP_FreeMemHandle */ + AEGP_MemHandle *info__unicodePH, /* << handle of A_u_short, (contains null terminated UTF16 string) must be disposed with AEGP_FreeMemHandle */ + A_Boolean *is_sequenceBP, + A_Boolean *multi_frameBP); + +} AEGP_OutputModuleSuite4; + +/* -------------------------------------------------------------------- */ + +/** + ** Canvas Suite + ** Used by artisans to render layers + **/ + +#define kAEGPCanvasSuite "AEGP Canvas Suite" +#define kAEGPCanvasSuiteVersion8 14 /* frozen in AE 12.0*/ + + +enum { + AEGP_RenderHints_NONE = 0, + AEGP_RenderHints_IGNORE_EXTENTS = 0x1, + AEGP_RenderHints_NO_TRANSFER_MODE = 0x2 // prevents application of opacity & transfer mode; for RenderLayer calls +}; +typedef A_u_long AEGP_RenderHints; + + +enum { + AEGP_RenderReceiptStatus_INVALID = 0, + AEGP_RenderReceiptStatus_VALID, + AEGP_RenderReceiptStatus_VALID_BUT_INCOMPLETE +}; +typedef A_u_long AEGP_RenderReceiptStatus; + + +enum { + AEGP_BinType_NONE = -1, + AEGP_BinType_2D = 0, + AEGP_BinType_3D = 1 +}; +typedef A_long AEGP_BinType; + + +typedef void * AEGP_PlatformWindowRef; + + + +enum { + AEGP_DisplayChannel_NONE = 0, + AEGP_DisplayChannel_RED, + AEGP_DisplayChannel_GREEN, + AEGP_DisplayChannel_BLUE, + AEGP_DisplayChannel_ALPHA, + AEGP_DisplayChannel_RED_ALT, + AEGP_DisplayChannel_GREEN_ALT, + AEGP_DisplayChannel_BLUE_ALT, + AEGP_DisplayChannel_ALPHA_ALT, + AEGP_DisplayChannel_NUM_ITEMS +}; +typedef A_long AEGP_DisplayChannelType; // disk safe + +enum { + AEGP_RenderNumEffects_ALL_EFFECTS = -1 +}; + +typedef A_short AEGP_NumEffectsToRenderType; + + +typedef struct AEGP_CanvasSuite8 { + + SPAPI A_Err (*AEGP_GetCompToRender)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumLayersToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_GetNthLayerContextToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n, /* >> */ + AEGP_RenderLayerContextH *layer_contextPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerContext)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerAndSubLayerFromLayerContext)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_LayerH *layerPH, /* << */ + AEGP_SubLayerIndex *sublayerP); /* << */ + + /** + ** With collapsed geometrics "on" this gives the layer in the root comp + ** contining the layer context. With collapsed geometrics off + ** this is the same as AEGP_GetLayerFromLayerContext. + ** + **/ + SPAPI A_Err (*AEGP_GetTopLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + SPAPI A_Err (*AEGP_GetCompRenderTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *time, /* << */ + A_Time *time_step); + + SPAPI A_Err (*AEGP_GetCompDestinationBuffer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_CompH compH, /* >> */ + AEGP_WorldH *dst); /* << */ + + SPAPI A_Err (*AEGP_GetROI)( + PR_RenderContextH render_contextH, /* <> */ + A_LegacyRect *roiPR); /* << */ + + // for rendering the texture map of a layer + SPAPI A_Err (*AEGP_RenderTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_WorldH *dstPH); /* <> */ + + + SPAPI A_Err (*AEGP_DisposeTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_WorldH dstH0); /* <> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + PR_RenderContextH render_contextH, /* >> */ + PF_Field *field); /* << */ + + // not thread safe on MacOS + // only call when thread ID = 0 + SPAPI A_Err (*AEGP_ReportArtisanProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long totalL); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_IsBlankCanvas)( + PR_RenderContextH render_contextH, /* >> */ + A_Boolean *is_blankPB); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerBounds)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_LegacyRect *boundsP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderOpacity)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_FpLong *opacityPF); /* << */ + + SPAPI A_Err (*AEGP_IsRenderLayerActive)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Boolean *activePB); /* << */ + + // set the layer index. If total > 0, set it too. + SPAPI A_Err (*AEGP_SetArtisanLayerProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long num_layersL); + + // for track mattes. + // Returns a comp-size buffer, which must be disposed thru AEGP_Dispose in World suite + SPAPI A_Err (*AEGP_RenderLayerPlus)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_WorldH *render_bufferPH); /* << must be disposed with AEGP_DisposeWorld */ + + + SPAPI A_Err (*AEGP_GetTrackMatteContext)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH fill_contextH, /* << */ + AEGP_RenderLayerContextH *matte_contextPH); /* >> */ + + // new for 6.0 --get receipt with the returned texture + // use receipt to determine if a subsequent call to render + // this layer can be skipped (because the artisan cached it) + SPAPI A_Err (*AEGP_RenderTextureWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_NumEffectsToRenderType num_effectsS, /* >> number of effect to render, -1 for all */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *dstPH); /* << */ + + + + SPAPI A_Err (*AEGP_GetNumberOfSoftwareEffects)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + A_short *num_software_effectsPS); + + SPAPI A_Err (*AEGP_RenderLayerPlusWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *render_bufferPH); /* << */ + + SPAPI A_Err (*AEGP_DisposeRenderReceipt)( + AEGP_RenderReceiptH render_receiptH); /* >> */ + + + /* modified for 7.0 - added num_effects to check against */ + SPAPI A_Err (*AEGP_CheckRenderReceipt)( + PR_RenderContextH current_render_contextH, /* in */ + AEGP_RenderLayerContextH current_layer_contextH, /* in */ + AEGP_RenderReceiptH old_render_receiptH, /* in */ + A_Boolean check_geometricsB, /* in */ + AEGP_NumEffectsToRenderType num_effectsS, /* in */ + AEGP_RenderReceiptStatus *receipt_statusP); /* out */ + + + /* new in 7.0 generate a receipt for a layer as asd if the first num_effectsS have been rendered */ + SPAPI A_Err (*AEGP_GenerateRenderReceipt)( + PR_RenderContextH current_render_contextH, /* >> */ + AEGP_RenderLayerContextH current_layer_contextH, /* >> */ + AEGP_NumEffectsToRenderType num_effectsS, /* in */ + AEGP_RenderReceiptH *render_receiptPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumBinsToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_bins_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_SetNthBin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n); /* >> */ + + SPAPI A_Err (*AEGP_GetBinType)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_BinType *bin_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform2D3D)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Boolean only_2dB, /* >> */ + A_Matrix4 *transform); /* << */ + + + // interactive artisan information + // handle to the on-screen window + SPAPI A_Err (*AEGP_GetPlatformWindowRef)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_PlatformWindowRef *window_refP); /* << */ + + + // the dsf src to frame scale factors + SPAPI A_Err (*AEGP_GetViewportScale)( + const PR_RenderContextH render_contextH, /* >> */ + A_FpLong *scale_xPF, /* << */ + A_FpLong *scale_yPF); /* << */ + + + // the dsf src to frame translate + SPAPI A_Err (*AEGP_GetViewportOrigin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *origin_xPL, /* << */ + A_long *origin_yPL); /* << */ + + + SPAPI A_Err (*AEGP_GetViewportRect)( + const PR_RenderContextH render_contextH, /* >> */ + A_LegacyRect *viewport_rectPR); /* << */ + + + SPAPI A_Err (*AEGP_GetFallowColor)( + const PR_RenderContextH render_contextH, /* >> */ + PF_Pixel8 *fallow_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboard)( + const PR_RenderContextH render_contextH, /* in */ + A_Boolean *checkerboard_onPB);/* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardColors)( + const PR_RenderContextH render_contextH, /* in */ + PF_Pixel *checkerboard_color1P, /* out */ + PF_Pixel *checkerboard_color2P); /* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardSize)( + const PR_RenderContextH render_contextH, /* in */ + A_u_long *checkerboard_widthPLu, /* out - width of square*/ + A_u_long *checkerboard_heightPLu); /* out - height of square*/ + + SPAPI A_Err (*AEGP_GetInteractiveCachedBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + + // should we call AEGP_RenderLayer or AEGP_RenderTexture + SPAPI A_Err (*AEGP_ArtisanMustRenderAsLayer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, + A_Boolean *use_render_texturePB); + + + SPAPI A_Err (*AEGP_GetInteractiveDisplayChannel)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_DisplayChannelType *display_channelP); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveExposure)( + const PR_RenderContextH render_contextH, /* >> */ + A_FpLong *exposurePF); /* << */ + + + SPAPI A_Err (*AEGP_GetColorTransform)( + const PR_RenderContextH render_contextH, /* >> */ + A_Boolean *cms_onB, + A_u_long *xform_keyLu, + void *xformP); + + + SPAPI A_Err (*AEGP_GetCompShutterTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *shutter_time, /* << */ + A_Time *shutter_dur); + + // uses remapping if any + SPAPI A_Err (*AEGP_MapCompToLayerTime)( + PR_RenderContextH render_contextH, /* in */ + AEGP_RenderLayerContextH layer_contextH, /* in*/ + const A_Time *comp_timePT, /* in */ + A_Time *layer_timePT); /* out */ + +} AEGP_CanvasSuite8; + + + + + + + +/** + ** Artisan utility suite + ** + **/ +#define kAEGPArtisanUtilSuite "AEGP Artisan Util Suite" +#define kAEGPArtisanUtilSuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct AEGP_ArtisanUtilSuite1 { + + + SPAPI A_Err (*AEGP_GetGlobalContextFromInstanceContext)( + const PR_InstanceContextH instance_contextH, /* >> */ + PR_GlobalContextH *global_contextPH); /* << */ + + + SPAPI A_Err (*AEGP_GetInstanceContextFromRenderContext)( + const PR_RenderContextH render_contextH, /* >> */ + PR_InstanceContextH *instance_contextPH); /* << */ + + + + SPAPI A_Err (*AEGP_GetInstanceContextFromQueryContext)( + const PR_QueryContextH query_contextH, /* >> */ + PR_InstanceContextH *instance_contextPH); /* << */ + + + SPAPI A_Err (*AEGP_GetGlobalData)( + const PR_GlobalContextH global_contextH, /* >> */ + PR_GlobalDataH *global_dataPH); /* << */ + + + SPAPI A_Err (*AEGP_GetInstanceData)( + const PR_InstanceContextH instance_contextH, /* >> */ + PR_InstanceDataH *instance_dataPH); /* << */ + + SPAPI A_Err (*AEGP_GetRenderData)( + const PR_RenderContextH render_contextH, /* >> */ + PR_RenderDataH *render_dataPH); /* << */ + +} AEGP_ArtisanUtilSuite1; + + + +#define kAEGPCameraSuite "AEGP Camera Suite" +#define kAEGPCameraSuiteVersion2 2 /* frozen in AE 5.5 */ + +typedef struct AEGP_CameraSuite2 { + + SPAPI A_Err (*AEGP_GetCamera)( + PR_RenderContextH render_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + AEGP_LayerH *camera_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetCameraType)( + AEGP_LayerH camera_layerH, /* >> */ + AEGP_CameraType *camera_typeP); /* << */ + + + SPAPI A_Err (*AEGP_GetDefaultCameraDistanceToImagePlane)( + AEGP_CompH compH, /* >> */ + A_FpLong *dist_to_planePF); /* << */ + + // If a camera is created using aegp, then you must set the film size units. + // No default is provided. + + SPAPI A_Err (*AEGP_GetCameraFilmSize)( + AEGP_LayerH camera_layerH, /* >> */ + AEGP_FilmSizeUnits *film_size_unitsP, /* << */ + A_FpLong *film_sizePF0); /* << in pixels */ + + SPAPI A_Err (*AEGP_SetCameraFilmSize)( + AEGP_LayerH camera_layerH, /* >> */ + AEGP_FilmSizeUnits film_size_units, /* >> */ + A_FpLong *film_sizePF0); /* >> in pixels */ + +} AEGP_CameraSuite2; + +#define kAEGPLightSuite "AEGP Light Suite" +#define kAEGPLightSuiteVersion2 2 /* frozen in AE 5.5 */ + +typedef struct AEGP_LightSuite2 { + + SPAPI A_Err (*AEGP_GetLightType)( + AEGP_LayerH light_layerH, /* >> */ + AEGP_LightType *light_typeP); /* << */ + + SPAPI A_Err (*AEGP_SetLightType)( + AEGP_LayerH light_layerH, /* >> */ + AEGP_LightType light_type); /* >> */ + +} AEGP_LightSuite2; + + + +/** + ** Query Xform suite + ** Called by artisans during a response to a Query + **/ + +#define kAEGPQueryXformSuite "AEGP QueryXform Suite" +#define kAEGPQueryXformSuiteVersion2 4 /* frozen in AE 6.0 */ + + +/** + ** the type of source or dst transformation wanted + **/ +enum { + AEGP_Query_Xform_LAYER, + AEGP_Query_Xform_WORLD, + AEGP_Query_Xform_VIEW, + AEGP_Query_Xform_SCREEN +}; + +typedef A_u_long AEGP_QueryXformType; + + + +typedef struct AEGP_QueryXformSuite2 { + + SPAPI A_Err (*AEGP_QueryXformGetSrcType)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_QueryXformType *src_type); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetDstType)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_QueryXformType *dst_type); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetLayer)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetComp)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetTransformTime)( + PR_QueryContextH query_contextH, /* <> */ + A_Time *time); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetViewTime)( + PR_QueryContextH query_contextH, /* <> */ + A_Time *time); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetCamera)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_LayerH *camera_layerPH); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetXform)( + PR_QueryContextH query_contextH, /* <> */ + A_Matrix4 *xform); /* << */ + + SPAPI A_Err (*AEGP_QueryXformSetXform)( + PR_QueryContextH query_contextH, /* <> */ + A_Matrix4 *xform); /* >> */ + + SPAPI A_Err (*AEGP_QueryWindowRef)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_PlatformWindowRef *window_refP); /* >> */ + + SPAPI A_Err (*AEGP_QueryWindowClear)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_PlatformWindowRef *window_refP, /* out */ + A_LegacyRect *boundsPR); /* out */ + + SPAPI A_Err (*AEGP_QueryFrozenProxy)( + PR_QueryContextH query_contextH, /* <> */ + A_Boolean *onPB); /* out */ + + SPAPI A_Err (*AEGP_QuerySwapBuffer)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_PlatformWindowRef *window_refP, /* out */ + AEGP_WorldH *dest_bufferp); /* out */ + + SPAPI A_Err (*AEGP_QueryDrawProcs)( + PR_QueryContextH query_contextH, /* <> */ + PR_InteractiveDrawProcs *window_refP); /* in */ + + + SPAPI A_Err (*AEGP_QueryPrepareForLineDrawing)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_PlatformWindowRef *window_refP, + A_LegacyRect *viewportP, + A_LPoint *originP, + A_FloatPoint *scaleP); /* in */ + + SPAPI A_Err (*AEGP_QueryUnprepareForLineDrawing)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_PlatformWindowRef *window_refP); /* in */ + + SPAPI A_Err (*AEGP_QueryGetData)( + PR_QueryContextH query_contextH, /* <> */ + A_long i, /* in */ + void **dataPP); /* out */ + + SPAPI A_Err (*AEGP_QuerySetData)( + PR_QueryContextH query_contextH, /* <> */ + A_long i, /* in */ + void *dataP); /* in */ + + +}AEGP_QueryXformSuite2; + + +/* -------------------------------------------------------------------- */ + + + +#define kAEGPCompositeSuite "AEGP Composite Suite" +#define kAEGPCompositeSuiteVersion2 4 /* frozen in AE 10.0 */ + +typedef struct AEGP_CompositeSuite2 { + + SPAPI A_Err (*AEGP_ClearAlphaExceptRect)( + A_Rect *clipped_dest_rectPR, /* >> */ + PF_EffectWorld *dstP); /* <> */ + + SPAPI A_Err (*AEGP_PrepTrackMatte)( + A_long num_pix, /* >> */ + A_Boolean deepB, /* >> */ + const PF_Pixel *src_mask, /* >> */ + PF_MaskFlags mask_flags, /* >> */ + PF_Pixel *dst_mask); /* << */ + + SPAPI A_Err (*AEGP_TransferRect)( + PF_Quality quality, /* >> */ + PF_ModeFlags m_flags, /* >> */ + PF_Field field, /* >> */ + const A_Rect *src_rec, /* >> */ + const PF_EffectWorld *src_world, /* >> */ + const PF_CompositeMode *comp_mode, /* >> */ + PF_EffectBlendingTables blend_tablesP0, /* >>, pass NULL to blend in workingspace*/ + const PF_MaskWorld *mask_world0, /* >> */ + A_long dest_x, /* >> */ + A_long dest_y, /* >> */ + PF_EffectWorld *dst_world); /* <> */ + + SPAPI A_Err (*AEGP_CopyBits_LQ) ( + PF_EffectWorld *src_worldP, /* >> */ + A_Rect *src_r, /* pass NULL for whole world */ + A_Rect *dst_r, /* pass NULL for whole world */ + PF_EffectWorld *dst_worldP); /* <> */ + + SPAPI A_Err (*AEGP_CopyBits_HQ_Straight) ( + PF_EffectWorld *src, /* >> */ + A_Rect *src_r, /* pass NULL for whole world */ + A_Rect *dst_r, /* pass NULL for whole world */ + PF_EffectWorld *dst); /* <> */ + + SPAPI A_Err (*AEGP_CopyBits_HQ_Premul) ( + PF_EffectWorld *src, /* >> */ + A_Rect *src_r, /* pass NULL for whole world */ + A_Rect *dst_r, /* pass NULL for whole world */ + PF_EffectWorld *dst); /* <> */ + +} AEGP_CompositeSuite2; + + + +/* -------------------------------------------------------------------- */ + +#define kAEGPIterateSuite "AEGP Iterate Suite" +#define kAEGPIterateSuiteVersion2 2 /* frozen in AE 22.0 */ + +typedef struct AEGP_IterateSuite2 { + + SPAPI A_Err (*AEGP_GetNumThreads)( + A_long *num_threadsPL); + + + SPAPI A_Err (*AEGP_IterateGeneric)( + A_long iterationsL, /* >> */ // can be PF_Iterations_ONCE_PER_PROCESSOR + void *refconPV, /* >> */ + A_Err (*fn_func)( void *refconPV, /* >> */ + A_long thread_indexL, /* >> */ + A_long i, /* >> */ + A_long iterationsL)); /* >> */ + +} AEGP_IterateSuite2; + +// Export the name of this function in your PiPL resource's EntryPoint + +typedef A_Err (AEGP_PluginInitFuncPrototype)( + struct SPBasicSuite *pica_basicP, /* >> */ + A_long driver_major_versionL, /* >> */ + A_long driver_minor_versionL, /* >> */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_GlobalRefcon *plugin_refconP); /* << will be passed to all hooks! */ + +typedef AEGP_PluginInitFuncPrototype *AEGP_PluginInitFunc; + + +/* -------------------------------------------------------------------- */ + +/** AEGPPFInterfaceSuite1 + + These are basically wrappers for constructing various AEGP objects from + the information available to an effect plug-in so that various other AEGP suites + may be used. + + AEGP_GetEffectLayer -- get AEGP_LayerH corresponding to layer that effect is applied to + AEGP_GetNewEffectForEffect -- get AEGP_EffectRefH corresponding to effect + AEGP_ConvertEffectToCompTime -- return comp time from time units passed to effect (layer time) + AEGP_GetEffectCamera -- get camera AEGP_LayerH which defines current 3D view + -- NOTE : this may be null if no camera is defined + + AEGP_GetEffectCameraMatrix -- use this to get the geometry for the camera. + + These may only be called during PF_Cmd_FRAME_SETUP, PF_Cmd_RENDER, + and PF_Cmd_EVENT::PF_Event_DRAW +**/ + +#define kAEGPPFInterfaceSuite "AEGP PF Interface Suite" +#define kAEGPPFInterfaceSuiteVersion1 1 /* frozen in AE 5.0 */ + + +typedef struct AEGP_PFInterfaceSuite1 { + + SPAPI A_Err (*AEGP_GetEffectLayer)( + PF_ProgPtr effect_pp_ref, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewEffectForEffect)( /* must be disposed using AEGP_DisposeEffect */ + AEGP_PluginID aegp_plugin_id, /* >> */ + PF_ProgPtr effect_pp_ref, /* >> */ + AEGP_EffectRefH *effect_refPH); /* << */ + + SPAPI A_Err (*AEGP_ConvertEffectToCompTime)( + PF_ProgPtr effect_pp_ref, /* >> */ + A_long what_timeL, /* >> */ + A_u_long time_scaleLu, /* from PF_InData */ + A_Time *comp_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetEffectCamera)( + PF_ProgPtr effect_pp_ref, /* >> */ + const A_Time *comp_timePT, /* >> */ + AEGP_LayerH *camera_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetEffectCameraMatrix)( + PF_ProgPtr effect_pp_ref, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Matrix4 *camera_matrixP, /* <> */ + A_FpLong *dist_to_image_planePF, /* <> */ + A_short *image_plane_widthPL, /* <> */ + A_short *image_plane_heightPL); /* <> */ +} AEGP_PFInterfaceSuite1; + +// PIN_FileSize +typedef A_u_longlong AEIO_FileSize; + +#define kAEGPIOInSuite "AEGP IO In Suite" +#define kAEGPIOInSuiteVersion5 6 /* frozen in AE 12 */ + +typedef struct AEGP_IOInSuite5 { + + SPAPI A_Err (*AEGP_GetInSpecOptionsHandle)( + AEIO_InSpecH inH, /* >> */ + void **optionsPPV); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecOptionsHandle)( + AEIO_InSpecH inH, /* >> */ + void *optionsPV, /* >> */ + void **old_optionsPPV); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecFilePath)( + AEIO_InSpecH inH, /* >> */ + AEGP_MemHandle *unicode_pathPH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetInSpecNativeFPS)( + AEIO_InSpecH inH, /* >> */ + A_Fixed *native_fpsP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecNativeFPS)( + AEIO_InSpecH inH, /* >> */ + A_Fixed native_fps); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecDepth)( + AEIO_InSpecH inH, /* >> */ + A_short *depthPS); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecDepth)( + AEIO_InSpecH inH, /* >> */ + A_short depthS); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_FileSize *sizePL); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_FileSize sizeL); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecInterlaceLabel)( + AEIO_InSpecH inH, /* >> */ + FIEL_Label *interlaceP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecInterlaceLabel)( + AEIO_InSpecH inH, /* >> */ + const FIEL_Label *interlaceP); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecAlphaLabel)( + AEIO_InSpecH inH, /* >> */ + AEIO_AlphaLabel *alphaP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecAlphaLabel)( + AEIO_InSpecH inH, /* >> */ + const AEIO_AlphaLabel *alphaP); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecDuration)( + AEIO_InSpecH inH, /* >> */ + A_Time *durationP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecDuration)( + AEIO_InSpecH inH, /* >> */ + const A_Time *durationP); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecDimensions)( + AEIO_InSpecH inH, /* >> */ + A_long *widthPL0, /* << */ + A_long *heightPL0); + + SPAPI A_Err (*AEGP_SetInSpecDimensions)( + AEIO_InSpecH inH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_InSpecGetRationalDimensions)( + AEIO_InSpecH inH, /* >> */ + const AEIO_RationalScale *rs0, /* << */ + A_long *width0, /* << */ + A_long *height0, /* << */ + A_Rect *r0); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecHSF)( + AEIO_InSpecH inH, /* >> */ + A_Ratio *hsfP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecHSF)( + AEIO_InSpecH inH, /* >> */ + const A_Ratio *hsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundRate)( + AEIO_InSpecH inH, /* >> */ + A_FpLong *ratePF); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundRate)( + AEIO_InSpecH inH, /* >> */ + A_FpLong rateF); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundEncoding)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndEncoding *encodingP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundEncoding)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndEncoding encoding); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundSampleSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndSampleSize *bytes_per_sampleP);/* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundSampleSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndSampleSize bytes_per_sample); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundChannels)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndChannels *num_channelsP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundChannels)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndChannels num_channels); /* >> */ + + SPAPI A_Err (*AEGP_AddAuxExtMap)( + const A_char *extension, /* >> */ + A_long file_type, /* >> */ + A_long creator); /* >> */ + + // In case of RGB data, if there is an embedded icc profile, build AEGP_ColorProfile out of this icc profile using AEGP_GetNewColorProfileFromICCProfile and pass it to + // AEGP_SetInSpecEmbeddedColorProfile, with profile description set to NULL. + // + // In case of non-RGB data, if there is an embedded non-RGB icc profile or you know the color space the data is in, pass its description as a null-terminated unicode string + // to AEGP_SetInSpecEmbeddedColorProfile, with color profile set to NULL. Doing this disables color management UI that allows user to affect + // profile choice in the application UI. + // + // If you are unpacking non-RGB data directly into working space (to get working space use AEGP_GetNewWorkingSpaceColorProfile), you are done. + // + // If you are unpacking non-RGB data into specific RGB color space, you must pass the profile describing this space to AEGP_SetInSpecAssignedColorProfile. + // Otherwise, your RGB data will be incorrectly interpreted as being in working space. + // + // Either color profile or profile description should be NULL in AEGP_SetInSpecEmbeddedColorProfile. You cannot use both. + SPAPI A_Err (*AEGP_SetInSpecEmbeddedColorProfile)( + AEIO_InSpecH inH, // << + AEGP_ConstColorProfileP color_profileP0, // << + const A_UTF16Char *profile_descP0); // << pointer to a null-terminated unicode string + + // Assign valid RGB profile to the footage + SPAPI A_Err (*AEGP_SetInSpecAssignedColorProfile)( + AEIO_InSpecH inH, // << + AEGP_ConstColorProfileP color_profileP); // << + + + SPAPI A_Err (*AEGP_GetInSpecNativeStartTime)( + AEIO_InSpecH inH, /* >> */ + A_Time *startTimeP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecNativeStartTime)( + AEIO_InSpecH inH, /* >> */ + const A_Time *startTimeP); /* >> */ + + SPAPI A_Err (*AEGP_ClearInSpecNativeStartTime)( + AEIO_InSpecH inH); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecNativeDisplayDropFrame)( + AEIO_InSpecH inH, /* >> */ + A_Boolean *displayDropFrameBP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecNativeDisplayDropFrame)( + AEIO_InSpecH inH, /* >> */ + A_Boolean displayDropFrameB); /* >> */ + + SPAPI A_Err (*AEGP_SetInSpecStillSequenceNativeFPS)( + AEIO_InSpecH inH, /* >> */ + A_Fixed native_still_seq_fps); /* >> */ + +} AEGP_IOInSuite5; + +#define kAEGPIOOutSuite "AEGP IO Out Suite" +#define kAEGPIOOutSuiteVersion5 8 /* frozen in AE 17.0 */ + +typedef struct AEGP_IOOutSuite5 { + SPAPI A_Err (*AEGP_GetOutSpecOptionsHandle)( + AEIO_OutSpecH outH, /* >> */ + void **optionsPPV); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecOptionsHandle)( + AEIO_OutSpecH outH, /* >> */ + void *optionsPV, /* >> */ + void **old_optionsPPVO); /* <> */ + + SPAPI A_Err (*AEGP_GetOutSpecFilePath)( + AEIO_OutSpecH outH, /* >> */ + AEGP_MemHandle *unicode_pathPH, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + A_Boolean *file_reservedPB); /* << If the file is reserved, do not create the file. + Otherwise, multi-machine rendering can fail. + If true, an empty file has already been created. */ + + SPAPI A_Err (*AEGP_GetOutSpecFPS)( + AEIO_OutSpecH outH, /* >> */ + A_Fixed *native_fpsP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecNativeFPS)( + AEIO_OutSpecH outH, /* >> */ + A_Fixed native_fpsP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecDepth)( + AEIO_OutSpecH outH, /* >> */ + A_short *depthPS); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecDepth)( + AEIO_OutSpecH outH, /* >> */ + A_short depthPS); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecInterlaceLabel)( + AEIO_OutSpecH outH, /* >> */ + FIEL_Label *interlaceP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecInterlaceLabel)( + AEIO_OutSpecH outH, /* >> */ + const FIEL_Label *interlaceP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecAlphaLabel)( + AEIO_OutSpecH outH, /* >> */ + AEIO_AlphaLabel *alphaP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecAlphaLabel)( + AEIO_OutSpecH outH, /* >> */ + const AEIO_AlphaLabel *alphaP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecDuration)( + AEIO_OutSpecH outH, /* >> */ + A_Time *durationP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecDuration)( + AEIO_OutSpecH outH, /* >> */ + const A_Time *durationP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecDimensions)( + AEIO_OutSpecH outH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecHSF)( + AEIO_OutSpecH outH, /* >> */ + A_Ratio *hsfP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecHSF)( + AEIO_OutSpecH outH, /* >> */ + const A_Ratio *hsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundRate)( + AEIO_OutSpecH outH, /* >> */ + A_FpLong *ratePF); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundRate)( + AEIO_OutSpecH outH, /* >> */ + A_FpLong rateF); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundEncoding)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndEncoding *encodingP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundEncoding)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndEncoding encoding); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundSampleSize)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndSampleSize *bytes_per_sampleP);/* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundSampleSize)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndSampleSize bytes_per_sample); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundChannels)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndChannels *num_channelsP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundChannels)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndChannels num_channels); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecIsStill)( + AEIO_OutSpecH outH, /* >> */ + A_Boolean *is_stillPB); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecPosterTime)( + AEIO_OutSpecH outH, /* >> */ + A_Time *poster_timeP); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecStartFrame)( + AEIO_OutSpecH outH, /* >> */ + A_long *start_frameP); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecPullDown)( + AEIO_OutSpecH outH, /* >> */ + AEIO_Pulldown *pulldownP); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecIsMissing)( + AEIO_OutSpecH outH, /* >> */ + A_Boolean *missingPB); /* << */ + + // see if you need to embed outspec's color profile as an icc profile + SPAPI A_Err (*AEGP_GetOutSpecShouldEmbedICCProfile)( + AEIO_OutSpecH outH, // >> + A_Boolean *embedPB); // << + + // query outspec's color profile + SPAPI A_Err (*AEGP_GetNewOutSpecColorProfile)( + AEGP_PluginID aegp_plugin_id, // >> + AEIO_OutSpecH outH, // >> + AEGP_ColorProfileP *color_profilePP); // << output color space; caller must dispose with AEGP_DisposeColorProfile + + // Fails if rq_itemP is not found. + // This API would also fail if the outH is not a confirmed outH and is a copy. + // e.g. if the Output Module settings dialog is Open. + SPAPI A_Err (*AEGP_GetOutSpecOutputModule)( + AEIO_OutSpecH outH, /* >> */ + AEGP_RQItemRefH *rq_itemP, /* << */ + AEGP_OutputModuleRefH *om_refP); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecStartTime)( + AEIO_OutSpecH outH, /* >> */ + A_Time *outStartTimePT); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecFrameTime)( // relative to start time + AEIO_OutSpecH outH, /* >> */ + A_Time *outFrameTimePT); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecIsDropFrame)( + AEIO_OutSpecH outH, /* >> */ + A_Boolean *outIsDropFramePB); /* << */ + + +} AEGP_IOOutSuite5; + + + +/* This suite allows you to take advantage of going through AE Import Dialog + and being treated as a native format type +*/ + +typedef A_long AE_FIM_ImportFlavorRef; + +#define AE_FIM_ImportFlavorRef_NONE AEGP_Index_NONE + +#define AE_FIM_MAX_FLAVOR_NAME_LEN 63 + +enum { + AE_FIM_ImportFlag_NONE = 0x0, + AE_FIM_ImportFlag_COMP = 0x2 +}; +typedef A_long AE_FIM_ImportFlags; + +enum { + AE_FIM_SpecialAction_NONE = -1, + AE_FIM_SpecialAction_DRAG_N_DROP_FILE = 2 +}; +typedef A_long AE_FIM_SpecialAction; + + +typedef struct AE_FIM_RefconTag *AE_FIM_Refcon; + +typedef struct AE_FIM_ImportOptionsTag *AE_FIM_ImportOptions; + +// callbacks +typedef A_Err (*AE_FIM_ImportFileCB)( + const A_UTF16Char *pathZ, // >> null terminated unicode path with platform separators + AE_FIM_ImportOptions imp_options, /* >> opaque structure; in the future could be expanded with query functions*/ + AE_FIM_SpecialAction action, /* >> is it a special kind of import situation? */ + AEGP_ItemH itemH, /* >> meaning varies depending on AE_FIM_SpecialAction */ + // both for no special action and drag'n'drop it is + // a folder where imported item should go + AE_FIM_Refcon refcon); /* >> the client defines this and it is stored with import callbacks */ + + + +typedef A_Err (*AE_FIM_VerifyImportableCB)( + const A_UTF16Char *pathZ, // >> null terminated unicode path with platform separators + AE_FIM_Refcon refcon, /* >> the client defines this and it is stored with import callbacks */ + A_Boolean *importablePB); /* << */ + + +typedef struct { + AE_FIM_Refcon refcon; // points to whatever you want; stored and passed back with the callbacks + AE_FIM_ImportFileCB import_cb; + AE_FIM_VerifyImportableCB verify_cb; +} AE_FIM_ImportCallbacks; + +#define kAEGPFIMSuite "AEGP File Import Manager Suite" +#define kAEGPFIMSuiteVersion4 4 /* frozen in AE 17.0 */ + + +typedef struct { + SPAPI A_Err (*AEGP_RegisterImportFlavor)( + const A_char *nameZ, // format name you'd like to appear + // in AE's Import Dialog Format pop-up + // menu. + // Limited to AE_FIM_MAX_IMPORT_FLAVOR_NAME_LEN. + // Everything after that will be truncated. + AE_FIM_ImportFlavorRef *imp_refP); // On return it is set to a valid opaque ref. + // If error occured, it will be returned to + // the caller and ref will be set to a special + // value - AE_FIM_ImportFlavorRef_NONE. + + SPAPI A_Err (*AEGP_RegisterImportFlavorFileTypes)( + AE_FIM_ImportFlavorRef imp_ref, // Received from AEGP_RegisterImportFlavor + A_long num_filekindsL, // number of supported file types for this format + const AEIO_FileKind *kindsAP, // Array of supported file types for this format + A_long num_fileextsL, // number of supported file exts for this format + const AEIO_FileKind *extsAP); // Array of supported file exts for this format + + + SPAPI A_Err (*AEGP_RegisterImportFlavorImportCallbacks)( + AE_FIM_ImportFlavorRef imp_ref, // Received from AEGP_RegisterImportFlavor + AE_FIM_ImportFlags single_flag, // You can register callbacks only per single flag + // this also registers the flag with the import flavor + const AE_FIM_ImportCallbacks *imp_cbsP); // Callbacks your format installs per each flag + + // optionally call once from AE_FIM_ImportFileCB. This is used by the application when re-importing + // from the render queue and replacing an existing item. + SPAPI A_Err (*AEGP_SetImportedItem)( + AE_FIM_ImportOptions imp_options, /* <> */ + AEGP_ItemH imported_itemH); /* >> */ + + SPAPI A_Err (*AEGP_FileSequenceImportOptionsFromFIMImportOptions)( + const AE_FIM_ImportOptions imp_options, /* >> */ + AEGP_FileSequenceImportOptions *seq_import_optionsP); /* << */ + +} AEGP_FIMSuite4; + + + +/* --------------------------- Persistent Data Suite ------------------------------*/ +/* +The persist data suite allows you to store persistant data with the application. + +The data entries are accessed by SectionKey, ValueKey pairs. It is recommended +that plugins use their matchname as their SectionKey, or the prefix if using multiple +section names. THe available data types are void*, floating point numbers, and strings. + +Void* unstructured data allows you to store any kind of data. You must pass in a size in +bytes along with the data. + +String data supports the full 8 bit space, only 0x00 is reserved for string ending. +This makes them ideal for storing UTF-8 encoded strings, ISO 8859-1, and plain ASCII. +Both Section keys and Value keys are of this type. + +FpLongs are stored with 6 decimal places of precision. There is no provision +for specifying a different precision. + +Right now the only persistent data host is the application. + +*/ + +#define kAEGPPersistentDataSuite "AEGP Persistent Data Suite" +#define kAEGPPersistentDataSuiteVersion4 4 /* frozen in AE 12.0 */ + +typedef struct { + // get a handle of the application blob, + // modifying this will modify the application + SPAPI A_Err (*AEGP_GetApplicationBlob)( + AEGP_PersistentType blob_type, /* >> new in AE 12 */ + AEGP_PersistentBlobH *blobPH); /* << */ + + // section and value key management + SPAPI A_Err (*AEGP_GetNumSections)( + AEGP_PersistentBlobH blobH, /* >> */ + A_long *num_sectionPL); /* << */ + + SPAPI A_Err (*AEGP_GetSectionKeyByIndex)( + AEGP_PersistentBlobH blobH, /* >> */ + A_long section_index, /* >> */ + A_long max_section_size, /* >> */ + A_char *section_keyZ); /* << */ + + SPAPI A_Err (*AEGP_DoesKeyExist)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_Boolean *existsPB); /* << */ + + SPAPI A_Err (*AEGP_GetNumKeys)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + A_long *num_keysPL); /* << */ + + SPAPI A_Err (*AEGP_GetValueKeyByIndex)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + A_long key_index, /* >> */ + A_long max_key_size, /* >> */ + A_char *value_keyZ); /* << */ + + // data access and manipulation + + // For the entry points below, if a given key is not found, + // the default value is both written to the blobH and + // returned as the value; if no default is provided, a blank value will be written + // and returned + + SPAPI A_Err (*AEGP_GetDataHandle)( + AEGP_PluginID plugin_id, + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + AEGP_MemHandle defaultH0, /* >> never adopted, NULL means no default data */ + AEGP_MemHandle *valuePH); /* << newly allocated, owned by caller, NULL if would be zero sized handle */ + + SPAPI A_Err (*AEGP_GetData)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_u_long data_sizeLu, /* >> bufPV & default must be this big, if pref isn't then the default will be used */ + const void *defaultPV0, /* >> NULL means all zeros for default */ + void *bufPV); /* << */ + + SPAPI A_Err (*AEGP_GetString)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const A_char *defaultZ0, /* >> NULL means '\0' is the default */ + A_u_long buf_sizeLu, /* >> size of buffer. Behavior dependent on actual_buf_sizeLu0 */ + A_char *bufZ, /* << will be "" if buf_size is too small */ + A_u_long *actual_buf_sizeLu0); /* << actual size needed to store the buffer (includes terminating NULL). Pass NULL for error reporting if size mismatch.*/ + + SPAPI A_Err (*AEGP_GetLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_long defaultL, /* >> */ + A_long *valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetFpLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_FpLong defaultF, /* >> */ + A_FpLong *valuePF); /* << */ + + SPAPI A_Err (*AEGP_GetTime)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const A_Time *defaultPT0, /* >> */ + A_Time *valuePT); /* << */ + + SPAPI A_Err (*AEGP_GetARGB)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const PF_PixelFloat *defaultP0, /* >> */ + PF_PixelFloat *valueP); /* << */ + + // setters + SPAPI A_Err (*AEGP_SetDataHandle)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const AEGP_MemHandle valueH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_SetData)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_u_long data_sizeLu, /* >> */ + const void *dataPV); /* >> */ + + SPAPI A_Err (*AEGP_SetString)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const A_char *strZ); /* >> */ + + SPAPI A_Err (*AEGP_SetLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_long valueL); /* >> */ + + SPAPI A_Err (*AEGP_SetFpLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_FpLong valueF); /* >> */ + + SPAPI A_Err (*AEGP_SetTime)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const A_Time *valuePT); /* >> */ + + SPAPI A_Err (*AEGP_SetARGB)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const PF_PixelFloat *valueP); /* >> */ + + SPAPI A_Err (*AEGP_DeleteEntry)( /* no error if entry not found */ + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ); /* >> */ + + SPAPI A_Err (*AEGP_GetPrefsDirectory)( + AEGP_MemHandle *unicode_pathPH); // << empty string if no file. handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + +} AEGP_PersistentDataSuite4; + + +// AEGP_CollectionSuite1 + +#define kAEGPCollectionSuite "AEGP Collection Suite" +#define kAEGPCollectionSuiteVersion2 2 /* frozen in AE 6.5 */ + +enum { + AEGP_CollectionItemType_NONE, + + AEGP_CollectionItemType_LAYER, + AEGP_CollectionItemType_MASK, + AEGP_CollectionItemType_EFFECT, + AEGP_CollectionItemType_STREAM, + AEGP_CollectionItemType_KEYFRAME, + AEGP_CollectionItemType_MASK_VERTEX, + AEGP_CollectionItemType_STREAMREF, + + AEGP_CollectionItemType_END, + AEGP_CollectionItemType_BEGIN = AEGP_CollectionItemType_LAYER +}; +typedef A_LegacyEnumType AEGP_CollectionItemType; + +typedef struct { + AEGP_LayerH layerH; /* comp derived from layerH */ +} AEGP_LayerCollectionItem; + +typedef struct { + AEGP_LayerH layerH; /* containing layer */ + AEGP_MaskIndex index; /* index to layer. */ +}AEGP_MaskCollectionItem; + +typedef struct { + AEGP_LayerH layerH; /* containing layer */ + AEGP_EffectIndex index; /* index to the effect */ +}AEGP_EffectCollectionItem; + +enum { + AEGP_StreamCollectionItemType_NONE, + AEGP_StreamCollectionItemType_LAYER, + AEGP_StreamCollectionItemType_MASK, + AEGP_StreamCollectionItemType_EFFECT, + AEGP_StreamCollectionItemType_END, + AEGP_StreamCollectionItemType_BEGIN = AEGP_StreamCollectionItemType_LAYER +}; +typedef A_LegacyEnumType AEGP_StreamCollectionItemType; + +typedef struct { + AEGP_MaskCollectionItem mask; + AEGP_MaskStream mask_stream; +} AEGP_MaskStreamCollectionItem; + +typedef struct { + AEGP_EffectCollectionItem effect; + A_long param_index; +} AEGP_EffectStreamCollectionItem; + +typedef struct { + AEGP_LayerH layerH; + AEGP_LayerStream layer_stream; +} AEGP_LayerStreamCollectionItem; + +typedef struct { + AEGP_StreamCollectionItemType type; + union { + AEGP_LayerStreamCollectionItem layer_stream; + AEGP_MaskStreamCollectionItem mask_stream; + AEGP_EffectStreamCollectionItem effect_stream; + } u; +}AEGP_StreamCollectionItem; + +typedef struct { + AEGP_MaskCollectionItem mask_sel; /* the mask must be selected for a vertex to be selected */ + AEGP_VertexIndex index; +}AEGP_MaskVertexCollectionItem; + +typedef struct { + AEGP_StreamCollectionItem stream_coll; + AEGP_KeyframeIndex index; +}AEGP_KeyframeCollectionItem; + +typedef struct { + AEGP_CollectionItemType type; + // the union is not used for AEGP_CollectionItemType_STREAMREF + union { + AEGP_LayerCollectionItem layer; + AEGP_MaskCollectionItem mask; + AEGP_EffectCollectionItem effect; + AEGP_StreamCollectionItem stream; + AEGP_MaskVertexCollectionItem mask_vertex; + AEGP_KeyframeCollectionItem keyframe; + } u; + + AEGP_StreamRefH stream_refH; // valid for all types +} AEGP_CollectionItemV2; + +typedef struct { + SPAPI A_Err (*AEGP_NewCollection)( /* dispose with dispose collection */ + AEGP_PluginID plugin_id, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_DisposeCollection)( + AEGP_Collection2H collectionH); /* >> */ + + SPAPI A_Err (*AEGP_GetCollectionNumItems)( /* constant time */ + AEGP_Collection2H collectionH, /* >> */ + A_u_long *num_itemsPL); /* << */ + + SPAPI A_Err (*AEGP_GetCollectionItemByIndex)( /* constant time */ + AEGP_Collection2H collectionH, /* >> */ + A_u_long indexL, /* >> */ + AEGP_CollectionItemV2 *collection_itemP); /* << */ + + SPAPI A_Err (*AEGP_CollectionPushBack)( /* constant time */ + AEGP_Collection2H collectionH, /* <> */ + const AEGP_CollectionItemV2 *collection_itemP); /* >> NOTE: The passed AEGP_CollectionItemV2, as well as all the AEGP_StreamRefH's + it references, will be adopted by AE; DO NOT dispose of it! */ + + SPAPI A_Err (*AEGP_CollectionErase)( /* O(n) */ + AEGP_Collection2H collectionH, /* <> */ + A_u_long index_firstL, /* >> */ + A_u_long index_lastL); /* >> */ + +} AEGP_CollectionSuite2; + + +enum +{ + AEGP_WorldType_NONE, + AEGP_WorldType_8, + AEGP_WorldType_16, + AEGP_WorldType_32 +}; + +typedef A_long AEGP_WorldType; + + +#define kAEGPWorldSuite "AEGP World Suite" +#define kAEGPWorldSuiteVersion3 3 /* frozen in AE 7.0 */ + +typedef struct { + SPAPI A_Err (*AEGP_New)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_WorldType type, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_WorldH worldH); /* >> */ + + SPAPI A_Err (*AEGP_GetType)( + AEGP_WorldH worldH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + SPAPI A_Err (*AEGP_GetSize)( + AEGP_WorldH worldH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetRowBytes)( + AEGP_WorldH worldH, /* >> */ + A_u_long *row_bytesPL); /* << */ + + SPAPI A_Err (*AEGP_GetBaseAddr8)( + AEGP_WorldH worldH, /* >> error if the worldH is not AEGP_WorldType_8 */ + PF_Pixel8 **base_addrP); /* << */ + + SPAPI A_Err (*AEGP_GetBaseAddr16)( + AEGP_WorldH worldH, /* >> error if the worldH is not AEGP_WorldType_16 */ + PF_Pixel16 **base_addrP); /* << */ + + SPAPI A_Err (*AEGP_GetBaseAddr32)( + AEGP_WorldH worldH, /* >> error if the worldH is not AEGP_WorldType_32 */ + PF_PixelFloat **base_addrP); /* << */ + + SPAPI A_Err (*AEGP_FillOutPFEffectWorld)( /* Provided so you can use some of the PF routines with an AEGPWorld. Pass NULL as the ProgPtr to the PF routines.*/ + AEGP_WorldH worldH, /* >> */ + PF_EffectWorld *pf_worldP); /* << */ + + SPAPI A_Err (*AEGP_FastBlur)( + A_FpLong radiusF, /* >> */ + PF_ModeFlags mode, /* >> */ + PF_Quality quality, /* >> */ + AEGP_WorldH worldH); /* <> only for user allocated worlds; not for checked-out frames which are read only */ + + SPAPI A_Err (*AEGP_NewPlatformWorld)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_WorldType type, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + AEGP_PlatformWorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_DisposePlatformWorld)( + AEGP_PlatformWorldH worldH); /* >> */ + + SPAPI A_Err (*AEGP_NewReferenceFromPlatformWorld)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_PlatformWorldH platform_worldH, // >> + AEGP_WorldH *worldPH); /* << */ + + +} AEGP_WorldSuite3; + + +/* AEGP_RenderOptionsSuite + +*/ + +enum { + AEGP_MatteMode_STRAIGHT = 0, + AEGP_MatteMode_PREMUL_BLACK, + AEGP_MatteMode_PREMUL_BG_COLOR +}; +typedef A_long AEGP_MatteMode; + +enum { + AEGP_ChannelOrder_ARGB = 0, + AEGP_ChannelOrder_BGRA +}; +typedef A_char AEGP_ChannelOrder; + +enum { + AEGP_ItemQuality_DRAFT = 0, /* footage only. perform faster decode at expense of quality and draft-quality deinterlacing. */ + AEGP_ItemQuality_BEST /* footage only. perform full decode and resampled deinterlacing */ +}; +typedef A_char AEGP_ItemQuality; + +#define kAEGPRenderOptionsSuite "AEGP Render Options Suite" +#define kAEGPRenderOptionsSuiteVersion4 4 /* frozen in AE 10.5 */ + +typedef struct { + // fills out + // Time to 0 + // Time step to the frame duration + // field render to none + // depth is best resolution of item + SPAPI A_Err (*AEGP_NewFromItem)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_RenderOptionsH *optionsPH); /* << */ + + SPAPI A_Err (*AEGP_Duplicate)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderOptionsH *copyPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_RenderOptionsH optionsH); /* >> */ + + SPAPI A_Err (*AEGP_SetTime)( /* the render time */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time); /* >> */ + + SPAPI A_Err (*AEGP_GetTime)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_SetTimeStep)( /* duration of the frame; important for motion blur. */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time_step); /* >> */ + + SPAPI A_Err (*AEGP_GetTimeStep)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timePT); /* << */ + + SPAPI A_Err (*AEGP_SetFieldRender)( /* How fields are to be handled. */ + AEGP_RenderOptionsH optionsH, /* <> */ + PF_Field field_render); /* >> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + AEGP_RenderOptionsH optionsH, /* >> */ + PF_Field *field_renderP); /* << */ + + + SPAPI A_Err (*AEGP_SetWorldType)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_WorldType type); /* >> */ + + SPAPI A_Err (*AEGP_GetWorldType)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + + // 1 == 100% + // 2 == 50% + // ... + SPAPI A_Err (*AEGP_SetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* <> */ + A_short x, /* >> */ + A_short y); /* >> */ + + SPAPI A_Err (*AEGP_GetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_short *xP, /* >> */ + A_short *yP); /* << */ + + SPAPI A_Err (*AEGP_SetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* <> */ + const A_LRect *roiP); /* >> {0,0,0,0} for all*/ + + SPAPI A_Err (*AEGP_GetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_LRect *roiP); /* << */ + + SPAPI A_Err (*AEGP_SetMatteMode)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_MatteMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMatteMode)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_MatteMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetChannelOrder)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_ChannelOrder channel_order); /* >> */ + + SPAPI A_Err (*AEGP_GetChannelOrder)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_ChannelOrder *channelP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderGuideLayers)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Boolean *will_renderPB); /* << */ + + SPAPI A_Err (*AEGP_SetRenderGuideLayers)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Boolean render_themB); /* >> */ + + /* AEGP_ItemType_FOOTAGE can be decoded at different with different + quality levels. Ignore for other AEGP_ItemType + */ + + SPAPI A_Err (*AEGP_GetRenderQuality)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_ItemQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetRenderQuality)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_ItemQuality quality); /* >> */ +} AEGP_RenderOptionsSuite4; + + +#define kAEGPLayerRenderOptionsSuite "AEGP Layer Render Options Suite" +#define kAEGPLayerRenderOptionsSuiteVersion2 2 /* frozen in 13.5 */ + +typedef struct { + // optionsPH must be disposed by calling code + // + // fills out + // Time to the layer's current time + // Time step to layer's frame duration + // ROI to the layer's nominal bounds + // EffectsToRender to "all" + SPAPI A_Err (*AEGP_NewFromLayer)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerRenderOptionsH *optionsPH); /* << */ + + // optionsPH must be disposed by calling code + // like AEGP_NewFromLayer, but sets EffectsToRender to be the index fof effectH + SPAPI A_Err (*AEGP_NewFromUpstreamOfEffect)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_EffectRefH effectH, /* >> */ + AEGP_LayerRenderOptionsH *optionsPH); /* << */ + + // optionsPH must be disposed by calling code + // like AEGP_NewFromLayer, but sets EffectsToRender to include the effect output + // THIS MAY ONLY BE CALLED FROM THE UI THREAD + SPAPI A_Err (*AEGP_NewFromDownstreamOfEffect)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_EffectRefH effectH, /* >> */ + AEGP_LayerRenderOptionsH *optionsPH); /* << */ + + // copyPH must be disposed by calling code + SPAPI A_Err (*AEGP_Duplicate)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_LayerRenderOptionsH *copyPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_LayerRenderOptionsH optionsH); /* >> */ + + SPAPI A_Err (*AEGP_SetTime)( /* the render time */ + AEGP_LayerRenderOptionsH optionsH, /* <> */ + A_Time time); /* >> */ + + SPAPI A_Err (*AEGP_GetTime)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_SetTimeStep)( /* duration of the frame; important for motion blur. */ + AEGP_LayerRenderOptionsH optionsH, /* <> */ + A_Time time_step); /* >> */ + + SPAPI A_Err (*AEGP_GetTimeStep)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + A_Time *timePT); /* << */ + + SPAPI A_Err (*AEGP_SetWorldType)( + AEGP_LayerRenderOptionsH optionsH, /* <> */ + AEGP_WorldType type); /* >> */ + + SPAPI A_Err (*AEGP_GetWorldType)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + // 1 == 100% + // 2 == 50% + // ... + SPAPI A_Err (*AEGP_SetDownsampleFactor)( + AEGP_LayerRenderOptionsH optionsH, /* <> */ + A_short x, /* >> */ + A_short y); /* >> */ + + SPAPI A_Err (*AEGP_GetDownsampleFactor)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + A_short *xP, /* >> */ + A_short *yP); /* << */ + + SPAPI A_Err (*AEGP_SetMatteMode)( + AEGP_LayerRenderOptionsH optionsH, /* <> */ + AEGP_MatteMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMatteMode)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_MatteMode *modeP); /* << */ +} AEGP_LayerRenderOptionsSuite2; + + +#define kAEGPRenderSuite "AEGP Render Suite" +#define kAEGPRenderSuiteVersion5 8 /* frozen in 13.5 */ + +typedef A_u_longlong AEGP_AsyncRequestId; + +typedef A_Err (*AEGP_RenderSuiteCheckForCancel)( + void *refcon, + A_Boolean *cancelPB); + +typedef A_Err (*AEGP_AsyncFrameReadyCallback)( + AEGP_AsyncRequestId request_id, // this will be the AEGP_AsyncRequestId that was returned from AEGP_RenderAndCheckoutLayerFrame_Async + A_Boolean was_canceled, // will be set to true if this request was canceled via a call to AEGP_CancelAsyncRequest + A_Err error, // will be set to A_Err_NONE (0) if successful + AEGP_FrameReceiptH receiptH, // frame data (only if successful) + AEGP_AsyncFrameRequestRefcon refconP0); // this is the AEGP_AsyncFrameRequestRefcon that was (optionally) passed in to AEGP_RenderAndCheckoutLayerFrame_Async + +typedef struct { + // IMPORTANT: use of this call on the UI thread should be considered DEPRECATED except in a very narrow use case: + // a) the plugin requires this frame to make database change (e.g. an auto color button on an effect) + // b) the user explicitly requested this operation (e.g. this is not a passive redraw of UI because something else changed) + // This is to avoid having poor interactivity while the user is doing other unrelated things. + // Asynchronous APIs should be used on the UI thread except in this specific case + // On the UI thread, if the frame takes longer than 2 seconds, a progress dialog will automatically open to allow the user to cancel + // On a render thread, these calls will work as normal with no progress dialog + + // See IMPORTANT note above about using this synchronous call on the UI thread which is considered DEPRECATED behavior + SPAPI A_Err (*AEGP_RenderAndCheckoutFrame)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_FrameReceiptH *receiptPH); /* << check in using AEGP_CheckinFrame to release memory */ + + // render_plain_layer_frameB was confusing and is not the design we want going forward + // eventually this will be replaced with new RenderOptions calls. Until that is available, this will behave as if render_plain_layer_frameB is "false" + // (upstream effect render). If the "true" behavior for adjustment layer mask is desired, see kAEGPRenderSuiteVersion4 that still has this flag + + // See IMPORTANT note above about using this synchronous call on the UI thread which is considered DEPRECATED behavior + SPAPI A_Err (*AEGP_RenderAndCheckoutLayerFrame)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_FrameReceiptH *receiptPH); /* << check in using AEGP_CheckinFrame to release memory */ + + SPAPI A_Err (*AEGP_RenderAndCheckoutLayerFrame_Async)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_AsyncFrameReadyCallback callback, /* >> this will be called when the frame is ready (guaranteed to be called unless AE is shutting down) */ + AEGP_AsyncFrameRequestRefcon request_completion_refconP0, /* >> optional. if included, it will be passed into the above callback */ + AEGP_AsyncRequestId *asyncRequestIdP); /* << Id associated with frame request. Can be used to cancel early */ + + SPAPI A_Err (*AEGP_CancelAsyncRequest)( + AEGP_AsyncRequestId asyncRequestId); /* >> */ + + SPAPI A_Err (*AEGP_CheckinFrame)( + AEGP_FrameReceiptH receiptH); /* >> */ + + /* This returns a read only world that is not-owned by the plugin. + Call CheckinFrame to release the world when you are done reading from it. + */ + + SPAPI A_Err (*AEGP_GetReceiptWorld)( + AEGP_FrameReceiptH receiptH, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_GetRenderedRegion)( + AEGP_FrameReceiptH receiptH, /* >> */ + A_LRect *rendered_regionP); /* << */ + + SPAPI A_Err (*AEGP_IsRenderedFrameSufficient)( + AEGP_RenderOptionsH rendered_optionsH, /* >> */ + AEGP_RenderOptionsH proposed_optionsH, /* >> */ + A_Boolean *rendered_is_sufficientPB); /* << */ + + // See IMPORTANT note above about using this synchronous call on the UI thread which is considered DEPRECATED behavior + SPAPI A_Err (*AEGP_RenderNewItemSoundData)( /* Works on Compositions and Footage items. */ + AEGP_ItemH itemH, /* >> */ + const A_Time *start_timePT, /* >> */ + const A_Time *durationPT, /* >> */ + const AEGP_SoundDataFormat *sound_formatP, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_SoundDataH *new_sound_dataPH); /* << AEGP_SoundDataH must be disposed. Returns NULL if no audio */ + + + // returns the current timestamp of the project.this is increased any time something is touched in the project + // that affects rendering + SPAPI A_Err (*AEGP_GetCurrentTimestamp)( + AEGP_TimeStamp * time_stampP); // out + + // Lets you know if the video of the item has changed since the input time stamp. + // Is not affected by audio. + SPAPI A_Err (*AEGP_HasItemChangedSinceTimestamp)(AEGP_ItemH itemH, // in + const A_Time * start_timeP, // in + const A_Time* durationP, //in + const AEGP_TimeStamp * time_stampP, //in + A_Boolean * item_has_changedPB); //out + + // checks whether this frame would be worth rendering externally and + // checking in to the cache. a speculative renderer should check this twice: + // (1) before sending the frame out to render + // (2) when it is complete, before calling AEGP_NewPlatformWorld and checking in. + // (don't forget to call AEGP_HasItemChangedSinceTimestamp also!) + SPAPI A_Err (*AEGP_IsItemWorthwhileToRender)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_Boolean *worthwhile_to_renderPB); // out + + // ticks_to_render is the approximate amount of time needed to render the frame + // on this machine. it is 60Hz. + SPAPI A_Err (*AEGP_CheckinRenderedFrame)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_u_long ticks_to_renderL, // in + AEGP_PlatformWorldH imageH); // in (adopted) + + SPAPI A_Err (*AEGP_GetReceiptGuid) (AEGP_FrameReceiptH receiptH, // in + AEGP_MemHandle *guidMH); // out, must be disposed +} AEGP_RenderSuite5; + + + +// AsyncManager render suite. For render requests that are managed by AE rather than explicitly by plugin callbacks (as in some cases in AEGP_RenderSuite5+) +// As of 13.5 the only way to get an AsyncManager is via PF_GetContextAsyncManager in PF_EffectCustomUISuite2. (This Async Manager is PF_Event_DRAW specific +// but there may be others in the future) + +#define kAEGPRenderAsyncManagerSuite "AEGP Render Asyc Manager Suite" +#define kAEGPRenderAsyncManagerSuiteVersion1 1 /* frozen in 13.5 */ + + +typedef struct { + + // An AsyncManager automatically handles possibly multiple async render requests + // The first use of this in for async requests in CUSTOM_UI of PF_EventDRAW. See PF_OutFlags2_CUSTOM_UI_ASYNC_MANAGER + // The purpose_id is a unique constant number that helps the manager understand when it can automatically cancel + // old requests (because they have the same purpose id and the RO has changed) + + SPAPI A_Err (*AEGP_CheckoutOrRender_ItemFrame_AsyncManager)( PF_AsyncManagerP async_managerP, // >> the async manager to ask for the render + A_u_long purpose_id, // >> a unique id to identify requests for the same usage (e.g. to hint cancellation of old) + AEGP_RenderOptionsH ro, // >> the description of the item frame to render + AEGP_FrameReceiptH *out_receiptPH ); // << on success, the rendered frame. Can succeed and have no pixels (no world) + + SPAPI A_Err (*AEGP_CheckoutOrRender_LayerFrame_AsyncManager)( PF_AsyncManagerP async_managerP, // >> the async manager to ask for the render + A_u_long purpose_id, // >> a unique id to identify requests for the same usage (e.g. to hint cancellation of old) + AEGP_LayerRenderOptionsH lro, // >> the description of the layer frame to render + AEGP_FrameReceiptH *out_receiptPH ); // << on success, the rendered frame. Can succeed and have no pixels (no world) + + + +} AEGP_RenderAsyncManagerSuite1; + + + + +#define kAEGPTrackerSuite "AEGP Tracker Suite" +#define kAEGPTrackerSuiteVersion1 1 /* frozen in AE 6.0 */ + + +typedef struct { + SPAPI A_Err (*AEGP_GetNumFeatures)( + const PT_TrackingContextPtr contextP, /* >> */ + A_long *num_featuresPL); /* << */ + + SPAPI A_Err (*AEGP_GetFeatureRegionByIndex)( + const PT_TrackingContextPtr contextP, /* >> */ + PT_Index index, /* >> */ + A_FloatRect *rectP); /* << */ + + SPAPI A_Err (*AEGP_GetSearchRegionByIndex)( + const PT_TrackingContextPtr contextP, /* >> */ + PT_Index index, /* >> */ + A_FloatRect *rectP); /* << */ + + SPAPI A_Err (*AEGP_GetFeatureWorldByIndex)( + const PT_TrackingContextPtr contextP, /* >> */ + PT_Index index, /* >> */ + AEGP_WorldH *feature_worldPH); /* << */ + + SPAPI A_Err (*AEGP_GetFrameWorld)( + const PT_TrackingContextPtr contextP, /* >> */ + AEGP_WorldH *frame_worldPH); /* << */ + + SPAPI A_Err (*AEGP_GetTrackerSourceDimensions)( + const PT_TrackingContextPtr contextP, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); + + SPAPI A_Err (*AEGP_SetFeatureRegionByIndex)( + const PT_TrackingContextPtr contextP, /* >> */ + PT_Index index, /* >> */ + const A_FloatRect *rectP); /* >> */ + + SPAPI A_Err (*AEGP_SetAccuracyByIndex)( + const PT_TrackingContextPtr contextP, /* >> */ + PT_Index index, /* >> */ + A_FpLong accuracyF); /* >> */ + + SPAPI A_Err (*AEGP_ShouldTrackFeature)( + const PT_TrackingContextPtr contextP, /* >> */ + PT_Index index, /* >> */ + A_Boolean *trackPB); /* << */ + +} AEGP_TrackerSuite1; + + +#define kAEGPTrackerUtilitySuite "AEGP Tracker Utility Suite" +#define kAEGPTrackerUtilitySuiteVersion1 1 /* frozen in AE 6.0 */ + +typedef struct { + SPAPI A_Err (*AEGP_HasUserCancelled)( + const PT_TrackingContextPtr contextP, /* >> */ + A_Boolean *user_cancelledPB); /* << */ + + SPAPI A_Err (*AEGP_GetTrackerFromTrackerInstance)( + const PT_TrackerInstancePtr tracker_instanceP, /* >> */ + PT_TrackerPtr *trackerPP); /* << */ + + SPAPI A_Err (*AEGP_GetTrackerInstanceFromTrackingContext)( + const PT_TrackingContextPtr contextP, /* >> */ + PT_TrackerInstancePtr *tracker_instancePP); /* << */ + + SPAPI A_Err (*AEGP_GetGlobalData)( + const PT_TrackerPtr trackerP, /* >> */ + AEGP_MemHandle *global_dataPH); /* << */ + + SPAPI A_Err (*AEGP_GetInstanceData)( + const PT_TrackerInstancePtr tracker_instanceP, /* >> */ + AEGP_MemHandle *instance_dataPH); /* << */ // currently has to be flat (no handles inside the handle) + + SPAPI A_Err (*AEGP_GetTrackData)( + const PT_TrackingContextPtr contextP, /* >> */ + AEGP_MemHandle *track_dataPH); /* << */ +} AEGP_TrackerUtilitySuite1; + + + +#define kAEGPRenderQueueMonitorSuite "AEGP RenderQueue Monitor Suite" +#define kAEGPRenderQueueMonitorSuiteVersion1 1 /* frozen AE 11.0 */ + +typedef struct _AEGP_RQM_Refcon *AEGP_RQM_Refcon; +typedef A_u_longlong AEGP_RQM_SessionId; +typedef A_u_longlong AEGP_RQM_ItemId; +typedef A_u_longlong AEGP_RQM_FrameId; + +typedef enum +{ + AEGP_RQM_FinishedStatus_UNKNOWN, + AEGP_RQM_FinishedStatus_SUCCEEDED, + AEGP_RQM_FinishedStatus_ABORTED, + AEGP_RQM_FinishedStatus_ERRED +} AEGP_RQM_FinishedStatus; + +typedef struct _AEGP_RQM_BasicData { + const struct SPBasicSuite *pica_basicP; + A_long aegp_plug_id; + AEGP_RQM_Refcon aegp_refconPV; +} AEGP_RQM_BasicData; + +typedef struct _AEGP_RQM_FunctionBlock1 { + A_Err (*AEGP_RQM_RenderJobStarted)(AEGP_RQM_BasicData *basic_dataP, AEGP_RQM_SessionId jobid); + A_Err (*AEGP_RQM_RenderJobEnded)(AEGP_RQM_BasicData *basic_dataP, AEGP_RQM_SessionId jobid); + A_Err (*AEGP_RQM_RenderJobItemStarted)(AEGP_RQM_BasicData *basic_dataP, AEGP_RQM_SessionId jobid, AEGP_RQM_ItemId itemid); + A_Err (*AEGP_RQM_RenderJobItemUpdated)(AEGP_RQM_BasicData *basic_dataP, AEGP_RQM_SessionId jobid, AEGP_RQM_ItemId itemid, AEGP_RQM_FrameId frameid); + A_Err (*AEGP_RQM_RenderJobItemEnded)(AEGP_RQM_BasicData *basic_dataP, AEGP_RQM_SessionId jobid, AEGP_RQM_ItemId itemid, AEGP_RQM_FinishedStatus fstatus); + A_Err (*AEGP_RQM_RenderJobItemReportLog)(AEGP_RQM_BasicData *basic_dataP, AEGP_RQM_SessionId jobid, AEGP_RQM_ItemId itemid, A_Boolean isError, AEGP_MemHandle logbuf); +} AEGP_RQM_FunctionBlock1; + +typedef struct AEGP_RenderQueueMonitorSuite1 { + + SPAPI A_Err (*AEGP_RegisterListener) ( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_RQM_Refcon aegp_refconP, /* >> */ + const AEGP_RQM_FunctionBlock1 * fcn_blockP); /* >> */ + + SPAPI A_Err (*AEGP_DeregisterListener) ( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_RQM_Refcon aegp_refconP); /* >> */ + + SPAPI A_Err (*AEGP_GetProjectName)( + AEGP_RQM_SessionId sessid, // >> + AEGP_MemHandle *utf_project_namePH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetAppVersion)( + AEGP_RQM_SessionId sessid, // >> + AEGP_MemHandle *utf_app_versionPH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetNumJobItems)( + AEGP_RQM_SessionId sessid, // >> + A_long *num_jobitemsPL); // << + + SPAPI A_Err (*AEGP_GetJobItemID)( + AEGP_RQM_SessionId sessid, // >> + A_long jobItemIndex, // >> + AEGP_RQM_ItemId *jobItemID); // << + + SPAPI A_Err (*AEGP_GetNumJobItemRenderSettings)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long *num_settingsPL); // << + + SPAPI A_Err (*AEGP_GetJobItemRenderSetting)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long settingIndex, // >> + AEGP_MemHandle *utf_setting_namePH0, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *utf_setting_valuePH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetNumJobItemOutputModules)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long *num_outputmodulesPL); // << + + SPAPI A_Err (*AEGP_GetNumJobItemOutputModuleSettings)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long outputModuleIndex, // >> + A_long *num_settingsPL); // << + + SPAPI A_Err (*AEGP_GetJobItemOutputModuleSetting)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long outputModuleIndex, // >> + A_long settingIndex, // >> + AEGP_MemHandle *utf_setting_namePH0, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *utf_setting_valuePH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetNumJobItemOutputModuleWarnings)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long outputModuleIndex, // >> + A_long *num_warningsPL); // << + + SPAPI A_Err (*AEGP_GetJobItemOutputModuleWarning)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long outputModuleIndex, // >> + A_long warningIndex, // >> + AEGP_MemHandle *utf_warning_valuePH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetNumJobItemFrameProperties)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + AEGP_RQM_FrameId frameid, // >> + A_long *num_propertiesPL); // << + + SPAPI A_Err (*AEGP_GetJobItemFrameProperty)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + AEGP_RQM_FrameId frameid, // >> + A_long propertyIndex, // >> + AEGP_MemHandle *utf_property_namePH0, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *utf_property_valuePH0);// << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetNumJobItemOutputModuleProperties)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long outputModuleIndex, // >> + A_long *num_propertiesPL); // << + + SPAPI A_Err (*AEGP_GetJobItemOutputModuleProperty)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + A_long outputModuleIndex, // >> + A_long propertyIndex, // >> + AEGP_MemHandle *utf_property_namePH0, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *utf_property_valuePH0);// << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetJobItemFrameThumbnail)( + AEGP_RQM_SessionId sessid, // >> + AEGP_RQM_ItemId itemid, // >> + AEGP_RQM_FrameId frameid, // >> + A_long *widthPL, // <> pass in the maximum width, returns the actual width + A_long *heightPL, // <> pass in the maximum height, returns the actual height + AEGP_MemHandle *thumbnailPH0); // << handle of an image memory block in JPEG format + +} AEGP_RenderQueueMonitorSuite1; + + + +/* -------------------------------------------------------------------- */ + +typedef const void *PF_ConstPtr; +typedef const PF_ConstPtr *PF_ConstHandle; + +#define kPFEffectSequenceDataSuite "PF Effect Sequence Data Suite" +#define kPFEffectSequenceDataSuiteVersion1 1 /* frozen in 18.2 */ + +typedef struct PF_EffectSequenceDataSuite1 { + + SPAPI PF_Err (*PF_GetConstSequenceData)( PF_ProgPtr effect_ref, + PF_ConstHandle *sequence_data); /* >> */ + +} PF_EffectSequenceDataSuite1; + + + + +#include + + +/****************************************************************/ +/* include old versions of the suites */ +/****************************************************************/ +#include + +#endif diff --git a/External/AE SDK/Headers/AE_GeneralPlugOld.h b/External/AE SDK/Headers/AE_GeneralPlugOld.h new file mode 100644 index 00000000..68bb8620 --- /dev/null +++ b/External/AE SDK/Headers/AE_GeneralPlugOld.h @@ -0,0 +1,9125 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +/*******************************************************************/ +/* */ +/* this file contains the old or deprecated versions of the suites */ +/* listed in AE_GeneralPlug.h */ +/*******************************************************************/ + + +#include + +typedef struct { // note: unused values are still stored in settings and used when cycling through + // the 3 types using cmd/ctrl-click on timecode + AEGP_TimeDisplayType time_display_type; + A_char timebaseC; // only used for AEGP_TimeDisplayType_TIMECODE, 1 to 100 + A_Boolean non_drop_30B; // only used for AEGP_TimeDisplayType_TIMECODE, + // when timebaseC == 30 && item framerate == 29.97, use drop frame or non-drop? + A_char frames_per_footC; // only used for AEGP_TimeDisplayType_FEET_AND_FRAMES + A_long starting_frameL; // usually 0 or 1, not used for AEGP_TimeDisplayType_TIMECODE +} AEGP_TimeDisplay; + +/** + ** Canvas Suite + ** Used by artisans to render layers + **/ + +#define kAEGPCanvasSuiteVersion1 4 /* frozen in AE 5.0 */ + +typedef struct AEGP_CanvasSuite1 { + + SPAPI A_Err (*AEGP_GetCompToRender)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumLayersToRender)( + const PR_RenderContextH render_contextH, + A_long *num_to_renderPL); + + + SPAPI A_Err (*AEGP_GetNthLayerContextToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n, /* >> */ + AEGP_RenderLayerContextH *layer_contextPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + SPAPI A_Err (*AEGP_GetCompRenderTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *time, /* << */ + A_Time *time_step); + + SPAPI A_Err (*AEGP_GetCompDestinationBuffer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_CompH compH, /* >> */ + PF_EffectWorld *dst); /* <> */ + + SPAPI A_Err (*AEGP_GetROI)( + PR_RenderContextH render_contextH, /* <> */ + A_LegacyRect *roiPR); /* << */ + + /// for rendering track mattes + SPAPI A_Err (*AEGP_RenderLayer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + PF_EffectWorld *render_bufferP); /* >> */ + + // for rendering the texture map of a layer + SPAPI A_Err (*AEGP_RenderTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + PF_EffectWorld *dst); /* <> */ + + + SPAPI A_Err (*AEGP_DisposeTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + PF_EffectWorld *dst0); /* <> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + PR_RenderContextH render_contextH, /* >> */ + PF_Field *field); /* << */ + + // not thread safe on MacOS + // only call when thread ID = 0 + SPAPI A_Err (*AEGP_ReportArtisanProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long totalL); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_IsBlankCanvas)( + PR_RenderContextH render_contextH, /* >> */ + A_Boolean *is_blankPB); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerBounds)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_LegacyRect *boundsP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderOpacity)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_FpLong *opacityPF); /* << */ + + SPAPI A_Err (*AEGP_IsRenderLayerActive)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Boolean *activePB); /* << */ + + // set the layer index. If total > 0, set it too. + SPAPI A_Err (*AEGP_SetArtisanLayerProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long num_layersL); + +} AEGP_CanvasSuite1; + +/********************************************************************/ + +#define kAEGPRQItemSuiteVersion3 4 /* frozen in AE 7.0 */ + +typedef struct AEGP_RQItemSuite3 { + + SPAPI A_Err (*AEGP_GetNumRQItems)( + A_long *num_itemsPL); /* << */ + + /* NOTE: All AEGP_RQItemRefH are invalidated by ANY + re-ordering, addition or removal of render + items. DO NOT CACHE THEM. + */ + + SPAPI A_Err (*AEGP_GetRQItemByIndex)( + A_long rq_item_index, /* >> */ + AEGP_RQItemRefH *rq_item_refPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextRQItem)( /* Pass RQ_ITEM_INDEX_NONE for current_rq_itemH to get first RQItemH. */ + AEGP_RQItemRefH current_rq_itemH, /* >> */ + AEGP_RQItemRefH *next_rq_itemH); /* << */ + + SPAPI A_Err (*AEGP_GetNumOutputModulesForRQItem)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_long *num_outmodsPL); /* << */ + + SPAPI A_Err (*AEGP_GetRenderState)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType *statusP); /* << */ + + /* + the following now returns: + Err_PARAMETER if you try to call while AEGP_RenderQueueState != AEGP_RenderQueueState_STOPPED + + if that's okay then: + Err_RANGE if you pass a status that is illegal in any case + Err_PARAMETER if you try to pass a status that doesn't make sense right now (eg: trying to Que something for which you haven't set the output path) + */ + SPAPI A_Err (*AEGP_SetRenderState)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType status); /* >> */ + + SPAPI A_Err (*AEGP_GetStartedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *started_timePT); /* << Returns {0,1} if not started. */ + + SPAPI A_Err (*AEGP_GetElapsedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *render_timePT); /* << Returns {0,1} if not rendered. */ + + SPAPI A_Err (*AEGP_GetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType *logtypeP); /* << */ + + SPAPI A_Err (*AEGP_SetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType logtype); /* << */ + + SPAPI A_Err (*AEGP_RemoveOutputModule)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH); /* >> */ + + SPAPI A_Err (*AEGP_GetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_char *commentZ); /* << up to A_char[AEGP_MAX_RQITEM_COMMENT_SIZE] */ + + SPAPI A_Err (*AEGP_SetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + const A_char *commentZ); /* >> up to A_char[AEGP_MAX_RQITEM_COMMENT_SIZE] */ + + SPAPI A_Err (*AEGP_GetCompFromRQItem)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_DeleteRQItem)( + AEGP_RQItemRefH rq_itemH); /* <> UNDOABLE */ + +} AEGP_RQItemSuite3; + +#define kAEGPRQItemSuiteVersion2 3 /* frozen in AE 6.5 */ + +typedef struct AEGP_RQItemSuite2 { + + SPAPI A_Err (*AEGP_GetNumRQItems)( + A_long *num_itemsPL); /* << */ + + /* NOTE: All AEGP_RQItemRefH are invalidated by ANY + re-ordering, addition or removal of render + items. DO NOT CACHE THEM. + */ + + SPAPI A_Err (*AEGP_GetRQItemByIndex)( + A_long rq_item_index, /* >> */ + AEGP_RQItemRefH *rq_item_refPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextRQItem)( /* Pass NULL for current_rq_itemH to get first RQItemH. */ + AEGP_RQItemRefH current_rq_itemH, /* >> */ + AEGP_RQItemRefH *next_rq_itemH); /* << */ + + SPAPI A_Err (*AEGP_GetNumOutputModulesForRQItem)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_long *num_outmodsPL); /* << */ + + SPAPI A_Err (*AEGP_GetRenderState)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType *statusP); /* << */ + + /* + the following now returns: + Err_PARAMETER if you try to call while AEGP_RenderQueueState != AEGP_RenderQueueState_STOPPED + + if that's okay then: + Err_RANGE if you pass a status that is illegal in any case + Err_PARAMETER if you try to pass a status that doesn't make sense right now (eg: trying to Que something for which you haven't set the output path) + */ + SPAPI A_Err (*AEGP_SetRenderState)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType status); /* >> */ + + SPAPI A_Err (*AEGP_GetStartedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *started_timePT); /* << Returns {0,1} if not started. */ + + SPAPI A_Err (*AEGP_GetElapsedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *render_timePT); /* << Returns {0,1} if not rendered. */ + + SPAPI A_Err (*AEGP_GetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType *logtypeP); /* << */ + + SPAPI A_Err (*AEGP_SetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType logtype); /* << */ + + SPAPI A_Err (*AEGP_RemoveOutputModule)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH); /* >> */ + + SPAPI A_Err (*AEGP_GetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_char *commentZ); /* << up to A_char[AEGP_MAX_RQITEM_COMMENT_SIZE] */ + + SPAPI A_Err (*AEGP_SetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + const A_char *commentZ); /* >> up to A_char[AEGP_MAX_RQITEM_COMMENT_SIZE] */ + + SPAPI A_Err (*AEGP_GetCompFromRQItem)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + +} AEGP_RQItemSuite2; + +#define kAEGPRQItemSuiteVersion1 1 /* frozen in AE 6.0 */ + +typedef struct AEGP_RQItemSuite1 { + + SPAPI A_Err (*AEGP_GetNumRQItems)( + A_long *num_itemsPL); /* << */ + + /* NOTE: All AEGP_RQItemRefH are invalidated by ANY + re-ordering, addition or removal of render + items. DO NOT CACHE THEM. + */ + + SPAPI A_Err (*AEGP_GetRQItemByIndex)( + A_long rq_item_index, /* >> */ + AEGP_RQItemRefH *rq_item_refPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextRQItem)( /* Pass NULL for current_rq_itemH to get first RQItemH. */ + AEGP_RQItemRefH current_rq_itemH, /* >> */ + AEGP_RQItemRefH *next_rq_itemH); /* << */ + + SPAPI A_Err (*AEGP_GetNumOutputModulesForRQItem)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_long *num_outmodsPL); /* << */ + + SPAPI A_Err (*AEGP_GetRenderState)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType *statusP); /* << */ + + SPAPI A_Err (*AEGP_SetRenderState)( /* Will return error if called while (AEGP_RenderQueueState != AEGP_RenderQueueState_STOPPED). */ + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_RenderItemStatusType status); /* >> */ + + SPAPI A_Err (*AEGP_GetStartedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *started_timePT); /* << Returns {0,0} if not started. */ + + SPAPI A_Err (*AEGP_GetElapsedTime)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_Time *render_timePT); /* << Returns {0,0} if not rendered. */ + + SPAPI A_Err (*AEGP_GetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType *logtypeP); /* << */ + + SPAPI A_Err (*AEGP_SetLogType)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_LogType logtype); /* << */ + + SPAPI A_Err (*AEGP_RemoveOutputModule)( + AEGP_RQItemRefH rq_itemH, /* >> */ + AEGP_OutputModuleRefH outmodH); /* >> */ + + SPAPI A_Err (*AEGP_GetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + A_char *commentZ); /* << up to A_char[AEGP_MAX_RQITEM_COMMENT_SIZE] */ + + SPAPI A_Err (*AEGP_SetComment)( + AEGP_RQItemRefH rq_itemH, /* >> */ + const A_char *commentZ); /* >> up to A_char[AEGP_MAX_RQITEM_COMMENT_SIZE] */ + +} AEGP_RQItemSuite1; + + + +#define kAEGPCanvasSuiteVersion2 6 /* frozen in AE 5.5 */ + +typedef struct AEGP_CanvasSuite2 { + + SPAPI A_Err (*AEGP_GetCompToRender)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumLayersToRender)( + const PR_RenderContextH render_contextH, + A_long *num_to_renderPL); + + + SPAPI A_Err (*AEGP_GetNthLayerContextToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n, /* >> */ + AEGP_RenderLayerContextH *layer_contextPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + /** + ** With collapsed geometrics "on" this gives the layer in the root comp + ** contining the layer context. With collapsed geometrics off + ** this is the same as AEGP_GetLayerFromLayerContext. + ** + **/ + SPAPI A_Err (*AEGP_GetTopLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + SPAPI A_Err (*AEGP_GetCompRenderTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *time, /* << */ + A_Time *time_step); + + SPAPI A_Err (*AEGP_GetCompDestinationBuffer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_CompH compH, /* >> */ + PF_EffectWorld *dst); /* <> */ + + SPAPI A_Err (*AEGP_GetROI)( + PR_RenderContextH render_contextH, /* <> */ + A_LegacyRect *roiPR); /* << */ + + /// for rendering track mattes + SPAPI A_Err (*AEGP_RenderLayer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + PF_EffectWorld *render_bufferP); /* >> */ + + // for rendering the texture map of a layer + SPAPI A_Err (*AEGP_RenderTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + PF_EffectWorld *dst); /* <> */ + + + SPAPI A_Err (*AEGP_DisposeTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + PF_EffectWorld *dst0); /* <> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + PR_RenderContextH render_contextH, /* >> */ + PF_Field *field); /* << */ + + // not thread safe on MacOS + // only call when thread ID = 0 + SPAPI A_Err (*AEGP_ReportArtisanProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long totalL); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_IsBlankCanvas)( + PR_RenderContextH render_contextH, /* >> */ + A_Boolean *is_blankPB); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerBounds)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_LegacyRect *boundsP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderOpacity)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_FpLong *opacityPF); /* << */ + + SPAPI A_Err (*AEGP_IsRenderLayerActive)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Boolean *activePB); /* << */ + + // set the layer index. If total > 0, set it too. + SPAPI A_Err (*AEGP_SetArtisanLayerProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long num_layersL); + + SPAPI A_Err (*AEGP_RenderLayerPlus)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + PF_EffectWorld *render_bufferP); /* << */ + + + SPAPI A_Err (*AEGP_GetTrackMatteContext)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH fill_contextH, /* << */ + AEGP_RenderLayerContextH *matte_contextPH); /* >> */ + +} AEGP_CanvasSuite2; + + + +#define kAEGPCanvasSuiteVersion4 9 /* frozen AE 6.0 */ + +typedef struct AEGP_CanvasSuite4 { + + SPAPI A_Err (*AEGP_GetCompToRender)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumLayersToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_GetNthLayerContextToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n, /* >> */ + AEGP_RenderLayerContextH *layer_contextPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerContext)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + /** + ** With collapsed geometrics "on" this gives the layer in the root comp + ** contining the layer context. With collapsed geometrics off + ** this is the same as AEGP_GetLayerFromLayerContext. + ** + **/ + SPAPI A_Err (*AEGP_GetTopLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + SPAPI A_Err (*AEGP_GetCompRenderTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *time, /* << */ + A_Time *time_step); + + SPAPI A_Err (*AEGP_GetCompDestinationBuffer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_CompH compH, /* >> */ + AEGP_WorldH *dst); /* << */ + + SPAPI A_Err (*AEGP_GetROI)( + PR_RenderContextH render_contextH, /* <> */ + A_LegacyRect *roiPR); /* << */ + + // for rendering the texture map of a layer + SPAPI A_Err (*AEGP_RenderTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_WorldH *dstPH); /* <> */ + + + SPAPI A_Err (*AEGP_DisposeTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_WorldH dstH0); /* <> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + PR_RenderContextH render_contextH, /* >> */ + PF_Field *field); /* << */ + + // not thread safe on MacOS + // only call when thread ID = 0 + SPAPI A_Err (*AEGP_ReportArtisanProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long totalL); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_IsBlankCanvas)( + PR_RenderContextH render_contextH, /* >> */ + A_Boolean *is_blankPB); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerBounds)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_LegacyRect *boundsP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderOpacity)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_FpLong *opacityPF); /* << */ + + SPAPI A_Err (*AEGP_IsRenderLayerActive)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Boolean *activePB); /* << */ + + // set the layer index. If total > 0, set it too. + SPAPI A_Err (*AEGP_SetArtisanLayerProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long num_layersL); + + // for track mattes. + // Returns a comp-size buffer, which must be disposed thru AEGP_Dispose in World suite + SPAPI A_Err (*AEGP_RenderLayerPlus)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_WorldH *render_bufferPH); /* << must be disposed with AEGP_DisposeWorld */ + + + SPAPI A_Err (*AEGP_GetTrackMatteContext)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH fill_contextH, /* << */ + AEGP_RenderLayerContextH *matte_contextPH); /* >> */ + + // new for 6.0 --get receipt with the returned texture + // use receipt to determine if a subsequent call to render + // this layer can be skipped (because the artisan cached it) + SPAPI A_Err (*AEGP_RenderTextureWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *dstPH); /* << */ + + SPAPI A_Err (*AEGP_RenderLayerPlusWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *render_bufferPH); /* << */ + + SPAPI A_Err (*AEGP_DisposeRenderReceipt)( + AEGP_RenderReceiptH render_receiptH); /* >> */ + + + SPAPI A_Err (*AEGP_CheckRenderReceipt)( + PR_RenderContextH current_render_contextH, /* >> */ + AEGP_RenderLayerContextH current_layer_contextH, /* >> */ + AEGP_RenderReceiptH old_render_receiptH, /* >> */ + A_Boolean check_aceB, /* >> */ + AEGP_RenderReceiptStatus *receipt_statusP); /* << */ + + + SPAPI A_Err (*AEGP_GetNumBinsToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_bins_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_SetNthBin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n); /* >> */ + + SPAPI A_Err (*AEGP_GetBinType)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_BinType *bin_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform2D3D)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Boolean only_2dB, /* >> */ + A_Matrix4 *transform); /* << */ + + + // interactive artisan information + // handle to the on-screen window + SPAPI A_Err (*AEGP_GetPlatformWindowRef)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_PlatformWindowRef *window_refP); /* << */ + + + // the dsf src to frame scale factors + SPAPI A_Err (*AEGP_GetViewportScale)( + const PR_RenderContextH render_contextH, /* >> */ + A_FpLong *scale_xPF, /* << */ + A_FpLong *scale_yPF); /* << */ + + + // the dsf src to frame translate + SPAPI A_Err (*AEGP_GetViewportOrigin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *origin_xPL, /* << */ + A_long *origin_yPL); /* << */ + + + SPAPI A_Err (*AEGP_GetViewportRect)( + const PR_RenderContextH render_contextH, /* >> */ + A_LegacyRect *viewport_rectPR); /* << */ + + + SPAPI A_Err (*AEGP_GetFallowColor)( + const PR_RenderContextH render_contextH, /* >> */ + PF_Pixel8 *fallow_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboard)( + const PR_RenderContextH render_contextH, /* in */ + A_Boolean *checkerboard_onPB);/* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardColors)( + const PR_RenderContextH render_contextH, /* in */ + PF_Pixel *checkerboard_color1P, /* out */ + PF_Pixel *checkerboard_color2P); /* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardSize)( + const PR_RenderContextH render_contextH, /* in */ + A_u_long *checkerboard_widthPLu, /* out - width of square*/ + A_u_long *checkerboard_heightPLu); /* out - height of square*/ + + SPAPI A_Err (*AEGP_GetInteractiveCachedBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + + // should we call AEGP_RenderLayer or AEGP_RenderTexture + SPAPI A_Err (*AEGP_ArtisanMustRenderAsLayer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, + A_Boolean *use_render_texturePB); + +} AEGP_CanvasSuite4; + + + +#define kAEGPCanvasSuiteVersion5 10 /* frozen in AE 6.5 */ + +typedef struct AEGP_CanvasSuite5 { + + SPAPI A_Err (*AEGP_GetCompToRender)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumLayersToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_GetNthLayerContextToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n, /* >> */ + AEGP_RenderLayerContextH *layer_contextPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerContext)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + /** + ** With collapsed geometrics "on" this gives the layer in the root comp + ** contining the layer context. With collapsed geometrics off + ** this is the same as AEGP_GetLayerFromLayerContext. + ** + **/ + SPAPI A_Err (*AEGP_GetTopLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + SPAPI A_Err (*AEGP_GetCompRenderTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *time, /* << */ + A_Time *time_step); + + SPAPI A_Err (*AEGP_GetCompDestinationBuffer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_CompH compH, /* >> */ + AEGP_WorldH *dst); /* << */ + + SPAPI A_Err (*AEGP_GetROI)( + PR_RenderContextH render_contextH, /* <> */ + A_LegacyRect *roiPR); /* << */ + + // for rendering the texture map of a layer + SPAPI A_Err (*AEGP_RenderTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_WorldH *dstPH); /* <> */ + + + SPAPI A_Err (*AEGP_DisposeTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_WorldH dstH0); /* <> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + PR_RenderContextH render_contextH, /* >> */ + PF_Field *field); /* << */ + + // not thread safe on MacOS + // only call when thread ID = 0 + SPAPI A_Err (*AEGP_ReportArtisanProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long totalL); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_IsBlankCanvas)( + PR_RenderContextH render_contextH, /* >> */ + A_Boolean *is_blankPB); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerBounds)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_LegacyRect *boundsP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderOpacity)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_FpLong *opacityPF); /* << */ + + SPAPI A_Err (*AEGP_IsRenderLayerActive)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Boolean *activePB); /* << */ + + // set the layer index. If total > 0, set it too. + SPAPI A_Err (*AEGP_SetArtisanLayerProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long num_layersL); + + // for track mattes. + // Returns a comp-size buffer, which must be disposed thru AEGP_Dispose in World suite + SPAPI A_Err (*AEGP_RenderLayerPlus)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_WorldH *render_bufferPH); /* << must be disposed with AEGP_DisposeWorld */ + + + SPAPI A_Err (*AEGP_GetTrackMatteContext)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH fill_contextH, /* << */ + AEGP_RenderLayerContextH *matte_contextPH); /* >> */ + + // new for 6.0 --get receipt with the returned texture + // use receipt to determine if a subsequent call to render + // this layer can be skipped (because the artisan cached it) + SPAPI A_Err (*AEGP_RenderTextureWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *dstPH); /* << */ + + SPAPI A_Err (*AEGP_RenderLayerPlusWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *render_bufferPH); /* << */ + + SPAPI A_Err (*AEGP_DisposeRenderReceipt)( + AEGP_RenderReceiptH render_receiptH); /* >> */ + + + SPAPI A_Err (*AEGP_CheckRenderReceipt)( + PR_RenderContextH current_render_contextH, /* >> */ + AEGP_RenderLayerContextH current_layer_contextH, /* >> */ + AEGP_RenderReceiptH old_render_receiptH, /* >> */ + A_Boolean check_geometricsB, /* >> */ + AEGP_RenderReceiptStatus *receipt_statusP); /* << */ + + + SPAPI A_Err (*AEGP_GetNumBinsToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_bins_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_SetNthBin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n); /* >> */ + + SPAPI A_Err (*AEGP_GetBinType)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_BinType *bin_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform2D3D)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Boolean only_2dB, /* >> */ + A_Matrix4 *transform); /* << */ + + + // interactive artisan information + // handle to the on-screen window + SPAPI A_Err (*AEGP_GetPlatformWindowRef)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_PlatformWindowRef *window_refP); /* << */ + + + // the dsf src to frame scale factors + SPAPI A_Err (*AEGP_GetViewportScale)( + const PR_RenderContextH render_contextH, /* >> */ + A_FpLong *scale_xPF, /* << */ + A_FpLong *scale_yPF); /* << */ + + + // the dsf src to frame translate + SPAPI A_Err (*AEGP_GetViewportOrigin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *origin_xPL, /* << */ + A_long *origin_yPL); /* << */ + + + SPAPI A_Err (*AEGP_GetViewportRect)( + const PR_RenderContextH render_contextH, /* >> */ + A_LegacyRect *viewport_rectPR); /* << */ + + + SPAPI A_Err (*AEGP_GetFallowColor)( + const PR_RenderContextH render_contextH, /* >> */ + PF_Pixel8 *fallow_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboard)( + const PR_RenderContextH render_contextH, /* in */ + A_Boolean *checkerboard_onPB);/* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardColors)( + const PR_RenderContextH render_contextH, /* in */ + PF_Pixel *checkerboard_color1P, /* out */ + PF_Pixel *checkerboard_color2P); /* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardSize)( + const PR_RenderContextH render_contextH, /* in */ + A_u_long *checkerboard_widthPLu, /* out - width of square*/ + A_u_long *checkerboard_heightPLu); /* out - height of square*/ + + SPAPI A_Err (*AEGP_GetInteractiveCachedBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + + // should we call AEGP_RenderLayer or AEGP_RenderTexture + SPAPI A_Err (*AEGP_ArtisanMustRenderAsLayer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, + A_Boolean *use_render_texturePB); + + + SPAPI A_Err (*AEGP_GetInteractiveDisplayChannel)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_DisplayChannelType *display_channelP); /* << */ + +} AEGP_CanvasSuite5; + + +#define kAEGPCanvasSuiteVersion6 11 /* frozen in AE 7.0 */ + +typedef struct AEGP_CanvasSuite6 { + + SPAPI A_Err (*AEGP_GetCompToRender)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumLayersToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_GetNthLayerContextToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n, /* >> */ + AEGP_RenderLayerContextH *layer_contextPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerContext)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + /** + ** With collapsed geometrics "on" this gives the layer in the root comp + ** contining the layer context. With collapsed geometrics off + ** this is the same as AEGP_GetLayerFromLayerContext. + ** + **/ + SPAPI A_Err (*AEGP_GetTopLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + SPAPI A_Err (*AEGP_GetCompRenderTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *time, /* << */ + A_Time *time_step); + + SPAPI A_Err (*AEGP_GetCompDestinationBuffer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_CompH compH, /* >> */ + AEGP_WorldH *dst); /* << */ + + SPAPI A_Err (*AEGP_GetROI)( + PR_RenderContextH render_contextH, /* <> */ + A_LegacyRect *roiPR); /* << */ + + // for rendering the texture map of a layer + SPAPI A_Err (*AEGP_RenderTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_WorldH *dstPH); /* <> */ + + + SPAPI A_Err (*AEGP_DisposeTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_WorldH dstH0); /* <> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + PR_RenderContextH render_contextH, /* >> */ + PF_Field *field); /* << */ + + // not thread safe on MacOS + // only call when thread ID = 0 + SPAPI A_Err (*AEGP_ReportArtisanProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long totalL); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_IsBlankCanvas)( + PR_RenderContextH render_contextH, /* >> */ + A_Boolean *is_blankPB); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerBounds)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_LegacyRect *boundsP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderOpacity)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_FpLong *opacityPF); /* << */ + + SPAPI A_Err (*AEGP_IsRenderLayerActive)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Boolean *activePB); /* << */ + + // set the layer index. If total > 0, set it too. + SPAPI A_Err (*AEGP_SetArtisanLayerProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long num_layersL); + + // for track mattes. + // Returns a comp-size buffer, which must be disposed thru AEGP_Dispose in World suite + SPAPI A_Err (*AEGP_RenderLayerPlus)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_WorldH *render_bufferPH); /* << must be disposed with AEGP_DisposeWorld */ + + + SPAPI A_Err (*AEGP_GetTrackMatteContext)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH fill_contextH, /* << */ + AEGP_RenderLayerContextH *matte_contextPH); /* >> */ + + // new for 6.0 --get receipt with the returned texture + // use receipt to determine if a subsequent call to render + // this layer can be skipped (because the artisan cached it) + SPAPI A_Err (*AEGP_RenderTextureWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_NumEffectsToRenderType num_effectsS, /* >> number of effect to render, -1 for all */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *dstPH); /* << */ + + + + SPAPI A_Err (*AEGP_GetNumberOfSoftwareEffects)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + A_short *num_software_effectsPS); + + SPAPI A_Err (*AEGP_RenderLayerPlusWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *render_bufferPH); /* << */ + + SPAPI A_Err (*AEGP_DisposeRenderReceipt)( + AEGP_RenderReceiptH render_receiptH); /* >> */ + + + /* modified for 7.0 - added num_effects to check against */ + SPAPI A_Err (*AEGP_CheckRenderReceipt)( + PR_RenderContextH current_render_contextH, /* in */ + AEGP_RenderLayerContextH current_layer_contextH, /* in */ + AEGP_RenderReceiptH old_render_receiptH, /* in */ + A_Boolean check_geometricsB, /* in */ + AEGP_NumEffectsToRenderType num_effectsS, /* in */ + AEGP_RenderReceiptStatus *receipt_statusP); /* out */ + + + /* new in 7.0 generate a receipt for a layer as asd if the first num_effectsS have been rendered */ + SPAPI A_Err (*AEGP_GenerateRenderReceipt)( + PR_RenderContextH current_render_contextH, /* >> */ + AEGP_RenderLayerContextH current_layer_contextH, /* >> */ + AEGP_NumEffectsToRenderType num_effectsS, /* in */ + AEGP_RenderReceiptH *render_receiptPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumBinsToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_bins_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_SetNthBin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n); /* >> */ + + SPAPI A_Err (*AEGP_GetBinType)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_BinType *bin_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform2D3D)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Boolean only_2dB, /* >> */ + A_Matrix4 *transform); /* << */ + + + // interactive artisan information + // handle to the on-screen window + SPAPI A_Err (*AEGP_GetPlatformWindowRef)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_PlatformWindowRef *window_refP); /* << */ + + + // the dsf src to frame scale factors + SPAPI A_Err (*AEGP_GetViewportScale)( + const PR_RenderContextH render_contextH, /* >> */ + A_FpLong *scale_xPF, /* << */ + A_FpLong *scale_yPF); /* << */ + + + // the dsf src to frame translate + SPAPI A_Err (*AEGP_GetViewportOrigin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *origin_xPL, /* << */ + A_long *origin_yPL); /* << */ + + + SPAPI A_Err (*AEGP_GetViewportRect)( + const PR_RenderContextH render_contextH, /* >> */ + A_LegacyRect *viewport_rectPR); /* << */ + + + SPAPI A_Err (*AEGP_GetFallowColor)( + const PR_RenderContextH render_contextH, /* >> */ + PF_Pixel8 *fallow_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboard)( + const PR_RenderContextH render_contextH, /* in */ + A_Boolean *checkerboard_onPB);/* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardColors)( + const PR_RenderContextH render_contextH, /* in */ + PF_Pixel *checkerboard_color1P, /* out */ + PF_Pixel *checkerboard_color2P); /* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardSize)( + const PR_RenderContextH render_contextH, /* in */ + A_u_long *checkerboard_widthPLu, /* out - width of square*/ + A_u_long *checkerboard_heightPLu); /* out - height of square*/ + + SPAPI A_Err (*AEGP_GetInteractiveCachedBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + + // should we call AEGP_RenderLayer or AEGP_RenderTexture + SPAPI A_Err (*AEGP_ArtisanMustRenderAsLayer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, + A_Boolean *use_render_texturePB); + + + SPAPI A_Err (*AEGP_GetInteractiveDisplayChannel)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_DisplayChannelType *display_channelP); /* << */ + + +} AEGP_CanvasSuite6; + + + +#define kAEGPCanvasSuiteVersion7 13 /* frozen in AE 8.0, source code-compatible additions in 64-bit AE 10.0*/ + +typedef struct AEGP_CanvasSuite7 { + + SPAPI A_Err (*AEGP_GetCompToRender)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumLayersToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_GetNthLayerContextToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n, /* >> */ + AEGP_RenderLayerContextH *layer_contextPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerContext)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerAndSubLayerFromLayerContext)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_LayerH *layerPH, /* << */ + AEGP_SubLayerIndex *sublayerP); /* << */ + + /** + ** With collapsed geometrics "on" this gives the layer in the root comp + ** contining the layer context. With collapsed geometrics off + ** this is the same as AEGP_GetLayerFromLayerContext. + ** + **/ + SPAPI A_Err (*AEGP_GetTopLayerFromLayerContext)( + const PR_RenderContextH render_contextH, + AEGP_RenderLayerContextH layer_contextH, + AEGP_LayerH *layerPH); + + SPAPI A_Err (*AEGP_GetCompRenderTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *time, /* << */ + A_Time *time_step); + + SPAPI A_Err (*AEGP_GetCompDestinationBuffer)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_CompH compH, /* >> */ + AEGP_WorldH *dst); /* << */ + + SPAPI A_Err (*AEGP_GetROI)( + PR_RenderContextH render_contextH, /* <> */ + A_LegacyRect *roiPR); /* << */ + + // for rendering the texture map of a layer + SPAPI A_Err (*AEGP_RenderTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_WorldH *dstPH); /* <> */ + + + SPAPI A_Err (*AEGP_DisposeTexture)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_WorldH dstH0); /* <> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + PR_RenderContextH render_contextH, /* >> */ + PF_Field *field); /* << */ + + // not thread safe on MacOS + // only call when thread ID = 0 + SPAPI A_Err (*AEGP_ReportArtisanProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long totalL); /* >> */ + + SPAPI A_Err (*AEGP_GetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetRenderDownsampleFactor)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_IsBlankCanvas)( + PR_RenderContextH render_contextH, /* >> */ + A_Boolean *is_blankPB); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerBounds)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_LegacyRect *boundsP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderOpacity)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_FpLong *opacityPF); /* << */ + + SPAPI A_Err (*AEGP_IsRenderLayerActive)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Boolean *activePB); /* << */ + + // set the layer index. If total > 0, set it too. + SPAPI A_Err (*AEGP_SetArtisanLayerProgress)( + PR_RenderContextH render_contextH, /* >> */ + A_long countL, /* >> */ + A_long num_layersL); + + // for track mattes. + // Returns a comp-size buffer, which must be disposed thru AEGP_Dispose in World suite + SPAPI A_Err (*AEGP_RenderLayerPlus)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_WorldH *render_bufferPH); /* << must be disposed with AEGP_DisposeWorld */ + + + SPAPI A_Err (*AEGP_GetTrackMatteContext)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH fill_contextH, /* << */ + AEGP_RenderLayerContextH *matte_contextPH); /* >> */ + + // new for 6.0 --get receipt with the returned texture + // use receipt to determine if a subsequent call to render + // this layer can be skipped (because the artisan cached it) + SPAPI A_Err (*AEGP_RenderTextureWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_NumEffectsToRenderType num_effectsS, /* >> number of effect to render, -1 for all */ + A_FloatPoint *suggested_scaleP0, /* >> */ + A_FloatRect *suggested_src_rectP0, /* >> */ + A_Matrix3 *src_matrixP0, /* << */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *dstPH); /* << */ + + + + SPAPI A_Err (*AEGP_GetNumberOfSoftwareEffects)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + A_short *num_software_effectsPS); + + SPAPI A_Err (*AEGP_RenderLayerPlusWithReceipt)( + PR_RenderContextH render_contextH, /* <> */ + AEGP_LayerH layerH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + AEGP_RenderHints render_hints, /* >> */ + AEGP_RenderReceiptH *render_receiptPH, /* << must be disposed with AEGP_DisposeRenderReceipt */ + AEGP_WorldH *render_bufferPH); /* << */ + + SPAPI A_Err (*AEGP_DisposeRenderReceipt)( + AEGP_RenderReceiptH render_receiptH); /* >> */ + + + /* modified for 7.0 - added num_effects to check against */ + SPAPI A_Err (*AEGP_CheckRenderReceipt)( + PR_RenderContextH current_render_contextH, /* in */ + AEGP_RenderLayerContextH current_layer_contextH, /* in */ + AEGP_RenderReceiptH old_render_receiptH, /* in */ + A_Boolean check_geometricsB, /* in */ + AEGP_NumEffectsToRenderType num_effectsS, /* in */ + AEGP_RenderReceiptStatus *receipt_statusP); /* out */ + + + /* new in 7.0 generate a receipt for a layer as asd if the first num_effectsS have been rendered */ + SPAPI A_Err (*AEGP_GenerateRenderReceipt)( + PR_RenderContextH current_render_contextH, /* >> */ + AEGP_RenderLayerContextH current_layer_contextH, /* >> */ + AEGP_NumEffectsToRenderType num_effectsS, /* in */ + AEGP_RenderReceiptH *render_receiptPH); /* << */ + + SPAPI A_Err (*AEGP_GetNumBinsToRender)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *num_bins_to_renderPL); /* << */ + + + SPAPI A_Err (*AEGP_SetNthBin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long n); /* >> */ + + SPAPI A_Err (*AEGP_GetBinType)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_BinType *bin_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderLayerToWorldXform2D3D)( + PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Boolean only_2dB, /* >> */ + A_Matrix4 *transform); /* << */ + + + // interactive artisan information + // handle to the on-screen window + SPAPI A_Err (*AEGP_GetPlatformWindowRef)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_PlatformWindowRef *window_refP); /* << */ + + + // the dsf src to frame scale factors + SPAPI A_Err (*AEGP_GetViewportScale)( + const PR_RenderContextH render_contextH, /* >> */ + A_FpLong *scale_xPF, /* << */ + A_FpLong *scale_yPF); /* << */ + + + // the dsf src to frame translate + SPAPI A_Err (*AEGP_GetViewportOrigin)( + const PR_RenderContextH render_contextH, /* >> */ + A_long *origin_xPL, /* << */ + A_long *origin_yPL); /* << */ + + + SPAPI A_Err (*AEGP_GetViewportRect)( + const PR_RenderContextH render_contextH, /* >> */ + A_LegacyRect *viewport_rectPR); /* << */ + + + SPAPI A_Err (*AEGP_GetFallowColor)( + const PR_RenderContextH render_contextH, /* >> */ + PF_Pixel8 *fallow_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboard)( + const PR_RenderContextH render_contextH, /* in */ + A_Boolean *checkerboard_onPB);/* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardColors)( + const PR_RenderContextH render_contextH, /* in */ + PF_Pixel *checkerboard_color1P, /* out */ + PF_Pixel *checkerboard_color2P); /* out */ + + SPAPI A_Err (*AEGP_GetInteractiveCheckerboardSize)( + const PR_RenderContextH render_contextH, /* in */ + A_u_long *checkerboard_widthPLu, /* out - width of square*/ + A_u_long *checkerboard_heightPLu); /* out - height of square*/ + + SPAPI A_Err (*AEGP_GetInteractiveCachedBuffer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_WorldH *buffer); /* << */ + + + // should we call AEGP_RenderLayer or AEGP_RenderTexture + SPAPI A_Err (*AEGP_ArtisanMustRenderAsLayer)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_RenderLayerContextH layer_contextH, + A_Boolean *use_render_texturePB); + + + SPAPI A_Err (*AEGP_GetInteractiveDisplayChannel)( + const PR_RenderContextH render_contextH, /* >> */ + AEGP_DisplayChannelType *display_channelP); /* << */ + + SPAPI A_Err (*AEGP_GetInteractiveExposure)( + const PR_RenderContextH render_contextH, /* >> */ + A_FpLong *exposurePF); /* << */ + + + SPAPI A_Err (*AEGP_GetColorTransform)( + const PR_RenderContextH render_contextH, /* >> */ + A_Boolean *cms_onB, + A_u_long *xform_keyLu, + void *xformP); + + + SPAPI A_Err (*AEGP_GetCompShutterTime)( + PR_RenderContextH render_contextH, /* >> */ + A_Time *shutter_time, /* << */ + A_Time *shutter_dur); + +} AEGP_CanvasSuite7; + + + + +#define kAEGPMaskOutlineSuite "AEGP Mask Outline Suite" +#define kAEGPMaskOutlineSuiteVersion2 3 /* frozen in AE 5.5 */ + +typedef struct AEGP_MaskOutlineSuite2 { + + SPAPI A_Err (*AEGP_IsMaskOutlineOpen)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_Boolean *openPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskOutlineOpen)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_Boolean openB); /* >> */ + + // N segments means there are segments [0..N-1]; segment J is defined by vertex J & J+1 + SPAPI A_Err (*AEGP_GetMaskOutlineNumSegments)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_long *num_segmentsPL); /* << */ + + // which_pointL range: [0..num_segments]; for closed masks vertex[0] == vertex[num_segments] + SPAPI A_Err (*AEGP_GetMaskOutlineVertexInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex which_pointL, /* >> */ + AEGP_MaskVertex *vertexP); /* << tangents are relative to position */ + + // Setting vertex 0 is special. Its in tangent will actually set the out tangent + // of the last vertex in the outline. + SPAPI A_Err (*AEGP_SetMaskOutlineVertexInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex which_pointL, /* >> must already exists (use Create) */ + const AEGP_MaskVertex *vertexP); /* >> tangents are relative to position */ + + SPAPI A_Err (*AEGP_CreateVertex)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex insert_position); /* >> will insert at this index. moving other verticies index++*/ + + SPAPI A_Err (*AEGP_DeleteVertex)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex index); /* >> */ + +} AEGP_MaskOutlineSuite2; + +#define kAEGPMaskOutlineSuiteVersion1 2 /* frozen in AE 5.0 */ + +typedef struct AEGP_MaskOutlineSuite1 { + + SPAPI A_Err (*AEGP_IsMaskOutlineOpen)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_Boolean *openPB); /* << */ + + // N segments means there are segments [0..N-1]; segment J is defined by vertex J & J+1 + SPAPI A_Err (*AEGP_GetMaskOutlineNumSegments)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + A_long *num_segmentsPL); /* << */ + + // which_pointL range: [0..num_segments]; for closed masks vertex[0] == vertex[num_segments] + SPAPI A_Err (*AEGP_GetMaskOutlineVertexInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex which_pointL, /* >> */ + AEGP_MaskVertex *vertexP); /* << tangents are relative to position */ + + // Setting vertex 0 is special. Its in tangent will actually set the out tangent + // of the last vertex in the outline. + SPAPI A_Err (*AEGP_SetMaskOutlineVertexInfo)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex which_pointL, /* >> must already exists (use Create) */ + const AEGP_MaskVertex *vertexP); /* >> tangents are relative to position */ + + SPAPI A_Err (*AEGP_CreateVertex)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex insert_position); /* >> will insert at this index. moving other verticies index++*/ + + SPAPI A_Err (*AEGP_DeleteVertex)( + AEGP_MaskOutlineValH mask_outlineH, /* >> */ + AEGP_VertexIndex index); /* >> */ + +} AEGP_MaskOutlineSuite1; + + +#define kAEGPCompSuite "AEGP Comp Suite" +#define kAEGPCompSuiteVersion10 21 /* frozen in AE 12 */ + +typedef struct AEGP_CompSuite10 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_SetCompBGColor)( + AEGP_CompH compH, /* >> */ + const AEGP_ColorVal *bg_colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_GetShowLayerNameOrSourceName)( + AEGP_CompH compH, /* >> */ + A_Boolean *layer_names_shownPB); /* << true if layer names, false if source names */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_SetShowLayerNameOrSourceName)( + AEGP_CompH compH, /* >> */ + A_Boolean show_layer_namesB); /* >> true to show layer names, false to show source names */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_GetShowBlendModes)( + AEGP_CompH compH, /* >> */ + A_Boolean *blend_modes_shownPB); /* << */ + + /*Opens the comp*/ + SPAPI A_Err (*AEGP_SetShowBlendModes)( + AEGP_CompH compH, /* >> */ + A_Boolean show_blend_modesB); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompSuggestedMotionBlurSamples)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompSuggestedMotionBlurSamples)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompMotionBlurAdaptiveSampleLimit)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompMotionBlurAdaptiveSampleLimit)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + const A_Time *work_area_startPT, /* >> */ + const A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_UTF16Char *utf_nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + A_Boolean select_new_layerB, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_CreateBoxTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + A_Boolean select_new_layerB, /* >> */ + A_FloatPoint box_dimensions, /* >> */ // (width and height) + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)( + AEGP_CompH compH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_GetMostRecentlyUsedComp)( + AEGP_CompH *compPH); /* << If compPH returns NULL, there's no available comp */ + + SPAPI A_Err (*AEGP_CreateVectorLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_vector_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCompMarkerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller */ + + SPAPI A_Err (*AEGP_GetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean *dropFramePB); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean dropFrameB); /* << */ + +} AEGP_CompSuite10; + + +#define kAEGPCompSuiteVersion9 19 /* frozen in AE 11 */ + +typedef struct AEGP_CompSuite9 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_SetCompBGColor)( + AEGP_CompH compH, /* >> */ + const AEGP_ColorVal *bg_colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompSuggestedMotionBlurSamples)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompSuggestedMotionBlurSamples)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + const A_Time *work_area_startPT, /* >> */ + const A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_UTF16Char *utf_nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + A_Boolean select_new_layerB, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_CreateBoxTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + A_Boolean select_new_layerB, /* >> */ + A_FloatPoint box_dimensions, /* >> */ // (width and height) + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)( + AEGP_CompH compH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_GetMostRecentlyUsedComp)( + AEGP_CompH *compPH); /* << If compPH returns NULL, there's no available comp */ + + SPAPI A_Err (*AEGP_CreateVectorLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_vector_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCompMarkerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller */ + + SPAPI A_Err (*AEGP_GetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean *dropFramePB); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean dropFrameB); /* << */ + + +} AEGP_CompSuite9; + + +#define kAEGPCompSuiteVersion8 18 /* frozen in AE 10.5 */ + +typedef struct AEGP_CompSuite8 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_SetCompBGColor)( + AEGP_CompH compH, /* >> */ + const AEGP_ColorVal *bg_colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompSuggestedMotionBlurSamples)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompSuggestedMotionBlurSamples)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + const A_Time *work_area_startPT, /* >> */ + const A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_UTF16Char *utf_nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_CreateBoxTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + A_FloatPoint box_dimensions, /* >> */ // (width and height) + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)( + AEGP_CompH compH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_GetMostRecentlyUsedComp)( + AEGP_CompH *compPH); /* << If compPH returns NULL, there's no available comp */ + + SPAPI A_Err (*AEGP_CreateVectorLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_vector_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCompMarkerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller */ + + SPAPI A_Err (*AEGP_GetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean *dropFramePB); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayDropFrame)( + AEGP_CompH compH, /* >> */ + A_Boolean dropFrameB); /* << */ + + +} AEGP_CompSuite8; + + + +#define kAEGPCompSuiteVersion7 15 /* frozen in AE 9.0 */ + +typedef struct AEGP_CompSuite7 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_SetCompBGColor)( + AEGP_CompH compH, /* >> */ + const AEGP_ColorVal *bg_colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompSuggestedMotionBlurSamples)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompSuggestedMotionBlurSamples)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + const A_Time *work_area_startPT, /* >> */ + const A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_UTF16Char *utf_nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_UTF16Char *utf_nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)( + AEGP_CompH compH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_GetMostRecentlyUsedComp)( + AEGP_CompH *compPH); /* << If compPH returns NULL, there's no available comp */ + + SPAPI A_Err (*AEGP_CreateVectorLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_vector_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCompMarkerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller */ + +} AEGP_CompSuite7; + + +#define kAEGPCompSuiteVersion6 14 /* frozen in AE 8.0 */ + +typedef struct AEGP_CompSuite6 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_SetCompBGColor)( + AEGP_CompH compH, /* >> */ + const AEGP_ColorVal *bg_colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompSuggestedMotionBlurSamples)( + AEGP_CompH compH, /* >> */ + A_long *samplesPL); /* << */ + + SPAPI A_Err (*AEGP_SetCompSuggestedMotionBlurSamples)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_long samplesL); /* >> */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + const A_Time *work_area_startPT, /* >> */ + const A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_char *nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_char *nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_char *nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)( + AEGP_CompH compH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_GetMostRecentlyUsedComp)( + AEGP_CompH *compPH); /* << If compPH returns NULL, there's no available comp */ + + SPAPI A_Err (*AEGP_CreateVectorLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_vector_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCompMarkerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller */ + +} AEGP_CompSuite6; + + +#define kAEGPCompSuiteVersion5 11 /* frozen AE 7.0 */ + +typedef struct AEGP_CompSuite5 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_SetCompBGColor)( + AEGP_CompH compH, /* >> */ + const AEGP_ColorVal *bg_colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT, /* >> */ + A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_char *nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_char *nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_char *nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)(AEGP_CompH compH, /* >> */ + A_Time* timeP); /* << */ + + SPAPI A_Err (*AEGP_GetMostRecentlyUsedComp)( + AEGP_CompH *compPH); /* << If compPH returns NULL, there's no available comp */ +} AEGP_CompSuite5; + + +#define kAEGPCompSuiteVersion4 9 /* frozen AE 6.5 */ + +typedef struct AEGP_CompSuite4 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT, /* >> */ + A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_char *nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_char *nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_Collection2H *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_Collection2H collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_char *nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompDimensions)( + AEGP_CompH compH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateComp)( + AEGP_CompH compH, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompFrameDuration)(AEGP_CompH compH, // in + A_Time* timeP); // out + +} AEGP_CompSuite4; + + +#define kAEGPCompSuiteVersion3 7 /* frozen AE 6.0 */ + +typedef struct AEGP_CompSuite3 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_SetCompFrameRate)( + AEGP_CompH compH, /* >> */ + const A_FpLong *fpsPF); /* >> */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT, /* >> */ + A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_char *nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_char *nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_CollectionH *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_CollectionH collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetCompDisplayStartTime)( + AEGP_CompH compH, /* >> */ + A_Time *start_timePT); /* << */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_char *nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + + SPAPI A_Err (*AEGP_SetCompPixelAspectRatio)( + AEGP_CompH compH, /* >> */ + const A_Ratio *pix_aspectratioPRt); /* >> */ + + SPAPI A_Err (*AEGP_CreateTextLayerInComp)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerH *new_text_layerPH); /* << */ + +} AEGP_CompSuite3; + + +#define kAEGPCompSuiteVersion2 6 /* frozen in AE 5.5 */ + +typedef struct AEGP_CompSuite2 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_SetCompDownsampleFactor)( + AEGP_CompH compH, /* <> */ + const AEGP_DownsampleFactor *dsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT, /* >> */ + A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_char *nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_ItemH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateCameraInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_ItemH parent_compH, /* >> */ + AEGP_LayerH *new_cameraPH); /* << */ + + SPAPI A_Err (*AEGP_CreateLightInComp)( + const A_char *nameZ, /* >> */ + A_FloatPoint center_point, /* >> */ + AEGP_ItemH parent_compH, /* >> */ + AEGP_LayerH *new_lightPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_char *nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_CompH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_CollectionH *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_CollectionH collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ + + + SPAPI A_Err (*AEGP_CreateNullInComp)( + const A_char *nameZ, /* >> */ + AEGP_CompH parent_compH, /* >> */ + const A_Time *durationPT0, /* >> */ + AEGP_LayerH *new_null_solidPH); /* << */ + +} AEGP_CompSuite2; + + +#define kAEGPCompSuiteVersion1 4 /* frozen in AE 5.0 */ + +typedef struct AEGP_CompSuite1 { + + SPAPI A_Err (*AEGP_GetCompFromItem)( // error if item isn't AEGP_ItemType_COMP! + AEGP_ItemH itemH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemFromComp)( + AEGP_CompH compH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetCompDownsampleFactor)( + AEGP_CompH compH, /* >> */ + AEGP_DownsampleFactor *dsfP); /* << */ + + SPAPI A_Err (*AEGP_GetCompBGColor)( + AEGP_CompH compH, /* >> */ + AEGP_ColorVal *bg_colorP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFlags)( + AEGP_CompH compH, /* >> */ + AEGP_CompFlags *comp_flagsP); /* << */ + + SPAPI A_Err (*AEGP_GetCompFramerate)( + AEGP_CompH compH, /* >> */ + A_FpLong *fpsPF); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterAnglePhase)( + AEGP_CompH compH, /* >> */ + A_Ratio *angle, /* << */ + A_Ratio *phase); /* << */ + + SPAPI A_Err (*AEGP_GetCompShutterFrameRange)( + AEGP_CompH compH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *start, /* << */ + A_Time *duration); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaStart)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT); /* << */ + + SPAPI A_Err (*AEGP_GetCompWorkAreaDuration)( + AEGP_CompH compH, /* >> */ + A_Time *work_area_durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetCompWorkAreaStartAndDuration)( /* UNDOABLE */ + AEGP_CompH compH, /* >> */ + A_Time *work_area_startPT, /* >> */ + A_Time *work_area_durationPT); /* >> */ + + SPAPI A_Err (*AEGP_CreateSolidInComp)( + const A_char *nameZ, /* >> */ + A_long width, /* >> */ + A_long height, /* >> */ + const AEGP_ColorVal *color, /* >> */ + AEGP_ItemH parent_compH, /* >> */ + AEGP_LayerH *new_solidPH); /* << */ + + SPAPI A_Err (*AEGP_CreateComp)( + AEGP_ItemH parent_folderH0, /* >> */ + const A_char *nameZ, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + const A_Ratio *pixel_aspect_ratioPRt, /* >> */ + const A_Time *durationPT, /* >> */ + const A_Ratio *frameratePRt, /* >> */ + AEGP_ItemH *new_compPH); /* << */ + + SPAPI A_Err (*AEGP_GetNewCollectionFromCompSelection)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_CompH compH, /* >> */ + AEGP_CollectionH *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_SetSelection)( + AEGP_CompH compH, /* >> */ + AEGP_CollectionH collectionH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_SetCompDisplayStartTime)( /* NOT Undoable! */ + AEGP_CompH compH, /* >> */ + const A_Time *start_timePT); /* >> */ + + SPAPI A_Err (*AEGP_SetCompDuration)( + AEGP_CompH compH, /* >> */ + const A_Time *durationPT); /* >> */ +} AEGP_CompSuite1; + + + +#define kAEGPLayerSuite "AEGP Layer Suite" + +#define kAEGPLayerSuiteVersion6 12 /* frozen AE 9.0 */ + +typedef struct AEGP_LayerSuite6 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << returns non null only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItemID)( + AEGP_LayerH layerH, /* >> */ + A_long *source_item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_PluginID pluginID, // in + AEGP_LayerH layerH, /* >> */ + AEGP_MemHandle *utf_layer_namePH0, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *utf_source_namePH0); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags single_flag, /* >> */ + A_Boolean valueB); /* >> */ + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Time *layer_timePT); /* << */ + + SPAPI A_Err (*AEGP_ConvertLayerToCompTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *layer_timePT, /* >> */ + A_Time *comp_timePT) ; /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_UTF16Char *new_nameZ); /* >> null terminated UTF16 */ + + SPAPI A_Err (*AEGP_GetLayerParent)( + const AEGP_LayerH layerH, /* >> */ + AEGP_LayerH *parent_layerPH); /* << NULL if no parent */ + + SPAPI A_Err (*AEGP_SetLayerParent)( + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerH parent_layerH0); /* >> */ + + SPAPI A_Err (*AEGP_DeleteLayer)( + AEGP_LayerH layerH); /* >> UNDOABLE */ + + SPAPI A_Err (*AEGP_DuplicateLayer)( + AEGP_LayerH orig_layerH, /* >> */ + AEGP_LayerH *duplicate_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerID)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerIDVal id, /* >> */ + AEGP_LayerH *layerPH); /* << */ + +} AEGP_LayerSuite6; + + +#define kAEGPLayerSuiteVersion5 11 /* frozen AE 7.0 */ + +typedef struct AEGP_LayerSuite5 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << returns non null only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItemID)( + AEGP_LayerH layerH, /* >> */ + A_long *source_item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_LayerH layerH, /* >> */ + A_char *layer_nameZ0, /* << space for A_char[AEGP_MAX_LAYER_NAME_MB_SIZE] */ + A_char *source_nameZ0); /* << space for A_char[AEGP_MAX_LAYER_NAME_MB_SIZE] */ + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags single_flag, /* >> */ + A_Boolean valueB); /* >> */ + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Time *layer_timePT); /* << */ + + SPAPI A_Err (*AEGP_ConvertLayerToCompTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *layer_timePT, /* >> */ + A_Time *comp_timePT) ; /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_char *new_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerParent)( + const AEGP_LayerH layerH, /* >> */ + AEGP_LayerH *parent_layerPH); /* << NULL if no parent */ + + SPAPI A_Err (*AEGP_SetLayerParent)( + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerH parent_layerH0); /* >> */ + + SPAPI A_Err (*AEGP_DeleteLayer)( + AEGP_LayerH layerH); /* >> UNDOABLE */ + + SPAPI A_Err (*AEGP_DuplicateLayer)( + AEGP_LayerH orig_layerH, /* >> */ + AEGP_LayerH *duplicate_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerFromLayerID)( + AEGP_CompH parent_compH, /* >> */ + AEGP_LayerIDVal id, /* >> */ + AEGP_LayerH *layerPH); /* << */ + +} AEGP_LayerSuite5; + + + +#define kAEGPLayerSuiteVersion4 10 /* frozen AE 6.5 */ + +typedef struct AEGP_LayerSuite4 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << returns non null only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItemID)( + AEGP_LayerH layerH, /* >> */ + A_long *source_item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_LayerH layerH, /* >> */ + A_char *layer_nameZ0, /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + A_char *source_nameZ0); /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags single_flag, /* >> */ + A_Boolean valueB); /* >> */ + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Time *layer_timePT); /* << */ + + SPAPI A_Err (*AEGP_ConvertLayerToCompTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *layer_timePT, /* >> */ + A_Time *comp_timePT) ; /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *transform); /* << */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_char *new_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerParent)( + const AEGP_LayerH layerH, /* >> */ + AEGP_LayerH *parent_layerPH); /* << NULL if no parent */ + + SPAPI A_Err (*AEGP_SetLayerParent)( + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerH parent_layerH0); /* >> */ + + SPAPI A_Err (*AEGP_DeleteLayer)( + AEGP_LayerH layerH); /* >> UNDOABLE */ + + SPAPI A_Err (*AEGP_DuplicateLayer)( + AEGP_LayerH orig_layerH, /* >> */ + AEGP_LayerH *duplicate_layerPH); /* << */ + +} AEGP_LayerSuite4; + +#define kAEGPLayerSuiteVersion3 8 /* frozen AE 6.0 */ + +typedef struct AEGP_LayerSuite3 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_LayerH layerH, /* >> */ + A_char *layer_nameZ0, /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + A_char *source_nameZ0); /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags single_flag, /* >> */ + A_Boolean valueB); /* >> */ + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Time *layer_timePT); /* << */ + + SPAPI A_Err (*AEGP_ConvertLayerToCompTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *layer_timePT, /* >> */ + A_Time *comp_timePT) ; /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *tranform); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *tranform); /* >> */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_char *new_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerParent)( + const AEGP_LayerH layerH, /* >> */ + AEGP_LayerH *parent_layerPH); /* << NULL if no parent */ + + SPAPI A_Err (*AEGP_SetLayerParent)( + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerH parent_layerH0); /* >> */ + + SPAPI A_Err (*AEGP_DeleteLayer)( + AEGP_LayerH layerH); /* >> UNDOABLE */ + + +} AEGP_LayerSuite3; + +/*******************************************************************************/ + +typedef struct { + A_char nameAC [AEGP_MAX_MARKER_NAME_SIZE]; + A_char urlAC [AEGP_MAX_MARKER_URL_SIZE]; + A_char targetAC [AEGP_MAX_MARKER_TARGET_SIZE]; + A_char chapterAC [AEGP_MAX_MARKER_CHAPTER_SIZE]; +} AEGP_MarkerVal; + +typedef AEGP_MarkerVal** AEGP_MarkerValH; + +typedef union { + AEGP_FourDVal four_d; + AEGP_ThreeDVal three_d; + AEGP_TwoDVal two_d; + AEGP_OneDVal one_d; + AEGP_ColorVal color; + AEGP_ArbBlockVal arbH; + AEGP_MarkerValH markerH; + AEGP_LayerIDVal layer_id; + AEGP_MaskIDVal mask_id; + AEGP_MaskOutlineValH mask; + AEGP_TextDocumentH text_documentH; +} AEGP_StreamVal; + +/* Metrowerks 2.4.6, a.k.a. Codewarrior Pro 7.1, changed PowerPC struct + alignment. The pragma ensures the same alignment as with 2.4.5 and + previous since plug-ins are built against this structure. See Codewarrior + release notes for for details. Bug# WB1-27922. +*/ + +#if (__MWERKS__ >= 0x2406) +#pragma options align=mac68k4byte +#endif + +typedef struct { + + AEGP_StreamRefH streamH; + /* CW 7.1 was adding 4 padding bytes here. See pragma above for comments. */ + AEGP_StreamVal val; +} AEGP_StreamValue; + +#define kAEGPStreamSuite "AEGP Stream Suite" + +#define kAEGPStreamSuiteVersion4 9 /* frozen in AE 9 */ +typedef struct AEGP_StreamSuite4 { + // the only diff from this vs. last rev is that routines that pass AEGP_StreamValue2, when referring to a marker, + // (comp or layer) the struct now contains the NEW markerP type, which is compatible with the new Marker Suite + + SPAPI A_Err(*AEGP_IsStreamLegal)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + A_Boolean* is_legalP); /* << */ + + + SPAPI A_Err(*AEGP_CanVaryOverTime)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean* can_varyPB); /* << */ + + SPAPI A_Err(*AEGP_GetValidInterpolations)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyInterpolationMask* valid_interpolationsP); /* << */ + + SPAPI A_Err(*AEGP_GetNewLayerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err(*AEGP_GetEffectNumParamStreams)( + AEGP_EffectRefH effect_refH, /* >> */ + A_long *num_paramsPL); /* << */ + + SPAPI A_Err(*AEGP_GetNewEffectStreamByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err(*AEGP_GetNewMaskStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskStream which_stream, /* >> */ + AEGP_StreamRefH *mask_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err(*AEGP_DisposeStream)( + AEGP_StreamRefH streamH); /* >> */ + + SPAPI A_Err(*AEGP_GetStreamName)( + AEGP_PluginID pluginID, // in + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + AEGP_MemHandle *utf_stream_namePH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err(*AEGP_GetStreamUnitsText)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *unitsZ); /* << space for A_char[AEGP_MAX_STREAM_UNITS_SIZE] */ + + SPAPI A_Err(*AEGP_GetStreamProperties)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamFlags *flagsP, /* << */ + A_FpLong *minP0, /* << */ + A_FpLong *maxP0); /* << */ + + SPAPI A_Err(*AEGP_IsStreamTimevarying)( /* takes expressions into account */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *is_timevaryingPB); /* << */ + + SPAPI A_Err(*AEGP_GetStreamType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamType *stream_typeP); /* << */ + + SPAPI A_Err(*AEGP_GetNewStreamValue)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamValue2 *valueP); /* << must be disposed */ + + SPAPI A_Err(*AEGP_DisposeStreamValue)( + AEGP_StreamValue2 *valueP); /* <> */ + + + SPAPI A_Err(*AEGP_SetStreamValue)( // only legal to call when AEGP_GetStreamNumKFs==0 or NO_DATA + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamValue2 *valueP); /* << */ + + // this is only valid on streams with primitive types. It is illegal on + // AEGP_ArbBlockVal || AEGP_MarkerValP || AEGP_MaskOutlineValH + + SPAPI A_Err(*AEGP_GetLayerStreamValue)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamVal2 *stream_valP, /* << */ + AEGP_StreamType *stream_typeP0); /* << */ + + SPAPI A_Err(*AEGP_GetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *enabledPB); /* >> */ + + SPAPI A_Err(*AEGP_SetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean enabledB); /* >> */ + + SPAPI A_Err(*AEGP_GetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_MemHandle *expressionHZ); /* << must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err(*AEGP_SetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + const A_char* expressionP); /* >> not adopted */ + + SPAPI A_Err(*AEGP_DuplicateStreamRef)( // must dispose yourself + AEGP_PluginID aegp_plugin_id, // in + AEGP_StreamRefH streamH, // in + AEGP_StreamRefH *dup_streamPH); // out +} AEGP_StreamSuite4; + + + +#define kAEGPStreamSuiteVersion3 8 /* frozen in AE 8 */ +typedef struct AEGP_StreamSuite3 { + // the only diff from this vs. last rev is that routines that pass AEGP_StreamValue2, when referring to a marker, + // (comp or layer) the struct now contains the NEW markerP type, which is compatible with the new Marker Suite + + SPAPI A_Err (*AEGP_IsStreamLegal)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + A_Boolean* is_legalP); /* << */ + + + SPAPI A_Err (*AEGP_CanVaryOverTime)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean* can_varyPB); /* << */ + + SPAPI A_Err (*AEGP_GetValidInterpolations)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyInterpolationMask* valid_interpolationsP); /* << */ + + SPAPI A_Err (*AEGP_GetNewLayerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetEffectNumParamStreams)( + AEGP_EffectRefH effect_refH, /* >> */ + A_long *num_paramsPL); /* << */ + + SPAPI A_Err (*AEGP_GetNewEffectStreamByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewMaskStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskStream which_stream, /* >> */ + AEGP_StreamRefH *mask_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DisposeStream)( + AEGP_StreamRefH streamH); /* >> */ + + SPAPI A_Err (*AEGP_GetStreamName)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_STREAM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetStreamUnitsText)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *unitsZ); /* << space for A_char[AEGP_MAX_STREAM_UNITS_SIZE] */ + + SPAPI A_Err (*AEGP_GetStreamProperties)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamFlags *flagsP, /* << */ + A_FpLong *minP0, /* << */ + A_FpLong *maxP0); /* << */ + + SPAPI A_Err (*AEGP_IsStreamTimevarying)( /* takes expressions into account */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *is_timevaryingPB); /* << */ + + SPAPI A_Err (*AEGP_GetStreamType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamType *stream_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNewStreamValue)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamValue2 *valueP); /* << must be disposed */ + + SPAPI A_Err (*AEGP_DisposeStreamValue)( + AEGP_StreamValue2 *valueP); /* <> */ + + + SPAPI A_Err (*AEGP_SetStreamValue)( // only legal to call when AEGP_GetStreamNumKFs==0 or NO_DATA + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamValue2 *valueP); /* << */ + + // this is only valid on streams with primitive types. It is illegal on + // AEGP_ArbBlockVal || AEGP_MarkerValP || AEGP_MaskOutlineValH + + SPAPI A_Err (*AEGP_GetLayerStreamValue)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamVal2 *stream_valP, /* << */ + AEGP_StreamType *stream_typeP0); /* << */ + + SPAPI A_Err (*AEGP_GetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *enabledPB); /* >> */ + + SPAPI A_Err (*AEGP_SetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean enabledB); /* >> */ + + SPAPI A_Err (*AEGP_GetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_MemHandle *expressionHZ); /* << must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err (*AEGP_SetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + const A_char* expressionP); /* >> not adopted */ + + SPAPI A_Err (*AEGP_DuplicateStreamRef)( // must dispose yourself + AEGP_PluginID aegp_plugin_id, // in + AEGP_StreamRefH streamH, // in + AEGP_StreamRefH *dup_streamPH); // out +} AEGP_StreamSuite3; + + +#define kAEGPStreamSuiteVersion2 7 /* frozen in AE 6.5 */ + +typedef struct AEGP_StreamSuite2 { + + SPAPI A_Err (*AEGP_IsStreamLegal)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + A_Boolean* is_legalP); /* << */ + + + SPAPI A_Err (*AEGP_CanVaryOverTime)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean* can_varyPB); /* << */ + + SPAPI A_Err (*AEGP_GetValidInterpolations)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyInterpolationMask* valid_interpolationsP); /* << */ + + SPAPI A_Err (*AEGP_GetNewLayerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetEffectNumParamStreams)( + AEGP_EffectRefH effect_refH, /* >> */ + A_long *num_paramsPL); /* << */ + + SPAPI A_Err (*AEGP_GetNewEffectStreamByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewMaskStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskStream which_stream, /* >> */ + AEGP_StreamRefH *mask_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DisposeStream)( + AEGP_StreamRefH streamH); /* >> */ + + SPAPI A_Err (*AEGP_GetStreamName)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_STREAM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetStreamUnitsText)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *unitsZ); /* << space for A_char[AEGP_MAX_STREAM_UNITS_SIZE] */ + + SPAPI A_Err (*AEGP_GetStreamProperties)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamFlags *flagsP, /* << */ + A_FpLong *minP0, /* << */ + A_FpLong *maxP0); /* << */ + + SPAPI A_Err (*AEGP_IsStreamTimevarying)( /* takes expressions into account */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *is_timevaryingPB); /* << */ + + SPAPI A_Err (*AEGP_GetStreamType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamType *stream_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNewStreamValue)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamValue *valueP); /* << must be disposed */ + + SPAPI A_Err (*AEGP_DisposeStreamValue)( + AEGP_StreamValue *valueP); /* <> */ + + + SPAPI A_Err (*AEGP_SetStreamValue)( // only legal to call when AEGP_GetStreamNumKFs==0 or NO_DATA + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamValue *valueP); /* << */ + + // this is only valid on streams with primitive types. It is illegal on + // AEGP_ArbBlockVal || AEGP_MarkerValP || AEGP_MaskOutlineValH + + SPAPI A_Err (*AEGP_GetLayerStreamValue)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamVal *stream_valP, /* << */ + AEGP_StreamType *stream_typeP0); /* << */ + + SPAPI A_Err (*AEGP_GetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *enabledPB); /* >> */ + + SPAPI A_Err (*AEGP_SetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean enabledB); /* >> */ + + SPAPI A_Err (*AEGP_GetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_MemHandle *expressionHZ); /* << must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err (*AEGP_SetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + const A_char* expressionP); /* >> not adopted */ + + SPAPI A_Err (*AEGP_DuplicateStreamRef)( // must dispose yourself + AEGP_PluginID aegp_plugin_id, // in + AEGP_StreamRefH streamH, // in + AEGP_StreamRefH *dup_streamPH); // out +} AEGP_StreamSuite2; + +#define kAEGPStreamSuite "AEGP Stream Suite" +#define kAEGPStreamSuiteVersion1 4 /* frozen in AE 5.0 */ + +typedef struct AEGP_StreamSuite1 { + + SPAPI A_Err (*AEGP_IsStreamLegal)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + A_Boolean* is_legalP); /* << */ + + + SPAPI A_Err (*AEGP_CanVaryOverTime)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean* can_varyPB); /* << */ + + + SPAPI A_Err (*AEGP_GetNewLayerStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetEffectNumParamStreams)( + AEGP_EffectRefH effect_refH, /* >> */ + A_long *num_paramsPL); /* << */ + + SPAPI A_Err (*AEGP_GetNewEffectStreamByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewMaskStream)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskStream which_stream, /* >> */ + AEGP_StreamRefH *mask_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DisposeStream)( + AEGP_StreamRefH streamH); /* >> */ + + SPAPI A_Err (*AEGP_GetStreamName)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_STREAM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetStreamUnitsText)( + AEGP_StreamRefH streamH, /* >> */ + A_Boolean force_englishB, /* >> */ + A_char *unitsZ); /* << space for A_char[AEGP_MAX_STREAM_UNITS_SIZE] */ + + SPAPI A_Err (*AEGP_GetStreamProperties)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamFlags *flagsP, /* << */ + A_FpLong *minP0, /* << */ + A_FpLong *maxP0); /* << */ + + SPAPI A_Err (*AEGP_IsStreamTimevarying)( /* takes expressions into account */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *is_timevaryingPB); /* << */ + + SPAPI A_Err (*AEGP_GetStreamType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamType *stream_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNewStreamValue)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamValue *valueP); /* << must be disposed */ + + SPAPI A_Err (*AEGP_DisposeStreamValue)( + AEGP_StreamValue *valueP); /* <> */ + + + SPAPI A_Err (*AEGP_SetStreamValue)( // only legal to call when AEGP_GetStreamNumKFs==0 or NO_DATA + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamValue *valueP); /* << */ + + // this is only valid on streams with primitive types. It is illegal on + // AEGP_ArbBlockVal || AEGP_MarkerValH || AEGP_MaskOutlineValH + + SPAPI A_Err (*AEGP_GetLayerStreamValue)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerStream which_stream, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean pre_expressionB, /* >> sample the stream before evaluating the expression */ + AEGP_StreamVal *stream_valP, /* << */ + AEGP_StreamType *stream_typeP0); /* << */ + + SPAPI A_Err (*AEGP_GetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *enabledPB); /* >> */ + + SPAPI A_Err (*AEGP_SetExpressionState)( /* expressions can be disabled automatically by the parser on playback */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_Boolean enabledB); /* >> */ + + SPAPI A_Err (*AEGP_GetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_MemHandle *expressionHZ); /* << must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err (*AEGP_SetExpression)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + const A_char* expressionP); /* >> not adopted */ + + +} AEGP_StreamSuite1; + + +#define kAEGPLayerSuiteVersion1 5 /* frozen in AE 5.0 */ + +typedef struct AEGP_LayerSuite1 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_LayerH layerH, /* >> */ + A_char *layer_nameZ0, /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + A_char *source_nameZ0); /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, // >> + AEGP_LayerFlags single_flag, // >> + A_Boolean valueB); // >> + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Time *layer_timeP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *tranform); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *tranform); /* >> */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_char *new_nameZ); /* >> */ + +} AEGP_LayerSuite1; + +#define kAEGPLayerSuiteVersion2 7 /* frozen in AE 5.5 */ + +typedef struct AEGP_LayerSuite2 { + + SPAPI A_Err (*AEGP_GetCompNumLayers)( + AEGP_CompH compH, /* >> */ + A_long *num_layersPL); /* << */ + + SPAPI A_Err (*AEGP_GetCompLayerByIndex)( + AEGP_CompH compH, /* >> */ + A_long layer_indexL, /* >> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetActiveLayer)( + AEGP_LayerH *layerPH); /* << only if one layer is selected */ + + SPAPI A_Err (*AEGP_GetLayerIndex)( + AEGP_LayerH layerH, /* >> */ + A_long *layer_indexPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerSourceItem)( + AEGP_LayerH layerH, /* >> */ + AEGP_ItemH *source_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerParentComp)( + AEGP_LayerH layerH, /* >> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_GetLayerName)( + AEGP_LayerH layerH, /* >> */ + A_char *layer_nameZ0, /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + A_char *source_nameZ0); /* << space for A_char[AEGP_MAX_LAYER_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetLayerQuality)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality *qualityP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerQuality)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerQuality quality); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerFlags)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags *layer_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerFlag)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerFlags single_flag, /* >> */ + A_Boolean valueB); /* >> */ + + SPAPI A_Err (*AEGP_IsLayerVideoReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerAudioReallyOn)( // accounts for solo status of other layers in comp + AEGP_LayerH layerH, /* >> */ + A_Boolean *onPB); /* << */ + + SPAPI A_Err (*AEGP_GetLayerCurrentTime)( // not updated while rendering + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerInPoint)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *in_pointPT); /* << */ + + SPAPI A_Err (*AEGP_GetLayerDuration)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *durationPT); /* << */ + + SPAPI A_Err (*AEGP_SetLayerInPointAndDuration)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *in_pointPT, /* >> */ + const A_Time *durationPT); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerOffset)( + AEGP_LayerH layerH, /* >> */ + A_Time *offsetPT); /* << always in comp time */ + + SPAPI A_Err (*AEGP_SetLayerOffset)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Time *offsetPT); /* >> always in comp time */ + + SPAPI A_Err (*AEGP_GetLayerStretch)( + AEGP_LayerH layerH, /* >> */ + A_Ratio *stretchPRt); /* << */ + + SPAPI A_Err (*AEGP_SetLayerStretch)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const A_Ratio *stretchPRt); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerTransferMode)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerTransferMode *transfer_modeP); /* << */ + + SPAPI A_Err (*AEGP_SetLayerTransferMode)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerTransferMode *transfer_modeP); /* >> */ + + SPAPI A_Err (*AEGP_IsAddLayerValid)( + AEGP_ItemH item_to_addH, /* >> */ + AEGP_CompH into_compH, /* >> */ + A_Boolean *validPB); /* << */ + + SPAPI A_Err (*AEGP_AddLayer)( /* UNDOABLE */ + AEGP_ItemH item_to_addH, /* >> check AEGP_IsAddLayerValid() before using */ + AEGP_CompH into_compH, /* >> */ + AEGP_LayerH *added_layerPH0); /* << */ + + SPAPI A_Err (*AEGP_ReorderLayer)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + A_long layer_indexL); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerMaskedBounds)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_FloatRect *boundsPR); /* << */ + + SPAPI A_Err (*AEGP_GetLayerObjectType)( + AEGP_LayerH layerH, /* >> */ + AEGP_ObjectType *object_type); /* << */ + + SPAPI A_Err (*AEGP_IsLayer3D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_3DPB); /* << */ + + SPAPI A_Err (*AEGP_IsLayer2D)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *is_2DPB); /* << */ + + SPAPI A_Err (*AEGP_IsVideoActive)( + AEGP_LayerH layerH, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_Boolean *is_activePB); /* << */ + + SPAPI A_Err (*AEGP_IsLayerUsedAsTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean fill_must_be_activeB, /* >> */ + A_Boolean *is_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_DoesLayerHaveTrackMatte)( + AEGP_LayerH layerH, /* >> */ + A_Boolean *has_track_mattePB); /* << */ + + SPAPI A_Err (*AEGP_ConvertCompToLayerTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_Time *layer_timePT); /* << */ + + SPAPI A_Err (*AEGP_ConvertLayerToCompTime)( + AEGP_LayerH layerH, /* >> */ + const A_Time *layer_timePT, /* >> */ + A_Time *comp_timePT) ; /* << */ + + SPAPI A_Err (*AEGP_GetLayerDancingRandValue)( + AEGP_LayerH layerH, /* >> */ + const A_Time *comp_timePT, /* >> */ + A_long *rand_valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerID)( + AEGP_LayerH layerH, /* >> */ + AEGP_LayerIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXform)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *tranform); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerToWorldXformFromView)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_Time *view_timeP, /* >> */ + const A_Time *comp_timeP, /* >> */ + A_Matrix4 *tranform); /* >> */ + + SPAPI A_Err (*AEGP_SetLayerName)( + AEGP_LayerH aegp_layerH, /* >> */ + const A_char *new_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_GetLayerParent)( + const AEGP_LayerH layerH, /* >> */ + AEGP_LayerH *parent_layerPH); /* << NULL if no parent */ + + SPAPI A_Err (*AEGP_SetLayerParent)( + AEGP_LayerH layerH, /* >> */ + const AEGP_LayerH parent_layerH); /* >> */ + + +} AEGP_LayerSuite2; + + + + +#define kAEGPEffectSuite "AEGP Effect Suite" +#define kAEGPEffectSuiteVersion1 1 /* frozen in AE 5.5 */ + +typedef struct AEGP_EffectSuite1 { + + SPAPI A_Err (*AEGP_GetLayerNumEffects)( + AEGP_LayerH layerH, /* >> */ + A_long *num_effectsPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerEffectByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_EffectIndex layer_effect_indexL, /* >> */ + AEGP_EffectRefH *effectPH); /* << MUST dispose with DisposeEffect*/ + + SPAPI A_Err (*AEGP_GetInstalledKeyFromLayerEffect)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_InstalledEffectKey *installed_effect_keyP); /* << */ + + SPAPI A_Err (*AEGP_GetEffectParamUnionByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + PF_ParamType *param_typeP, /* << */ + PF_ParamDefUnion *uP0); /* << DO NOT USE THE VALUE FROM THIS PARAMDEF! */ + + SPAPI A_Err (*AEGP_GetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags *effect_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags effect_flags_set_mask, /* >> */ + AEGP_EffectFlags effect_flags); /* >> */ + + SPAPI A_Err (*AEGP_ReorderEffect)( /* UNDOABLE */ + AEGP_EffectRefH effect_refH, /* >> */ + A_long effect_indexL); /* >> */ + + SPAPI A_Err (*AEGP_EffectCallGeneric)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + const A_Time *timePT, /* >> Use the timebase of the layer to which effect is applied. */ + void *effect_extraPV); /* <> */ + + SPAPI A_Err (*AEGP_DisposeEffect)( + AEGP_EffectRefH effect_refH ); /* >> */ + + SPAPI A_Err (*AEGP_ApplyEffect)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_EffectRefH *effect_refPH); /* << MUST BE DISPOSED with AEGP_DisposeEffect */ + + SPAPI A_Err (*AEGP_DeleteLayerEffect)( + AEGP_EffectRefH effect_refH); /* >> undoable */ + + SPAPI A_Err (*AEGP_GetNumInstalledEffects)( + A_long *num_installed_effectsPL); /* << */ + + // pass in AEGP_InstalledEffectKey_NONE for installed_effect_key to get first effect key + + SPAPI A_Err (*AEGP_GetNextInstalledEffect)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_InstalledEffectKey *next_effectPH); /* << */ + + SPAPI A_Err (*AEGP_GetEffectName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_EFFECT_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectMatchName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *match_nameZ); /* << space for A_char[AEGP_MAX_EFFECT_MATCH_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectCategory)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *categoryZ); /* << space for A_char[AEGP_MAX_EFFECT_CATEGORY_NAME_SIZE] */ + + +} AEGP_EffectSuite1; + + + + +#define kAEGPEffectSuiteVersion2 2 /* frozen in AE 6.5 */ + +typedef struct AEGP_EffectSuite2 { + + SPAPI A_Err (*AEGP_GetLayerNumEffects)( + AEGP_LayerH layerH, /* >> */ + A_long *num_effectsPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerEffectByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_EffectIndex layer_effect_indexL, /* >> */ + AEGP_EffectRefH *effectPH); /* << MUST dispose with DisposeEffect*/ + + SPAPI A_Err (*AEGP_GetInstalledKeyFromLayerEffect)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_InstalledEffectKey *installed_effect_keyP); /* << */ + + SPAPI A_Err (*AEGP_GetEffectParamUnionByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + PF_ParamType *param_typeP, /* << */ + PF_ParamDefUnion *uP0); /* << DO NOT USE THE VALUE FROM THIS PARAMDEF! */ + + SPAPI A_Err (*AEGP_GetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags *effect_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags effect_flags_set_mask, /* >> */ + AEGP_EffectFlags effect_flags); /* >> */ + + SPAPI A_Err (*AEGP_ReorderEffect)( /* UNDOABLE */ + AEGP_EffectRefH effect_refH, /* >> */ + A_long effect_indexL); /* >> */ + + SPAPI A_Err (*AEGP_EffectCallGeneric)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + const A_Time *timePT, /* >> Use the timebase of the layer to which effect is applied. */ + void *effect_extraPV); /* <> */ + + SPAPI A_Err (*AEGP_DisposeEffect)( + AEGP_EffectRefH effect_refH ); /* >> */ + + SPAPI A_Err (*AEGP_ApplyEffect)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_EffectRefH *effect_refPH); /* << MUST BE DISPOSED with AEGP_DisposeEffect */ + + SPAPI A_Err (*AEGP_DeleteLayerEffect)( + AEGP_EffectRefH effect_refH); /* >> undoable */ + + SPAPI A_Err (*AEGP_GetNumInstalledEffects)( + A_long *num_installed_effectsPL); /* << */ + + // pass in AEGP_InstalledEffectKey_NONE for installed_effect_key to get first effect key + + SPAPI A_Err (*AEGP_GetNextInstalledEffect)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_InstalledEffectKey *next_effectPH); /* << */ + + SPAPI A_Err (*AEGP_GetEffectName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_EFFECT_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectMatchName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *match_nameZ); /* << space for A_char[AEGP_MAX_EFFECT_MATCH_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectCategory)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *categoryZ); /* << space for A_char[AEGP_MAX_EFFECT_CATEGORY_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_DuplicateEffect)( + AEGP_EffectRefH original_effect_refH, /* >> */ + AEGP_EffectRefH *duplicate_effect_refPH); /* << */ + +} AEGP_EffectSuite2; + + +#define kAEGPEffectSuiteVersion3 3 /* frozen in AE 7.0 */ + +typedef struct AEGP_EffectSuite3 { + + SPAPI A_Err (*AEGP_GetLayerNumEffects)( + AEGP_LayerH layerH, /* >> */ + A_long *num_effectsPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerEffectByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_EffectIndex layer_effect_indexL, /* >> */ + AEGP_EffectRefH *effectPH); /* << MUST dispose with DisposeEffect*/ + + SPAPI A_Err (*AEGP_GetInstalledKeyFromLayerEffect)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_InstalledEffectKey *installed_effect_keyP); /* << */ + + SPAPI A_Err (*AEGP_GetEffectParamUnionByIndex)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + PF_ParamIndex param_index, /* >> valid in range [0 to AEGP_GetEffectNumParamStreams - 1], where 0 is the effect's input layer */ + PF_ParamType *param_typeP, /* << */ + PF_ParamDefUnion *uP0); /* << DO NOT USE THE VALUE FROM THIS PARAMDEF! */ + + SPAPI A_Err (*AEGP_GetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags *effect_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetEffectFlags)( + AEGP_EffectRefH effect_refH, /* >> */ + AEGP_EffectFlags effect_flags_set_mask, /* >> */ + AEGP_EffectFlags effect_flags); /* >> */ + + SPAPI A_Err (*AEGP_ReorderEffect)( /* UNDOABLE */ + AEGP_EffectRefH effect_refH, /* >> */ + A_long effect_indexL); /* >> */ + + /** new command parameter addded. To get old behaviour pass in PF_Cmd_COMPLETELY_GENERAL for effect_command **/ + SPAPI A_Err (*AEGP_EffectCallGeneric)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_EffectRefH effect_refH, /* >> */ + const A_Time *timePT, /* >> Use the timebase of the layer to which effect is applied. */ + PF_Cmd effect_cmd, /* >> new parameter from version 2 */ + void *effect_extraPV); /* <> */ + + SPAPI A_Err (*AEGP_DisposeEffect)( + AEGP_EffectRefH effect_refH ); /* >> */ + + SPAPI A_Err (*AEGP_ApplyEffect)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_EffectRefH *effect_refPH); /* << MUST BE DISPOSED with AEGP_DisposeEffect */ + + SPAPI A_Err (*AEGP_DeleteLayerEffect)( + AEGP_EffectRefH effect_refH); /* >> undoable */ + + SPAPI A_Err (*AEGP_GetNumInstalledEffects)( + A_long *num_installed_effectsPL); /* << */ + + // pass in AEGP_InstalledEffectKey_NONE for installed_effect_key to get first effect key + + SPAPI A_Err (*AEGP_GetNextInstalledEffect)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + AEGP_InstalledEffectKey *next_effectPH); /* << */ + + SPAPI A_Err (*AEGP_GetEffectName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_EFFECT_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectMatchName)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *match_nameZ); /* << space for A_char[AEGP_MAX_EFFECT_MATCH_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetEffectCategory)( + AEGP_InstalledEffectKey installed_effect_key, /* >> */ + A_char *categoryZ); /* << space for A_char[AEGP_MAX_EFFECT_CATEGORY_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_DuplicateEffect)( + AEGP_EffectRefH original_effect_refH, /* >> */ + AEGP_EffectRefH *duplicate_effect_refPH); /* << */ +} AEGP_EffectSuite3; + +#define kAEGPLightSuite "AEGP Light Suite" +#define kAEGPLightSuiteVersion1 1 /* frozen in AE 5.0 */ + + + +typedef struct AEGP_LightSuite1 { + + SPAPI A_Err (*AEGP_GetLightType)( + AEGP_LayerH light_layerH, /* >> */ + AEGP_LightType *light_typeP); /* << */ + + +} AEGP_LightSuite1; + + + +#define kAEGPMaskSuite "AEGP Layer Mask Suite" +#define kAEGPMaskSuiteVersion5 6 /* frozen AE 10 */ + +typedef struct AEGP_MaskSuite5 { + + SPAPI A_Err (*AEGP_GetLayerNumMasks)( + AEGP_LayerH aegp_layerH, /* >> */ + A_long *num_masksPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerMaskByIndex)( + AEGP_LayerH aegp_layerH, /* >> */ + AEGP_MaskIndex mask_indexL, /* >> */ + AEGP_MaskRefH *maskPH); /* << must be disposed by calling AEGP_DisposeMask() */ + + SPAPI A_Err (*AEGP_DisposeMask)( + AEGP_MaskRefH mask_refH); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean *invertPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean invertB); /* << */ + + SPAPI A_Err (*AEGP_GetMaskMode)( + AEGP_MaskRefH mask_refH, /* >> */ + PF_MaskMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMode)( + AEGP_MaskRefH maskH, /* >> */ + PF_MaskMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur *blur_stateP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur blur_state); /* >> */ + + // AEGP_GetMaskName/SetMaskName are obsoleted. Use AEGP_GetNewDynamicStreamForMask + // and the name functions there + + SPAPI A_Err (*AEGP_GetMaskID)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_CreateNewMask)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_MaskRefH *mask_refPH, /* << */ + A_long *mask_indexPL0); /* << */ + + SPAPI A_Err (*AEGP_DeleteMaskFromLayer)( /* UNDOABLE */ + AEGP_MaskRefH mask_refH); /* >> still need to Dispose MaskRefH */ + + SPAPI A_Err (*AEGP_GetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + const AEGP_ColorVal *colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_lockedPB); /* >> */ + + SPAPI A_Err (*AEGP_SetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean lockB); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_roto_bezierPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean is_roto_bezierB); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateMask)( + AEGP_MaskRefH orig_mask_refH, /* >> */ + AEGP_MaskRefH *duplicate_mask_refPH); /* << */ + +} AEGP_MaskSuite5; + +#define kAEGPMaskSuiteVersion4 5 /* frozen AE 6.5 */ + +typedef struct AEGP_MaskSuite4 { + + SPAPI A_Err (*AEGP_GetLayerNumMasks)( + AEGP_LayerH aegp_layerH, /* >> */ + A_long *num_masksPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerMaskByIndex)( + AEGP_LayerH aegp_layerH, /* >> */ + AEGP_MaskIndex mask_indexL, /* >> */ + AEGP_MaskRefH *maskPH); /* << must be disposed by calling AEGP_DisposeMask() */ + + SPAPI A_Err (*AEGP_DisposeMask)( + AEGP_MaskRefH mask_refH); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean *invertPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean invertB); /* << */ + + SPAPI A_Err (*AEGP_GetMaskMode)( + AEGP_MaskRefH mask_refH, /* >> */ + PF_MaskMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMode)( + AEGP_MaskRefH maskH, /* >> */ + PF_MaskMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur *blur_stateP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur blur_state); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskName)( + AEGP_MaskRefH mask_refH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_MASK_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_SetMaskName)( + AEGP_MaskRefH mask_refH, /* >> */ + A_char *nameZ); /* >> space for A_char[AEGP_MAX_MASK_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetMaskID)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_CreateNewMask)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_MaskRefH *mask_refPH, /* << */ + A_long *mask_indexPL0); /* << */ + + SPAPI A_Err (*AEGP_DeleteMaskFromLayer)( /* UNDOABLE */ + AEGP_MaskRefH mask_refH); /* >> still need to Dispose MaskRefH */ + + SPAPI A_Err (*AEGP_GetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + const AEGP_ColorVal *colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_lockedPB); /* >> */ + + SPAPI A_Err (*AEGP_SetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean lockB); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_roto_bezierPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean is_roto_bezierB); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateMask)( + AEGP_MaskRefH orig_mask_refH, /* >> */ + AEGP_MaskRefH *duplicate_mask_refPH); /* << */ + +} AEGP_MaskSuite4; + +#define kAEGPMaskSuiteVersion3 4 /* frozen AE 6.0 */ + +typedef struct AEGP_MaskSuite3 { + + SPAPI A_Err (*AEGP_GetLayerNumMasks)( + AEGP_LayerH aegp_layerH, /* >> */ + A_long *num_masksPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerMaskByIndex)( + AEGP_LayerH aegp_layerH, /* >> */ + AEGP_MaskIndex mask_indexL, /* >> */ + AEGP_MaskRefH *maskPH); /* << must be disposed by calling AEGP_DisposeMask() */ + + SPAPI A_Err (*AEGP_DisposeMask)( + AEGP_MaskRefH mask_refH); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean *invertPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean invertB); /* << */ + + SPAPI A_Err (*AEGP_GetMaskMode)( + AEGP_MaskRefH mask_refH, /* >> */ + PF_MaskMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMode)( + AEGP_MaskRefH maskH, /* >> */ + PF_MaskMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur *blur_stateP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur blur_state); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskName)( + AEGP_MaskRefH mask_refH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_MASK_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_SetMaskName)( + AEGP_MaskRefH mask_refH, /* >> */ + A_char *nameZ); /* >> space for A_char[AEGP_MAX_MASK_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetMaskID)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_CreateNewMask)( /* UNDOABLE */ + AEGP_LayerH layerH, /* >> */ + AEGP_MaskRefH *mask_refPH, /* << */ + A_long *mask_indexPL0); /* << */ + + SPAPI A_Err (*AEGP_DeleteMaskFromLayer)( /* UNDOABLE */ + AEGP_MaskRefH mask_refH); /* >> still need to Dispose MaskRefH */ + + SPAPI A_Err (*AEGP_GetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskColor)( + AEGP_MaskRefH mask_refH, /* >> */ + const AEGP_ColorVal *colorP); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_lockedPB); /* >> */ + + SPAPI A_Err (*AEGP_SetMaskLockState)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean lockB); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean *is_roto_bezierPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskIsRotoBezier)( + AEGP_MaskRefH mask_refH, /* <> */ + A_Boolean is_roto_bezierB); /* >> */ + +} AEGP_MaskSuite3; + +#define kAEGPMaskSuiteVersion1 2 /* frozen in AE 5.0 */ + +typedef struct AEGP_MaskSuite1 { + + SPAPI A_Err (*AEGP_GetLayerNumMasks)( + AEGP_LayerH aegp_layerH, /* >> */ + A_long *num_masksPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerMaskByIndex)( + AEGP_LayerH aegp_layerH, /* >> */ + AEGP_MaskIndex mask_indexL, /* >> */ + AEGP_MaskRefH *maskPH); /* << must be disposed by calling AEGP_DisposeMask() */ + + SPAPI A_Err (*AEGP_DisposeMask)( + AEGP_MaskRefH mask_refH); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean *invertPB); /* << */ + + SPAPI A_Err (*AEGP_GetMaskMode)( + AEGP_MaskRefH mask_refH, /* >> */ + PF_MaskMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_GetMaskName)( + AEGP_MaskRefH mask_refH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_MASK_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetMaskID)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_CreateNewMask)( //undoable + AEGP_LayerH layerH, /* >> */ + AEGP_MaskRefH *mask_refPH, /* << */ + A_long *mask_indexPL0);/* << */ + + SPAPI A_Err (*AEGP_DeleteMaskFromLayer)( //undoable + AEGP_MaskRefH mask_refH); /* >> still need to Dispose MaskRefH */ + +} AEGP_MaskSuite1; + +#define kAEGPMaskSuiteVersion2 3 /* frozen in AE 5.5 */ + +typedef struct AEGP_MaskSuite2 { + + SPAPI A_Err (*AEGP_GetLayerNumMasks)( + AEGP_LayerH aegp_layerH, /* >> */ + A_long *num_masksPL); /* << */ + + SPAPI A_Err (*AEGP_GetLayerMaskByIndex)( + AEGP_LayerH aegp_layerH, /* >> */ + AEGP_MaskIndex mask_indexL, /* >> */ + AEGP_MaskRefH *maskPH); /* << must be disposed by calling AEGP_DisposeMask() */ + + SPAPI A_Err (*AEGP_DisposeMask)( + AEGP_MaskRefH mask_refH); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean *invertPB); /* << */ + + SPAPI A_Err (*AEGP_SetMaskInvert)( + AEGP_MaskRefH mask_refH, /* >> */ + A_Boolean invertB); /* << */ + + SPAPI A_Err (*AEGP_GetMaskMode)( + AEGP_MaskRefH mask_refH, /* >> */ + PF_MaskMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMode)( + AEGP_MaskRefH maskH, /* >> */ + PF_MaskMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur *blur_stateP); /* << */ + + SPAPI A_Err (*AEGP_SetMaskMotionBlurState)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskMBlur blur_state); /* >> */ + + SPAPI A_Err (*AEGP_GetMaskName)( + AEGP_MaskRefH mask_refH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_MASK_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetMaskID)( + AEGP_MaskRefH mask_refH, /* >> */ + AEGP_MaskIDVal *id_valP); /* << */ + + SPAPI A_Err (*AEGP_CreateNewMask)( //undoable + AEGP_LayerH layerH, /* >> */ + AEGP_MaskRefH *mask_refPH, /* << */ + A_long *mask_indexPL0); /* << */ + + SPAPI A_Err (*AEGP_DeleteMaskFromLayer)( //undoable + AEGP_MaskRefH mask_refH); /* >> still need to Dispose MaskRefH */ + +} AEGP_MaskSuite2; +/** + ** Camera Suite + ** + **/ +#define kAEGPCameraSuite "AEGP Camera Suite" +#define kAEGPCameraSuiteVersion1 1 /* frozen in AE 5.0 */ + + + +typedef struct AEGP_CameraSuite1 { + + SPAPI A_Err (*AEGP_GetCamera)( + PR_RenderContextH render_contextH, /* >> */ + const A_Time *comp_timeP, /* >> */ + AEGP_LayerH *camera_layerPH); /* << */ + + SPAPI A_Err (*AEGP_GetCameraType)( + AEGP_LayerH camera_layerH, /* >> */ + AEGP_CameraType *camera_typeP); /* << */ + + + SPAPI A_Err (*AEGP_GetDefaultCameraDistanceToImagePlane)( + AEGP_CompH compH, /* >> */ + A_FpLong *dist_to_planePF); /* << */ + +} AEGP_CameraSuite1; + + +#define kAEGPItemSuite "AEGP Item Suite" + +#define kAEGPItemSuiteVersion8 13 /* frozen in AE 9.0 */ + +typedef struct AEGP_ItemSuite8 { + + SPAPI A_Err (*AEGP_GetFirstProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_PluginID pluginID, // in + AEGP_ItemH itemH, /* >> */ + AEGP_MemHandle *unicode_namePH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_SetItemName)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> */ + const A_UTF16Char *nameZ); /* >> null terminated UTF16 */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_SetItemParentFolder)( + AEGP_ItemH itemH, /* <> */ + AEGP_ItemH parent_folder_itemH); /* >> */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_UTF16Char *nameZ, /* >> null terminated UTF16 */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << allocated and owned by AE */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* UNDOABLE. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + SPAPI A_Err (*AEGP_GetItemCommentLength)( + AEGP_ItemH itemH, /* >> */ + A_u_long *buf_sizePLu); /* << */ + + SPAPI A_Err (*AEGP_GetItemComment)( + AEGP_ItemH itemH, /* >> */ + A_u_long buf_sizeLu, /* >> */ + A_char *commentZ); /* << */ + + SPAPI A_Err (*AEGP_SetItemComment)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + const A_char *commentZ); /* >> */ + + SPAPI A_Err (*AEGP_GetItemLabel)( + AEGP_ItemH itemH, /* >> */ + AEGP_LabelID *labelP); /* << */ + + SPAPI A_Err (*AEGP_SetItemLabel)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + AEGP_LabelID label); /* >> */ + + SPAPI A_Err (*AEGP_GetItemMRUView)( + AEGP_ItemH itemH, // >> + AEGP_ItemViewP *mru_viewP); // << + +} AEGP_ItemSuite8; + +#define kAEGPItemSuiteVersion7 11 /* frozen in AE 8.0 */ + +typedef struct AEGP_ItemSuite7 { + + SPAPI A_Err (*AEGP_GetFirstProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_ItemH itemH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_SetItemName)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> */ + const A_char *nameZ); /* >> up to A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_SetItemParentFolder)( + AEGP_ItemH itemH, /* <> */ + AEGP_ItemH parent_folder_itemH); /* >> */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_char *nameZ, /* >> */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << allocated and owned by AE */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* UNDOABLE. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + SPAPI A_Err (*AEGP_GetItemCommentLength)( + AEGP_ItemH itemH, /* >> */ + A_u_long *buf_sizePLu); /* << */ + + SPAPI A_Err (*AEGP_GetItemComment)( + AEGP_ItemH itemH, /* >> */ + A_u_long buf_sizeLu, /* >> */ + A_char *commentZ); /* << */ + + SPAPI A_Err (*AEGP_SetItemComment)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + const A_char *commentZ); /* >> */ + + SPAPI A_Err (*AEGP_GetItemLabel)( + AEGP_ItemH itemH, /* >> */ + AEGP_LabelID *labelP); /* << */ + + SPAPI A_Err (*AEGP_SetItemLabel)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + AEGP_LabelID label); /* >> */ + + SPAPI A_Err (*AEGP_GetItemMRUView)( + AEGP_ItemH itemH, // >> + AEGP_ItemViewP *mru_viewP); // << + +} AEGP_ItemSuite7; + + +#define kAEGPItemSuiteVersion6 10 /* frozen in AE 7.0 */ + +typedef struct AEGP_ItemSuite6 { + + SPAPI A_Err (*AEGP_GetFirstProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH *itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetNextProjItem)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_ItemH itemH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_SetItemName)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> */ + const A_char *nameZ); /* >> up to A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_SetItemParentFolder)( + AEGP_ItemH itemH, /* <> */ + AEGP_ItemH parent_folder_itemH); /* >> */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_char *nameZ, /* >> */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << allocated and owned by AE */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* UNDOABLE. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + SPAPI A_Err (*AEGP_GetItemCommentLength)( + AEGP_ItemH itemH, /* >> */ + A_u_long *buf_sizePLu); /* << */ + + SPAPI A_Err (*AEGP_GetItemComment)( + AEGP_ItemH itemH, /* >> */ + A_u_long buf_sizeLu, /* >> */ + A_char *commentZ); /* << */ + + SPAPI A_Err (*AEGP_SetItemComment)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + const A_char *commentZ); /* >> */ + + SPAPI A_Err (*AEGP_GetItemLabel)( + AEGP_ItemH itemH, /* >> */ + AEGP_LabelID *labelP); /* << */ + + SPAPI A_Err (*AEGP_SetItemLabel)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + AEGP_LabelID label); /* >> */ + +} AEGP_ItemSuite6; + + +#define kAEGPItemSuiteVersion5 7 /* frozen in AE 6.5 */ + +typedef struct AEGP_ItemSuite5 { + + SPAPI A_Err (*AEGP_GetNextItem)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_ItemH itemH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_SetItemParentFolder)( + AEGP_ItemH itemH, /* <> */ + AEGP_ItemH parent_folder_itemH); /* >> */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_char *nameZ, /* >> */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << allocated and owned by AE */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* UNDOABLE. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + SPAPI A_Err (*AEGP_GetItemCommentLength)( + AEGP_ItemH itemH, /* >> */ + A_u_long *buf_sizePLu); /* << */ + + SPAPI A_Err (*AEGP_GetItemComment)( + AEGP_ItemH itemH, /* >> */ + A_u_long buf_sizeLu, /* >> */ + char *commentZ); /* << */ + + SPAPI A_Err (*AEGP_SetItemComment)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + const char *commentZ); /* >> */ + +} AEGP_ItemSuite5; + + +#define kAEGPItemSuiteVersion4 6 /* frozen in AE 6.0 */ + +typedef struct AEGP_ItemSuite4 { + + SPAPI A_Err (*AEGP_GetNextItem)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_ItemH itemH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_char *nameZ, /* >> */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << allocated and owned by AE */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* UNDOABLE. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + SPAPI A_Err (*AEGP_GetItemCommentLength)( + AEGP_ItemH itemH, /* >> */ + A_u_long *buf_sizePLu); /* << */ + + SPAPI A_Err (*AEGP_GetItemComment)( + AEGP_ItemH itemH, /* >> */ + A_u_long buf_sizeLu, /* >> */ + char *commentZ); /* << */ + + SPAPI A_Err (*AEGP_SetItemComment)( + AEGP_ItemH itemH, /* >> UNDOABLE */ + const char *commentZ); /* >> */ + +} AEGP_ItemSuite4; + + +#define kAEGPItemSuite "AEGP Item Suite" +#define kAEGPItemSuiteVersion3 5 /* frozen in 5.5.1 */ + +typedef struct AEGP_ItemSuite3 { + + SPAPI A_Err (*AEGP_GetNextItem)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << could be NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_ItemH itemH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Solid/Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_GetItemSolidColor)( /* error if item isn't AEGP_ItemType_SOLID! */ + AEGP_ItemH itemH, /* >> */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_SetSolidColor)( /* error if item isn't AEGP_ItemType_SOLID! */ + AEGP_ItemH itemH, /* <> */ + AEGP_ColorVal color); /* >> */ + + SPAPI A_Err (*AEGP_SetSolidDimensions)( /* error if item isn't AEGP_ItemType_SOLID! */ + AEGP_ItemH itemH, /* <> */ + A_short widthS, /* >> */ + A_short heightS); /* >> */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_char *nameZ, /* >> */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << */ /* allocated and owned by project (AE) */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* Undoable. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + +} AEGP_ItemSuite3; + +/**************************************************************************************************/ +#define kAEGPKeyframeSuite "AEGP Keyframe Suite" +#define kAEGPKeyframeSuiteVersion3 3 /* frozen in 6.5 */ + +typedef struct AEGP_KeyframeSuite3 { + + // returns AEGP_NumKF_NO_DATA if it's a AEGP_StreamType_NO_DATA, and you can't retrieve any values + // returns zero if no keyframes (but might have an expression, so not necessarily constant) + + + SPAPI A_Err (*AEGP_GetStreamNumKFs)( + AEGP_StreamRefH streamH, /* >> */ + A_long *num_kfsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetKeyframeTime)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *timePT); /* << */ + + // leaves stream unchanged if a keyframe already exists at specified time + SPAPI A_Err (*AEGP_InsertKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + AEGP_KeyframeIndex *key_indexP); /* << */ + + SPAPI A_Err (*AEGP_DeleteKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_KeyframeIndex key_index); /* >> */ + + SPAPI A_Err (*AEGP_GetNewKeyframeValue)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue *valueP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeValue)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue *valueP); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetStreamValueDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + A_short *value_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetStreamTemporalDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + A_short *temporal_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetNewKeyframeSpatialTangents)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue *in_tanP0, /* << */ + AEGP_StreamValue *out_tanP0); /* << */ + + // In AEGP_KeyframeSuite2 and prior versions, the values returned from + // this function were wrong when called on an effect point control stream or + // anchor point. They were not multiplied by the layer size. Now they are. + SPAPI A_Err (*AEGP_SetKeyframeSpatialTangents)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue *in_tanP0, /* >> not adopted */ + const AEGP_StreamValue *out_tanP0); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetKeyframeTemporalEase)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> ranges from 0..TemporalDimensionality-1 */ + AEGP_KeyframeEase *in_easeP0, /* << */ + AEGP_KeyframeEase *out_easeP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeTemporalEase)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> ranges from 0..TemporalDimensionality-1 */ + const AEGP_KeyframeEase *in_easeP0, /* >> not adopted */ + const AEGP_KeyframeEase *out_easeP0); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetKeyframeFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags *flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeFlag)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags flag, /* >> set one flag at a time */ + A_Boolean true_falseB); /* >> */ + + SPAPI A_Err (*AEGP_GetKeyframeInterpolation)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType *in_interpP0, /* << */ + AEGP_KeyframeInterpolationType *out_interpP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeInterpolation)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType in_interp, /* >> */ + AEGP_KeyframeInterpolationType out_interp); /* >> */ + + SPAPI A_Err (*AEGP_StartAddKeyframes)( + AEGP_StreamRefH streamH, + AEGP_AddKeyframesInfoH *akPH); /* << */ + + + SPAPI A_Err (*AEGP_AddKeyframes)( + AEGP_AddKeyframesInfoH akH, /* <> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_long *key_indexPL); /* >> */ + + SPAPI A_Err (*AEGP_SetAddKeyframe)( + AEGP_AddKeyframesInfoH akH, /* <> */ + A_long key_indexL, /* >> */ + const AEGP_StreamValue *valueP); /* >> */ + + SPAPI A_Err (*AEGP_EndAddKeyframes)( /* UNDOABLE */ + A_Boolean addB, + AEGP_AddKeyframesInfoH akH); /* >> */ + +} AEGP_KeyframeSuite3; + +#define kAEGPKeyframeSuiteVersion2 2 /* frozen in 5.5 */ + +typedef struct AEGP_KeyframeSuite2 { + + // returns AEGP_NumKF_NO_DATA if it's a AEGP_StreamType_NO_DATA, and you can't retrieve any values + // returns zero if no keyframes (but might have an expression, so not necessarily constant) + + + SPAPI A_Err (*AEGP_GetStreamNumKFs)( + AEGP_StreamRefH streamH, /* >> */ + A_long *num_kfsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetKeyframeTime)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *timePT); /* << */ + + // leaves stream unchanged if a keyframe already exists at specified time + SPAPI A_Err (*AEGP_InsertKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + AEGP_KeyframeIndex *key_indexP); /* << */ + + SPAPI A_Err (*AEGP_DeleteKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_KeyframeIndex key_index); /* >> */ + + SPAPI A_Err (*AEGP_GetNewKeyframeValue)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue *valueP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeValue)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue *valueP); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetStreamValueDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + A_short *value_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetStreamTemporalDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + A_short *temporal_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetNewKeyframeSpatialTangents)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue *in_tanP0, /* << */ + AEGP_StreamValue *out_tanP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeSpatialTangents)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue *in_tanP0, /* >> not adopted */ + const AEGP_StreamValue *out_tanP0); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetKeyframeTemporalEase)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> ranges from 0..TemporalDimensionality-1 */ + AEGP_KeyframeEase *in_easeP0, /* << */ + AEGP_KeyframeEase *out_easeP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeTemporalEase)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> ranges from 0..TemporalDimensionality-1 */ + const AEGP_KeyframeEase *in_easeP0, /* >> not adopted */ + const AEGP_KeyframeEase *out_easeP0); /* >> not adopted */ + + SPAPI A_Err (*AEGP_GetKeyframeFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags *flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeFlag)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags flag, /* >> set one flag at a time */ + A_Boolean true_falseB); /* >> */ + + SPAPI A_Err (*AEGP_GetKeyframeInterpolation)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType *in_interpP0, /* << */ + AEGP_KeyframeInterpolationType *out_interpP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeInterpolation)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType in_interp, /* >> */ + AEGP_KeyframeInterpolationType out_interp); /* >> */ + + SPAPI A_Err (*AEGP_StartAddKeyframes)( + AEGP_StreamRefH streamH, + AEGP_AddKeyframesInfoH *akPH); /* << */ + + + SPAPI A_Err (*AEGP_AddKeyframes)( + AEGP_AddKeyframesInfoH akH, /* <> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + A_long *key_indexPL); /* >> */ + + SPAPI A_Err (*AEGP_SetAddKeyframe)( + AEGP_AddKeyframesInfoH akH, /* <> */ + A_long key_indexL, /* >> */ + const AEGP_StreamValue *valueP); /* >> */ + + SPAPI A_Err (*AEGP_EndAddKeyframes)( /* UNDOABLE */ + A_Boolean addB, + AEGP_AddKeyframesInfoH akH); /* >> */ + +} AEGP_KeyframeSuite2; + +#define kAEGPKeyframeSuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct AEGP_KeyframeSuite1 { + + // returns AEGP_NumKF_NO_DATA if it's a AEGP_StreamType_NO_DATA, and you can't retrieve any values + // returns zero if no keyframes (but might have an expression, so not necessarily constant) + + + SPAPI A_Err (*AEGP_GetStreamNumKFs)( + AEGP_StreamRefH streamH, /* >> */ + A_long *num_kfsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetKeyframeTime)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_LTimeMode time_mode, /* >> */ + A_Time *timePT); /* << */ + + // leaves stream unchanged if a keyframe already exists at specified time + SPAPI A_Err (*AEGP_InsertKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_LTimeMode time_mode, /* >> */ + const A_Time *timePT, /* >> */ + AEGP_KeyframeIndex *key_indexP); /* << */ + + SPAPI A_Err (*AEGP_DeleteKeyframe)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* <> */ + AEGP_KeyframeIndex key_index); /* >> */ + + SPAPI A_Err (*AEGP_GetNewKeyframeValue)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue *valueP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeValue)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue *valueP); /* >> */ // not adopted + + SPAPI A_Err (*AEGP_GetStreamValueDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + short *value_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetStreamTemporalDimensionality)( + AEGP_StreamRefH streamH, /* >> */ + short *temporal_dimPS); /* << */ + + SPAPI A_Err (*AEGP_GetNewKeyframeSpatialTangents)( // dispose using AEGP_DisposeStreamValue() + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_StreamValue *in_tanP0, /* << */ + AEGP_StreamValue *out_tanP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeSpatialTangents)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + const AEGP_StreamValue *in_tanP0, /* >> */ // not adopted + const AEGP_StreamValue *out_tanP0); /* >> */ // not adopted + + SPAPI A_Err (*AEGP_GetKeyframeTemporalEase)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> */ // ranges from 0..TemporalDimensionality-1 + AEGP_KeyframeEase *in_easeP0, /* << */ + AEGP_KeyframeEase *out_easeP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeTemporalEase)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + A_long dimensionL, /* >> */ // ranges from 0..TemporalDimensionality-1 + const AEGP_KeyframeEase *in_easeP0, /* >> */ // not adopted + const AEGP_KeyframeEase *out_easeP0); /* >> */ // not adopted + + SPAPI A_Err (*AEGP_GetKeyframeFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags *flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeFlag)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeFlags flag, /* >> */ // set one at a time + A_Boolean true_falseB); /* >> */ + + SPAPI A_Err (*AEGP_GetKeyframeInterpolation)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType *in_interpP0, /* << */ + AEGP_KeyframeInterpolationType *out_interpP0); /* << */ + + SPAPI A_Err (*AEGP_SetKeyframeInterpolation)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_KeyframeIndex key_index, /* >> */ + AEGP_KeyframeInterpolationType in_interp, /* >> */ + AEGP_KeyframeInterpolationType out_interp); /* >> */ + +} AEGP_KeyframeSuite1; + +/* frozen AE 5.5 */ +#define kAEGPItemSuiteVersion2 4 + +typedef struct AEGP_ItemSuite2 { + + SPAPI A_Err (*AEGP_GetNextItem)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << could be NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_ItemH itemH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Solid/Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_GetItemSolidColor)( /* error if item isn't AEGP_ItemType_SOLID! */ + AEGP_ItemH itemH, /* >> */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_SetSolidColor)( /* error if item isn't AEGP_ItemType_SOLID! */ + AEGP_ItemH itemH, /* <> */ + AEGP_ColorVal color); /* >> */ + + SPAPI A_Err (*AEGP_SetSolidDimensions)( /* error if item isn't AEGP_ItemType_SOLID! */ + AEGP_ItemH itemH, /* <> */ + A_short widthS, /* >> */ + A_short heightS); /* >> */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_char *nameZ, /* >> */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << */ /* allocated and owned by project (AE) */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* Undoable. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + + // work on Comps and Footage items. + SPAPI A_Err (*AEGP_RenderNewItemSoundData)( // AEGP_SoundDataH must be disposed. + AEGP_ItemH itemH, // >> + const A_Time *start_timePT, // >> + const A_Time *durationPT, // >> + const AEGP_SoundDataFormat* sound_formatP, // >> + AEGP_SoundDataH *new_sound_dataPH); // << can return NULL if no audio + +} AEGP_ItemSuite2; + + +#define kAEGPItemSuiteVersion1 3 /* frozen in AE 5.0 */ + +typedef struct AEGP_ItemSuite1 { + + SPAPI A_Err (*AEGP_GetNextItem)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *next_itemPH); /* << NULL after last item */ + + SPAPI A_Err (*AEGP_GetActiveItem)( + AEGP_ItemH *itemPH); /* << could be NULL if none is active */ + + SPAPI A_Err (*AEGP_IsItemSelected)( + AEGP_ItemH itemH, /* >> */ + A_Boolean *selectedPB); /* << */ + + SPAPI A_Err (*AEGP_SelectItem)( + AEGP_ItemH itemH, /* >> */ + A_Boolean selectB, /* >> allows to select or deselect the item */ + A_Boolean deselect_othersB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemType)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemType *item_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetTypeName)( + AEGP_ItemType item_type, /* << */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_TYPE_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemName)( + AEGP_ItemH itemH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_ITEM_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetItemID)( + AEGP_ItemH itemH, /* >> */ + A_long *item_idPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemFlags)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemFlags *item_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetItemUseProxy)( /* UNDOABLE */ + AEGP_ItemH itemH, /* >> error if has_proxy is FALSE! */ + A_Boolean use_proxyB); /* >> */ + + SPAPI A_Err (*AEGP_GetItemParentFolder)( + AEGP_ItemH itemH, /* >> */ + AEGP_ItemH *parent_folder_itemPH); /* << */ + + SPAPI A_Err (*AEGP_GetItemDuration)( /* Returns the result in the item's native timespace: */ + AEGP_ItemH itemH, /* >> Comp -> comp time, */ + A_Time *durationPT); /* << Footage -> footage time, */ + /* Solid/Folder -> 0 (no duration) */ + + SPAPI A_Err (*AEGP_GetItemCurrentTime)( /* Returns the result in the item's native timespace (not updated while rendering)*/ + AEGP_ItemH itemH, /* >> */ + A_Time *curr_timePT); /* << */ + + SPAPI A_Err (*AEGP_GetItemDimensions)( + AEGP_ItemH itemH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetItemPixelAspectRatio)( + AEGP_ItemH itemH, /* >> */ + A_Ratio *pix_aspect_ratioPRt); /* << */ + + SPAPI A_Err (*AEGP_DeleteItem)( /* UNDOABLE */ + AEGP_ItemH itemH); /* >> removes item from all comps */ + + SPAPI A_Err (*AEGP_GetItemSolidColor)( /* error if item isn't AEGP_ItemType_SOLID! */ + AEGP_ItemH itemH, /* >> */ + AEGP_ColorVal *colorP); /* << */ + + SPAPI A_Err (*AEGP_CreateNewFolder)( + const A_char *nameZ, /* >> */ + AEGP_ItemH parent_folderH0, /* >> */ + AEGP_ItemH *new_folderPH); /* << */ /* allocated and owned by project (AE) */ + + SPAPI A_Err (*AEGP_SetItemCurrentTime)( /* Undoable. Use the item's native timespace */ + AEGP_ItemH itemH, /* >> */ + const A_Time *new_timePT); /* >> */ + + + // work on Comps and Footage items. + SPAPI A_Err (*AEGP_RenderNewItemSoundData)( // AEGP_SoundDataH must be disposed. + AEGP_ItemH itemH, // >> + const A_Time *start_timePT, // >> + const A_Time *durationPT, // >> + const AEGP_SoundDataFormat* sound_formatP, // >> + AEGP_SoundDataH *new_sound_dataPH); // << can return NULL if no audio + +} AEGP_ItemSuite1; + +/*********************************************************/ + +#define kAEGPUtilitySuiteVersion5 11 /* frozen in AE 8.0 */ + +typedef struct AEGP_UtilitySuite5 { + + SPAPI A_Err (*AEGP_ReportInfo)( /* displays dialog with name of plugin followed by info string */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_char *info_stringZ); /* >> */ + + + SPAPI A_Err (*AEGP_GetDriverPluginInitFuncVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_GetDriverImplementationVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_StartQuietErrors)( + AEGP_ErrReportState *err_stateP); /* << */ + + SPAPI A_Err (*AEGP_EndQuietErrors)( + A_Boolean report_quieted_errorsB, /* >> currently reports last quieted error */ + AEGP_ErrReportState *err_stateP); /* >> */ + + SPAPI A_Err (*AEGP_GetLastErrorMessage)( + A_long buffer_size, /* >> size of character buffer */ + A_char *error_string, /* << */ + A_Err *error_num); /* << */ + + SPAPI A_Err (*AEGP_StartUndoGroup)( /* MUST be balanced with call to AEGP_EndUndoGroup() */ + const A_char *undo_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_EndUndoGroup)(void); + + SPAPI A_Err (*AEGP_RegisterWithAEGP)( + AEGP_GlobalRefcon global_refcon, /* >> global refcon passed in command handlers */ + const A_char *plugin_nameZ, /* >> name of this plugin. AEGP_MAX_PLUGIN_NAME_SIZE */ + AEGP_PluginID *plugin_id); /* << id for plugin to use in other AEGP calls */ + + SPAPI A_Err (*AEGP_GetMainHWND)( + void *main_hwnd); /* << */ + + SPAPI A_Err (*AEGP_ShowHideAllFloaters)( + A_Boolean include_tool_palB); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalGetForeColor)( + AEGP_ColorVal *fore_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalGetBackColor)( + AEGP_ColorVal *back_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalSetForeColor)( + const AEGP_ColorVal *fore_colorP); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalSetBackColor)( + const AEGP_ColorVal *back_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalGetFillColor)( + A_Boolean *is_fill_color_definedPB, /* << */ + AEGP_ColorVal *fill_colorP); /* << only valid if is_fill_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalGetStrokeColor)( + A_Boolean *is_stroke_color_definedPB, /* << */ + AEGP_ColorVal *stroke_colorP); /* << only valid if is_stroke_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalSetFillColor)( + const AEGP_ColorVal *fill_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalSetStrokeColor)( + const AEGP_ColorVal *stroke_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalIsFillColorUIFrontmost)( /* Otherwise, StrokeColor is frontmost */ + A_Boolean *is_fill_color_selectedPB); /* << */ + + SPAPI A_Err (*AEGP_ConvertFpLongToHSFRatio)( + A_FpLong numberF, /* >> */ + A_Ratio *ratioPR); /* << */ + + SPAPI A_Err (*AEGP_ConvertHSFRatioToFpLong)( + A_Ratio ratioR, /* << */ + A_FpLong *numberPF); /* >> */ + + // this routine is safe to call from the non-main + // thread. It is asynchronous and will return before the idle handler is called. + // The Suite routines to get this pointer are not + // thread safe, therefore you need to save it off + // in the main thread for use by the child thread. + SPAPI A_Err (*AEGP_CauseIdleRoutinesToBeCalled)(void); + + + // Determine if after effects is running in a mode where there is no + // user interface, and attempting to interact with the user (via a modal dialog) + // will hang the application. + // This will not change during a run. Use it to optimize your plugin at startup + // to not create a user interface and make AE launch faster, and not break + // when running multiple instances of a service. + SPAPI A_Err (*AEGP_GetSuppressInteractiveUI)(A_Boolean* ui_is_suppressedPB); // out + + // this call writes text to the console if one is available. One is guaranteed to be available + // if ui_is_suppressedB == true. + // In general use the call AEGP_ReportInfo() as it will write to the console in + // non-interactive modes, and use a dialog in interactive modes. + SPAPI A_Err (*AEGP_WriteToOSConsole)(const A_char* textZ); // in + + // this writes an entry into the debug log, or to the command line if launched + // with the -debug flag. + SPAPI A_Err (*AEGP_WriteToDebugLog)(const A_char* subsystemZ, // in + const A_char* event_typeZ, // in + const A_char * infoZ); // in + + + SPAPI A_Err (*AEGP_IsScriptingAvailable)(A_Boolean* outAvailablePB); + + // Execute a script. + // The script text can either be in UTF-8, or the current + // application encoding. + // The result is the result string if OK. It is optional. + // The error is the error string if an error occurred. It is optional. + // the result and error are in the encoding specified by platform_encodingB + SPAPI A_Err (*AEGP_ExecuteScript)(AEGP_PluginID inPlugin_id, + const A_char* inScriptZ, // in + const A_Boolean platform_encodingB, // in + AEGP_MemHandle* outResultPH0, + AEGP_MemHandle* outErrorStringPH0); + + SPAPI A_Err (*AEGP_HostIsActivated)(A_Boolean *is_activatedPB); + + SPAPI A_Err (*AEGP_GetPluginPlatformRef)(AEGP_PluginID plug_id, void** plat_refPPV); // on the Mac, it is a CFBundleRef to your mach-o plugin or NULL for a CFM plug-in; on Windows it is set to NULL for now + + SPAPI A_Err (*AEGP_UpdateFontList)(void); // Rescan the system font list. This will return quickly if the font list hasn't changed. + +} AEGP_UtilitySuite5; + + + +#define kAEGPUtilitySuiteVersion4 10 /* frozen in AE 7.0 */ + +typedef struct AEGP_UtilitySuite4 { + + SPAPI A_Err (*AEGP_ReportInfo)( /* displays dialog with name of plugin followed by info string */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_char *info_stringZ); /* >> */ + + + SPAPI A_Err (*AEGP_GetDriverPluginInitFuncVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_GetDriverImplementationVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_StartQuietErrors)( + AEGP_ErrReportState *err_stateP); /* << */ + + SPAPI A_Err (*AEGP_EndQuietErrors)( + A_Boolean report_quieted_errorsB, /* >> currently reports last quieted error */ + AEGP_ErrReportState *err_stateP); /* >> */ + + SPAPI A_Err (*AEGP_GetLastErrorMessage)( + A_long buffer_size, /* >> size of character buffer */ + A_char *error_string, /* << */ + A_Err *error_num); /* << */ + + SPAPI A_Err (*AEGP_StartUndoGroup)( /* MUST be balanced with call to AEGP_EndUndoGroup() */ + const A_char *undo_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_EndUndoGroup)(void); + + SPAPI A_Err (*AEGP_RegisterWithAEGP)( + AEGP_GlobalRefcon global_refcon, /* >> global refcon passed in command handlers */ + const A_char *plugin_nameZ, /* >> name of this plugin. AEGP_MAX_PLUGIN_NAME_SIZE */ + AEGP_PluginID *plugin_id); /* << id for plugin to use in other AEGP calls */ + + SPAPI A_Err (*AEGP_GetMainHWND)( + void *main_hwnd); /* << */ + + SPAPI A_Err (*AEGP_ShowHideAllFloaters)( + A_Boolean include_tool_palB); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalGetForeColor)( + AEGP_ColorVal *fore_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalGetBackColor)( + AEGP_ColorVal *back_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalSetForeColor)( + const AEGP_ColorVal *fore_colorP); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalSetBackColor)( + const AEGP_ColorVal *back_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalGetFillColor)( + A_Boolean *is_fill_color_definedPB, /* << */ + AEGP_ColorVal *fill_colorP); /* << only valid if is_fill_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalGetStrokeColor)( + A_Boolean *is_stroke_color_definedPB, /* << */ + AEGP_ColorVal *stroke_colorP); /* << only valid if is_stroke_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalSetFillColor)( + const AEGP_ColorVal *fill_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalSetStrokeColor)( + const AEGP_ColorVal *stroke_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalIsFillColorUIFrontmost)( /* Otherwise, StrokeColor is frontmost */ + A_Boolean *is_fill_color_selectedPB); /* << */ + + SPAPI A_Err (*AEGP_ConvertFpLongToHSFRatio)( + A_FpLong numberF, /* >> */ + A_Ratio *ratioPR); /* << */ + + SPAPI A_Err (*AEGP_ConvertHSFRatioToFpLong)( + A_Ratio ratioR, /* << */ + A_FpLong *numberPF); /* >> */ + + // this routine is safe to call from the non-main + // thread. It is asynchronous and will return before the idle handler is called. + // The Suite routines to get this pointer are not + // thread safe, therefore you need to save it off + // in the main thread for use by the child thread. + SPAPI A_Err (*AEGP_CauseIdleRoutinesToBeCalled)(void); + + + // Determine if after effects is running in a mode where there is no + // user interface, and attempting to interact with the user (via a modal dialog) + // will hang the application. + // This will not change during a run. Use it to optimize your plugin at startup + // to not create a user interface and make AE launch faster, and not break + // when running multiple instances of a service. + SPAPI A_Err (*AEGP_GetSuppressInteractiveUI)(A_Boolean* ui_is_suppressedPB); // out + + // this call writes text to the console if one is available. One is guaranteed to be available + // if ui_is_suppressedB == true. + // In general use the call AEGP_ReportInfo() as it will write to the console in + // non-interactive modes, and use a dialog in interactive modes. + SPAPI A_Err (*AEGP_WriteToOSConsole)(const A_char* textZ); // in + + // this writes an entry into the debug log, or to the command line if launched + // with the -debug flag. + SPAPI A_Err (*AEGP_WriteToDebugLog)(const A_char* subsystemZ, // in + const A_char* event_typeZ, // in + const A_char * infoZ); // in + + + SPAPI A_Err (*AEGP_IsScriptingAvailable)(A_Boolean* outAvailablePB); + + // Execute a script. + // The script text can either be in UTF-8, or the current + // application encoding. + // The result is the result string if OK. It is optional. + // The error is the error string if an error occurred. It is optional. + // the result and error are in the encoding specified by platform_encodingB + SPAPI A_Err (*AEGP_ExecuteScript)(AEGP_PluginID inPlugin_id, + const A_char* inScriptZ, // in + const A_Boolean platform_encodingB, // in + AEGP_MemHandle* outResultPH0, + AEGP_MemHandle* outErrorStringPH0); + + SPAPI A_Err (*AEGP_HostIsActivated)(A_Boolean *is_activatedPB); + + SPAPI A_Err (*AEGP_GetPluginPlatformRef)(AEGP_PluginID plug_id, void** plat_refPPV); // on the Mac, it is a CFBundleRef to your mach-o plugin or NULL for a CFM plug-in; on Windows it is set to NULL for now + +} AEGP_UtilitySuite4; + + + +#define kAEGPUtilitySuiteVersion3 7 /* frozen in AE 6.5 */ + +typedef struct AEGP_UtilitySuite3 { + + SPAPI A_Err (*AEGP_ReportInfo)( /* displays dialog with name of plugin followed by info string */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_char *info_stringZ); /* >> */ + + + SPAPI A_Err (*AEGP_GetDriverPluginInitFuncVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_GetDriverImplementationVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_StartQuietErrors)( + AEGP_ErrReportState *err_stateP); /* << */ + + SPAPI A_Err (*AEGP_EndQuietErrors)( + A_Boolean report_quieted_errorsB, /* >> currently reports last quieted error */ + AEGP_ErrReportState *err_stateP); /* >> */ + + SPAPI A_Err (*AEGP_StartUndoGroup)( /* MUST be balanced with call to AEGP_EndUndoGroup() */ + const A_char *undo_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_EndUndoGroup)(void); + + SPAPI A_Err (*AEGP_RegisterWithAEGP)( + AEGP_GlobalRefcon global_refcon, /* >> global refcon passed in command handlers */ + const A_char *plugin_nameZ, /* >> name of this plugin. AEGP_MAX_PLUGIN_NAME_SIZE */ + AEGP_PluginID *plugin_id); /* << id for plugin to use in other AEGP calls */ + + SPAPI A_Err (*AEGP_GetMainHWND)( + void *main_hwnd); /* << */ + + SPAPI A_Err (*AEGP_ShowHideAllFloaters)( + A_Boolean include_tool_palB); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalGetForeColor)( + AEGP_ColorVal *fore_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalGetBackColor)( + AEGP_ColorVal *back_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalSetForeColor)( + const AEGP_ColorVal *fore_colorP); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalSetBackColor)( + const AEGP_ColorVal *back_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalGetFillColor)( + A_Boolean *is_fill_color_definedPB, /* << */ + AEGP_ColorVal *fill_colorP); /* << only valid if is_fill_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalGetStrokeColor)( + A_Boolean *is_stroke_color_definedPB, /* << */ + AEGP_ColorVal *stroke_colorP); /* << only valid if is_stroke_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalSetFillColor)( + const AEGP_ColorVal *fill_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalSetStrokeColor)( + const AEGP_ColorVal *stroke_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalIsFillColorUIFrontmost)( /* Otherwise, StrokeColor is frontmost */ + A_Boolean *is_fill_color_selectedPB); /* << */ + + SPAPI A_Err (*AEGP_ConvertFpLongToHSFRatio)( + A_FpLong numberF, /* >> */ + A_Ratio *ratioPR); /* << */ + + SPAPI A_Err (*AEGP_ConvertHSFRatioToFpLong)( + A_Ratio ratioR, /* << */ + A_FpLong *numberPF); /* >> */ + + // this routine is safe to call from the non-main + // thread. It is asynchronous and will return before the idle handler is called. + // The Suite routines to get this pointer are not + // thread safe, therefore you need to save it off + // in the main thread for use by the child thread. + SPAPI A_Err (*AEGP_CauseIdleRoutinesToBeCalled)(void); + + + // Determine if after effects is running in a mode where there is no + // user interface, and attempting to interact with the user (via a modal dialog) + // will hang the application. + // This will not change during a run. Use it to optimize your plugin at startup + // to not create a user interface and make AE launch faster, and not break + // when running multiple instances of a service. + SPAPI A_Err (*AEGP_GetSuppressInteractiveUI)(A_Boolean* ui_is_suppressedPB); // out + + // this call writes text to the console if one is available. One is guaranteed to be available + // if ui_is_suppressedB == true. + // In general use the call AEGP_ReportInfo() as it will write to the console in + // non-interactive modes, and use a dialog in interactive modes. + SPAPI A_Err (*AEGP_WriteToOSConsole)(const A_char* textZ); // in + + // this writes an entry into the debug log, or to the command line if launched + // with the -debug flag. + SPAPI A_Err (*AEGP_WriteToDebugLog)(const A_char* subsystemZ, // in + const A_char* event_typeZ, // in + const A_char * infoZ); // in +} AEGP_UtilitySuite3; + +#define kAEGPUtilitySuiteVersion2 5 /* frozen in AE 6.0 */ + +typedef struct AEGP_UtilitySuite2 { + + SPAPI A_Err (*AEGP_ReportInfo)( /* displays dialog with name of plugin followed by info string */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_char *info_stringZ); /* >> */ + + + SPAPI A_Err (*AEGP_GetDriverPluginInitFuncVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_GetDriverImplementationVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_StartQuietErrors)( + AEGP_ErrReportState *err_stateP); /* << */ + + SPAPI A_Err (*AEGP_EndQuietErrors)( + A_Boolean report_quieted_errorsB, /* >> currently reports last quieted error */ + AEGP_ErrReportState *err_stateP); /* >> */ + + SPAPI A_Err (*AEGP_StartUndoGroup)( /* MUST be balanced with call to AEGP_EndUndoGroup() */ + const A_char *undo_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_EndUndoGroup)(void); + + SPAPI A_Err (*AEGP_RegisterWithAEGP)( + AEGP_GlobalRefcon global_refcon, /* >> global refcon passed in command handlers */ + const A_char *plugin_nameZ, /* >> name of this plugin. AEGP_MAX_PLUGIN_NAME_SIZE */ + AEGP_PluginID *plugin_id); /* << id for plugin to use in other AEGP calls */ + + SPAPI A_Err (*AEGP_GetMainHWND)( + void *main_hwnd); /* << */ + + SPAPI A_Err (*AEGP_ShowHideAllFloaters)( + A_Boolean include_tool_palB); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalGetForeColor)( + AEGP_ColorVal *fore_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalGetBackColor)( + AEGP_ColorVal *back_colorP); /* << */ + + SPAPI A_Err (*AEGP_PaintPalSetForeColor)( + const AEGP_ColorVal *fore_colorP); /* >> */ + + SPAPI A_Err (*AEGP_PaintPalSetBackColor)( + const AEGP_ColorVal *back_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalGetFillColor)( + A_Boolean *is_fill_color_definedPB, /* << */ + AEGP_ColorVal *fill_colorP); /* << only valid if is_fill_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalGetStrokeColor)( + A_Boolean *is_stroke_color_definedPB, /* << */ + AEGP_ColorVal *stroke_colorP); /* << only valid if is_stroke_color_definedPB == TRUE */ + + SPAPI A_Err (*AEGP_CharPalSetFillColor)( + const AEGP_ColorVal *fill_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalSetStrokeColor)( + const AEGP_ColorVal *stroke_colorP); /* >> */ + + SPAPI A_Err (*AEGP_CharPalIsFillColorUIFrontmost)( /* Otherwise, StrokeColor is frontmost */ + A_Boolean *is_fill_color_selectedPB); /* << */ + +} AEGP_UtilitySuite2; + +#define kAEGPUtilitySuiteVersion1 3 /* frozen in AE 5.0 */ + +typedef struct AEGP_UtilitySuite1 { + + SPAPI A_Err (*AEGP_ReportInfo)( /* displays dialog with name of plugin followed by info string */ + AEGP_PluginID aegp_plugin_id, /* >> */ + const A_char *info_stringZ); /* >> */ + + + SPAPI A_Err (*AEGP_GetDriverPluginInitFuncVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_GetDriverImplementationVersion)( + A_short *major_versionPS, /* << */ + A_short *minor_versionPS); /* << */ + + SPAPI A_Err (*AEGP_StartQuietErrors)( + AEGP_ErrReportState *err_stateP); /* << */ + + SPAPI A_Err (*AEGP_EndQuietErrors)( + A_Boolean report_quieted_errorsB, /* >> currently reports last quieted error */ + AEGP_ErrReportState *err_stateP); /* >> */ + + SPAPI A_Err (*AEGP_StartUndoGroup)( /* MUST be balanced with call to AEGP_EndUndoGroup() */ + const A_char *undo_nameZ); /* >> */ + + SPAPI A_Err (*AEGP_EndUndoGroup)(void); + + SPAPI A_Err (*AEGP_RegisterWithAEGP)( + AEGP_GlobalRefcon global_refcon, /* >> global refcon passed in command handlers */ + const A_char *plugin_nameZ, /* >> name of this plugin. AEGP_MAX_PLUGIN_NAME_SIZE */ + AEGP_PluginID *plugin_id); /* << id for plugin to use in other AEGP calls */ + + SPAPI A_Err (*AEGP_GetMainHWND)( + void *main_hwnd); /* << */ + +} AEGP_UtilitySuite1; + + + + +#define kAEGPQueryXformSuiteVersion1 1 /* frozen in AE 5.0 */ + + + +typedef struct AEGP_QueryXformSuite1 { + + SPAPI A_Err (*AEGP_QueryXformGetSrcType)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_QueryXformType *src_type); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetDstType)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_QueryXformType *dst_type); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetLayer)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_LayerH *layerPH); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetComp)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_CompH *compPH); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetTransformTime)( + PR_QueryContextH query_contextH, /* <> */ + A_Time *time); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetViewTime)( + PR_QueryContextH query_contextH, /* <> */ + A_Time *time); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetCamera)( + PR_QueryContextH query_contextH, /* <> */ + AEGP_LayerH *camera_layerPH); /* << */ + + SPAPI A_Err (*AEGP_QueryXformGetXform)( + PR_QueryContextH query_contextH, /* <> */ + A_Matrix4 *xform); /* << */ + + SPAPI A_Err (*AEGP_QueryXformSetXform)( + PR_QueryContextH query_contextH, /* <> */ + A_Matrix4 *xform); /* >> */ + +}AEGP_QueryXformSuite1; + + + + +#define kAEGPRenderSuiteVersion1 1 /* frozen in AE 5.5.1 */ + + +typedef struct { + SPAPI A_Err (*AEGP_RenderAndCheckoutFrame)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_FrameReceiptH *receiptPH); /* << check in using AEGP_CheckinFrame to release memory */ + + SPAPI A_Err (*AEGP_CheckinFrame)( + AEGP_FrameReceiptH receiptH); /* >> */ + + /* This returns a read only world that is not-owned by the plugin. + Call CheckinFrame to release the world when you are done reading from it. + */ + + SPAPI A_Err (*AEGP_GetReceiptWorld)( + AEGP_FrameReceiptH receiptH, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_GetRenderedRegion)( + AEGP_FrameReceiptH receiptH, /* >> */ + A_LRect *rendered_regionP); /* << */ + + SPAPI A_Err (*AEGP_IsRenderedFrameSufficient)( + AEGP_RenderOptionsH rendered_optionsH, /* >> */ + AEGP_RenderOptionsH proposed_optionsH, /* >> */ + A_Boolean *rendered_is_sufficientPB); /* << */ + + SPAPI A_Err (*AEGP_RenderNewItemSoundData)( /* Works on Compositions and Footage items. */ + AEGP_ItemH itemH, /* >> */ + const A_Time *start_timePT, /* >> */ + const A_Time *durationPT, /* >> */ + const AEGP_SoundDataFormat *sound_formatP, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_SoundDataH *new_sound_dataPH); /* << AEGP_SoundDataH must be disposed. Returns NULL if no audio */ + +} AEGP_RenderSuite1; + + +#define kAEGPRenderSuiteVersion2 2 /* frozen in 6.5 */ + + +typedef A_Err (*AEGP_RenderSuiteCheckForCancelv1)( + void *refcon, + A_Boolean *cancelPB); + +typedef struct { + SPAPI A_Err (*AEGP_RenderAndCheckoutFrame)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderSuiteCheckForCancelv1 cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_FrameReceiptH *receiptPH); /* << check in using AEGP_CheckinFrame to release memory */ + + SPAPI A_Err (*AEGP_CheckinFrame)( + AEGP_FrameReceiptH receiptH); /* >> */ + + /* This returns a read only world that is not-owned by the plugin. + Call CheckinFrame to release the world when you are done reading from it. + */ + + SPAPI A_Err (*AEGP_GetReceiptWorld)( + AEGP_FrameReceiptH receiptH, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_GetRenderedRegion)( + AEGP_FrameReceiptH receiptH, /* >> */ + A_LRect *rendered_regionP); /* << */ + + SPAPI A_Err (*AEGP_IsRenderedFrameSufficient)( + AEGP_RenderOptionsH rendered_optionsH, /* >> */ + AEGP_RenderOptionsH proposed_optionsH, /* >> */ + A_Boolean *rendered_is_sufficientPB); /* << */ + + SPAPI A_Err (*AEGP_RenderNewItemSoundData)( /* Works on Compositions and Footage items. */ + AEGP_ItemH itemH, /* >> */ + const A_Time *start_timePT, /* >> */ + const A_Time *durationPT, /* >> */ + const AEGP_SoundDataFormat *sound_formatP, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_SoundDataH *new_sound_dataPH); /* << AEGP_SoundDataH must be disposed. Returns NULL if no audio */ + + + // returns the current timestamp of the project.this is increased any time something is touched in the project + // that affects rendering + SPAPI A_Err (*AEGP_GetCurrentTimestamp)( + AEGP_TimeStamp * time_stampP); // out + + // Lets you know if the video of the item has changed since the input time stamp. + // Is not affected by audio. + SPAPI A_Err (*AEGP_HasItemChangedSinceTimestamp)(AEGP_ItemH itemH, // in + const A_Time * start_timeP, // in + const A_Time* durationP, //in + const AEGP_TimeStamp * time_stampP, //in + A_Boolean * item_has_changedPB); //out + + // checks whether this frame would be worth rendering externally and + // checking in to the cache. a speculative renderer should check this twice: + // (1) before sending the frame out to render + // (2) when it is complete, before calling AEGP_NewPlatformWorld and checking in. + // (don't forget to call AEGP_HasItemChangedSinceTimestamp also!) + SPAPI A_Err (*AEGP_IsItemWorthwhileToRender)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_Boolean *worthwhile_to_renderPB); // out + + // ticks_to_render is the approximate amount of time needed to render the frame + // on this machine. it is 60Hz. + SPAPI A_Err (*AEGP_CheckinRenderedFrame)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_u_long ticks_to_renderL, // in + AEGP_PlatformWorldH imageH); // in (adopted) +} AEGP_RenderSuite2; + + +#define kAEGPRenderSuiteVersion3 3 /* frozen in 11.0 */ + +typedef struct { + SPAPI A_Err (*AEGP_RenderAndCheckoutFrame)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_FrameReceiptH *receiptPH); /* << check in using AEGP_CheckinFrame to release memory */ + + SPAPI A_Err (*AEGP_CheckinFrame)( + AEGP_FrameReceiptH receiptH); /* >> */ + + /* This returns a read only world that is not-owned by the plugin. + Call CheckinFrame to release the world when you are done reading from it. + */ + + SPAPI A_Err (*AEGP_GetReceiptWorld)( + AEGP_FrameReceiptH receiptH, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_GetRenderedRegion)( + AEGP_FrameReceiptH receiptH, /* >> */ + A_LRect *rendered_regionP); /* << */ + + SPAPI A_Err (*AEGP_IsRenderedFrameSufficient)( + AEGP_RenderOptionsH rendered_optionsH, /* >> */ + AEGP_RenderOptionsH proposed_optionsH, /* >> */ + A_Boolean *rendered_is_sufficientPB); /* << */ + + SPAPI A_Err (*AEGP_RenderNewItemSoundData)( /* Works on Compositions and Footage items. */ + AEGP_ItemH itemH, /* >> */ + const A_Time *start_timePT, /* >> */ + const A_Time *durationPT, /* >> */ + const AEGP_SoundDataFormat *sound_formatP, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_SoundDataH *new_sound_dataPH); /* << AEGP_SoundDataH must be disposed. Returns NULL if no audio */ + + + // returns the current timestamp of the project.this is increased any time something is touched in the project + // that affects rendering + SPAPI A_Err (*AEGP_GetCurrentTimestamp)( + AEGP_TimeStamp * time_stampP); // out + + // Lets you know if the video of the item has changed since the input time stamp. + // Is not affected by audio. + SPAPI A_Err (*AEGP_HasItemChangedSinceTimestamp)(AEGP_ItemH itemH, // in + const A_Time * start_timeP, // in + const A_Time* durationP, //in + const AEGP_TimeStamp * time_stampP, //in + A_Boolean * item_has_changedPB); //out + + // checks whether this frame would be worth rendering externally and + // checking in to the cache. a speculative renderer should check this twice: + // (1) before sending the frame out to render + // (2) when it is complete, before calling AEGP_NewPlatformWorld and checking in. + // (don't forget to call AEGP_HasItemChangedSinceTimestamp also!) + SPAPI A_Err (*AEGP_IsItemWorthwhileToRender)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_Boolean *worthwhile_to_renderPB); // out + + // ticks_to_render is the approximate amount of time needed to render the frame + // on this machine. it is 60Hz. + SPAPI A_Err (*AEGP_CheckinRenderedFrame)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_u_long ticks_to_renderL, // in + AEGP_PlatformWorldH imageH); // in (adopted) + + SPAPI A_Err (*AEGP_GetReceiptGuid) (AEGP_FrameReceiptH receiptH, // in + AEGP_MemHandle *guidMH); // out, must be disposed +} AEGP_RenderSuite3; + + +#define kAEGPRenderSuiteVersion4 5 /* frozen in 13.0 */ + +typedef struct { + SPAPI A_Err (*AEGP_RenderAndCheckoutFrame)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_FrameReceiptH *receiptPH); /* << check in using AEGP_CheckinFrame to release memory */ + + SPAPI A_Err (*AEGP_RenderAndCheckoutLayerFrame)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + A_Boolean render_plain_layer_frameB, /* >> true to render layer frame, false to render effect input frame */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_FrameReceiptH *receiptPH); /* << check in using AEGP_CheckinFrame to release memory */ + + SPAPI A_Err (*AEGP_CheckinFrame)( + AEGP_FrameReceiptH receiptH); /* >> */ + + /* This returns a read only world that is not-owned by the plugin. + Call CheckinFrame to release the world when you are done reading from it. + */ + + SPAPI A_Err (*AEGP_GetReceiptWorld)( + AEGP_FrameReceiptH receiptH, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_GetRenderedRegion)( + AEGP_FrameReceiptH receiptH, /* >> */ + A_LRect *rendered_regionP); /* << */ + + SPAPI A_Err (*AEGP_IsRenderedFrameSufficient)( + AEGP_RenderOptionsH rendered_optionsH, /* >> */ + AEGP_RenderOptionsH proposed_optionsH, /* >> */ + A_Boolean *rendered_is_sufficientPB); /* << */ + + SPAPI A_Err (*AEGP_RenderNewItemSoundData)( /* Works on Compositions and Footage items. */ + AEGP_ItemH itemH, /* >> */ + const A_Time *start_timePT, /* >> */ + const A_Time *durationPT, /* >> */ + const AEGP_SoundDataFormat *sound_formatP, /* >> */ + AEGP_RenderSuiteCheckForCancel cancel_functionP0, /* >> optional*/ + AEGP_CancelRefcon cancel_function_refconP0, /* >> optional */ + AEGP_SoundDataH *new_sound_dataPH); /* << AEGP_SoundDataH must be disposed. Returns NULL if no audio */ + + + // returns the current timestamp of the project.this is increased any time something is touched in the project + // that affects rendering + SPAPI A_Err (*AEGP_GetCurrentTimestamp)( + AEGP_TimeStamp * time_stampP); // out + + // Lets you know if the video of the item has changed since the input time stamp. + // Is not affected by audio. + SPAPI A_Err (*AEGP_HasItemChangedSinceTimestamp)(AEGP_ItemH itemH, // in + const A_Time * start_timeP, // in + const A_Time* durationP, //in + const AEGP_TimeStamp * time_stampP, //in + A_Boolean * item_has_changedPB); //out + + // checks whether this frame would be worth rendering externally and + // checking in to the cache. a speculative renderer should check this twice: + // (1) before sending the frame out to render + // (2) when it is complete, before calling AEGP_NewPlatformWorld and checking in. + // (don't forget to call AEGP_HasItemChangedSinceTimestamp also!) + SPAPI A_Err (*AEGP_IsItemWorthwhileToRender)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_Boolean *worthwhile_to_renderPB); // out + + // ticks_to_render is the approximate amount of time needed to render the frame + // on this machine. it is 60Hz. + SPAPI A_Err (*AEGP_CheckinRenderedFrame)( AEGP_RenderOptionsH roH, // in + const AEGP_TimeStamp* time_stampP, // in + A_u_long ticks_to_renderL, // in + AEGP_PlatformWorldH imageH); // in (adopted) + + SPAPI A_Err (*AEGP_GetReceiptGuid) (AEGP_FrameReceiptH receiptH, // in + AEGP_MemHandle *guidMH); // out, must be disposed +} AEGP_RenderSuite4; + + + +#define kAEGPWorldSuiteVersion2 2 /* frozen in AE 6.5 */ + +typedef struct { + SPAPI A_Err (*AEGP_New)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_WorldType type, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_WorldH worldH); /* >> */ + + SPAPI A_Err (*AEGP_GetType)( + AEGP_WorldH worldH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + SPAPI A_Err (*AEGP_GetSize)( + AEGP_WorldH worldH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetRowBytes)( + AEGP_WorldH worldH, /* >> */ + A_u_long *row_bytesPL); /* << */ + + SPAPI A_Err (*AEGP_GetBaseAddr8)( + AEGP_WorldH worldH, /* >> error if the worldH is not AEGP_WorldType_8 */ + PF_Pixel8 **base_addrP); /* << */ + + SPAPI A_Err (*AEGP_GetBaseAddr16)( + AEGP_WorldH worldH, /* >> error if the worldH is not AEGP_WorldType_16 */ + PF_Pixel16 **base_addrP); /* << */ + + SPAPI A_Err (*AEGP_FillOutPFEffectWorld)( /* Provided so you can use some of the PF routines with an AEGPWorld. Pass NULL as the ProgPtr to the PF routines.*/ + AEGP_WorldH worldH, /* >> */ + PF_EffectWorld *pf_worldP); /* << */ + + SPAPI A_Err (*AEGP_FastBlur)( + A_FpLong radiusF, /* >> */ + PF_ModeFlags mode, /* >> */ + PF_Quality quality, /* >> */ + AEGP_WorldH worldH); /* <> only for user allocated worlds; not for checked-out frames which are read only */ + + SPAPI A_Err (*AEGP_NewPlatformWorld)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_WorldType type, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + AEGP_PlatformWorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_DisposePlatformWorld)( + AEGP_PlatformWorldH worldH); /* >> */ + + SPAPI A_Err (*AEGP_NewReferenceFromPlatformWorld)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_PlatformWorldH platform_worldH, // >> + AEGP_WorldH *worldPH); /* << */ + + +} AEGP_WorldSuite2; + + +#define kAEGPWorldSuite "AEGP World Suite" +#define kAEGPWorldSuiteVersion1 1 /* frozen AE 6.0 */ + +typedef struct { + SPAPI A_Err (*AEGP_New)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_WorldType type, /* >> */ + A_long widthL, /* >> */ + A_long heightL, /* >> */ + AEGP_WorldH *worldPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_WorldH worldH); /* >> */ + + SPAPI A_Err (*AEGP_GetType)( + AEGP_WorldH worldH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + SPAPI A_Err (*AEGP_GetSize)( + AEGP_WorldH worldH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetRowBytes)( + AEGP_WorldH worldH, /* >> */ + A_u_long *row_bytesPL); /* << */ + + SPAPI A_Err (*AEGP_GetBaseAddr8)( + AEGP_WorldH worldH, /* >> error if the worldH is not AEGP_WorldType_8 */ + PF_Pixel8 **base_addrP); /* << */ + + SPAPI A_Err (*AEGP_GetBaseAddr16)( + AEGP_WorldH worldH, /* >> error if the worldH is not AEGP_WorldType_16 */ + PF_Pixel16 **base_addrP); /* << */ + + SPAPI A_Err (*AEGP_FillOutPFEffectWorld)( /* Provided so you can use some of the PF routines with an AEGPWorld. Pass NULL as the ProgPtr to the PF routines.*/ + AEGP_WorldH worldH, /* >> */ + PF_EffectWorld *pf_worldP); /* << */ + + SPAPI A_Err (*AEGP_FastBlur)( + A_FpLong radiusF, /* >> */ + PF_ModeFlags mode, /* >> */ + PF_Quality quality, /* >> */ + AEGP_WorldH worldH); /* <> only for user allocated worlds; not for checked-out frames which are read only */ +} AEGP_WorldSuite1; + + +typedef struct { + AEGP_CollectionItemType type; + union { + AEGP_LayerCollectionItem layer; + AEGP_MaskCollectionItem mask; + AEGP_EffectCollectionItem effect; + AEGP_StreamCollectionItem stream; + AEGP_MaskVertexCollectionItem mask_vertex; + AEGP_KeyframeCollectionItem keyframe; + } u; +} AEGP_CollectionItem; + + +#define kAEGPCollectionSuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct { + SPAPI A_Err (*AEGP_NewCollection)( /* dispose with dispose collection */ + AEGP_PluginID plugin_id, /* >> */ + AEGP_CollectionH *collectionPH); /* << */ + + SPAPI A_Err (*AEGP_DisposeCollection)( + AEGP_CollectionH collectionH); /* >> */ + + SPAPI A_Err (*AEGP_GetCollectionNumItems)( /* constant time */ + AEGP_CollectionH collectionH, /* >> */ + A_u_long *num_itemsPL); /* << */ + + SPAPI A_Err (*AEGP_GetCollectionItemByIndex)( /* constant time */ + AEGP_CollectionH collectionH, /* >> */ + A_u_long indexL, /* >> */ + AEGP_CollectionItem *collection_itemP); /* << */ + + SPAPI A_Err (*AEGP_CollectionPushBack)( /* constant time */ + AEGP_CollectionH collectionH, /* <> */ + const AEGP_CollectionItem *collection_itemP); /* >> */ + + SPAPI A_Err (*AEGP_CollectionErase)( /* O(n) */ + AEGP_CollectionH collectionH, /* <> */ + A_u_long index_firstL, /* >> */ + A_u_long index_lastL); /* >> */ + +} AEGP_CollectionSuite1; + +#define kAEGPDynamicStreamSuiteVersion1 1 /* frozen in AE 6.0 */ + +typedef struct AEGP_DynamicStreamSuite1 { + + SPAPI A_Err (*AEGP_GetNewStreamRefForLayer)( // used to start recursive walk of layer, + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetStreamDepth)( // layer is depth 0 + AEGP_StreamRefH streamH, /* >> */ + A_long *depthPL); /* << */ + + + SPAPI A_Err (*AEGP_GetStreamGroupingType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamGroupingType *group_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNumStreamsInGroup)( // error on leaf + AEGP_StreamRefH streamH, /* >> */ + A_long *num_streamsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetDynamicStreamFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags *stream_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetDynamicStreamFlag)( /* UNDOABLE */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags one_flag, /* >> */ + A_Boolean setB); /* >> */ + + + SPAPI A_Err (*AEGP_GetNewStreamRefByIndex)( // legal for namedgroup, indexedgroup, not leaf + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + A_long indexL, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewStreamRefByMatchname)( // legal for namedgroup + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + const A_char *match_nameZ, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DeleteStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH); /* >> */ // must still dispose the streamref later + + SPAPI A_Err (*AEGP_ReorderStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* <> updated to refer to newly ordered stream */ + A_long new_indexL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_long *new_indexPL0); /* << */ + + /* GetStreamName is in main kAEGPStreamSuite, and works on dynamic streams including groups */ + + SPAPI A_Err (*AEGP_SetStreamName)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* >> */ + const A_char *nameZ); /* >> */ + + SPAPI A_Err (*AEGP_CanAddStream)( + AEGP_StreamRefH group_streamH, /* >> */ + const A_char *match_nameZ, /* >> */ + A_Boolean *can_addPB); /* << */ + + SPAPI A_Err (*AEGP_AddStream)( /* UNDOABLE, only valid for AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH indexed_group_streamH, /* >> */ + const A_char *match_nameZ, + AEGP_StreamRefH *streamPH0); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetMatchName)( + AEGP_StreamRefH streamH, /* >> */ + A_char *nameZ); /* << use A_char[AEGP_MAX_STREAM_MATCH_NAME_SIZE] for buffer */ + + SPAPI A_Err (*AEGP_GetNewParentStreamRef)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamRefH *parent_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetStreamIsModified)( // i.e. changed from defaults, like the UU key + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *modifiedPB); /* << */ + +} AEGP_DynamicStreamSuite1; + +#define kAEGPDynamicStreamSuiteVersion2 2 /* frozen in AE 6.5 */ + +typedef struct AEGP_DynamicStreamSuite2 { + + SPAPI A_Err (*AEGP_GetNewStreamRefForLayer)( // used to start recursive walk of layer, + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetStreamDepth)( // layer is depth 0 + AEGP_StreamRefH streamH, /* >> */ + A_long *depthPL); /* << */ + + + SPAPI A_Err (*AEGP_GetStreamGroupingType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamGroupingType *group_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNumStreamsInGroup)( // error on leaf + AEGP_StreamRefH streamH, /* >> */ + A_long *num_streamsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetDynamicStreamFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags *stream_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetDynamicStreamFlag)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags one_flag, /* >> */ + A_Boolean undoableB, /* true if you want this to be an undoable change */ + /* if false, the only legal flag is AEGP_DynStreamFlag_HIDDEN */ + A_Boolean setB); /* >> */ + + + SPAPI A_Err (*AEGP_GetNewStreamRefByIndex)( // legal for namedgroup, indexedgroup, not leaf + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + A_long indexL, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewStreamRefByMatchname)( // legal for namedgroup + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + const A_char *match_nameZ, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DeleteStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH); /* >> */ // must still dispose the streamref later + + SPAPI A_Err (*AEGP_ReorderStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* <> updated to refer to newly ordered stream */ + A_long new_indexL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_long *new_indexPL0); /* << */ + + /* GetStreamName is in main kAEGPStreamSuite, and works on dynamic streams including groups */ + + SPAPI A_Err (*AEGP_SetStreamName)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* >> */ + const A_char *nameZ); /* >> */ + + SPAPI A_Err (*AEGP_CanAddStream)( + AEGP_StreamRefH group_streamH, /* >> */ + const A_char *match_nameZ, /* >> */ + A_Boolean *can_addPB); /* << */ + + SPAPI A_Err (*AEGP_AddStream)( /* UNDOABLE, only valid for AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH indexed_group_streamH, /* >> */ + const A_char *match_nameZ, + AEGP_StreamRefH *streamPH0); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetMatchName)( + AEGP_StreamRefH streamH, /* >> */ + A_char *nameZ); /* << use A_char[AEGP_MAX_STREAM_MATCH_NAME_SIZE] for buffer */ + + SPAPI A_Err (*AEGP_GetNewParentStreamRef)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamRefH *parent_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetStreamIsModified)( // i.e. changed from defaults, like the UU key + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *modifiedPB); /* << */ + +} AEGP_DynamicStreamSuite2; + +#define kAEGPDynamicStreamSuiteVersion3 3 /* frozen in AE 7.0 */ + +typedef struct AEGP_DynamicStreamSuite3 { + + SPAPI A_Err (*AEGP_GetNewStreamRefForLayer)( // used to start recursive walk of layer, + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetStreamDepth)( // layer is depth 0 + AEGP_StreamRefH streamH, /* >> */ + A_long *depthPL); /* << */ + + + SPAPI A_Err (*AEGP_GetStreamGroupingType)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamGroupingType *group_typeP); /* << */ + + SPAPI A_Err (*AEGP_GetNumStreamsInGroup)( // error on leaf + AEGP_StreamRefH streamH, /* >> */ + A_long *num_streamsPL); /* << */ + + + SPAPI A_Err (*AEGP_GetDynamicStreamFlags)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags *stream_flagsP); /* << */ + + SPAPI A_Err (*AEGP_SetDynamicStreamFlag)( + AEGP_StreamRefH streamH, /* >> */ + AEGP_DynStreamFlags one_flag, /* >> */ + A_Boolean undoableB, /* true if you want this to be an undoable change */ + /* if false, the only legal flag is AEGP_DynStreamFlag_HIDDEN */ + A_Boolean setB); /* >> */ + + + SPAPI A_Err (*AEGP_GetNewStreamRefByIndex)( // legal for namedgroup, indexedgroup, not leaf + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + A_long indexL, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetNewStreamRefByMatchname)( // legal for namedgroup + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH parent_groupH, /* >> */ + const A_char *match_nameZ, /* >> */ + AEGP_StreamRefH *streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_DeleteStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH); /* >> */ // must still dispose the streamref later + + SPAPI A_Err (*AEGP_ReorderStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* <> updated to refer to newly ordered stream */ + A_long new_indexL); /* >> */ + + SPAPI A_Err (*AEGP_DuplicateStream)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + A_long *new_indexPL0); /* << */ + + /* GetStreamName is in main kAEGPStreamSuite, and works on dynamic streams including groups */ + + SPAPI A_Err (*AEGP_SetStreamName)( /* UNDOABLE, only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_StreamRefH streamH, /* >> */ + const A_char *nameZ); /* >> */ + + SPAPI A_Err (*AEGP_CanAddStream)( + AEGP_StreamRefH group_streamH, /* >> */ + const A_char *match_nameZ, /* >> */ + A_Boolean *can_addPB); /* << */ + + SPAPI A_Err (*AEGP_AddStream)( /* UNDOABLE, only valid for AEGP_StreamGroupingType_INDEXED_GROUP */ + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH indexed_group_streamH, /* >> */ + const A_char *match_nameZ, + AEGP_StreamRefH *streamPH0); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetMatchName)( + AEGP_StreamRefH streamH, /* >> */ + A_char *nameZ); /* << use A_char[AEGP_MAX_STREAM_MATCH_NAME_SIZE] for buffer */ + + SPAPI A_Err (*AEGP_GetNewParentStreamRef)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_StreamRefH streamH, /* >> */ + AEGP_StreamRefH *parent_streamPH); /* << must be disposed by caller! */ + + SPAPI A_Err (*AEGP_GetStreamIsModified)( // i.e. changed from defaults, like the UU key + AEGP_StreamRefH streamH, /* >> */ + A_Boolean *modifiedPB); /* << */ + + SPAPI A_Err (*AEGP_GetStreamIndexInParent)( // only valid for children of AEGP_StreamGroupingType_INDEXED_GROUP + AEGP_StreamRefH streamH, /* >> */ + A_long *indexPL); /* << */ + + + +} AEGP_DynamicStreamSuite3; + + +#define kAEGPRenderOptionsSuite "AEGP Render Options Suite" +#define kAEGPRenderOptionsSuiteVersion3 3 /* frozen in AE 7.01 */ + +typedef struct { + // fills out + // Time to 0 + // Time step to the frame duration + // field render to none + // depth is best resolution of item + SPAPI A_Err (*AEGP_NewFromItem)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_RenderOptionsH *optionsPH); /* << */ + + SPAPI A_Err (*AEGP_Duplicate)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderOptionsH *copyPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_RenderOptionsH optionsH); /* >> */ + + SPAPI A_Err (*AEGP_SetTime)( /* the render time */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time); /* >> */ + + SPAPI A_Err (*AEGP_GetTime)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_SetTimeStep)( /* duration of the frame; important for motion blur. */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time_step); /* >> */ + + SPAPI A_Err (*AEGP_GetTimeStep)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timePT); /* << */ + + SPAPI A_Err (*AEGP_SetFieldRender)( /* How fields are to be handled. */ + AEGP_RenderOptionsH optionsH, /* <> */ + PF_Field field_render); /* >> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + AEGP_RenderOptionsH optionsH, /* >> */ + PF_Field *field_renderP); /* << */ + + + SPAPI A_Err (*AEGP_SetWorldType)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_WorldType type); /* >> */ + + SPAPI A_Err (*AEGP_GetWorldType)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + + // 1 == 100% + // 2 == 50% + // ... + SPAPI A_Err (*AEGP_SetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* <> */ + A_short x, /* >> */ + A_short y); /* >> */ + + SPAPI A_Err (*AEGP_GetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_short *xP, /* >> */ + A_short *yP); /* << */ + + SPAPI A_Err (*AEGP_SetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* <> */ + const A_LRect *roiP); /* >> {0,0,0,0} for all*/ + + SPAPI A_Err (*AEGP_GetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_LRect *roiP); /* << */ + + SPAPI A_Err (*AEGP_SetMatteMode)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_MatteMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMatteMode)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_MatteMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetChannelOrder)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_ChannelOrder channel_order); /* >> */ + + SPAPI A_Err (*AEGP_GetChannelOrder)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_ChannelOrder *channelP); /* << */ + + SPAPI A_Err (*AEGP_GetRenderGuideLayers)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Boolean *will_renderPB); /* << */ + + SPAPI A_Err (*AEGP_SetRenderGuideLayers)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Boolean render_themB); /* >> */ + +} AEGP_RenderOptionsSuite3; + + +#define kAEGPRenderOptionsSuite "AEGP Render Options Suite" +#define kAEGPRenderOptionsSuiteVersion2 2 /* frozen in AE 7.0 */ + +typedef struct { + // fills out + // Time to 0 + // Time step to the frame duration + // field render to none + // depth is best resolution of item + SPAPI A_Err (*AEGP_NewFromItem)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_RenderOptionsH *optionsPH); /* << */ + + SPAPI A_Err (*AEGP_Duplicate)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderOptionsH *copyPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_RenderOptionsH optionsH); /* >> */ + + SPAPI A_Err (*AEGP_SetTime)( /* the render time */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time); /* >> */ + + SPAPI A_Err (*AEGP_GetTime)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_SetTimeStep)( /* duration of the frame; important for motion blur. */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time_step); /* >> */ + + SPAPI A_Err (*AEGP_GetTimeStep)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timePT); /* << */ + + SPAPI A_Err (*AEGP_SetFieldRender)( /* How fields are to be handled. */ + AEGP_RenderOptionsH optionsH, /* <> */ + PF_Field field_render); /* >> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + AEGP_RenderOptionsH optionsH, /* >> */ + PF_Field *field_renderP); /* << */ + + + SPAPI A_Err (*AEGP_SetWorldType)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_WorldType type); /* >> */ + + SPAPI A_Err (*AEGP_GetWorldType)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + + // 1 == 100% + // 2 == 50% + // ... + SPAPI A_Err (*AEGP_SetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* <> */ + A_short x, /* >> */ + A_short y); /* >> */ + + SPAPI A_Err (*AEGP_GetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_short *xP, /* >> */ + A_short *yP); /* << */ + + SPAPI A_Err (*AEGP_SetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* <> */ + const A_LRect *roiP); /* >> {0,0,0,0} for all*/ + + SPAPI A_Err (*AEGP_GetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_LRect *roiP); /* << */ + + SPAPI A_Err (*AEGP_SetMatteMode)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_MatteMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMatteMode)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_MatteMode *modeP); /* << */ + + SPAPI A_Err (*AEGP_SetChannelOrder)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_ChannelOrder channel_order); /* >> */ + + SPAPI A_Err (*AEGP_GetChannelOrder)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_ChannelOrder *channelP); /* << */ +} AEGP_RenderOptionsSuite2; + + +#define kAEGPRenderOptionsSuite "AEGP Render Options Suite" +#define kAEGPRenderOptionsSuiteVersion1 1 /* frozen in AE 5.5.1 */ + +typedef struct { + // fills out + // Time to 0 + // Time step to the frame duration + // field render to none + // depth is best resolution of item + SPAPI A_Err (*AEGP_NewFromItem)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_ItemH itemH, /* >> */ + AEGP_RenderOptionsH *optionsPH); /* << */ + + SPAPI A_Err (*AEGP_Duplicate)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_RenderOptionsH *copyPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_RenderOptionsH optionsH); /* >> */ + + SPAPI A_Err (*AEGP_SetTime)( /* the render time */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time); /* >> */ + + SPAPI A_Err (*AEGP_GetTime)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_SetTimeStep)( /* duration of the frame; important for motion blur. */ + AEGP_RenderOptionsH optionsH, /* <> */ + A_Time time_step); /* >> */ + + SPAPI A_Err (*AEGP_GetTimeStep)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_Time *timePT); /* << */ + + SPAPI A_Err (*AEGP_SetFieldRender)( /* How fields are to be handled. */ + AEGP_RenderOptionsH optionsH, /* <> */ + PF_Field field_render); /* >> */ + + SPAPI A_Err (*AEGP_GetFieldRender)( + AEGP_RenderOptionsH optionsH, /* >> */ + PF_Field *field_renderP); /* << */ + + + SPAPI A_Err (*AEGP_SetWorldType)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_WorldType type); /* >> */ + + SPAPI A_Err (*AEGP_GetWorldType)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + + // 1 == 100% + // 2 == 50% + // ... + SPAPI A_Err (*AEGP_SetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* <> */ + A_short x, /* >> */ + A_short y); /* >> */ + + SPAPI A_Err (*AEGP_GetDownsampleFactor)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_short *xP, /* >> */ + A_short *yP); /* << */ + + SPAPI A_Err (*AEGP_SetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* <> */ + const A_LRect *roiP); /* >> {0,0,0,0} for all*/ + + SPAPI A_Err (*AEGP_GetRegionOfInterest)( + AEGP_RenderOptionsH optionsH, /* >> */ + A_LRect *roiP); /* << */ + + SPAPI A_Err (*AEGP_SetMatteMode)( + AEGP_RenderOptionsH optionsH, /* <> */ + AEGP_MatteMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMatteMode)( + AEGP_RenderOptionsH optionsH, /* >> */ + AEGP_MatteMode *modeP); /* << */ + +} AEGP_RenderOptionsSuite1; + + + + +#define kAEGPLayerRenderOptionsSuite "AEGP Layer Render Options Suite" +#define kAEGPLayerRenderOptionsSuiteVersion1 1 /* frozen in 13.0 */ + +typedef struct { + // optionsPH must be disposed by calling code + // + // fills out + // Time to the layer's current time + // Time step to layer's frame duration + // ROI to the layer's nominal bounds + // EffectsToRender to "all" + SPAPI A_Err (*AEGP_NewFromLayer)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_LayerH layerH, /* >> */ + AEGP_LayerRenderOptionsH *optionsPH); /* << */ + + // optionsPH must be disposed by calling code + // like AEGP_NewFromLayer, but sets EffectsToRender to be the index fof effectH + SPAPI A_Err (*AEGP_NewFromUpstreamOfEffect)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_EffectRefH effectH, /* >> */ + AEGP_LayerRenderOptionsH *optionsPH); /* << */ + + // copyPH must be disposed by calling code + SPAPI A_Err (*AEGP_Duplicate)( + AEGP_PluginID plugin_id, /* >> */ + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_LayerRenderOptionsH *copyPH); /* << */ + + SPAPI A_Err (*AEGP_Dispose)( + AEGP_LayerRenderOptionsH optionsH); /* >> */ + + SPAPI A_Err (*AEGP_SetTime)( /* the render time */ + AEGP_LayerRenderOptionsH optionsH, /* <> */ + A_Time time); /* >> */ + + SPAPI A_Err (*AEGP_GetTime)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + A_Time *timeP); /* << */ + + SPAPI A_Err (*AEGP_SetTimeStep)( /* duration of the frame; important for motion blur. */ + AEGP_LayerRenderOptionsH optionsH, /* <> */ + A_Time time_step); /* >> */ + + SPAPI A_Err (*AEGP_GetTimeStep)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + A_Time *timePT); /* << */ + + SPAPI A_Err (*AEGP_SetWorldType)( + AEGP_LayerRenderOptionsH optionsH, /* <> */ + AEGP_WorldType type); /* >> */ + + SPAPI A_Err (*AEGP_GetWorldType)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_WorldType *typeP); /* << */ + + // 1 == 100% + // 2 == 50% + // ... + SPAPI A_Err (*AEGP_SetDownsampleFactor)( + AEGP_LayerRenderOptionsH optionsH, /* <> */ + A_short x, /* >> */ + A_short y); /* >> */ + + SPAPI A_Err (*AEGP_GetDownsampleFactor)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + A_short *xP, /* >> */ + A_short *yP); /* << */ + + SPAPI A_Err (*AEGP_SetMatteMode)( + AEGP_LayerRenderOptionsH optionsH, /* <> */ + AEGP_MatteMode mode); /* >> */ + + SPAPI A_Err (*AEGP_GetMatteMode)( + AEGP_LayerRenderOptionsH optionsH, /* >> */ + AEGP_MatteMode *modeP); /* << */ +} AEGP_LayerRenderOptionsSuite1; + + + + +#define kAEGPColorSettingsSuiteVersion1 1 // frozen in AE 7.0 + +typedef struct AEGP_ColorSettingsSuite1 { + + SPAPI A_Err (*AEGP_GetBlendingTables)( + PR_RenderContextH render_contextH, + PF_EffectBlendingTables *blending_tables); + +} AEGP_ColorSettingsSuite1; + +#define kAEGPColorSettingsSuiteVersion2 3 // frozen in AE 8.0 + +typedef struct AEGP_ColorSettingsSuite2 { + + SPAPI A_Err (*AEGP_GetBlendingTables)( + PR_RenderContextH render_contextH, + PF_EffectBlendingTables *blending_tables); + + SPAPI A_Err (*AEGP_DoesViewHaveColorSpaceXform)( + AEGP_ItemViewP viewP, // >> + A_Boolean *has_xformPB); // << + + SPAPI A_Err (*AEGP_XformWorkingToViewColorSpace)( + AEGP_ItemViewP viewP, // >> + AEGP_WorldH srcH, // in + AEGP_WorldH dstH); // out; must be the same size (can be the same as source) + + SPAPI A_Err (*AEGP_GetNewWorkingSpaceColorProfile)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_CompH compH, // >> + AEGP_ColorProfileP *color_profilePP); // << caller must dispose with AEGP_DisposeColorProfile + + SPAPI A_Err (*AEGP_GetNewColorProfileFromICCProfile)( + AEGP_PluginID aegp_plugin_id, // >> + A_long icc_sizeL, // >> icc profile size + const void *icc_dataPV, // >> icc profile + AEGP_ColorProfileP *color_profilePP); // << builds AEGP_ColorProfile from icc profile; caller must dispose with AEGP_DisposeColorProfile + + SPAPI A_Err (*AEGP_GetNewICCProfileFromColorProfile)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_ConstColorProfileP color_profileP, // >> + AEGP_MemHandle *icc_profilePH); // << extract icc profile from AEGP_ColorProfile; caller must dispose with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetNewColorProfileDescription)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_ConstColorProfileP color_profileP, // >> + AEGP_MemHandle *unicode_descPH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_DisposeColorProfile)( + AEGP_ColorProfileP color_profileP); // >> + + SPAPI A_Err (*AEGP_GetColorProfileApproximateGamma)( + AEGP_ConstColorProfileP color_profileP, // >> + A_FpShort *approx_gammaP); // << + + SPAPI A_Err (*AEGP_IsRGBColorProfile)( + AEGP_ConstColorProfileP color_profileP, // << + A_Boolean *is_rgbPB); // >> + + +} AEGP_ColorSettingsSuite2; + +#define kAEGPMarkerSuiteVersion1 1 /* frozen in AE 8.0 */ + +typedef struct AEGP_MarkerSuite1 { + + SPAPI A_Err (*AEGP_NewMarker)( + AEGP_MarkerValP *markerPP); + + SPAPI A_Err (*AEGP_DisposeMarker)( + AEGP_MarkerValP markerP); + + SPAPI A_Err (*AEGP_DuplicateMarker)( + AEGP_MarkerValP markerP, // >> + AEGP_MarkerValP *new_markerP); // << + + SPAPI A_Err (*AEGP_SetMarkerFlag)( + AEGP_MarkerValP markerP, // >> + AEGP_MarkerFlagType flagType, // >> + A_Boolean valueB); // >> + + SPAPI A_Err (*AEGP_GetMarkerFlag)( + AEGP_ConstMarkerValP markerP, // >> + AEGP_MarkerFlagType flagType, // >> + A_Boolean *valueBP); // << + + SPAPI A_Err (*AEGP_GetMarkerString)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_ConstMarkerValP markerP, // >> + AEGP_MarkerStringType strType, // >> + AEGP_MemHandle *unicodePH); /* << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err (*AEGP_SetMarkerString)( + AEGP_MarkerValP markerP, // <<>> + AEGP_MarkerStringType strType, // >> + const A_u_short *unicodeP, // >> + A_long lengthL); // >> number of characters + + SPAPI A_Err (*AEGP_CountCuePointParams)( + AEGP_ConstMarkerValP markerP, // >> + A_long *paramsLP); // << + + SPAPI A_Err (*AEGP_GetIndCuePointParam)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_ConstMarkerValP markerP, // >> + A_long param_indexL, // >> must be between 0 and count - 1. else error + AEGP_MemHandle *unicodeKeyPH, // << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *unicodeValuePH); // << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_SetIndCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL, // must be between 0 and count - 1. else error + const A_u_short *unicodeKeyP, // >> UTF16 + A_long key_lengthL, // >> number of characters + const A_u_short *unicodeValueP, // >> UTF16 + A_long value_lengthL); // >> number of characters + + // this call is followed by AEGP_SetIndCuePointParam() to actually set the data + // the ONLY thing this function does is reserve the space for the param, at the provided index + SPAPI A_Err (*AEGP_InsertCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL); // must be between 0 and count. else error + + SPAPI A_Err (*AEGP_DeleteIndCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL); // must be between 0 and count - 1. else error + +} AEGP_MarkerSuite1; + +#define kAEGPMarkerSuiteVersion2 2 /* frozen in AE 9.0 */ + +typedef struct AEGP_MarkerSuite2 { + + SPAPI A_Err (*AEGP_NewMarker)( + AEGP_MarkerValP *markerPP); + + SPAPI A_Err (*AEGP_DisposeMarker)( + AEGP_MarkerValP markerP); + + SPAPI A_Err (*AEGP_DuplicateMarker)( + AEGP_MarkerValP markerP, // >> + AEGP_MarkerValP *new_markerP); // << + + SPAPI A_Err (*AEGP_SetMarkerFlag)( + AEGP_MarkerValP markerP, // >> + AEGP_MarkerFlagType flagType, // >> + A_Boolean valueB); // >> + + SPAPI A_Err (*AEGP_GetMarkerFlag)( + AEGP_ConstMarkerValP markerP, // >> + AEGP_MarkerFlagType flagType, // >> + A_Boolean *valueBP); // << + + SPAPI A_Err (*AEGP_GetMarkerString)( + AEGP_PluginID aegp_plugin_id, /* >> */ + AEGP_ConstMarkerValP markerP, // >> + AEGP_MarkerStringType strType, // >> + AEGP_MemHandle *unicodePH); /* << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle */ + + SPAPI A_Err (*AEGP_SetMarkerString)( + AEGP_MarkerValP markerP, // <<>> + AEGP_MarkerStringType strType, // >> + const A_u_short *unicodeP, // >> + A_long lengthL); // >> number of characters + + SPAPI A_Err (*AEGP_CountCuePointParams)( + AEGP_ConstMarkerValP markerP, // >> + A_long *paramsLP); // << + + SPAPI A_Err (*AEGP_GetIndCuePointParam)( + AEGP_PluginID aegp_plugin_id, // >> + AEGP_ConstMarkerValP markerP, // >> + A_long param_indexL, // >> must be between 0 and count - 1. else error + AEGP_MemHandle *unicodeKeyPH, // << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle + AEGP_MemHandle *unicodeValuePH); // << handle of A_u_short, UTF16, NULL terminated, must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_SetIndCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL, // must be between 0 and count - 1. else error + const A_u_short *unicodeKeyP, // >> UTF16 + A_long key_lengthL, // >> number of characters + const A_u_short *unicodeValueP, // >> UTF16 + A_long value_lengthL); // >> number of characters + + // this call is followed by AEGP_SetIndCuePointParam() to actually set the data + // the ONLY thing this function does is reserve the space for the param, at the provided index + SPAPI A_Err (*AEGP_InsertCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL); // must be between 0 and count. else error + + SPAPI A_Err (*AEGP_DeleteIndCuePointParam)( + AEGP_MarkerValP markerP, // >> + A_long param_indexL); // must be between 0 and count - 1. else error + + SPAPI A_Err (*AEGP_SetMarkerDuration)( + AEGP_MarkerValP markerP, // >> + const A_Time *durationPT); // >> + + + SPAPI A_Err (*AEGP_GetMarkerDuration)( + AEGP_ConstMarkerValP markerP, // >> + A_Time *durationPT); // << + + +} AEGP_MarkerSuite2; + +#define kAEGPProjSuiteVersion5 8 /* frozen in AE 10.0 */ + +typedef struct AEGP_ProjSuite5 { + + SPAPI A_Err (*AEGP_GetNumProjects)( /* will always (in 5.0) return 1 if project is open */ + A_long *num_projPL); /* << */ + + SPAPI A_Err (*AEGP_GetProjectByIndex)( + A_long proj_indexL, /* >> */ + AEGP_ProjectH *projPH); /* << */ + + SPAPI A_Err (*AEGP_GetProjectName)( + AEGP_ProjectH projH, /* >> */ + A_char *nameZ); /* << space for A_char[AEGP_MAX_PROJ_NAME_SIZE] */ + + SPAPI A_Err (*AEGP_GetProjectPath)( + AEGP_ProjectH projH, /* >> */ + AEGP_MemHandle *unicode_pathPH); // << empty string if no file. handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetProjectRootFolder)( + AEGP_ProjectH projH, /* >> */ + AEGP_ItemH *root_folderPH); /* << */ + + SPAPI A_Err (*AEGP_SaveProjectToPath)( + AEGP_ProjectH projH, /* >> */ + const A_UTF16Char *pathZ); // >> null terminated unicode path with platform separators + + SPAPI A_Err (*AEGP_GetProjectTimeDisplay)( + AEGP_ProjectH projH, /* >> */ + AEGP_TimeDisplay2 *time_displayP); /* << */ + + SPAPI A_Err (*AEGP_SetProjectTimeDisplay)( /* UNDOABLE */ + AEGP_ProjectH projH, /* <> */ + const AEGP_TimeDisplay2 *time_displayP); /* >> */ + + SPAPI A_Err (*AEGP_ProjectIsDirty)( + AEGP_ProjectH projH, /* >> */ + A_Boolean *is_dirtyPB); /* << */ + + SPAPI A_Err (*AEGP_SaveProjectAs)( + AEGP_ProjectH projH, /* >> */ + const A_UTF16Char *pathZ); // >> null terminated unicode path with platform separators + + SPAPI A_Err (*AEGP_NewProject)( + AEGP_ProjectH *new_projectPH); /* << WARNING: Will close any open projects! */ + + // WARNING: Will close any open projects! + SPAPI A_Err (*AEGP_OpenProjectFromPath)( + const A_UTF16Char *pathZ, // >> null terminated unicode path with platform separators + AEGP_ProjectH *projectPH); /* << */ + + SPAPI A_Err (*AEGP_GetProjectBitDepth)( + AEGP_ProjectH projectH, /* >> */ + AEGP_ProjBitDepth *bit_depthP); /* << */ + + SPAPI A_Err (*AEGP_SetProjectBitDepth)( /* UNDOABLE */ + AEGP_ProjectH projectH, /* >> */ + AEGP_ProjBitDepth bit_depth); /* >> */ + +} AEGP_ProjSuite5; + +#define kAEGPPersistentDataSuiteVersion3 3 /* frozen in AE 10.0 */ + +typedef struct { + // get a handle of the application blob, + // modifying this will modify the application + SPAPI A_Err (*AEGP_GetApplicationBlob)( + AEGP_PersistentBlobH *blobPH); /* >> */ + + // section and value key management + SPAPI A_Err (*AEGP_GetNumSections)( + AEGP_PersistentBlobH blobH, /* >> */ + A_long *num_sectionPL); /* << */ + + SPAPI A_Err (*AEGP_GetSectionKeyByIndex)( + AEGP_PersistentBlobH blobH, /* >> */ + A_long section_index, /* >> */ + A_long max_section_size, /* >> */ + A_char *section_keyZ); /* << */ + + SPAPI A_Err (*AEGP_DoesKeyExist)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_Boolean *existsPB); /* << */ + + SPAPI A_Err (*AEGP_GetNumKeys)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + A_long *num_keysPL); /* << */ + + SPAPI A_Err (*AEGP_GetValueKeyByIndex)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + A_long key_index, /* >> */ + A_long max_key_size, /* >> */ + A_char *value_keyZ); /* << */ + + // data access and manipulation + + // For the entry points below, if a given key is not found, + // the default value is both written to the blobH and + // returned as the value; if no default is provided, a blank value will be written + // and returned + + SPAPI A_Err (*AEGP_GetDataHandle)( + AEGP_PluginID plugin_id, + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + AEGP_MemHandle defaultH0, /* >> never adopted, NULL means no default data */ + AEGP_MemHandle *valuePH); /* << newly allocated, owned by caller, NULL if would be zero sized handle */ + + SPAPI A_Err (*AEGP_GetData)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_u_long data_sizeLu, /* >> bufPV & default must be this big, if pref isn't then the default will be used */ + const void *defaultPV0, /* >> NULL means all zeros for default */ + void *bufPV); /* << */ + + SPAPI A_Err (*AEGP_GetString)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const A_char *defaultZ0, /* >> NULL means '\0' is the default */ + A_u_long buf_sizeLu, /* >> size of buffer. Behavior dependent on actual_buf_sizeLu0 */ + A_char *bufZ, /* << will be "" if buf_size is too small */ + A_u_long *actual_buf_sizeLu0); /* << actual size needed to store the buffer (includes terminating NULL). Pass NULL for error reporting if size mismatch.*/ + + SPAPI A_Err (*AEGP_GetLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_long defaultL, /* >> */ + A_long *valuePL); /* << */ + + SPAPI A_Err (*AEGP_GetFpLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_FpLong defaultF, /* >> */ + A_FpLong *valuePF); /* << */ + + // setters + SPAPI A_Err (*AEGP_SetDataHandle)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const AEGP_MemHandle valueH); /* >> not adopted */ + + SPAPI A_Err (*AEGP_SetData)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_u_long data_sizeLu, /* >> */ + const void *dataPV); /* >> */ + + SPAPI A_Err (*AEGP_SetString)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + const A_char *strZ); /* >> */ + + SPAPI A_Err (*AEGP_SetLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_long valueL); /* >> */ + + + SPAPI A_Err (*AEGP_SetFpLong)( + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ, /* >> */ + A_FpLong valueF); /* >> */ + + SPAPI A_Err (*AEGP_DeleteEntry)( /* no error if entry not found */ + AEGP_PersistentBlobH blobH, /* >> */ + const A_char *section_keyZ, /* >> */ + const A_char *value_keyZ); /* >> */ + + SPAPI A_Err (*AEGP_GetPrefsDirectory)( + AEGP_MemHandle *unicode_pathPH); // << empty string if no file. handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + +} AEGP_PersistentDataSuite3; + +#define kAEGPIterateSuite "AEGP Iterate Suite" +#define kAEGPIterateSuiteVersion1 1 /* frozen in AE 5.0 */ + +typedef struct AEGP_IterateSuite1 { + + SPAPI A_Err(*AEGP_GetNumThreads)( + A_long* num_threadsPL); + + + SPAPI A_Err(*AEGP_IterateGeneric)( + A_long iterationsL, /* >> */ // can be PF_Iterations_ONCE_PER_PROCESSOR + void* refconPV, /* >> */ + A_Err(*fn_func)(void* refconPV, /* >> */ + A_long thread_indexL, /* >> */ + A_long i, /* >> */ + A_long iterationsL)); /* >> */ + +} AEGP_IterateSuite1; + +#define kAEGPIOInSuite "AEGP IO In Suite" +#define kAEGPIOInSuiteVersion4 5 /* frozen in AE 10 */ + +typedef struct AEGP_IOInSuite4 { + + SPAPI A_Err (*AEGP_GetInSpecOptionsHandle)( + AEIO_InSpecH inH, /* >> */ + void **optionsPPV); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecOptionsHandle)( + AEIO_InSpecH inH, /* >> */ + void *optionsPV, /* >> */ + void **old_optionsPPV); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecFilePath)( + AEIO_InSpecH inH, /* >> */ + AEGP_MemHandle *unicode_pathPH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + SPAPI A_Err (*AEGP_GetInSpecNativeFPS)( + AEIO_InSpecH inH, /* >> */ + A_Fixed *native_fpsP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecNativeFPS)( + AEIO_InSpecH inH, /* >> */ + A_Fixed native_fps); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecDepth)( + AEIO_InSpecH inH, /* >> */ + A_short *depthPS); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecDepth)( + AEIO_InSpecH inH, /* >> */ + A_short depthS); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_FileSize *sizePL); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_FileSize sizeL); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecInterlaceLabel)( + AEIO_InSpecH inH, /* >> */ + FIEL_Label *interlaceP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecInterlaceLabel)( + AEIO_InSpecH inH, /* >> */ + const FIEL_Label *interlaceP); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecAlphaLabel)( + AEIO_InSpecH inH, /* >> */ + AEIO_AlphaLabel *alphaP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecAlphaLabel)( + AEIO_InSpecH inH, /* >> */ + const AEIO_AlphaLabel *alphaP); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecDuration)( + AEIO_InSpecH inH, /* >> */ + A_Time *durationP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecDuration)( + AEIO_InSpecH inH, /* >> */ + const A_Time *durationP); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecDimensions)( + AEIO_InSpecH inH, /* >> */ + A_long *widthPL0, /* << */ + A_long *heightPL0); + + SPAPI A_Err (*AEGP_SetInSpecDimensions)( + AEIO_InSpecH inH, /* >> */ + A_long widthL, /* >> */ + A_long heightL); /* >> */ + + SPAPI A_Err (*AEGP_InSpecGetRationalDimensions)( + AEIO_InSpecH inH, /* >> */ + const AEIO_RationalScale *rs0, /* << */ + A_long *width0, /* << */ + A_long *height0, /* << */ + A_Rect *r0); /* << */ + + SPAPI A_Err (*AEGP_GetInSpecHSF)( + AEIO_InSpecH inH, /* >> */ + A_Ratio *hsfP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecHSF)( + AEIO_InSpecH inH, /* >> */ + const A_Ratio *hsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundRate)( + AEIO_InSpecH inH, /* >> */ + A_FpLong *ratePF); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundRate)( + AEIO_InSpecH inH, /* >> */ + A_FpLong rateF); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundEncoding)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndEncoding *encodingP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundEncoding)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndEncoding encoding); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundSampleSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndSampleSize *bytes_per_sampleP);/* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundSampleSize)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndSampleSize bytes_per_sample); /* >> */ + + SPAPI A_Err (*AEGP_GetInSpecSoundChannels)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndChannels *num_channelsP); /* << */ + + SPAPI A_Err (*AEGP_SetInSpecSoundChannels)( + AEIO_InSpecH inH, /* >> */ + AEIO_SndChannels num_channels); /* >> */ + + SPAPI A_Err (*AEGP_AddAuxExtMap)( + const A_char *extension, /* >> */ + A_long file_type, /* >> */ + A_long creator); /* >> */ + + // In case of RGB data, if there is an embedded icc profile, build AEGP_ColorProfile out of this icc profile using AEGP_GetNewColorProfileFromICCProfile and pass it to + // AEGP_SetInSpecEmbeddedColorProfile, with profile description set to NULL. + // + // In case of non-RGB data, if there is an embedded non-RGB icc profile or you know the color space the data is in, pass its description as a null-terminated unicode string + // to AEGP_SetInSpecEmbeddedColorProfile, with color profile set to NULL. Doing this disables color management UI that allows user to affect + // profile choice in the application UI. + // + // If you are unpacking non-RGB data directly into working space (to get working space use AEGP_GetNewWorkingSpaceColorProfile), you are done. + // + // If you are unpacking non-RGB data into specific RGB color space, you must pass the profile describing this space to AEGP_SetInSpecAssignedColorProfile. + // Otherwise, your RGB data will be incorrectly interpreted as being in working space. + // + // Either color profile or profile description should be NULL in AEGP_SetInSpecEmbeddedColorProfile. You cannot use both. + SPAPI A_Err (*AEGP_SetInSpecEmbeddedColorProfile)( + AEIO_InSpecH inH, // << + AEGP_ConstColorProfileP color_profileP0, // << + const A_UTF16Char *profile_descP0); // << pointer to a null-terminated unicode string + + // Assign valid RGB profile to the footage + SPAPI A_Err (*AEGP_SetInSpecAssignedColorProfile)( + AEIO_InSpecH inH, // << + AEGP_ConstColorProfileP color_profileP); // << + +} AEGP_IOInSuite4; + +#define kAEGPIOOutSuiteVersion4 7 /* frozen in AE 10.0 */ + +typedef struct AEGP_IOOutSuite4 { + SPAPI A_Err (*AEGP_GetOutSpecOptionsHandle)( + AEIO_OutSpecH outH, /* >> */ + void **optionsPPV); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecOptionsHandle)( + AEIO_OutSpecH outH, /* >> */ + void *optionsPV, /* >> */ + void **old_optionsPPVO); /* <> */ + + SPAPI A_Err (*AEGP_GetOutSpecFilePath)( + AEIO_OutSpecH outH, /* >> */ + AEGP_MemHandle *unicode_pathPH, // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + A_Boolean *file_reservedPB); /* << If the file is reserved, do not create the file. + Otherwise, multi-machine rendering can fail. + If true, an empty file has already been created. */ + + SPAPI A_Err (*AEGP_GetOutSpecFPS)( + AEIO_OutSpecH outH, /* >> */ + A_Fixed *native_fpsP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecNativeFPS)( + AEIO_OutSpecH outH, /* >> */ + A_Fixed native_fpsP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecDepth)( + AEIO_OutSpecH outH, /* >> */ + A_short *depthPS); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecDepth)( + AEIO_OutSpecH outH, /* >> */ + A_short depthPS); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecInterlaceLabel)( + AEIO_OutSpecH outH, /* >> */ + FIEL_Label *interlaceP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecInterlaceLabel)( + AEIO_OutSpecH outH, /* >> */ + const FIEL_Label *interlaceP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecAlphaLabel)( + AEIO_OutSpecH outH, /* >> */ + AEIO_AlphaLabel *alphaP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecAlphaLabel)( + AEIO_OutSpecH outH, /* >> */ + const AEIO_AlphaLabel *alphaP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecDuration)( + AEIO_OutSpecH outH, /* >> */ + A_Time *durationP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecDuration)( + AEIO_OutSpecH outH, /* >> */ + const A_Time *durationP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecDimensions)( + AEIO_OutSpecH outH, /* >> */ + A_long *widthPL, /* << */ + A_long *heightPL); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecHSF)( + AEIO_OutSpecH outH, /* >> */ + A_Ratio *hsfP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecHSF)( + AEIO_OutSpecH outH, /* >> */ + const A_Ratio *hsfP); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundRate)( + AEIO_OutSpecH outH, /* >> */ + A_FpLong *ratePF); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundRate)( + AEIO_OutSpecH outH, /* >> */ + A_FpLong rateF); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundEncoding)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndEncoding *encodingP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundEncoding)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndEncoding encoding); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundSampleSize)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndSampleSize *bytes_per_sampleP);/* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundSampleSize)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndSampleSize bytes_per_sample); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecSoundChannels)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndChannels *num_channelsP); /* << */ + + SPAPI A_Err (*AEGP_SetOutSpecSoundChannels)( + AEIO_OutSpecH outH, /* >> */ + AEIO_SndChannels num_channels); /* >> */ + + SPAPI A_Err (*AEGP_GetOutSpecIsStill)( + AEIO_OutSpecH outH, /* >> */ + A_Boolean *is_stillPB); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecPosterTime)( + AEIO_OutSpecH outH, /* >> */ + A_Time *poster_timeP); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecStartFrame)( + AEIO_OutSpecH outH, /* >> */ + A_long *start_frameP); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecPullDown)( + AEIO_OutSpecH outH, /* >> */ + AEIO_Pulldown *pulldownP); /* << */ + + SPAPI A_Err (*AEGP_GetOutSpecIsMissing)( + AEIO_OutSpecH outH, /* >> */ + A_Boolean *missingPB); /* << */ + + // see if you need to embed outspec's color profile as an icc profile + SPAPI A_Err (*AEGP_GetOutSpecShouldEmbedICCProfile)( + AEIO_OutSpecH outH, // >> + A_Boolean *embedPB); // << + + // query outspec's color profile + SPAPI A_Err (*AEGP_GetNewOutSpecColorProfile)( + AEGP_PluginID aegp_plugin_id, // >> + AEIO_OutSpecH outH, // >> + AEGP_ColorProfileP *color_profilePP); // << output color space; caller must dispose with AEGP_DisposeColorProfile + + // Fails if rq_itemP is not found. + // This API would also fail if the outH is not a confirmed outH and is a copy. + // e.g. if the Output Module settings dialog is Open. + SPAPI A_Err (*AEGP_GetOutSpecOutputModule)( + AEIO_OutSpecH outH, /* >> */ + AEGP_RQItemRefH *rq_itemP, /* << */ + AEGP_OutputModuleRefH *om_refP); /* << */ + + +} AEGP_IOOutSuite4; + +#define kAEGPFIMSuiteVersion3 3 /* frozen in AE 10.0 */ +typedef struct { + SPAPI A_Err (*AEGP_RegisterImportFlavor)( + const A_char *nameZ, // format name you'd like to appear + // in AE's Import Dialog Format pop-up + // menu. + // Limited to AE_FIM_MAX_IMPORT_FLAVOR_NAME_LEN. + // Everything after that will be truncated. + AE_FIM_ImportFlavorRef *imp_refP); // On return it is set to a valid opaque ref. + // If error occured, it will be returned to + // the caller and ref will be set to a special + // value - AE_FIM_ImportFlavorRef_NONE. + + SPAPI A_Err (*AEGP_RegisterImportFlavorFileTypes)( + AE_FIM_ImportFlavorRef imp_ref, // Received from AEGP_RegisterImportFlavor + A_long num_filekindsL, // number of supported file types for this format + const AEIO_FileKind *kindsAP, // Array of supported file types for this format + A_long num_fileextsL, // number of supported file exts for this format + const AEIO_FileKind *extsAP); // Array of supported file exts for this format + + + SPAPI A_Err (*AEGP_RegisterImportFlavorImportCallbacks)( + AE_FIM_ImportFlavorRef imp_ref, // Received from AEGP_RegisterImportFlavor + AE_FIM_ImportFlags single_flag, // You can register callbacks only per single flag + // this also registers the flag with the import flavor + const AE_FIM_ImportCallbacks *imp_cbsP); // Callbacks your format installs per each flag + + // optionally call once from AE_FIM_ImportFileCB. This is used by the application when re-importing + // from the render queue and replacing an existing item. + SPAPI A_Err (*AEGP_SetImportedItem)( + AE_FIM_ImportOptions imp_options, /* <> */ + AEGP_ItemH imported_itemH); /* >> */ + +} AEGP_FIMSuite3; + + +#include diff --git a/External/AE SDK/Headers/AE_GeneralPlugPanels.h b/External/AE SDK/Headers/AE_GeneralPlugPanels.h new file mode 100644 index 00000000..9f1e5e75 --- /dev/null +++ b/External/AE SDK/Headers/AE_GeneralPlugPanels.h @@ -0,0 +1,134 @@ +#ifndef _AEGP_PANELS_H_ +#define _AEGP_PANELS_H_ + +#include "AE_GeneralPlug.h" + +#if defined(__GNUC__) && defined(__MACH__) + #if defined(__LP64__) + #include + typedef NSView *AEGP_PlatformViewRef; + #else + typedef HIViewRef AEGP_PlatformViewRef; + #endif +#endif + +#if defined(WIN32) + #include + typedef HWND AEGP_PlatformViewRef; +#endif + +typedef struct _AEGP_CreatePanelRefcon *AEGP_CreatePanelRefcon; +typedef struct _AEGP_PanelRefcon *AEGP_PanelRefcon; + +#ifndef AEGP_INTERNAL + // opaque for everyone else + typedef struct _AEGP_PanelH *AEGP_PanelH; +#endif + + + +#include + + +enum {AEGP_FlyoutMenuCmdID_NONE = 0}; +typedef A_long AEGP_FlyoutMenuCmdID; + + +enum { + AEGP_FlyoutMenuMarkType_NORMAL, + AEGP_FlyoutMenuMarkType_CHECKED, + AEGP_FlyoutMenuMarkType_RADIO_BULLET, + AEGP_FlyoutMenuMarkType_SEPARATOR +}; +typedef A_long AEGP_FlyoutMenuMarkType; + +typedef A_long AEGP_FlyoutMenuIndent; + + +typedef struct +{ + AEGP_FlyoutMenuIndent indent; + AEGP_FlyoutMenuMarkType type; + A_Boolean enabledB; + AEGP_FlyoutMenuCmdID cmdID; // limited to MAX(A_long) - 201; + const A_u_char* utf8NameZ; +}AEGP_FlyoutMenuItem; + +/* +flyout menu's are a simple declarative structure + +AEGP_FlyoutMenuItem myMenu[] = { + {1, AEGP_FlyoutMenuMarkType_NORMAL, FALSE, AEGP_FlyoutMenuCmdID_NONE, "Hi!" }, + {1, AEGP_FlyoutMenuMarkType_SEPARATOR, TRUE, AEGP_FlyoutMenuCmdID_NONE, NULL }, + {1, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, AEGP_FlyoutMenuCmdID_NONE, "Set BG Color" }, + {2, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, PT_MenuCmd_RED, "Red" }, + {2, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, PT_MenuCmd_GREEN, "Green" }, + {2, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, PT_MenuCmd_BLUE, "Blue" }, + {1, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, PT_MenuCmd_STANDARD, "Normal Fill Color" }, + {1, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, AEGP_FlyoutMenuCmdID_NONE, "Set Title" }, + {2, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, PT_MenuCmd_TITLE_LONGER, "Longer" }, + {2, AEGP_FlyoutMenuMarkType_NORMAL, TRUE, PT_MenuCmd_TITLE_SHORTER, "Shorter" } +}; + + +*/ + +typedef struct { + // no more than 5 snap sizes. Our algo can't really cope and it confuses + // the user. + A_Err (*GetSnapSizes)(AEGP_PanelRefcon refcon, A_LPoint* snapSizes, A_long * numSizesP); + + + A_Err (*PopulateFlyout)(AEGP_PanelRefcon refcon, AEGP_FlyoutMenuItem* itemsP, A_long * in_out_numItemsP); + A_Err (*DoFlyoutCommand)(AEGP_PanelRefcon refcon, AEGP_FlyoutMenuCmdID commandID); +} AEGP_PanelFunctions1; + +typedef A_Err (*AEGP_CreatePanelHook)( + AEGP_GlobalRefcon plugin_refconP, + AEGP_CreatePanelRefcon refconP, + AEGP_PlatformViewRef container, + AEGP_PanelH panelH, + AEGP_PanelFunctions1* outFunctionTable, + AEGP_PanelRefcon* outRefcon); +#define kAEGPPanelSuite "AEGP Workspace Panel Suite" +#define kAEGPPanelSuiteVersion1 1 /* frozen in AE 8.0 */ + +typedef struct { + SPAPI A_Err (*AEGP_RegisterCreatePanelHook)( + AEGP_PluginID in_plugin_id, + const A_u_char* in_utf8_match_nameZ, // do not localize + AEGP_CreatePanelHook in_update_menu_hook_func, + AEGP_CreatePanelRefcon in_refconP, + A_Boolean in_paint_backgroundB); + + + SPAPI A_Err (*AEGP_UnRegisterCreatePanelHook)( + const A_u_char* in_utf8_match_nameZ); // do not localize match name + + SPAPI A_Err (*AEGP_SetTitle)( + AEGP_PanelH in_panelH, + const A_u_char* in_utf8_nameZ // use this to localize the user visible name of the panel + ); + + /** Does the standard 'Window' menu operation + If tab is not in workspace, it creates it. + Otherwise, if the tab is not the front most tab in it's frame, it is made frontmost + Else, if it is visible and frontmost, it is closed. + */ + SPAPI A_Err (*AEGP_ToggleVisibility)( + const A_u_char* in_utf8_match_nameZ + ); + + SPAPI A_Err (*AEGP_IsShown)( + const A_u_char* in_utf8_match_nameZ, + A_Boolean* out_tab_is_shownB, + A_Boolean* out_panel_is_frontmostB + ); + +} AEGP_PanelSuite1; + + +#include + + +#endif \ No newline at end of file diff --git a/External/AE SDK/Headers/AE_GeneralPlugPost.h b/External/AE SDK/Headers/AE_GeneralPlugPost.h new file mode 100644 index 00000000..7b5fba7b --- /dev/null +++ b/External/AE SDK/Headers/AE_GeneralPlugPost.h @@ -0,0 +1,16 @@ + +#ifdef __cplusplus +} // end extern "C" +#endif + + + +#include + + + +#ifndef _AE_GENERAL_PLUG_PRE___ + #error "AE_GeneralPlugPost.h not balanced" +#else + #undef _AE_GENERAL_PLUG_PRE___ +#endif \ No newline at end of file diff --git a/External/AE SDK/Headers/AE_GeneralPlugPre.h b/External/AE SDK/Headers/AE_GeneralPlugPre.h new file mode 100644 index 00000000..8b2e28d9 --- /dev/null +++ b/External/AE SDK/Headers/AE_GeneralPlugPre.h @@ -0,0 +1,15 @@ + +/* This file should be included after all headers, but before the definition of any suites +or data structures. +*/ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _AE_GENERAL_PLUG_PRE___ +#error "AE_GeneralPlugPre.h not balanced" +#endif + +#define _AE_GENERAL_PLUG_PRE___ \ No newline at end of file diff --git a/External/AE SDK/Headers/AE_HashSuite.h b/External/AE SDK/Headers/AE_HashSuite.h new file mode 100644 index 00000000..04859b8a --- /dev/null +++ b/External/AE SDK/Headers/AE_HashSuite.h @@ -0,0 +1,52 @@ +/******************************************************************** +* ADOBE CONFIDENTIAL +* __________________ +* +* Copyright 2020 Adobe Inc. +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains +* the property of Adobe and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe +* and its suppliers and are protected by all applicable intellectual +* property laws, including trade secret and copyright laws. +* Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained +* from Adobe. +********************************************************************/ + +#ifndef _H_AE_HashSuite + #define _H_AE_HashSuite + +#ifdef AEGP_INTERNAL + #include +#endif + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +#define kAEGPHashSuite "AEGP Hash Suite" +#define kAEGPHashSuiteVersion1 1 /* frozen in AE 17.5.1 */ + +typedef struct { + + SPAPI A_Err (*AEGP_CreateHashFromPtr)( + const A_u_longlong buf_sizeLu, /* >> size of the buffer */ + const void *bufPV, /* >> the buffer pointer */ + AEGP_GUID *hashP); /* << result */ + + SPAPI A_Err (*AEGP_HashMixInPtr)( + const A_u_longlong buf_sizeLu, /* >> size of the buffer */ + const void *bufPV, /* >> the buffer pointer */ + AEGP_GUID *hashP); /* <> guid to be mixed in */ + +} AEGP_HashSuite1; + +#ifdef __cplusplus + } // end extern "C" +#endif + +#endif diff --git a/External/AE SDK/Headers/AE_Hook.h b/External/AE SDK/Headers/AE_Hook.h new file mode 100644 index 00000000..6f747688 --- /dev/null +++ b/External/AE SDK/Headers/AE_Hook.h @@ -0,0 +1,155 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _H_HOOK_AE +#define _H_HOOK_AE + + +#include // for PF_Version, other types + + +#ifdef __cplusplus + extern "C" { +#endif + + +#define AE_HOOK_PLUGIN_TYPE 'AEgp' + +#define AE_HOOK_MAJOR_VERSION 3 +#define AE_HOOK_MINOR_VERSION 0 + +enum { + AE_PixFormat_NONE = -1, // sentinel -- meaningless + AE_PixFormat_ARGB = 0, + AE_PixFormat_BGRA +}; + +typedef A_long AE_PixFormat; + +enum { + AE_BlitOutFlag_NONE = 0, + AE_BlitOutFlag_ASYNCHRONOUS = 1L << 0 +}; + +enum { + AE_BlitInFlag_NONE = 0, + AE_BlitInFlag_RENDERING = 1L << 0 +}; + +typedef A_long AE_BlitInFlags; +typedef A_long AE_BlitOutFlags; + +// AE now supports 8bpp, 16bpp and 32bpc +// depthL, chan_bytesL, and plane_bytesL +// can now change. +typedef struct { + A_long widthL; + A_long heightL; + A_long depthL; // 32, 64, or 128 + AE_PixFormat pix_format; // always AE_PixFormat_ARGB on Mac, BGRA on Windows (for now) + + A_long row_bytesL; + A_long chan_bytesL; // 4, 8, or 16 + A_long plane_bytesL; // 1, 2, or 4 (for float) + + void *pixelsPV; + +} AE_PixBuffer; + + + +typedef struct { + A_long frame_widthL; // original size of image regardless of region of interest + A_long frame_heightL; + + A_long origin_xL; // where the pix buffer is placed in frame coords + A_long origin_yL; + + A_long view_rect_leftL; // what the user is actually seeing in the window + A_long view_rect_topL; + A_long view_rect_rightL; + A_long view_rect_bottomL; + + +} AE_ViewCoordinates; + + + +typedef struct _AE_BlitReceipt *AE_BlitReceipt; // opaque + +typedef struct _AE_CursorInfo *AE_CursorInfo; // opaque until I can decide what this means + + + +typedef void (*AE_DeathHook)( void *hook_refconPV); /* >> */ + +typedef void (*AE_VersionHook)( void *hook_refconPV, /* >> */ + A_u_long *versionPV); /* << */ + + +typedef struct FILE_Spec **AE_FileSpecH; + + +typedef void (*AE_BlitCompleteFunc)( AE_BlitReceipt receipt, + PF_Err err); // non zero if error during asynch operation + + +typedef PF_Err (*AE_BlitHook)( void *hook_refconPV, /* >> */ + const AE_PixBuffer *pix_bufP0, /* >> if NULL, display a blank frame */ + const AE_ViewCoordinates *viewP, /* >> */ + AE_BlitReceipt receipt, /* >> */ + AE_BlitCompleteFunc complete_func0, /* >> */ + AE_BlitInFlags in_flags, /* >> */ + AE_BlitOutFlags *out_flags); /* << */ + + + +typedef void (*AE_CursorHook)( void *hook_refconPV, /* >> */ + const AE_CursorInfo *cursorP); /* >> */ + +typedef struct { + // must match NIM_Hooks + + void *hook_refconPV; + void *reservedAPV[8]; + AE_DeathHook death_hook_func; + AE_VersionHook version_hook_func; + struct SPBasicSuite *pica_basicP; + AE_BlitHook blit_hook_func; + AE_CursorHook cursor_hook_func; + +} AE_Hooks; + + + +typedef PF_Err (*AE_HookPluginEntryFunc)( A_long major_version, /* >> */ + A_long minor_version, /* >> */ + AE_FileSpecH file_specH, /* >> */ + AE_FileSpecH res_specH, /* >> */ + AE_Hooks *hooksP); /* << */ + +#ifdef __cplusplus + } +#endif + + +#endif + diff --git a/External/AE SDK/Headers/AE_IO.h b/External/AE SDK/Headers/AE_IO.h new file mode 100644 index 00000000..88ccce2a --- /dev/null +++ b/External/AE SDK/Headers/AE_IO.h @@ -0,0 +1,789 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _AEIO_Public_H +#define _AEIO_Public_H + +#include +#include +#include +#include +#include + +#include + + +/////////////////////////////////////////////////// +////////////////// PUBLIC //////////////////////// +////////////////////////////////////////////////// + +#define AEIO_MAX_MODULE_NAME_LEN 31 +#define AEIO_MAX_TYPES 16 +#define AEIO_MAX_SEQ_NAME_LEN 31 +#define AEIO_MAX_MESSAGE_LEN 127 +#define AEIO_MAX_AUX_EXT 16 + +#define AEIO_ANY_CREATOR -1 + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef AEGP_INTERNAL + typedef const struct _AEGP_MarkerVal *AEGP_ConstMarkerValP; +#else +#ifndef _H_AE_GENERALPLUG_PRIVATE_H +#error include general plug private header before including AEIO +#endif +#endif + + + +/** + ** in data is passed to every function block function + **/ + +typedef void (*AEIO_MessageFunc) (A_Err err_number, const A_char *msgA); + +typedef struct AEIO_InData { + AEIO_MessageFunc msg_func; + const struct SPBasicSuite *pica_basicP; + A_long aegp_plug_id; + void *aegp_refconPV; +} AEIO_BasicData; + +enum { + AEIO_Err_UNSUPPORTED_CALLBACK = (((39)<<8)+1), + AEIO_Err_UNIMPLEMENTED, + AEIO_Err_UNSUPPORTED_FILETYPE, + AEIO_Err_INAPPROPRIATE_ACTION, + AEIO_Err_BAD_BMWORLD, + AEIO_Err_INCONSISTENT_PARAMETERS, + AEIO_Err_INVALID_TIME, + AEIO_Err_USE_DFLT_CALLBACK, + AEIO_Err_USER_CANCEL, + AEIO_Err_DISK_FULL, + AEIO_Err_INITIALIZE_FAILED, + AEIO_Err_BAD_FILENAME, + AEIO_Err_PARSING, + AEIO_Err_NOT_SEQUENCE, + AEIO_Err_USE_DFLT_GETSIZES_FREESPACE +}; + +typedef struct _Up_OpaqueMem **AEIO_Handle; + +enum { + AEIO_DFlags_NONE = 0, + AEIO_DFlags_DID_DEINT = (1L<<1), // I already did deinterlacing + AEIO_DFlags_DID_ALPHA_CONV = (1L<<2) // I already did alpha conversion to what you wanted. +}; +typedef A_long AEIO_DrawingFlags; + +/* NOTE: AEIO_DFlags_NO_SCALE and AEIO_DFlags_DID_TIME_FILTER, + previously included in the above, were never honored (so + we removed them). -bbb 8/14/02 +*/ + +enum { + AEIO_Qual_LOW, + AEIO_Qual_HIGH +}; +typedef A_short AEIO_Quality; + +enum { + AEIO_TimeDir_FORWARD = 0x0000, + AEIO_TimeDir_BACKWARD = 0x0001, + AEIO_TimeDir_INCLUDE_BASE_TIME = 0x1000 +}; +typedef A_short AEIO_TimeDir; + +enum { + AEIO_IdleFlag_NONE = 0, + AEIO_IdleFlag_PURGED_MEM = 1L << 0, + AEIO_IdleFlag_ADD_YOUR_OWN = 1L << 1 +}; +typedef A_long AEIO_IdleFlags; + +enum { + AEIO_SndQuality_APPROX = -1, // This quality is used to draw the audio waveform. -jja + AEIO_SndQuality_LO = 0, + AEIO_SndQuality_HI +}; + +typedef A_long AEIO_SndQuality; + +enum { + AEIO_E_UNSIGNED_PCM = 1, + AEIO_E_SIGNED_PCM = 2, + AEIO_E_SIGNED_FLOAT = 3 +}; +typedef A_short AEIO_SndEncoding; + +enum { + AEIO_SS_1 = 1, + AEIO_SS_2 = 2, + AEIO_SS_4 = 4 +}; +typedef A_short AEIO_SndSampleSize; + +enum { + AEIO_SndChannels_MONO = 1, + AEIO_SndChannels_STEREO = 2 +}; +typedef A_short AEIO_SndChannels; + +enum { + AEIO_Marker_URL_FLIP, + AEIO_Marker_CHAPTER, + AEIO_Marker_HOTSPOT, + AEIO_Marker_NONE +}; +typedef A_u_char AEIO_MarkerType; + +enum { + AEIO_Field_FRAME = 0, + AEIO_Field_UPPER, + AEIO_Field_LOWER +}; +typedef A_long AEIO_Field; + + +typedef struct { + const A_char *chapterZ0; + const A_char *commentZ0; + const A_char *urlZ0; + const A_char *url_frame_targetZ0; // optionally used if urlZ0 != NULL +} AEIO_Marker; + + +enum { + AEIO_FrameBlend_NONE = 0, + AEIO_FrameBlend_LOW = 1, + AEIO_FrameBlend_HIGH = 2 +}; +typedef A_char AEIO_FrameBlend; + + +enum { + AEIO_LFlag_ALFA = 0x1, + AEIO_LFlag_FIELDS = 0x2, + AEIO_LFlag_SIGNATURE = 0x4 +}; +typedef A_long AEIO_LabelFlags; + +enum { + AEIO_InputDepth_1 = 1, + AEIO_InputDepth_2 = 2, + AEIO_InputDepth_4 = 4, + AEIO_InputDepth_8 = 8, + AEIO_InputDepth_16 = 16, + AEIO_InputDepth_24 = 24, + AEIO_InputDepth_30 = 30, + AEIO_InputDepth_32 = 32, + AEIO_InputDepth_GRAY_2 = 34, + AEIO_InputDepth_GRAY_4 = 36, + AEIO_InputDepth_GRAY_8 = 40, + AEIO_InputDepth_48 = 48, + AEIO_InputDepth_64 = 64, + AEIO_InputDepth_96 = 96, // RGB float + AEIO_InputDepth_128 = 128, // ARGB float + AEIO_InputDepth_GRAY_16 = -16, + AEIO_InputDepth_GRAY_32 = -32 +}; + +typedef A_long AEIO_InputDepth; + +enum { + AEIO_SupportedDepthFlags_NONE = 0, + AEIO_SupportedDepthFlags_DEPTH_1 = 1L << 1, // Enable 1 bit images. Put an interface on it, if you like + AEIO_SupportedDepthFlags_DEPTH_2 = 1L << 2, // Enable 2 bit images. etc. + AEIO_SupportedDepthFlags_DEPTH_4 = 1L << 3, + AEIO_SupportedDepthFlags_DEPTH_8 = 1L << 4, + AEIO_SupportedDepthFlags_DEPTH_16 = 1L << 5, + AEIO_SupportedDepthFlags_DEPTH_24 = 1L << 6, + AEIO_SupportedDepthFlags_DEPTH_32 = 1L << 7, // Enable 32-bit images (with alpha channels) + AEIO_SupportedDepthFlags_DEPTH_GRAY_2 = 1L << 8, // greyscale + AEIO_SupportedDepthFlags_DEPTH_GRAY_4 = 1L << 9, + AEIO_SupportedDepthFlags_DEPTH_GRAY_8 = 1L << 10, + AEIO_SupportedDepthFlags_DEPTH_48 = 1L << 11, + AEIO_SupportedDepthFlags_DEPTH_64 = 1L << 12, + AEIO_SupportedDepthFlags_DEPTH_GRAY_16 = 1L << 13, + AEIO_SupportedDepthFlags_DEPTH_96 = 1L << 14, + AEIO_SupportedDepthFlags_DEPTH_128 = 1L << 15, + AEIO_SupportedDepthFlags_LAST = 1L << 16 +}; + +typedef A_long AEIO_SupportedDepthFlags; + +enum { + AEIO_Phase_NO_PULLDOWN = 0, + AEIO_Phase_WSSWW = 1, + AEIO_Phase_SSWWW, + AEIO_Phase_SWWWS, + AEIO_Phase_WWWSS, + AEIO_Phase_WWSSW +}; +typedef A_long AEIO_Pulldown; + +typedef A_long AEIO_FileType; +typedef A_long AEIO_Creator; + +typedef struct { + AEIO_FileType type; + AEIO_Creator creator; +} PFILE_FileKind; + + +typedef union { + PFILE_FileKind mac; + AEIO_FileExt ext; + A_long scrap; +} AEIO_FileKind; + + +typedef struct { + A_char name[AEIO_MAX_SEQ_NAME_LEN+1]; // usually the filename + A_char type[AEIO_MAX_SEQ_NAME_LEN+1]; // e.g. "PICT Sequence" "QT Movie" + A_char sub_type[AEIO_MAX_MESSAGE_LEN+1]; +} AEIO_Verbiage; + + +#ifdef __cplusplus + } +#endif + + +///////////////////////////////////////////////////////// +////////////////// redefined in PRIVATE ///////////////// +//////////////////////////////////////////////////////// + +#ifdef A_INTERNAL + #include +#else + #ifdef __cplusplus + extern "C" { + #endif + + typedef struct AEIO_SeqSpec **AEIO_InSpecH; + typedef struct AEIO_OutSpec **AEIO_OutSpecH; + + typedef A_long AEIO_ModuleSignature; // please register your module signature with adobe + // mailto:bbb@adobe.com?subject=AEIO_Signature + + typedef struct { + A_Ratio x; + A_Ratio y; + } AEIO_RationalScale; + + + #define AEIO_AlphaLabel_VERSION 0x0101 + + enum { + AEIO_AlphaPremul = 0x1, // otherwise straight + AEIO_AlphaInverted = 0x2 // 255 = transparent + }; + + typedef A_u_long AEIO_AlphaFlags; + + enum { + AEIO_Alpha_STRAIGHT, + AEIO_Alpha_PREMUL, + AEIO_Alpha_IGNORE, + AEIO_Alpha_NONE + }; + + typedef A_u_char AEIO_AlphaType; + + + #pragma pack( push, CoSAalign, 2 ) + + typedef struct { + A_short version; + AEIO_AlphaFlags flags; + A_u_char red; // color that was matted (if premul) + A_u_char green; + A_u_char blue; + AEIO_AlphaType alpha; + } AEIO_AlphaLabel; +#if defined(A_INTERNAL) && defined(__cplusplus) + AE_STRUCT_SIZE_ASSERT(AEIO_AlphaLabel, 10); +#endif + + #pragma pack( pop, CoSAalign) + + + typedef A_Err (*AEIO_AbortProc)(void *refcon); + typedef A_Err (*AEIO_ProgressProc)(void *refcon, A_long count, A_long total); + + + typedef struct { + void *refcon; + AEIO_AbortProc abort0; + AEIO_ProgressProc progress0; + } AEIO_InterruptFuncs; + + + // All coordinates are in the scaled coordinate system. + typedef struct { + AEIO_Quality qual; + AEIO_AlphaLabel alpha_label; + AEIO_Field field_request; + AEIO_RationalScale rs; + A_Time tr; + A_Time duration; + AEIO_FrameBlend time_filter; + // CW adds 1 pad byte here + A_LRect required_region0; // empty rect means entire + // CW adds 2 pad bytes here + AEIO_InterruptFuncs inter; + } AEIO_DrawFramePB; + + enum { + AEIO_RenderMarkerFlag_NONE = 0x00000000, + AEIO_RenderMarkerFlag_COMP = 0x00000001 // if 1 means comp marker; 0 means Layer marker + }; + typedef A_long AEIO_RenderMarkerFlag; + + #ifdef __cplusplus + } + #endif +#endif // A_INTERNAL + +#ifdef __cplusplus + extern "C" { +#endif + + +#define AEIO_FileType_DIR -2L +#define AEIO_FileType_NONE -1L +#define AEIO_FileType_ANY 0L +#define AEIO_FileType_GENERIC 1L + + +//////////////////////////////////////////////////////////////////// +///////////////////////// PUBLIC /////////////////////////////////// +//////////////////////////////////////////////////////////////////// + + +enum { + AEIO_MFlag_NONE = 0, + AEIO_MFlag_INPUT = (1L<<0), // input module + AEIO_MFlag_OUTPUT = (1L<<1), // output module (can be both) + AEIO_MFlag_FILE = (1L<<2), // direct correspondence to file in file system + AEIO_MFlag_STILL = (1L<<3), // still image support (not VIDEO) + AEIO_MFlag_VIDEO = (1L<<4), // multiple image support (not STILL) + AEIO_MFlag_AUDIO = (1L<<5), // audio support + AEIO_MFlag_NO_TIME = (1L<<6), // time-independent frame-store? always true if STILL; PICS example of non-STILL one + AEIO_MFlag_INTERACTIVE_GET = (1L<<7), // user interaction for new seq, required if !FILE & INPUT + AEIO_MFlag_INTERACTIVE_PUT = (1L<<8), // user interaction for new out, required if !FILE & OUTPUT + AEIO_MFlag_CANT_CLIP = (1L<<9), // DrawFrame can't accept worlds smaller than requested dimensions + AEIO_MFlag_MUST_INTERACT_PUT = (1L<<10), // dialog box can't be avoided, even if optionsH available + AEIO_MFlag_CANT_SOUND_INTERLEAVE = (1L<<11), // all frames must be added, then sound + AEIO_MFlag_CAN_ADD_FRAMES_NON_LINEAR= (1L<<12), // AddFrame can handle non-sequential times + AEIO_MFlag_HOST_DEPTH_DIALOG = (1L<<13), // expects host to bring up a dialog with depth + AEIO_MFlag_HOST_FRAME_START_DIALOG = (1L<<14), // expects host to bring up dialog with starting frame # + AEIO_MFlag_RESERVED1 = (1L<<15), + AEIO_MFlag_NO_OPTIONS = (1L<<16), // set this bit if the module does not accept output options + AEIO_MFlag_RESERVED2 = (1L<<17), + + AEIO_MFlag_RESERVED3 = (1L<<18), + AEIO_MFlag_NO_PIXELS = (1L<<19), // this file format doesn't store real pixels, only geometry (or whatever) + AEIO_MFlag_SEQUENCE_OPTIONS_OK = (1L<<20), // this module should take the options of its parent sequence when a folder is selected + AEIO_MFlag_INPUT_OPTIONS = (1L<<21), // this module has user options associated with an input sequence. NOTE: options must be flat. + AEIO_MFlag_HSF_AWARE = (1L<<22), // this module set the hsf for incoming sequences -> don't guess what it is! + AEIO_MFlag_HAS_LAYERS = (1L<<23), // this module supports multiple layers in a single document + AEIO_MFlag_SCRAP = (1L<<24), // module has a memory parsing (clipboard) component + AEIO_MFlag_NO_UI = (1L<<25), // don't show any UI for this module + AEIO_MFlag_SEQ_OPTIONS_DLG = (1L<<26), // module has sequence options + AEIO_MFlag_HAS_AUX_DATA = (1L<<27), // has depth, or normals, or anything that is on a per pixel basis besides color + AEIO_MFlag_HAS_META_DATA = (1L<<28), // supports user definable metadata + AEIO_MFlag_CAN_DO_MARKERS = (1L<<29), // supports markers (e.g. URL flips, chapters) + AEIO_MFlag_CAN_DRAW_DEEP = (1L<<30), // module can draw into 64 bpp BM_Worlds + AEIO_MFlag_RESERVED4 = (1L<<31) +}; +typedef A_u_long AEIO_ModuleFlags; + +enum { + AEIO_MFlag2_NONE = 0, + AEIO_MFlag2_AUDIO_OPTIONS = (1L<<0), // has audio options + AEIO_MFlag2_RESERVED1 = (1L<<1), + AEIO_MFlag2_SEND_ADDMARKER_BEFORE_ADDFRAME = (1L<<2), // otherwise it is sent just after; use with AEIO_MFlag_CAN_DO_MARKERS + AEIO_MFlag2_CAN_DO_MARKERS_2 = (1L<<3), // supports combined markers (e.g. URL flips, chapters, comments) + AEIO_MFlag2_CAN_DRAW_FLOAT = (1L<<4), + AEIO_MFlag2_RESERVED2 = (1L<<5), + AEIO_MFlag2_CAN_DO_AUDIO_32 = (1L<<6), // supports 32 bit audio output. + AEIO_MFlag2_RESERVED3 = (1L<<7), + AEIO_MFlag2_SUPPORTS_ICC_PROFILES = (1L<<8), + AEIO_MFlag2_CAN_DO_MARKERS_3 = (1L<<9), // supports cue points + AEIO_MFlag2_SEND_ADDMARKER_BEFORE_STARTADDING = (1L<<10), + AEIO_MFlag2_RESERVED4 = (1L<<11), + AEIO_MFlag2_USES_QUICKTIME = (1L<<12), // Module uses quicktime for decompression or compression + AEIO_MFlag2_RESERVED5 = (1L<<13), + AEIO_MFlag2_RESERVED6 = (1L<<14), + AEIO_MFlag2_RESERVED7 = (1L<<15), + AEIO_MFlag2_RESERVED8 = (1L<<16), + AEIO_MFlag2_RESERVED9 = (1L<<17), + AEIO_MFlag2_RESERVED10 = (1L<<18) +}; +typedef A_u_long AEIO_ModuleFlags2; + +typedef struct { + A_char extension[4]; // includes '.' + A_long type; // mac type + A_long creator; // mac creator +} AEIO_AuxExt; + +typedef struct { + AEIO_ModuleSignature sig; // please register number this with adobe + A_char name[AEIO_MAX_MODULE_NAME_LEN+1]; + AEIO_ModuleFlags flags; + AEIO_ModuleFlags2 flags2; + A_long max_width; + A_long max_height; + A_short num_filetypes; // # of filetype/creator pairs supported + A_short num_extensions; // # of .XXX extensions supported + A_short num_clips; // # of clipboard types supported + A_short pad; + PFILE_FileKind create_kind; // type/creator for newly created files + AEIO_FileExt create_ext; // extension for new created DOS files + AEIO_FileKind read_kinds[AEIO_MAX_TYPES]; // mac types first, then DOS, then clipboard + A_short num_aux_extensionsS; + // CW adds 2 pad bytes here + AEIO_AuxExt aux_ext[AEIO_MAX_AUX_EXT]; +} AEIO_ModuleInfo; + +typedef struct AEIO_OptionsCBInfo { + AEIO_SupportedDepthFlags o_flags; + AEIO_OutSpecH out_specH; +} AEIO_OptionsCBInfo; + +typedef struct { + AEIO_Quality qual; + // CW adds 2 pad bytes here + AEIO_RationalScale rs; + A_Time tr; + A_Time duration; + A_LRect required_region; // empty rect means entire + AEIO_InterruptFuncs inter; +} AEIO_DrawSparseFramePB; + + +/*********************** plugin entry points ***************************** + ** the main routine of each plugin fills in these function pointers + ** AE will call them as appropriate + ****************************************************************************/ + +typedef struct _AEIO_FunctionBlock4 { // revved to 4 in AE 10. Frozen in AE10. + + A_Err (*AEIO_InitInSpecFromFile)( + AEIO_BasicData *basic_dataP, + const A_UTF16Char *file_pathZ, // Null terminated UTF16 string with platform separators + AEIO_InSpecH inH); + + A_Err (*AEIO_InitInSpecInteractive)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH); + + A_Err (*AEIO_DisposeInSpec)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH); + + A_Err (*AEIO_FlattenOptions)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + AEIO_Handle *flat_optionsPH); + + A_Err (*AEIO_InflateOptions)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + AEIO_Handle flat_optionsH); + + A_Err (*AEIO_SynchInSpec)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_Boolean *changed0); + + A_Err (*AEIO_GetActiveExtent)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, /* >> */ + const A_Time *tr, /* >> */ + A_LRect *extent); /* << */ + + A_Err (*AEIO_GetInSpecInfo)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + AEIO_Verbiage *verbiageP); + + // All coordinates are in the scaled coordinate system. + A_Err (*AEIO_DrawSparseFrame)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + const AEIO_DrawSparseFramePB *sparse_framePPB, + PF_EffectWorld *worldP, + AEIO_DrawingFlags *draw_flagsP); + + A_Err (*AEIO_GetDimensions)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + const AEIO_RationalScale *rs0, + A_long *width0, + A_long *height0); + + A_Err (*AEIO_GetDuration)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_Time *tr); + + A_Err (*AEIO_GetTime)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_Time *tr); + + A_Err (*AEIO_GetSound)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + AEIO_SndQuality quality, + const AEIO_InterruptFuncs *interrupt_funcsP0, + const A_Time *startPT, + const A_Time *durPT, + A_u_long start_sampLu, + A_u_long num_samplesLu, + void *dataPV); + + A_Err (*AEIO_InqNextFrameTime)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + const A_Time *base_time_tr, + AEIO_TimeDir time_dir, + A_Boolean *found0, + A_Time *key_time_tr0); + + A_Err (*AEIO_InitOutputSpec)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_Boolean *user_interacted); + + A_Err (*AEIO_GetFlatOutputOptions)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + AEIO_Handle *optionsH); + + A_Err (*AEIO_DisposeOutputOptions)( + AEIO_BasicData *basic_dataP, + void *optionsPV); + + A_Err (*AEIO_UserOptionsDialog)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + const PF_EffectWorld *sample0, + A_Boolean *user_interacted0); + + A_Err (*AEIO_GetOutputInfo)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + AEIO_Verbiage *verbiage); + + A_Err (*AEIO_OutputInfoChanged)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH); + + A_Err (*AEIO_SetOutputFile)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + const A_UTF16Char *file_pathZ); // Null terminated UTF16 string with platform separators + + A_Err (*AEIO_StartAdding)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_long flags); + + A_Err (*AEIO_AddFrame)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_long frame_index, + A_long frames, + const PF_EffectWorld *wP, + const A_LPoint *origin0, + A_Boolean was_compressedB, + AEIO_InterruptFuncs *inter0); + + A_Err (*AEIO_EndAdding)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_long flags); + + A_Err (*AEIO_OutputFrame)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + const PF_EffectWorld *wP); + + A_Err (*AEIO_WriteLabels)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + AEIO_LabelFlags *written); + + A_Err (*AEIO_GetSizes)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_u_longlong *free_space, + A_u_longlong *file_size); + + A_Err (*AEIO_Flush)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH); + + A_Err (*AEIO_AddSoundChunk)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + const A_Time *start, + A_u_long num_samplesLu, + const void *dataPV); + + A_Err (*AEIO_Idle)( + AEIO_BasicData *basic_dataP, + AEIO_ModuleSignature sig, + AEIO_IdleFlags *idle_flags0); /* >> */ + + A_Err (*AEIO_GetDepths)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + AEIO_SupportedDepthFlags *which); + + A_Err (*AEIO_GetOutputSuffix)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_char *suffix); + + A_Err (*AEIO_SeqOptionsDlg)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_Boolean *user_interactedPB0); + + A_Err (*AEIO_GetNumAuxChannels)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_long *num_channelsPL); + + A_Err (*AEIO_GetAuxChannelDesc)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_long chan_indexL, + PF_ChannelDesc *descP); + + A_Err (*AEIO_DrawAuxChannel)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_long chan_indexL, + const AEIO_DrawFramePB *pbP, + PF_ChannelChunk *chunkP); + + A_Err (*AEIO_FreeAuxChannel)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + PF_ChannelChunk *chunkP); + + A_Err (*AEIO_NumAuxFiles)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH seqH, + A_long *files_per_framePL0); + + A_Err (*AEIO_GetNthAuxFileSpec)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH seqH, + A_long frame_numL, + A_long n, + AEGP_MemHandle *pathPH); // << handle of A_UTF16Char (contains null terminated UTF16 string); must be disposed with AEGP_FreeMemHandle + + A_Err (*AEIO_CloseSourceFiles)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH seqH); + + A_Err (*AEIO_CountUserData)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_u_long typeLu, + A_u_long max_sizeLu, + A_u_long *num_of_typePLu); + + A_Err (*AEIO_SetUserData)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_u_long typeLu, + A_u_long indexLu, + const AEIO_Handle dataH); + + A_Err (*AEIO_GetUserData)( + AEIO_BasicData *basic_dataP, + AEIO_InSpecH inH, + A_u_long typeLu, + A_u_long indexLu, + A_u_long max_sizeLu, + AEIO_Handle *dataPH); + + A_Err (*AEIO_AddMarker)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_long frame_index, + AEIO_MarkerType marker_type, + void *marker_dataPV, + AEIO_InterruptFuncs *inter0); + + A_Err (*AEIO_VerifyFileImportable)( + AEIO_BasicData *basic_dataP, + AEIO_ModuleSignature sig, + const A_UTF16Char * file_pathZ, // Null terminated UTF16 string with platform separators + A_Boolean *importablePB); + + A_Err (*AEIO_UserAudioOptionsDialog)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_Boolean *user_interacted0); + + A_Err (*AEIO_AddMarker2)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_long frame_index, + const AEIO_Marker *markerP, + AEIO_InterruptFuncs *inter0); + + A_Err (*AEIO_AddMarker3)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_long frame_index, + AEGP_ConstMarkerValP marker_valP, + AEIO_RenderMarkerFlag marker_flag, + AEIO_InterruptFuncs *inter0); + + A_Err (*AEIO_GetMimeType)( + AEIO_BasicData *basic_dataP, + AEIO_OutSpecH outH, + A_long mime_type_sizeL, + char *mime_typeZ); + +} AEIO_FunctionBlock4; + +#ifdef __cplusplus + } +#endif + +#include + +#endif diff --git a/External/AE SDK/Headers/AE_IO_FileExt.h b/External/AE SDK/Headers/AE_IO_FileExt.h new file mode 100644 index 00000000..27625bda --- /dev/null +++ b/External/AE SDK/Headers/AE_IO_FileExt.h @@ -0,0 +1,32 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _AEIO_FileExt_Public_H +#define _AEIO_FileExt_Public_H + +#include + +typedef struct { + A_char pad; // constant: always '.' + A_char extension[3]; +} AEIO_FileExt; + +#endif // _AEIO_FileExt_Public_H diff --git a/External/AE SDK/Headers/AE_Macros.h b/External/AE SDK/Headers/AE_Macros.h new file mode 100644 index 00000000..3f245cc7 --- /dev/null +++ b/External/AE SDK/Headers/AE_Macros.h @@ -0,0 +1,102 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 1999 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ +/** AE_Macros.h + + Part of the Adobe After Effects 4.0 SDK. + Copyright 1998 Adobe Systems Incorporated. + All Rights Reserved. + + REVISION HISTORY + 06/12/96 bsa Updated for After Effects 3.1 + 04/06/97 bsa Updated for After Effects 3.1 Windows version + 03/01/99 bbb Added DH. + +**/ + +#ifndef _H_AE_MACROS +#define _H_AE_MACROS + +#include "A.h" + +#ifndef ERR + #define ERR(FUNC) do { if (!err) { err = (FUNC); } } while (0) +#endif + +#ifndef ERR2 + #define ERR2(FUNC) do { if (((err2 = (FUNC)) != A_Err_NONE) && !err) err = err2; } while (0) +#endif + +#ifndef AEFX_CLR_STRUCT +#define AEFX_CLR_STRUCT(STRUCT) \ + do { \ + A_long _t = sizeof(STRUCT); \ + A_char *_p = (A_char*)&(STRUCT); \ + while (_t--) { \ + *_p++ = 0; \ + } \ + } while (0); +#endif + +#ifndef DH +#define DH(h) (*(h)) +#endif + +#define FIX2INT(X) ((A_long)(X) >> 16) +#define INT2FIX(X) ((A_long)(X) << 16) +#define FIX2INT_ROUND(X) (FIX2INT((X) + 32768)) +#define FIX_2_FLOAT(X) ((A_FpLong)(X) / 65536.0) +#define FLOAT2FIX(F) ((PF_Fixed)((F) * 65536 + (((F) < 0) ? -0.5 : 0.5))) + +// These are already defined if using Objective-C +#ifndef ABS + #define ABS(N) ((N) < 0 ? -(N) : (N)) +#endif + +#ifndef MIN + #define MIN(A,B) ((A) < (B) ? (A) : (B)) +#endif + +#ifndef MAX + #define MAX(A, B) ((A) > (B) ? (A) : (B)) +#endif + +#define A_Fixed_ONE ((A_Fixed)0x00010000L) +#define A_Fixed_HALF ((A_Fixed)0x00008000L) + +#define PF_RECT_2_FIXEDRECT(R,FR) do { \ + (FR).left = INT2FIX((R).left); \ + (FR).top = INT2FIX((R).top); \ + (FR).right = INT2FIX((R).right); \ + (FR).bottom = INT2FIX((R).bottom); \ + } while (0) + +#define PF_FIXEDRECT_2_RECT(FR,R) do { \ + (R).left = (A_short)FIX2INT_ROUND((FR).left); \ + (R).top = (A_short)FIX2INT_ROUND((FR).top); \ + (R).right = (A_short)FIX2INT_ROUND((FR).right); \ + (R).bottom = (A_short)FIX2INT_ROUND((FR).bottom); \ + } while (0) + +#define CONVERT8TO16(A) ( (((long)(A) * PF_MAX_CHAN16) + PF_HALF_CHAN8) / PF_MAX_CHAN8 ) + +#define RATIO2FLOAT(R) (A_FpLong)((A_FpLong)(R).num / ((A_FpLong)(R).den)) + +#endif // _H_AX_MACROS diff --git a/External/AE SDK/Headers/AE_PluginData.h b/External/AE SDK/Headers/AE_PluginData.h new file mode 100644 index 00000000..790843f4 --- /dev/null +++ b/External/AE SDK/Headers/AE_PluginData.h @@ -0,0 +1,84 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2017 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + +#ifndef _H_AE_PLUGIN_DATA +#define _H_AE_PLUGIN_DATA + +#ifdef A_INTERNAL + #include "PF_Private.h" +#endif + +#include "A.h" + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +typedef struct PF_PluginData * PF_PluginDataPtr; + +typedef A_Err (*PF_PluginDataCB)( + // The same plugin data pointer that was sent in the entry point + PF_PluginDataPtr inPtr, + const A_u_char* inNamePtr, + const A_u_char* inMatchNamePtr, + const A_u_char* inCategoryPtr, + const A_u_char* inEntryPointNamePtr, + // Type of plugin ( VFlt,eFKT ,8BFM) + A_long inkind, + // If the kind is eFKT, this argument must be PF_AE_PLUG_IN_VERSION + A_long inApiVersionMajor, + // If the kind is eFKT, this argument must be PF_AE_PLUG_IN_SUBVERS + A_long inApiVersionMinor, + A_long inReservedInfo + ) ; + +/* + * This is the Entry point function signature that must be implemented by the plugin + * Name of the function must be PluginDataEntryFunction +*/ +typedef A_Err (*PluginDataEntryFunctionPtr)( + // An opaque pointer, which must be sent as an argument in the callback + PF_PluginDataPtr inPtr, + // Callback function pointer + PF_PluginDataCB inPluginDataCallBackPtr, + // SPBasicSuite function pointer + struct SPBasicSuite* inSPBasicSuitePtr, + // Name of the host application which is invoking the plugin + const char* inHostName, + // Exact version of the host application e.x. 10.1.3 + const char* inHostVersion + ); + + + +#ifdef __cplusplus +} // end extern "C" +#endif + + + +#include + + +#endif /* _H_AE_PLUGIN_DATA */ diff --git a/External/AE SDK/Headers/DuckSuite.h b/External/AE SDK/Headers/DuckSuite.h new file mode 100644 index 00000000..59f9953c --- /dev/null +++ b/External/AE SDK/Headers/DuckSuite.h @@ -0,0 +1,13 @@ +#include "A.h" +#include + +#ifdef AE_OS_WIN + #include +#endif + +#define kDuckSuite1 "AEGP Duck Suite" +#define kDuckSuiteVersion1 1 + +typedef struct DuckSuite1 { + SPAPI A_Err (*Quack)(A_u_short timesSu); +} DuckSuite1; \ No newline at end of file diff --git a/External/AE SDK/Headers/FIEL_Public.h b/External/AE SDK/Headers/FIEL_Public.h new file mode 100644 index 00000000..8306b15b --- /dev/null +++ b/External/AE SDK/Headers/FIEL_Public.h @@ -0,0 +1,81 @@ +#ifndef _H_FIEL_PUBLIC +#define _H_FIEL_PUBLIC + +/* FIEL_Public.h + + (c) 1993 CoSA + + The purpose of this header is to define a standard way to communicate interlace information + within common image file formats. The FIEL_Label structure should be included as a + user data of type 'FIEL' of a QuickTime movie, and as 'FIEL' resouce 128 in an + image or animation file. + + The FIEL_Label structure may also be appended to the end of an ImageDescription if the creator + is unable to add the resource or user data. Only the first FIEL_Label in the movie may be + honored, however. If a sequence of frames is composed of multiple files, the FIEL_Label from only + the first frame may be honored. In a QuickTime movie, the first user data item (index 1) will be honored. + + If the version is increased, to preserve backward compatibility we will only add types + to the existing fields or add to the end of the FIEL_Label structure. + + *** Please note that most applications will only support interlaced full-height frames. The other + *** formats are included so the spec is as general as possible. If you choose to store field-rendered + *** video in one of the other formats it may not be de-interlaced properly by most applications. + + CoSA After Effects 1.0/1.1 outputs FIEL_Label version 0, with the obsolete tag 'Fiel' (not 'FIEL'). + The struct has a short version (set to 0) followed by a std::int32_t type that is 0 if field rendered, 1 + if upper field is first, and 2 if lower field is first. All field rendered frames output from + AE 1.0/1.1 are interlaced. + + Future versions of CoSA After Effects will label all output with a version 1 or higher FIEL_Label. + +*/ + +#include + +#define FIEL_Label_VERSION 1 + +#define FIEL_Tag 'FIEL' // use as udata and resource type +#define FIEL_ResID 128 + + +enum { + FIEL_Type_FRAME_RENDERED = 0, // FIEL_Order is irrelevant + FIEL_Type_INTERLACED = 1, + FIEL_Type_HALF_HEIGHT = 2, + FIEL_Type_FIELD_DOUBLED = 3, // 60 full size field-doubled frames/sec + FIEL_Type_UNSPECIFIED = 4 // do not use! +}; +typedef uint32_t FIEL_Type; + + +/* + If the frames are interlaced, the following structure tells which of the interlaced fields is + temporally first. If the frames are not interlaced but the animation was field rendered + (i.e. half height or field doubled), the structure tells which field the first sample (if the + label is attached to a multi-sample file like a QT movie) or the current sample (if the label is + attached to a single sample like a PICT file) contains. +*/ + +enum { + FIEL_Order_UPPER_FIRST = 0, + FIEL_Order_LOWER_FIRST = 1 +}; +typedef uint32_t FIEL_Order; + +#pragma pack(push, CoSAalign, 2) + typedef struct { + uint32_t signature; // always FIEL_Tag + int16_t version; + FIEL_Type type; + FIEL_Order order; + uint32_t reserved; + } FIEL_Label; + #if defined(A_INTERNAL) && defined(__cplusplus) + #include "AE_StructSizeAssert.h" + AE_STRUCT_SIZE_ASSERT(FIEL_Label, 18); + #endif + +#pragma pack(pop, CoSAalign) + +#endif diff --git a/External/AE SDK/Headers/Mach-O_prefix.h b/External/AE SDK/Headers/Mach-O_prefix.h new file mode 100644 index 00000000..e5da3715 --- /dev/null +++ b/External/AE SDK/Headers/Mach-O_prefix.h @@ -0,0 +1 @@ +#define __MACH__ 1 \ No newline at end of file diff --git a/External/AE SDK/Headers/MissingSuiteError.cpp b/External/AE SDK/Headers/MissingSuiteError.cpp new file mode 100644 index 00000000..5be71f4f --- /dev/null +++ b/External/AE SDK/Headers/MissingSuiteError.cpp @@ -0,0 +1,43 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#include "AEGP_SuiteHandler.h" + +void AEGP_SuiteHandler::MissingSuiteError() const +{ + // Yes, we've read Scott Meyers, and know throwing + // a stack-based object can cause problems. Since + // the err is just a long, and since we aren't de- + // referencing it in any way, risk is mimimal. + + // As always, we expect those of you who use + // exception-based code to do a little less rudi- + // mentary job of it than we are here. + + // Also, excuse the Madagascar-inspired monkey + // joke; couldn't resist. + // -bbb 10/10/05 + + PF_Err poop = PF_Err_BAD_CALLBACK_PARAM; + + throw poop; +} + diff --git a/External/AE SDK/Headers/PF_Masks.h b/External/AE SDK/Headers/PF_Masks.h new file mode 100644 index 00000000..88870b82 --- /dev/null +++ b/External/AE SDK/Headers/PF_Masks.h @@ -0,0 +1,49 @@ +/* PF_Masks.h */ + + +#ifndef H_PF_MASKS +#define H_PF_MASKS + +#include +#include +#include +#include + + +#pragma pack( push, 2 ) + +#define PF_MASKS_MAJOR_VERSION 1 +#define PF_MASKS_MINOR_VERSION 0 + +#ifdef __cplusplus + extern "C" { +#endif + + +#define kPF_MaskSuite "AEGP Mask Suite" +#define kPF_MaskSuiteVersion1 1 + +typedef struct PF_MaskSuite1 { + + SPAPI A_Err (*PF_MaskWorldWithPath)( + PF_ProgPtr effect_ref, + PF_PathOutlinePtr *mask, /* >> */ + PF_FpLong feather_x, /* >> */ + PF_FpLong feather_y, /* >> */ + PF_Boolean invert, /* >> */ + PF_FpLong opacity, /* >> 0...1 */ + PF_Quality quality, /* >> */ + PF_EffectWorld *worldP, /* <> */ + PF_Rect *bboxPR0); /* >> */ + +} PF_MaskSuite1; + +#ifdef __cplusplus +} // end extern "C" +#endif + + +#pragma pack( pop ) + + +#endif /* H_PH_MASKS */ \ No newline at end of file diff --git a/External/AE SDK/Headers/PR_Public.h b/External/AE SDK/Headers/PR_Public.h new file mode 100644 index 00000000..b851a530 --- /dev/null +++ b/External/AE SDK/Headers/PR_Public.h @@ -0,0 +1,424 @@ +#ifndef _PR_Public_H +#define _PR_Public_H + +/** PR_Public.h + ** (C)2005 by Adobe Systems Inc. + ** Public header that defines the API for plug-in renderers + ** + ** Plugin renderers are known as artisans. They are AEGP modules which register + ** themselves with the plug-in render manager when they are loaded at + ** program startup. + ** Very little is passed to these functions, just an opaque context + ** and a handle to previously allocated data. The artisan must query + ** for other rendering parameters via AEGP suites. The appropriate + ** suites will take one of the opaque rendering contexts as one of their + ** parameters. + ** + ** The entry points are : + ** PR_GlobalSetupFunc + ** Called at artisan load. If necessary allocate global data that will be shared + ** among all instances of this type of artisan. + ** + ** PR_GlobalSetdownFunc + ** Called at program termination. Delete the global data if any allocated. + ** + ** PR_GlobalDoAboutFunc + ** Display an about box with revelant information about the artisan + ** + ** + ** PR_InstanceSetupFunc + ** An instance of the artisan is associated with each comp. Each instance has its + ** own data. It should be allocated within this function. + ** + ** PR_InstanceSetdownFunc + ** Delete allocated data if needed. + ** + ** PR_FlattenInstanceFunc + ** Return a flattened platform independent version of the instance data. + ** This is called when the artisan is being written to disk or a copy of the + ** artisan is being made. Do not disturb the src instance handle. + ** + ** PR_DoInstanceDialogFunc + ** Some artisans may have parameters. They may be set here. + ** + ** PR_FrameSetupFunc + ** Called just berfore render. Allocate the render handle, if needed. + ** + ** PR_RenderFunc + ** This is the main rendering function. + ** + ** PR_FrameSetdownFunc + ** Called just after render. Deallocate the render handle if needed. + ** + ** PR_Query + ** This can be called at any time after Instance Setup. It is used by AE + ** to inquire about geomertic transforms used by the artisan. AE uses this information + ** to draw layer handles, and manipulate the layers with a mouse better. + ** + **/ + + +#include +#include +#include + +#pragma pack( push, 4 ) + + + + +#ifdef __cplusplus + extern "C" { +#endif + + + + +#define PR_FileType_ARTISAN 'ARt' +#define PR_ARTISAN_EXTENSION ".aex" + +#define PR_ARTISAN_API_VERSION_MAJOR 1 +#define PR_ARTISAN_API_VERSION_MINOR 0 + + +#define PR_PUBLIC_MATCH_NAME_LEN 31 +#define PR_PUBLIC_ARTISAN_NAME_LEN 31 + + +/** $$$ move to aegp.h ***/ +typedef struct _Up_OpaqueMem **PR_Handle; +typedef PR_Handle PR_FlatHandle; + +typedef PR_Handle PR_GlobalDataH; // holds data private to the plug-in +typedef PR_Handle PR_InstanceDataH; +typedef PR_Handle PR_RenderDataH; + +typedef struct PR_GlobalContext **PR_GlobalContextH; // opaque until PR.h +typedef struct PR_InstanceContext **PR_InstanceContextH; // opaque until PR.h +typedef struct PR_RenderContext **PR_RenderContextH; // opaque until PR.h +typedef struct PR_QueryContext **PR_QueryContextH; // opaque until PR.h + +typedef struct PF_LayerDef *PF_EffectWorldPtr; +/** + ** in data is passed to every pr entry function + **/ +typedef void (*PR_MessageFunc) (A_Err err_number, const A_char *msgA); + + +typedef struct PR_InData { + PR_MessageFunc msg_func; + const struct SPBasicSuite *pica_basicP; + A_long aegp_plug_id; + void *aegp_refconPV; +} PR_InData; + + + + + +/** + ** response from dialog box function + **/ +enum { + PR_DialogResult_NO_CHANGE, + PR_DialogResult_CHANGE_MADE +}; +typedef A_long PR_DialogResult; + + + +/** + ** The types of queries that will be made. + ** + **/ +enum { + PR_QueryType_NONE = 0, + PR_QueryType_TRANSFORM, + PR_QueryType_INTERACTIVE_WINDOW_DISPOSE, + PR_QueryType_INTERACTIVE_WINDOW_CLEAR, + PR_QueryType_INTERACTIVE_WINDOW_FROZEN_PROXY, + PR_QueryType_INTERACTIVE_SWAP_BUFFER, + PR_QueryType_INTERACTIVE_DRAW_PROCS, + PR_QueryType_PREPARE_FOR_LINE_DRAWING, + PR_QueryType_UNPREPARE_FOR_LINE_DRAWING, + PR_QueryType_GET_CURRENT_CONTEXT_SAFE_FOR_LINE_DRAWING, + PR_QueryType_GET_ARTISAN_QUALITY, +}; + +typedef A_u_long PR_QueryType; + + +// If this sounds interesting, talk to us +enum { + PR_ArtisanFeature_NONE = 0 +}; +typedef A_long PR_ArtisanFeature_Flags; + + +/** + ** PR_InstanceSetupFunc flags + **/ +enum { + PR_InstanceFlags_NONE = 0x0, + PR_InstanceFlags_DUPLICATE +}; + +typedef A_u_long PR_InstanceFlags; + + +/*********************** plugin entry points ***************************** + ** the main routine of each plugin fills in these function pointers + ** AE will call them as appropriate + ****************************************************************************/ + + + +/** + ** called after main. This happens just once, after the plugin is loaded. + ** The global data is common across all instances of the plugin + **/ +typedef A_Err (*PR_GlobalSetupFunc)( const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_GlobalDataH *global_dataPH); /* << */ + +/** + ** dispose of the global data + **/ +typedef A_Err (*PR_GlobalSetdownFunc)( const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_GlobalDataH global_dataH); /* <> */ // must be disposed by plugin + + +/** + ** display an about box + **/ +typedef A_Err (*PR_GlobalDoAboutFunc)( const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_GlobalDataH global_dataH); /* <> */ + + + +/** + ** Analogous to an Effect's Sequence setup call. This sets up the renderer's + ** instance data. + **/ +typedef A_Err (*PR_InstanceSetupFunc)( + const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_InstanceContextH instance_contextH, /* >> */ + PR_GlobalDataH global_dataH, /* >> */ + PR_InstanceFlags flags, + PR_FlatHandle flat_dataH0, /* >> */ + PR_InstanceDataH *instance_dataPH); /* << */ + + +/** + ** dispose of the instance data + **/ +typedef A_Err (*PR_InstanceSetdownFunc)( + const PR_InData *in_dataP, /* >> */ + const PR_GlobalContextH global_contextH, /* >> */ + const PR_InstanceContextH instance_contextH, /* >> */ + PR_GlobalDataH global_dataH, /* >> */ + PR_InstanceDataH instance_dataH); /* >> */ // must be disposed by plugin + + + +/** + ** flatten your data in preparation to being written to disk. + ** Make sure its OS independent + **/ +typedef A_Err (*PR_FlattenInstanceFunc)( + const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_InstanceContextH instance_contextH, /* >> */ + PR_GlobalDataH global_dataH, /* <> */ + PR_InstanceDataH instance_dataH, /* <> */ + PR_FlatHandle *flatH); /* << */ + + + + + +/** + ** if the renderer has parameters, this is where they get set or changed. + **/ + + +typedef A_Err (*PR_DoInstanceDialogFunc)( const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_InstanceContextH instance_contextH, /* >> */ + PR_GlobalDataH global_dataH, /* <> */ + PR_InstanceDataH instance_dataH, /* <> */ + PR_DialogResult *resultP); /* << */ + + + +/** + ** allocate render data if needed + **/ +typedef A_Err (*PR_FrameSetupFunc)( + const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_InstanceContextH instance_contextH, /* >> */ + PR_RenderContextH render_contextH, /* >> */ + PR_GlobalDataH global_dataH, /* <> */ + PR_InstanceDataH instance_dataH, /* <> */ + PR_RenderDataH *render_dataPH); /* << */ + + +/** + ** deallocate render data + **/ +typedef A_Err (*PR_FrameSetdownFunc)( + const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_InstanceContextH instance_contextH, /* >> */ + PR_RenderContextH render_contextH, /* >> */ + PR_GlobalDataH global_dataH, /* <> */ + PR_InstanceDataH instance_dataH, /* <> */ + PR_RenderDataH render_dataH); + + +/** + ** the main drawing routine + **/ +typedef A_Err (*PR_RenderFunc)( + const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_InstanceContextH instance_contextH, /* >> */ + PR_RenderContextH render_contextH, /* >> */ + PR_GlobalDataH global_dataH, /* <> */ + PR_InstanceDataH instance_dataH, /* <> */ + PR_RenderDataH render_dataH); + + + + +/** + ** AE will need to have the artisan process data on its behalf such as + ** projecting points to the screen, transforming axis, etc. This routine will handle + ** it all + **/ +typedef A_Err (*PR_QueryFunc)( const PR_InData *in_dataP, /* >> */ + PR_GlobalContextH global_contextH, /* >> */ + PR_InstanceContextH instance_contextH, /* >> */ + PR_QueryContextH query_contextH, /* <> */ + PR_QueryType query_type, /* >> */ + PR_GlobalDataH global_data, /* >> */ + PR_InstanceDataH instance_dataH); /* >> */ + + + + +/** + ** main fills this in, just once at plugin load time + ** These are the entry points that AE calls to use an artisan. + **/ + +typedef struct { + + PR_GlobalSetupFunc global_setup_func0; + PR_GlobalSetdownFunc global_setdown_func0; + PR_GlobalDoAboutFunc global_do_about_func0; + + PR_InstanceSetupFunc setup_instance_func0; + PR_InstanceSetdownFunc setdown_instance_func0; + PR_FlattenInstanceFunc flatten_instance_func0; + PR_DoInstanceDialogFunc do_instance_dialog_func0; + + PR_FrameSetupFunc frame_setup_func0; + PR_RenderFunc render_func; // must have at least this one function + PR_FrameSetdownFunc frame_setdown_func0; + + PR_QueryFunc query_func0; + +} PR_ArtisanEntryPoints; + + + + +/** + ** line drawing routines for interactive artisans + **/ +typedef void (*PR_Draw_MoveToFunc)(A_FpLong x, A_FpLong y); + +typedef void (*PR_Draw_LineToFunc)(A_FpLong x, A_FpLong y); + +typedef void (*PR_Draw_LineRelFunc)(A_FpLong dx, A_FpLong dy); + +typedef void (*PR_Draw_ForeColorFunc)(const A_Color *fore_color); + +typedef void (*PR_Draw_BackColorFunc)(const A_Color *fore_color); + +typedef void (*PR_Draw_FrameRectFunc)(const A_FloatRect *rectPR ); + +typedef void (*PR_Draw_PaintRectFunc)(const A_FloatRect *rectPR ); + +typedef void (*PR_Draw_FrameOvalFunc)(const A_FloatRect *rectPR ); + +typedef void (*PR_Draw_PaintOvalFunc)(const A_FloatRect *rectPR ); + +typedef void (*PR_Draw_InvertRectFunc)(const A_FloatRect *rectPR ); + +typedef void (*PR_Draw_SetClipFunc)(const A_FloatRect *rectPR, A_Boolean invertB ); + +typedef void (*PR_Draw_PenNormal)(void); + +typedef void (*PR_Draw_PenSize)(A_FpLong widthS, A_FpLong heightS); + +typedef void (*PR_Draw_PenPat)(A_u_char pattern); + +typedef void (*PR_Draw_Invert)(A_Boolean); + +typedef void (*PR_CacheIconFunc)(PF_EffectWorldPtr iconP); + +typedef void (*PR_DrawCachedIconFunc)(A_long x, A_long y); + +typedef void (*PR_DrawStringFunc)(const A_UTF16Char *nameZ, PF_FontStyleSheet style, const A_Color *fore_colorP, const A_Color *shadow_colorP, const A_FloatPoint *originP, const A_FloatPoint *shadow_offsetP); + +typedef void (*PR_StrokePolyFunc) (A_long nptsL, A_FloatPoint *ptsA); + +typedef void (*PR_PaintPolyFunc) (A_long nptsL, A_FloatPoint *ptsA); + + + +typedef struct { + + PR_Draw_MoveToFunc move_to_func; + PR_Draw_LineToFunc line_to_func; + PR_Draw_LineRelFunc line_rel_func; + PR_Draw_ForeColorFunc fore_color_func; + PR_Draw_BackColorFunc back_color_func; + PR_Draw_FrameRectFunc frame_rect_func; + PR_Draw_PaintRectFunc paint_rect_func; + PR_Draw_FrameOvalFunc frame_oval_func; + PR_Draw_PaintOvalFunc paint_oval_func; + PR_Draw_InvertRectFunc invert_rect_func; + PR_Draw_SetClipFunc set_clip_func; + PR_Draw_PenNormal pen_normal_func; + PR_Draw_PenSize pen_size_func; + PR_Draw_PenPat pen_pat_func; + PR_Draw_Invert invert_func; + PR_CacheIconFunc cache_icon_func; + PR_DrawCachedIconFunc draw_cached_icon_func; + PR_DrawStringFunc draw_string_func; + PR_StrokePolyFunc stroke_poly_func; + PR_PaintPolyFunc paint_poly_func; + +} PR_InteractiveDrawProcs; + + + + + +#pragma pack( pop ) + + + +#ifdef __cplusplus + } +#endif + + +#endif diff --git a/External/AE SDK/Headers/PT_Public.h b/External/AE SDK/Headers/PT_Public.h new file mode 100644 index 00000000..7065b1a9 --- /dev/null +++ b/External/AE SDK/Headers/PT_Public.h @@ -0,0 +1,120 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef _H_PT_Public +#define _H_PT_Public + +/*** + + This header file defines public interface for tracker or pixel- + matching plug-ins. + + Their function is to implement a pixel matching algorithm that a + tracker in After Effects could use to track user specified features. + + Tracker in the application provides UI and sets the main parameters. + Tracker plug-ins, however, can provide a simple dialog-based UI for + parameters specific to the implemented algorithm(s). + + +***/ + +#include + +#pragma pack( push, 4 ) + +#ifdef __cplusplus + extern "C" { +#endif + +#define PT_TRACKER_API_VERSION_MAJOR 1 +#define PT_TRACKER_API_VERSION_MINOR 0 + +#define PT_TRACKER_MATCH_NAME_LEN 31 +#define PT_TRACKER_NAME_LEN 31 + +typedef A_long PT_Index; + + +typedef struct PT_Tracker *PT_TrackerPtr; +typedef struct PT_TrackerInstance *PT_TrackerInstancePtr; +typedef struct PT_TrackingContext *PT_TrackingContextPtr; + +// plug-in entry points +typedef A_Err (*PT_GlobalSetupFunc)( + const PT_TrackerPtr trackerP, + AEGP_MemHandle *global_dataPH); // << + +typedef A_Err (*PT_GlobalSetdownFunc)( + const PT_TrackerPtr trackerP); + +typedef A_Err (*PT_GlobalDoAboutFunc)( + const PT_TrackerPtr trackerP); + +typedef A_Err (*PT_InstanceSetupFunc)( + const PT_TrackerInstancePtr tracker_instanceP, + AEGP_MemHandle flat_instance_dataH0, + AEGP_MemHandle *instance_dataPH); // currently has to be flat (no handles inside a handle) + +typedef A_Err (*PT_InstanceSetdownFunc)( + const PT_TrackerInstancePtr tracker_instanceP); + +typedef A_Err (*PT_InstanceFlattenFunc)( + const PT_TrackerInstancePtr tracker_instanceP, + AEGP_MemHandle *flat_instance_dataPH); + +typedef A_Err (*PT_InstanceDoOptionsFunc)( + const PT_TrackerInstancePtr tracker_instanceP); + +typedef A_Err (*PT_PrepareTrackFunc)( + const PT_TrackingContextPtr contextP, + AEGP_MemHandle *tracker_dataPH); // << + +typedef A_Err (*PT_TrackFunc)( + const PT_TrackingContextPtr contextP); + +typedef A_Err (*PT_FinishTrackFunc)( + const PT_TrackingContextPtr contextP); + + +typedef struct { + PT_GlobalSetupFunc global_setup_func; + PT_GlobalSetdownFunc global_setdown_func; + PT_GlobalDoAboutFunc global_do_about_func; + + PT_InstanceSetupFunc instance_setup_func; + PT_InstanceSetdownFunc instance_setdown_func; + PT_InstanceFlattenFunc instance_flatten_func; + PT_InstanceDoOptionsFunc instance_do_options_func; + + PT_PrepareTrackFunc track_prepare_func; + PT_TrackFunc track_func; + PT_FinishTrackFunc track_finish_func; +} PT_TrackerEntryPoints; + + +#pragma pack( pop ) + +#ifdef __cplusplus + } +#endif + +#endif // _H_PT_Public \ No newline at end of file diff --git a/External/AE SDK/Headers/Param_Utils.h b/External/AE SDK/Headers/Param_Utils.h new file mode 100644 index 00000000..f4129069 --- /dev/null +++ b/External/AE SDK/Headers/Param_Utils.h @@ -0,0 +1,343 @@ +#ifndef H_PARAM_UTILS +#define H_PARAM_UTILS + +// do not include DVA headers here +#include +#include + +// requires the explicit use of 'def' for the struct name + +#define PF_ParamDef_IS_PUI_FLAG_SET(_defP, _puiFlag) \ + (((_defP)->ui_flags & _puiFlag) != 0) + +#define PF_ParamDef_IS_PARAM_FLAG_SET(_defP, _paramFlag) \ + (((_defP)->flags & _paramFlag) != 0) + + +#define PF_ADD_COLOR(NAME, RED, GREEN, BLUE, ID)\ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_COLOR; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.cd.value.red = (RED); \ + def.u.cd.value.green = (GREEN); \ + def.u.cd.value.blue = (BLUE); \ + def.u.cd.value.alpha = 255; \ + def.u.cd.dephault = def.u.cd.value; \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_ARBITRARY2(NAME, WIDTH, HEIGHT, PARAM_FLAGS, PUI_FLAGS, DFLT, ID, REFCON)\ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_ARBITRARY_DATA; \ + def.flags = (PARAM_FLAGS); \ + PF_STRCPY(def.name, (NAME) ); \ + def.ui_width = (WIDTH);\ + def.ui_height = (HEIGHT);\ + def.ui_flags = (PUI_FLAGS); \ + def.u.arb_d.value = NULL;\ + def.u.arb_d.pad = 0;\ + def.u.arb_d.dephault = (DFLT); \ + def.uu.id = def.u.arb_d.id = (ID); \ + def.u.arb_d.refconPV = REFCON; \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_ARBITRARY(NAME, WIDTH, HEIGHT, PUI_FLAGS, DFLT, ID, REFCON)\ + PF_ADD_ARBITRARY2(NAME, WIDTH, HEIGHT, PF_ParamFlag_NONE, PUI_FLAGS, DFLT, ID, REFCON) + +#define PF_ADD_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_SLIDER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.sd.value_str[0] = '\0'; \ + def.u.sd.value_desc[0] = '\0'; \ + def.u.sd.valid_min = (VALID_MIN); \ + def.u.sd.slider_min = (SLIDER_MIN); \ + def.u.sd.valid_max = (VALID_MAX); \ + def.u.sd.slider_max = (SLIDER_MAX); \ + def.u.sd.value = def.u.sd.dephault = (DFLT); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_FIXED(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, PREC, DISP, FLAGS, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_FIX_SLIDER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.fd.value_str[0] = '\0'; \ + def.u.fd.value_desc[0] = '\0'; \ + def.u.fd.valid_min = (PF_Fixed)((VALID_MIN) * 65536.0); \ + def.u.fd.slider_min = (PF_Fixed)((SLIDER_MIN) * 65536.0); \ + def.u.fd.valid_max = (PF_Fixed)((VALID_MAX) * 65536.0); \ + def.u.fd.slider_max = (PF_Fixed)((SLIDER_MAX) * 65536.0); \ + def.u.fd.value = def.u.fd.dephault = (PF_Fixed)((DFLT) * 65536.0); \ + def.u.fd.precision = (A_short)(PREC); \ + def.u.fd.display_flags |= (A_short)(DISP); \ + def.flags |= (FLAGS); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// why does fs_flags get or-ed in? and why is CURVE_TOLERANCE param ignored? and .flags is never set. oy. +#define PF_ADD_FLOAT_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, CURVE_TOLERANCE, DFLT, PREC, DISP, WANT_PHASE, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_FLOAT_SLIDER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.fs_d.valid_min = (VALID_MIN); \ + def.u.fs_d.slider_min = (SLIDER_MIN); \ + def.u.fs_d.valid_max = (VALID_MAX); \ + def.u.fs_d.slider_max = (SLIDER_MAX); \ + def.u.fs_d.value = (DFLT); \ + def.u.fs_d.dephault = (PF_FpShort)(def.u.fs_d.value); \ + def.u.fs_d.precision = (PREC); \ + def.u.fs_d.display_flags = (DISP); \ + def.u.fs_d.fs_flags |= (WANT_PHASE) ? PF_FSliderFlag_WANT_PHASE : 0; \ + def.u.fs_d.curve_tolerance = AEFX_AUDIO_DEFAULT_CURVE_TOLERANCE;\ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// safer newer version +#define PF_ADD_FLOAT_SLIDERX(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, PREC, DISP, FLAGS, ID) \ + do { \ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS); \ + PF_ADD_FLOAT_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, 0, DFLT, PREC, DISP, 0, ID); \ + } while (0) + +// copied from Pr version of Param_Utils.h. It is used in some of Pr versions of AE effects +#define PF_ADD_FLOAT_EXPONENTIAL_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, CURVE_TOLERANCE, DFLT, PREC, DISP, WANT_PHASE, EXPONENT, ID) \ +do {\ +PF_Err priv_err = PF_Err_NONE; \ +def.param_type = PF_Param_FLOAT_SLIDER; \ +PF_STRCPY(def.name, (NAME) ); \ +def.u.fs_d.valid_min = (VALID_MIN); \ +def.u.fs_d.slider_min = (SLIDER_MIN); \ +def.u.fs_d.valid_max = (VALID_MAX); \ +def.u.fs_d.slider_max = (SLIDER_MAX); \ +def.u.fs_d.value = (DFLT); \ +def.u.fs_d.dephault = (DFLT); \ +def.u.fs_d.precision = (PREC); \ +def.u.fs_d.display_flags = (DISP); \ +def.u.fs_d.fs_flags |= (WANT_PHASE) ? PF_FSliderFlag_WANT_PHASE : 0; \ +def.u.fs_d.curve_tolerance = AEFX_AUDIO_DEFAULT_CURVE_TOLERANCE;\ +def.u.fs_d.useExponent = true;\ +def.u.fs_d.exponent = EXPONENT;\ +def.uu.id = (ID); \ +if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ +} while (0) + +enum { PF_Precision_INTEGER, PF_Precision_TENTHS, PF_Precision_HUNDREDTHS, PF_Precision_THOUSANDTHS, PF_Precision_TEN_THOUSANDTHS }; + +#define PF_ADD_CHECKBOX(NAME_A, NAME_B, DFLT, FLAGS, ID)\ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_CHECKBOX; \ + PF_STRCPY(def.name, NAME_A); \ + def.u.bd.u.nameptr = (NAME_B); \ + def.u.bd.value = (DFLT); \ + def.u.bd.dephault = (PF_Boolean)(def.u.bd.value); \ + def.flags |= (FLAGS); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// safer newer version +#define PF_ADD_CHECKBOXX(NAME, DFLT, FLAGS, ID)\ + do {\ + AEFX_CLR_STRUCT(def); \ + PF_ADD_CHECKBOX(NAME, "", DFLT, FLAGS, ID); \ + } while (0) + +#define PF_ADD_BUTTON(PARAM_NAME, BUTTON_NAME, PUI_FLAGS, PARAM_FLAGS, ID)\ + do {\ + AEFX_CLR_STRUCT(def); \ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_BUTTON; \ + PF_STRCPY(def.name, PARAM_NAME); \ + def.u.button_d.u.namesptr = (BUTTON_NAME); \ + def.flags = (PARAM_FLAGS); \ + def.ui_flags = (PUI_FLAGS); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_ANGLE(NAME, DFLT, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_ANGLE; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.ad.value = def.u.ad.dephault = (PF_Fixed)((DFLT) * 65536.0); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + + +#define PF_ADD_NULL(NAME, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_NO_DATA; \ + PF_STRCPY(def.name, (NAME) ); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + + +#define PF_ADD_POPUP(NAME, CHOICES, DFLT, STRING, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_POPUP; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.pd.num_choices = (CHOICES); \ + def.u.pd.dephault = (DFLT); \ + def.u.pd.value = def.u.pd.dephault; \ + def.u.pd.u.namesptr = (STRING); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_LAYER(NAME, DFLT, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_LAYER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.ld.dephault = (DFLT); \ + def.uu.id = ID;\ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_255_SLIDER(NAME, DFLT, ID)\ + PF_ADD_SLIDER( (NAME), 0, 255, 0, 255, (DFLT), (ID)) + +#define PF_ADD_PERCENT(NAME, DFLT, ID)\ + PF_ADD_FIXED( (NAME), 0, 100, 0, 100, (DFLT), 1, 1, 0, (ID)) + +#define PF_ADD_POINT(NAME, X_DFLT, Y_DFLT, RESTRICT_BOUNDS, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_POINT; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.td.restrict_bounds = RESTRICT_BOUNDS;\ + def.u.td.x_value = def.u.td.x_dephault = (X_DFLT << 16); \ + def.u.td.y_value = def.u.td.y_dephault = (Y_DFLT << 16); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_POINT_3D(NAME, X_DFLT, Y_DFLT, Z_DFLT, ID) \ + do {\ + AEFX_CLR_STRUCT(def); \ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_POINT_3D; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.point3d_d.x_value = def.u.point3d_d.x_dephault = X_DFLT; \ + def.u.point3d_d.y_value = def.u.point3d_d.y_dephault = Y_DFLT; \ + def.u.point3d_d.z_value = def.u.point3d_d.z_dephault = Y_DFLT; \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_TOPIC(NAME, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_GROUP_START; \ + PF_STRCPY(def.name, (NAME) ); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_END_TOPIC(ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_GROUP_END; \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_VERSIONED_FLAG(NAME) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_CHECKBOX; \ + def.name[0] = 0; \ + def.u.bd.u.nameptr = (NAME); \ + def.u.bd.value = true; \ + def.u.bd.dephault = false; \ + def.flags = PF_ParamFlag_USE_VALUE_FOR_OLD_PROJECTS; \ + def.ui_flags = PF_PUI_INVISIBLE; \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// newer safer version +#define PF_ADD_TOPICX(NAME, FLAGS, ID) \ + do {\ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS); \ + PF_ADD_TOPIC(NAME, ID); \ + } while (0) + +#define PF_ADD_POPUPX(NAME, NUM_CHOICES, DFLT, ITEMS_STRING, FLAGS, ID) \ + do { \ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS); \ + PF_ADD_POPUP(NAME, NUM_CHOICES, DFLT, ITEMS_STRING, ID); \ + } while (0) + +enum { PF_ParamFlag_NONE=0 }; // SBI:AE_Effect.h + +#define PF_ADD_FLOAT_SLIDERX_DISABLED(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, PREC, DISP, FLAGS, ID) \ + do { \ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS);\ + def.ui_flags = PF_PUI_DISABLED;\ + PF_ADD_FLOAT_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, 0, DFLT, PREC, DISP, 0, ID); \ + } while (0) + +namespace fxparam_utility { + + template + inline int RoundF(T x) + { + int ret; + + if (x > 0) { + ret = (int)(x + (T)0.5); + } else { + if ((int)(x + (T)0.5) == (x + (T)0.5)) { + ret = (int)x; + } else { + ret = (int)(x - (T)0.5); + } + } + + return ret; + } +}; + +inline PF_Err PF_AddPointControl(PF_InData *in_data, + const char *nameZ, + float x_defaultF, // 0-1 + float y_defaultF, // 0-1 + bool restrict_boundsB, + PF_ParamFlags param_flags, + PF_ParamUIFlags pui_flags, + A_long param_id) +{ + PF_ParamDef def = {{0}}; + namespace du = fxparam_utility; + + def.flags = param_flags; + def.ui_flags = pui_flags; + + PF_ADD_POINT(nameZ, du::RoundF(x_defaultF*100), du::RoundF(y_defaultF*100), restrict_boundsB, param_id); // has error return in macro + + return PF_Err_NONE; +} + + +#endif // H_PARAM_UTILS diff --git a/External/AE SDK/Headers/PrSDKAESupport.h b/External/AE SDK/Headers/PrSDKAESupport.h new file mode 100644 index 00000000..7bf914f0 --- /dev/null +++ b/External/AE SDK/Headers/PrSDKAESupport.h @@ -0,0 +1,547 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2002 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef PRSDKAESUPPORT_H +#define PRSDKAESUPPORT_H + +#ifdef PREMIERE_INTERNAL + +#ifndef PRSDKTYPES_H +#include "PrSDKTypes.h" +#endif + +#ifndef PRSDKTIMESUITE_H +#include "PrSDKTimeSuite.h" +#endif + +#endif + +#ifndef PRSDKPIXELFORMAT_H +#include "PrSDKPixelFormat.h" +#endif + +#ifdef _WIN32 +// Required for AE Stuff +#ifndef MSWindows +#define MSWindows 1 +#endif +#endif + +#ifndef _H_AE_Effect +#include "AE_Effect.h" +#endif + +#ifndef _H_AE_EffectCB +#include "AE_EffectCB.h" +#endif + +#ifndef PREMIERE_INTERNAL +#ifndef csSDK_uint32 +typedef unsigned int csSDK_uint32; +typedef int csSDK_int32; + +#ifdef AE_OS_WIN +typedef signed __int64 csSDK_int64; +#elif defined AE_OS_MAC +typedef int64_t csSDK_int64; +#endif + +typedef csSDK_int64 prInt64; +typedef csSDK_int32 prFieldType; +typedef csSDK_int32 PrTimelineID; +typedef csSDK_int32 PrClipID; +typedef prInt64 PrTime; +// This is a conflicting redefinition for any host +// other than PPRO because PREMIERE_INTERNAL +// is not defined for other hosts and PrSDKTypes.h +// will be included through other headers. +// We need to fix it. We go ahead and redefine it +// only if PrSDKTypes.h has not been included. +#ifndef PRSDKTYPES_H +typedef struct +{ + csSDK_int64 opaque[2]; +} PrSDKString; +#endif // PRSDKTYPES_H +#endif + +enum { + PF_TimeDisplay_24 = 1, + PF_TimeDisplay_25, + PF_TimeDisplay_30Drop, + PF_TimeDisplay_30NonDrop, + PF_TimeDisplay_50, + PF_TimeDisplay_60Drop, + PF_TimeDisplay_60NonDrop, + PF_TimeDisplay_NonStandard, + PF_TimeDisplay_Invalid +}; +typedef csSDK_uint32 PF_TimeDisplay; +#endif + +#define kPFPixelFormatSuite "PF Pixel Format Suite" +#define kPFPixelFormatSuiteVersion1 1 +#define kPFPixelFormatSuiteVersion kPFPixelFormatSuiteVersion1 + +typedef struct PF_PixelFormatSuite +{ + SPAPI PF_Err (*AddSupportedPixelFormat)( + PF_ProgPtr effect_ref, /* reference from in_data */ + PrPixelFormat pixelFormat); /* add a supported pixel format */ + + SPAPI PF_Err (*ClearSupportedPixelFormats)( + PF_ProgPtr effect_ref); /* reference from in_data */ + + // not implemented yet + SPAPI PF_Err (*NewWorldOfPixelFormat)( + PF_ProgPtr effect_ref, /* reference from in_data */ + A_u_long width, + A_u_long height, + PF_NewWorldFlags flags, /* should be pre-cleared to zeroes */ + PrPixelFormat pixelFormat, + PF_EffectWorld *world); /* always 32 bit */ + + // not implemented yet + SPAPI PF_Err (*DisposeWorld)( /* Identical to dispose_world in PF_WorldSuite */ + PF_ProgPtr effect_ref, /* reference from in_data */ + PF_EffectWorld *world); + + SPAPI PF_Err (*GetPixelFormat)( + PF_EffectWorld *inWorld, /* the pixel buffer of interest */ + PrPixelFormat *pixelFormat); /* one of the above PF_PixelFormat types */ + + SPAPI PF_Err (*GetBlackForPixelFormat)( + PrPixelFormat pixelFormat, + void* pixelData); + + SPAPI PF_Err (*GetWhiteForPixelFormat)( + PrPixelFormat pixelFormat, + void* pixelData); + + SPAPI PF_Err (*ConvertColorToPixelFormattedData)( + PrPixelFormat pixelFormat, + float alpha, + float red, + float green, + float blue, + void* pixelData); +} PF_PixelFormatSuite; + +typedef PF_PixelFormatSuite PF_PixelFormatSuite1; + +/********** Documentation *********************************************** +AddSupportedPixelFormat() + During PF_Cmd_GLOBAL_SETUP a plug-in can add the formats it supports. By definition, + the 8-bit ARGB pixel format in use today will be the lowest priority, the default and doesn't + need to be added. The default pixel format will be used when the rendering pipeline + indicates it would be optimal and minimizes color space conversions. Within the scope of + Premiere, the effect_ref will be a reference to one of the many types of plug-ins (import, + compile, export, etc...). + +NewWorldOfPixelFormat() + Since the pixel buffers for some of the formats are very different in structure, an allocator + that understands the new formats would be a nice convenience and have some performance benefits. + For example, YCbCr(YUV) is often stored planar rather than packed. + +DisposeWorld() + This call is to balance the suite, however it's functionally equivalent to the dispose_world + in the PF_WorldSuite or the dispose_world callback in the _PF_UtilCallbacks. However, all dispose + world calls will need to be updated to understand how to dispose of planar pixels. + +GetPixelFormat() + Retrieves the pixel format label of the PF_EffectWorld of interest. + +SetPixelFormat() + Sets the pixel format label of the PF_EffectWorld of interest. It does not convert the pixels to the + format specified. Perhaps this call doesn't need to be public, as the user will be using the + ConvertToPixelFormat() call which will set the format? + +ConvertToPixelFormat() + Used to convert a PF_EffectWorld to another pixel format, such as converting ARGB to YCbCr(YUV). The + function would use built in conversion routines and would account for white and black levels while + performing appropriate clipping or scaling. +***********************************************************************/ + +#define kPFBackgroundFrameSuite "PF Background Frame Suite" +#define kPFBackgroundFrameSuiteVersion1 1 +#define kPFBackgroundFrameSuiteVersion kPFBackgroundFrameSuiteVersion1 + +typedef struct PF_BackgroundFrameSuite +{ + SPAPI PF_Err (*AddSupportedBackgroundTransferMode)( + PF_ProgPtr inEffectRef, /* reference from in_data */ + PF_TransferMode supportedTransferMode, /* transfer mode that an effect can use to composite on the background */ + PrPixelFormat supportedPixelFormat); /* pixel format that the effect can composite with */ + + SPAPI PF_Err (*GetBackgroundFrame)( + PF_ProgPtr inEffectRef, /* reference from in_data */ + PF_LayerDef** backgroundFrame, /* the background frame, if any */ + PF_TransferMode* backgroundTransferMode); /* the transfer mode to be used on the background frame */ +} PF_BackgroundFrameSuite; + +typedef PF_BackgroundFrameSuite PF_BackgroundFrameSuite1; + +/********** Documentation *********************************************** +AddSupportedBackgroundTransferMode + Called to register support for a transfer mode in a filter. + The filter must be able to do its effect and composite onto the background. + +GetBackgroundLayer() + Get the background layer and the transfer mode. + If the returned PF_LayerDef* is nil, there is no background frame. +***********************************************************************/ + +#define kPFUtilitySuite "PF Utility Suite" +#define kPFUtilitySuiteVersion2 2 +#define kPFUtilitySuiteVersion3 3 +#define kPFUtilitySuiteVersion4 4 +#define kPFUtilitySuiteVersion5 5 +#define kPFUtilitySuiteVersion6 6 +#define kPFUtilitySuiteVersion7 7 +#define kPFUtilitySuiteVersion8 8 +#define kPFUtilitySuiteVersion9 9 +#define kPFUtilitySuiteVersion kPFUtilitySuiteVersion9 + +typedef struct PF_UtilitySuite4 +{ + SPAPI PF_Err (*GetFilterInstanceID)( + PF_ProgPtr effect_ref, + A_long* outFilterInstanceID); + SPAPI PF_Err (*GetMediaTimecode)( + PF_ProgPtr effect_ref, + A_long* outCurrentFrame, + PF_TimeDisplay* outTimeDisplay); + SPAPI PF_Err (*GetClipSpeed)( + PF_ProgPtr effect_ref, + double* speed); + SPAPI PF_Err (*GetClipDuration)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetClipStart)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetUnscaledClipDuration)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetUnscaledClipStart)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetTrackItemStart)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetMediaFieldType)( + PF_ProgPtr effect_ref, + prFieldType* outFieldType); + SPAPI PF_Err (*GetMediaFrameRate)( + PF_ProgPtr effect_ref, + PrTime* outTicksPerFrame); + SPAPI PF_Err (*GetContainingTimelineID)( + PF_ProgPtr effect_ref, + PrTimelineID* outTimelineID); + SPAPI PF_Err (*GetClipName)( + PF_ProgPtr effect_ref, + PrSDKString * outSDKString); + SPAPI PF_Err (*EffectWantsCheckedOutFramesToMatchRenderPixelFormat)( + PF_ProgPtr effect_ref); +} PF_UtilitySuite4; + +typedef struct PF_UtilitySuite +{ + SPAPI PF_Err (*GetFilterInstanceID)( + PF_ProgPtr effect_ref, + A_long* outFilterInstanceID); + SPAPI PF_Err (*GetMediaTimecode)( + PF_ProgPtr effect_ref, + A_long* outCurrentFrame, + PF_TimeDisplay* outTimeDisplay); + SPAPI PF_Err (*GetClipSpeed)( + PF_ProgPtr effect_ref, + double* speed); + SPAPI PF_Err (*GetClipDuration)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetClipStart)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetUnscaledClipDuration)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetUnscaledClipStart)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetTrackItemStart)( + PF_ProgPtr effect_ref, + A_long* frameDuration); + SPAPI PF_Err (*GetMediaFieldType)( + PF_ProgPtr effect_ref, + prFieldType* outFieldType); + SPAPI PF_Err (*GetMediaFrameRate)( + PF_ProgPtr effect_ref, + PrTime* outTicksPerFrame); + SPAPI PF_Err (*GetContainingTimelineID)( + PF_ProgPtr effect_ref, + PrTimelineID* outTimelineID); + SPAPI PF_Err (*GetClipName)( + PF_ProgPtr effect_ref, + A_Boolean inGetMasterClipName, + PrSDKString * outSDKString); + SPAPI PF_Err (*EffectWantsCheckedOutFramesToMatchRenderPixelFormat)( + PF_ProgPtr effect_ref); + SPAPI PF_Err (*EffectDependsOnClipName)( + PF_ProgPtr effect_ref, + A_Boolean inDependsOnClipName); + SPAPI PF_Err (*SetEffectInstanceName)( + PF_ProgPtr effect_ref, + const PrSDKString* inSDKString); + SPAPI PF_Err (*GetFileName)( + PF_ProgPtr effect_ref, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetOriginalClipFrameRate)( + PF_ProgPtr effect_ref, + PrTime* outTicksPerFrame); + SPAPI PF_Err (*GetSourceTrackMediaTimecode)( + PF_ProgPtr effect_ref, + csSDK_uint32 inLayerParamIndex, + bool inApplyTransform, + bool inAddStartTimeOffset, + A_long* outCurrentFrame); + SPAPI PF_Err (*GetSourceTrackClipName)( + PF_ProgPtr effect_ref, + csSDK_uint32 inLayerParamIndex, + A_Boolean inGetMasterClipName, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetSourceTrackFileName)( + PF_ProgPtr effect_ref, + csSDK_uint32 inLayerParamIndex, + PrSDKString* outSDKString); + SPAPI PF_Err (*EffectDependsOnClipName2)( + PF_ProgPtr effect_ref, + A_Boolean inDependsOnClipName, + csSDK_uint32 inLayerParamIndex); + SPAPI PF_Err (*GetMediaTimecode2)( + PF_ProgPtr effect_ref, + bool inApplyTrim, + A_long* outCurrentFrame, + PF_TimeDisplay* outTimeDisplay); + SPAPI PF_Err (*GetSourceTrackMediaTimecode2)( + PF_ProgPtr effect_ref, + csSDK_uint32 inLayerParamIndex, + bool inApplyTransform, + bool inAddStartTimeOffset, + PrTime inSequenceTime, + A_long* outCurrentFrame); + SPAPI PF_Err (*GetSourceTrackClipName2)( + PF_ProgPtr effect_ref, + csSDK_uint32 inLayerParamIndex, + A_Boolean inGetMasterClipName, + PrSDKString* outSDKString, + PrTime inSequenceTime); + SPAPI PF_Err (*GetSourceTrackFileName2)( + PF_ProgPtr effect_ref, + csSDK_uint32 inLayerParamIndex, + PrSDKString* outSDKString, + PrTime inSequenceTime); + SPAPI PF_Err (*GetCommentString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetLogNoteString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetCameraRollString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetClientMetadataString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetDailyRollString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetDescriptionString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetLabRollString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetSceneString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetShotString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetTapeNameString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetVideoCodecString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetGoodMetadataString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetSoundRollString)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrSDKString* outSDKString); + SPAPI PF_Err (*GetSequenceTime)( + PF_ProgPtr inEffectRef, + PrTime* outSequenceTime); + SPAPI PF_Err (*GetSoundTimecode)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + A_long* outCurrentFrame); + SPAPI PF_Err (*GetOriginalClipFrameRateForSourceTrack)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime* outTicksPerFrame); + SPAPI PF_Err (*GetMediaFrameRateForSourceTrack)( + PF_ProgPtr inEffectRef, + int32_t inSourceTrack, + PrTime inSequenceTime, + PrTime* outTicksPerFrame); + SPAPI PF_Err (*GetSourceTrackMediaActualStartTime)( + PF_ProgPtr inEffectRef, + csSDK_uint32 inLayerParamIndex, + PrTime inSequenceTime, + PrTime* outClipActualStartTime); + SPAPI PF_Err (*IsSourceTrackMediaTrimmed)( + PF_ProgPtr inEffectRef, + csSDK_uint32 inLayerParamIndex, + PrTime inSequenceTime, + bool* outTrimApplied); + SPAPI PF_Err (*IsMediaTrimmed)( + PF_ProgPtr inEffectRef, + PrTime inSequenceTime, + bool* outTrimApplied); + SPAPI PF_Err (*IsTrackEmpty)( + PF_ProgPtr inEffectRef, + csSDK_uint32 inLayerParamIndex, + PrTime inSequenceTime, + bool* outIsTrackEmpty); + SPAPI PF_Err (*IsTrackItemEffectAppliedToSynthetic)( + PF_ProgPtr inEffectRef, + bool* outIsTrackItemEffectAppliedToSynthetic); +} PF_UtilitySuite; + +// Legacy function tables +// Please note that version 4 didn't version the GetClipName API correctly, which is why it needs a separate table. But this was fixed in later versions, and that API didn't exist in prior versions, so all of the rest can use PF_UtilitySuite. +typedef PF_UtilitySuite PF_UtilitySuiteVersion1; +typedef PF_UtilitySuite PF_UtilitySuite2; +typedef PF_UtilitySuite PF_UtilitySuite3; +typedef PF_UtilitySuite4 PF_UtilitySuite4; +typedef PF_UtilitySuite PF_UtilitySuite5; +typedef PF_UtilitySuite PF_UtilitySuite6; +typedef PF_UtilitySuite PF_UtilitySuite7; +typedef PF_UtilitySuite PF_UtilitySuite8; + +#define kPFSourceSettingsSuite "PF Source Settings Suite" +#define kPFSourceSettingsSuiteVersion 1 + +typedef struct PF_SourceSettingsSuite +{ + SPAPI PF_Err (*PerformSourceSettingsCommand)( + PF_ProgPtr effect_ref, + void * ioCommandStruct, + csSDK_uint32 inDataSize); + +} PF_SourceSettingsSuite; + +/********** Documentation *********************************************** +GetFilterInstanceID + An AE filter running in Premiere can call this method to obtain + its instance ID from the PF_InData->effect_ref. The instance ID + obtained is the same value contained in the prtFilterRec of its RT segment. +GetMediaTimecode + Returns the starting timecode of the media file. +GetClipSpeed + Returns the playback rate of the underlying clip in the timeline + (negative speed means backwards playback). +GetClipDuration + Returns the trimmed duration (in frames) of the underlying clip in + the timeline. +***********************************************************************/ + + + +#define kPFTransitionSuite "PF Transition Suite" +#define kPFTransitionSuiteVersion1 1 +#define kPFTransitionSuiteVersion2 2 // Added RegisterTransitionStartParam and RegisterTransitionEndParam +#define kPFTransitionSuiteVersion kPFTransitionSuiteVersion2 + +typedef struct PF_TransitionSuite +{ + /** + ** Register an effect as a transition using the passed in + ** input layer as the outgoing clip. When registered the effect + ** will be available to be dragged directly onto clip ends rather + ** than only applied to layers. + */ + SPAPI PF_Err (*RegisterTransitionInputParam)( + PF_ProgPtr inEffectRef, + PF_ParamIndex inIndex); + + /** + ** Register a PF_ADD_FLOAT_SLIDER parameter to receive + ** changes to the start of the transition region through the + ** PF_Cmd_USER_CHANGED_PARAM command. + */ + SPAPI PF_Err (*RegisterTransitionStartParam)( + PF_ProgPtr inEffectRef, + PF_ParamIndex inIndex); + + /** + ** Register a PF_ADD_FLOAT_SLIDER parameter to receive + ** changes to the end of the transition region through the + ** PF_Cmd_USER_CHANGED_PARAM command. + */ + SPAPI PF_Err (*RegisterTransitionEndParam)( + PF_ProgPtr inEffectRef, + PF_ParamIndex inIndex); + +} PF_TransitionSuite; + + +#endif // PRSDKAESUPPORT_H + diff --git a/External/AE SDK/Headers/PrSDKPixelFormat.h b/External/AE SDK/Headers/PrSDKPixelFormat.h new file mode 100644 index 00000000..c39889b8 --- /dev/null +++ b/External/AE SDK/Headers/PrSDKPixelFormat.h @@ -0,0 +1,160 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2002 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#ifndef PRSDKPIXELFORMAT_H +#define PRSDKPIXELFORMAT_H + +#ifdef PREMIERE_INTERNAL + +#ifndef PRSDKTYPES_H +#include "PrSDKTypes.h" +#endif + +#endif + +#ifndef MAKE_PIXEL_FORMAT_FOURCC +#define MAKE_PIXEL_FORMAT_FOURCC(ch0, ch1, ch2, ch3) \ + (static_cast(static_cast(ch0)) | \ + (static_cast(static_cast(ch1)) << 8) | \ + (static_cast(static_cast(ch2)) << 16) | \ + (static_cast(static_cast(ch3)) << 24 )) +#endif + +/** +** Premiere supported pixel formats for RenderFrame and PPixs +*/ + +enum PrPixelFormat +{ + +/** +** Currently supported types +*/ + +// Packed formats +PrPixelFormat_BGRA_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('b', 'g', 'r', 'a'), // 4 byte BGRA, standard windows 32 bit pixels (was kPixelFormat_BGRA32) +PrPixelFormat_VUYA_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('v', 'u', 'y', 'a'), // 4 byte VUYA (was kPixelFormat_VUYA32) +PrPixelFormat_VUYA_4444_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('V', 'U', 'Y', 'A'), // 4 byte VUYA (was kPixelFormat_VUYA32) +PrPixelFormat_ARGB_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('a', 'r', 'g', 'b'), // 4 byte ARGB (the format used by AE) (was kPixelFormat_ARGB32) + +PrPixelFormat_BGRX_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('b', 'g', 'r', 'x'), // 4 byte BGRX +PrPixelFormat_VUYX_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('v', 'u', 'y', 'x'), // 4 byte VUYX +PrPixelFormat_VUYX_4444_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('v', 'u', 'x', '7'), // 4 byte VUYX +PrPixelFormat_XRGB_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('x', 'r', 'g', 'b'), // 4 byte XRGB + +PrPixelFormat_BGRP_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('b', 'g', 'r', 'p'), // 4 byte BGRP +PrPixelFormat_VUYP_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('v', 'u', 'y', 'p'), // 4 byte VUYP +PrPixelFormat_VUYP_4444_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('v', 'u', 'p', '7'), // 4 byte VUYP +PrPixelFormat_PRGB_4444_8u = MAKE_PIXEL_FORMAT_FOURCC('p', 'r', 'g', 'b'), // 4 byte PRGB + +PrPixelFormat_BGRA_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('B', 'g', 'r', 'a'), // 16 bit integer per component BGRA +PrPixelFormat_VUYA_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('V', 'u', 'y', 'a'), // 16 bit integer per component VUYA +PrPixelFormat_ARGB_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('A', 'r', 'g', 'b'), // 16 bit integer per component ARGB + +PrPixelFormat_BGRX_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('B', 'g', 'r', 'x'), // 16 bit integer per component BGRX +PrPixelFormat_XRGB_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('X', 'r', 'g', 'b'), // 16 bit integer per component XRGB + +PrPixelFormat_BGRP_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('B', 'g', 'r', 'p'), // 16 bit integer per component BGRP +PrPixelFormat_PRGB_4444_16u = MAKE_PIXEL_FORMAT_FOURCC('P', 'r', 'g', 'b'), // 16 bit integer per component PRGB + +PrPixelFormat_BGRA_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('B', 'G', 'r', 'a'), // 32 bit float per component BGRA +PrPixelFormat_VUYA_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('V', 'U', 'y', 'a'), // 32 bit float per component VUYA +PrPixelFormat_VUYA_4444_32f_709 = MAKE_PIXEL_FORMAT_FOURCC('v', 'U', 'Y', 'a'), // 32 bit float per component VUYA +PrPixelFormat_ARGB_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('A', 'R', 'g', 'b'), // 32 bit float per component ARGB + +PrPixelFormat_BGRX_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('B', 'G', 'r', 'x'), // 32 bit float per component BGRX +PrPixelFormat_VUYX_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('V', 'U', 'y', 'x'), // 32 bit float per component VUYX +PrPixelFormat_VUYX_4444_32f_709 = MAKE_PIXEL_FORMAT_FOURCC('V', 'U', 'x', '7'), // 32 bit float per component VUYX +PrPixelFormat_XRGB_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('X', 'R', 'g', 'b'), // 32 bit float per component XRGB + +PrPixelFormat_BGRP_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('B', 'G', 'r', 'p'), // 32 bit float per component BGRX +PrPixelFormat_VUYP_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('V', 'U', 'y', 'p'), // 32 bit float per component VUYX +PrPixelFormat_VUYP_4444_32f_709 = MAKE_PIXEL_FORMAT_FOURCC('V', 'U', 'p', '7'), // 32 bit float per component VUYX +PrPixelFormat_PRGB_4444_32f = MAKE_PIXEL_FORMAT_FOURCC('P', 'R', 'g', 'b'), // 32 bit float per component XRGB + +PrPixelFormat_RGB_444_10u = MAKE_PIXEL_FORMAT_FOURCC('R', 'G', 'B', '1'), // Full range 10-bit 444 RGB little-endian + +PrPixelFormat_YUYV_422_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('y', 'u', 'y', '2'), // 8 bit 422 YUY2 601 colorspace +PrPixelFormat_YUYV_422_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('y', 'u', 'y', '3'), // 8 bit 422 YUY2 709 colorspace + +PrPixelFormat_UYVY_422_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('u', 'y', 'v', 'y'), // 8 bit 422 UYVY 601 colorspace +PrPixelFormat_UYVY_422_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('u', 'y', 'v', '7'), // 8 bit 422 UYVY 709 colorspace + +PrPixelFormat_V210_422_10u_601 = MAKE_PIXEL_FORMAT_FOURCC('v', '2', '1', '0'), // packed uncompressed 10 bit 422 YUV aka V210 601 colorspace +PrPixelFormat_V210_422_10u_709 = MAKE_PIXEL_FORMAT_FOURCC('v', '2', '1', '1'), // packed uncompressed 10 bit 422 YUV aka V210 709 colorspace + +PrPixelFormat_UYVY_422_32f_601 = MAKE_PIXEL_FORMAT_FOURCC('U', 'Y', 'v', 'y'), +PrPixelFormat_UYVY_422_32f_709 = MAKE_PIXEL_FORMAT_FOURCC('U', 'Y', 'v', '7'), + +PrPixelFormat_BGRA_4444_32f_Linear = MAKE_PIXEL_FORMAT_FOURCC('B', 'G', 'a', 'L'), // 32 bit float per component linear BGRA +PrPixelFormat_BGRP_4444_32f_Linear = MAKE_PIXEL_FORMAT_FOURCC('B', 'G', 'p', 'L'), // 32 bit float per component linear BGRP +PrPixelFormat_BGRX_4444_32f_Linear = MAKE_PIXEL_FORMAT_FOURCC('B', 'G', 'x', 'L'), // 32 bit float per component linear BGRX +PrPixelFormat_ARGB_4444_32f_Linear = MAKE_PIXEL_FORMAT_FOURCC('A', 'R', 'g', 'L'), // 32 bit float per component linear ARGB +PrPixelFormat_PRGB_4444_32f_Linear = MAKE_PIXEL_FORMAT_FOURCC('P', 'R', 'g', 'L'), // 32 bit float per component linear PRGB +PrPixelFormat_XRGB_4444_32f_Linear = MAKE_PIXEL_FORMAT_FOURCC('X', 'R', 'g', 'L'), // 32 bit float per component linear XRGB + +PrPixelFormat_RGB_444_12u_PQ_709 = MAKE_PIXEL_FORMAT_FOURCC('@', 'P', 'Q', '7'), // 12 bit integer (in 16 bit words) per component RGB with PQ curve, Rec.709 primaries +PrPixelFormat_RGB_444_12u_PQ_P3 = MAKE_PIXEL_FORMAT_FOURCC('@', 'P', 'Q', 'P'), // 12 bit integer (in 16 bit words) per component RGB with PQ curve, P3 primaries +PrPixelFormat_RGB_444_12u_PQ_2020 = MAKE_PIXEL_FORMAT_FOURCC('@', 'P', 'Q', '2'), // 12 bit integer (in 16 bit words) per component RGB with PQ curve, Rec.2020 primaries + +// Planar formats +PrPixelFormat_YUV_420_MPEG2_FRAME_PICTURE_PLANAR_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', '1', '2'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) +PrPixelFormat_YUV_420_MPEG2_FIELD_PICTURE_PLANAR_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', 'i', '2'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) +PrPixelFormat_YUV_420_MPEG2_FRAME_PICTURE_PLANAR_8u_601_FullRange = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', '1', 'f'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) +PrPixelFormat_YUV_420_MPEG2_FIELD_PICTURE_PLANAR_8u_601_FullRange = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', 'i', 'f'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) +PrPixelFormat_YUV_420_MPEG2_FRAME_PICTURE_PLANAR_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', '1', '7'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) 709 colorspace +PrPixelFormat_YUV_420_MPEG2_FIELD_PICTURE_PLANAR_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', 'i', '7'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) 709 colorspace +PrPixelFormat_YUV_420_MPEG2_FRAME_PICTURE_PLANAR_8u_709_FullRange = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', '1', 'F'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) 709 colorspace +PrPixelFormat_YUV_420_MPEG2_FIELD_PICTURE_PLANAR_8u_709_FullRange = MAKE_PIXEL_FORMAT_FOURCC('y', 'v', 'i', 'F'), // YUV with 2x2 chroma subsampling. Planar. (for MPEG-2) 709 colorspace + +PrPixelFormat_YUV_420_MPEG4_FRAME_PICTURE_PLANAR_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', '1', '2'), // YUV with 2x2 chroma subsampling, center chroma. Planar. +PrPixelFormat_YUV_420_MPEG4_FIELD_PICTURE_PLANAR_8u_601 = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', 'i', '2'), // YUV with 2x2 chroma subsampling, center chroma. Planar. +PrPixelFormat_YUV_420_MPEG4_FRAME_PICTURE_PLANAR_8u_601_FullRange = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', '1', 'f'), // YUV with 2x2 chroma subsampling, center chroma. Planar. +PrPixelFormat_YUV_420_MPEG4_FIELD_PICTURE_PLANAR_8u_601_FullRange = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', 'i', 'f'), // YUV with 2x2 chroma subsampling, center chroma. Planar. +PrPixelFormat_YUV_420_MPEG4_FRAME_PICTURE_PLANAR_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', '1', '7'), // YUV with 2x2 chroma subsampling, center chroma. Planar. 709 colorspace +PrPixelFormat_YUV_420_MPEG4_FIELD_PICTURE_PLANAR_8u_709 = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', 'i', '7'), // YUV with 2x2 chroma subsampling, center chroma. Planar. 709 colorspace +PrPixelFormat_YUV_420_MPEG4_FRAME_PICTURE_PLANAR_8u_709_FullRange = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', '1', 'F'), // YUV with 2x2 chroma subsampling, center chroma. Planar. 709 colorspace +PrPixelFormat_YUV_420_MPEG4_FIELD_PICTURE_PLANAR_8u_709_FullRange = MAKE_PIXEL_FORMAT_FOURCC('Y', 'v', 'i', 'F'), // YUV with 2x2 chroma subsampling, center chroma. Planar. 709 colorspace + +// Compressed formats +PrPixelFormat_NTSCDV25 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'n', '2'), // compressed DV-25 +PrPixelFormat_PALDV25 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'p', '2'), // compressed DV-25 +PrPixelFormat_NTSCDV50 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'n', '5'), +PrPixelFormat_PALDV50 = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'p', '5'), +PrPixelFormat_NTSCDV100_720p = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'n', '7'), // compressed DV-100 720p, 60 Hz +PrPixelFormat_PALDV100_720p = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'p', '7'), // compressed DV-100 720p, 50 Hz +PrPixelFormat_NTSCDV100_1080i = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'n', '1'), // compressed DV-100 1080i, 60 Hz +PrPixelFormat_PALDV100_1080i = MAKE_PIXEL_FORMAT_FOURCC('d', 'v', 'p', '1'), // compressed DV-100 1080i, 50 Hz + +// Raw, opaque data formats +PrPixelFormat_Raw = MAKE_PIXEL_FORMAT_FOURCC('r', 'a', 'w', 'w'), // raw, opaque data, with no row bytes or height. + +// Invalid +PrPixelFormat_Invalid = MAKE_PIXEL_FORMAT_FOURCC('b', 'a', 'd', 'f'), // invalid pixel format - this is used for intialization and erorr conditions + +PrPixelFormat_Any = 0 +}; + +#define MAKE_ADOBE_PRIVATE_PIXEL_FORMAT_FOURCC(ch1, ch2, ch3) (static_cast(MAKE_PIXEL_FORMAT_FOURCC('@', ch1, ch2, ch3))) +#define MAKE_THIRD_PARTY_CUSTOM_PIXEL_FORMAT_FOURCC(ch1, ch2, ch3) (static_cast(MAKE_PIXEL_FORMAT_FOURCC('_', ch1, ch2, ch3))) + +#endif // PRSDKPIXELFORMAT_H + diff --git a/External/AE SDK/Headers/SP/PSIntTypes.h b/External/AE SDK/Headers/SP/PSIntTypes.h new file mode 100644 index 00000000..7811e58d --- /dev/null +++ b/External/AE SDK/Headers/SP/PSIntTypes.h @@ -0,0 +1,79 @@ +// ADOBE SYSTEMS INCORPORATED +// (c) Copyright 2009 Adobe Systems Incorporated +// All Rights Reserved +// +// NOTICE: Adobe permits you to use, modify, and distribute this +// file in accordance with the terms of the Adobe license agreement +// accompanying it. If you have received this file from a source +// other than Adobe, then your use, modification, or distribution +// of it requires the prior written permission of Adobe. +//------------------------------------------------------------------- +/** +* +* \file PSIntTypes.h +* +* \brief +* Fixed sized integer types used in Photoshop +* +* Distribution: +* PUBLIC +* +*/ + +#ifndef __PSIntTypes__ +#define __PSIntTypes__ + +//------------------------------------------------------------------- + +#if defined(_MSC_VER) && defined(__cplusplus) +#include +#else +#include +#endif + +typedef int8_t int8; +typedef int16_t int16; +typedef int32_t int32; +typedef int64_t int64; + +typedef uint8_t uint8; +typedef uint16_t uint16; +typedef uint32_t uint32; +typedef uint64_t uint64; + +typedef uint8_t unsigned8; +typedef uint16_t unsigned16; +typedef uint32_t unsigned32; +typedef uint64_t unsigned64; + + +//------------------------------------------------------------------- +//------------------------------------------------------------------- + +#ifndef _BOOL8 + #define _BOOL8 + typedef unsigned char Bool8; +#endif + +#ifndef _BOOL32 + #define _BOOL32 + typedef uint32 Bool32; +#endif + +//------------------------------------------------------------------- +//------------------------------------------------------------------- +//REVISIT - PSFixedTypes.h would probably be a more appropriate name for this file + +#ifndef _REAL32 + #define _REAL32 + typedef float real32; +#endif + +#ifndef _REAL64 + #define _REAL64 + typedef double real64; +#endif + +typedef double nativeFloat; + +#endif /* __PSIntTypes.h__ */ diff --git a/External/AE SDK/Headers/SP/SPAccess.h b/External/AE SDK/Headers/SP/SPAccess.h new file mode 100644 index 00000000..79240f28 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPAccess.h @@ -0,0 +1,387 @@ +/***********************************************************************/ +/* */ +/* SPAccess.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPAccess__ +#define __SPAccess__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPPlugs.h" +#include "SPMData.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ + +/* + * The name and version number of the Sweet Pea Plug-in Access suite. + */ + +#define kSPAccessSuite "SP Access Suite" +/** Plug-in Access suite name */ +#define kSPAccessSuiteVersion 3 + +/** @ingroup Callers + The \c #SPAccessSuite sends a reload message (\c #kSPAccessReloadSelector) + to a plug-in when it has just been loaded, and an unload message + (\c #kSPAccessUnloadSelector) when it is about to be unloaded. + A plug-in is automatically loaded when the application or another + plug-in calls it or acquires as suite that it exports. + A plug-in can be unloaded at any time if it is not being used. + + A plug-in that exports a suite should unload the suite's procedure pointers + when it is unloaded, and restore them when the plug-in is reloaded. + \li On unload, replace the suite's procedure pointers + with the address of the \c #SPBasicSuite::Undefined() function + (which is always available). This is a protective measure + against other plug-ins that may mistakenly use the suite after they have + released it. + \li On reload, restore the suite's procedure + pointers with the updated addresses of their functions. + + For example: + @code + SPErr UnloadSuite( MySuite *mySuite, SPAccessMessage *message ) { + mySuite->functionA = (void *) message->d.basic->Undefined; + mySuite->functionB = (void *) message->d.basic->Undefined; + } + + SPErr ReloadSuite( MySuite *mySuite, SPAccessMessage *message ) { + mySuite->functionA = functionA; + mySuite->functionB = functionB; + } + @endcode + */ +#define kSPAccessCaller "SP Access" +/** @ingroup Selectors + The first message a plug-in receives on startup (whether + loaded or reloaded). Allows you to restore saved state information, + before startup initialization. + See \c #kSPAccessCaller, \c #SPAccessSuite */ +#define kSPAccessReloadSelector "Reload" +/** @ingroup Selectors + The first message a plug-in receives before being unloaded. + Allows you to save state information + See \c #kSPAccessCaller, \c #SPAccessSuite */ +#define kSPAccessUnloadSelector "Unload" + +/** The name of the object that the \c #SPAccessSuite caches, + which can be purged when caches are flushed. During a cache flush, + if this is the type sent to the \c #SPFlushCachesProc, it can + make calls to the Access suite to collect information about + the access object before deciding to purge it or not. + + For example, this purges filter plug-ins before window plug-ins: +@code +int32 myFlushCachesProc( const char *type, void *data, SPErr *error ) { +int32 flush = TRUE; +if ( strcmp( type, kSPFlushAccessType ) == 0 ) { + SPAccessRef access = data; + SPPluginRef plugin = sAccess->GetAccessPlugin( access, error ); + fail( error ); + switch ( myPluginType( plugin ) ) { + case kMyFilterPlugin: + if ( gPurgeLevel < kFilterPurgeLevel ) + flush = FALSE; + break; + case kMyWindowPlugin: + if ( gPurgeLevel < kWindowPurgeLevel ) + flush = FALSE; + break; + } + } + return flush; +} +@endcode +*/ +#define kSPFlushAccessType "SP Flush Access" + + +/******************************************************************************* + ** + ** Types + ** + **/ + +/** Prototype for a plug-in entry point, which receives messages from + the application or other plug-ins. + @param caller The caller, which identifies what suite or subsystem + made the call. See @ref Callers. + @param selector The specific event that triggered the call. See @ref Selectors. + @param message The message data, whose type depends on the specific event. + */ +typedef SPAPI SPErr (*SPEntry)( const char *caller, const char *selector, void *message ); + + +/** A plug-in access object, used with the \c #SPAccessSuite to make calls + to a plug-in. These objects are reference counted. The count is + incremented when you acquire the object using \c #SPAccessSuite::AcquirePlugin() + and decremented when you release it with \c #SPAccessSuite::ReleasePlugin(), + so you must be careful to balance these calls. The object is automatically + created and the plug-in loaded if necessary, and the object is destroyed + and the plug-in unloaded when the reference count is 0.*/ +typedef struct SPAccess *SPAccessRef; + + + + + +/** Plug-in library handle on Windows, resource chain on Mac. \deprecated */ +typedef void *SPPlatformAccessRef; + + +/** Access information for the resource chain on Mac OS, or library information on Windows. + See \c #SPAccessSuite::GetAccessInfo(). */ +typedef struct { + /** File access for entry and resources, when resource-access has not been set. \deprecated */ + SPPlatformAccessRef defaultAccess; /* */ + /** \deprecated File access for entry and resources, when resource-access + has been set using \c #SPAccessSuite::SetPluginResourceAccess(). + Otherwise \c NULL. */ + SPPlatformAccessRef resourceAccess; + /** The time since the last access operation, in clock-ticks (1/60th second). */ + uint32 lastAccessTicks; +} SPPlatformAccessInfo; + + + +/** Sent in the \c #SPAccessMessage to identify when an access call was made. + Use to distinguish a start-up load from a run-time load or reload, + and a run-time unload from a shut-down unload. */ +typedef enum { + /** The receiving plug-in has been loaded at application startup, and not yet initialized. + Sent with the \c #kSPAccessReloadSelector.*/ + kStartup = 0, + /** The receiving plug-in has been loaded programmatically while the application + is running, and not yet initialized. <> + Sent with the \c #kSPAccessReloadSelector.*/ + kRuntime, + /** The receiving plug-in is about to be unloaded. + Sent with the \c #kSPAccessUnloadSelector. */ + kShutdown, + /** The receiving plug-in has a non-zero access count and the application is shutting down. + Sent with the \c #kSPAccessUnloadSelector. + If the plug-in has acquired itself in order to remain in memory, + it should not free any resources and not acquire others when this + call is received.*/ + kTerminal +} SPAccessPoint; + +/** Message sent with the \c #kSPAccessCaller. */ +typedef struct SPAccessMessage { + /** The message data. */ + SPMessageData d; + /** When the access occurred. */ + SPAccessPoint when; +} SPAccessMessage; + + +/******************************************************************************* + ** + ** Suite + ** + **/ + +/** @ingroup Suites + This suite is used to load and unload plug-ins. The functions allow + you to send messages directly to another plug-in. For example: +@code + SPErr SendMessage( SPPluginRef plugin, const char *caller, const char *selector, void *message, SPErr *error ) { + + SPErr result; + SPAccessRef access; + + access = sAccess->AcquirePlugin( plugin, error ); + fail( error ); + + result = sAccess->CallPlugin( access, caller, selector, message, error ); + fail( error ); + + sAccess->ReleasePlugin( access, error ); + fail( error ); + + return result; + } +@endcode + Standard PICA plug-ins rarely call one another directly. Usually program + control flows from plug-in to plug-in through higher-level suites. + Plug-in adapters, which provide protocol conversion to non-PICA plug-ins, + can add their own access suites to provide access to their foreign plug-ins. + + @see \c #SPInterfaceSuite + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPAccessSuite and \c #kSPAccessSuiteVersion. +*/ +typedef struct SPAccessSuite { + + /** Loads a plug-in if necessary, and prepares it to be called. Creates + an accessor object if necessary, or increments the reference count + of the existing accessor. Use \c #ReleasePlugin() to decrement + the count when you not longer need the accessor. + + A plug-in can acquire itself in order to remain in memory, even if + not referenced by any other plug-in. + @param plugin The plug-in object. + @param access [out] A buffer in which to return the new access object. + */ + SPAPI SPErr (*AcquirePlugin)( SPPluginRef plugin, SPAccessRef *access ); + + /** Decrements the reference count of an accessor object. + When the reference count reaches 0, frees the accessor object + and allows the associated plug-in to be unloaded. + @param access The access object. + */ + SPAPI SPErr (*ReleasePlugin)( SPAccessRef access ); + + /** Retrieves the accessor object for a plug-in. + You can use this to get the accessor for your own plug-in, in order + to access the resource chain or library information. + + Used by plug-ins that export suites to manually establish a + resource context within any of the suite procedures, so that + they can access resources. Not needed when a plug-in is called + through its entry point. \c #SPAccessSuite::CallPlugin() + sets up the resource context for you. + + @param plugin The plug-in object. + @param access [out] A buffer in which to return the access object, + or \c NULL if the plug-in is not loaded. + */ + SPAPI SPErr (*GetPluginAccess)( SPPluginRef plugin, SPAccessRef *access ); + /** Retrieves the plug-in for an accessor. + @param access The access object. + @param plugin [out] A buffer in which to return the plug-in object, + or \c NULL if the plug-in is not loaded. <> + */ + SPAPI SPErr (*GetAccessPlugin)( SPAccessRef access, SPPluginRef *plugin ); + /** Retrieves the entry point of a plug-in accessor. This is the point to + which \c #CallPlugin() jumps. Before accessing the entry point directly, + use \c #SetCurrentPlugin() to make the plug-in current. + @param access The access object. + @param entry [out] A buffer in which to return the entry point structure. + */ + SPAPI SPErr (*GetAccessEntry)( SPAccessRef access, SPEntry *entry ); + /** Retrieves the current reference count of an accessor object. + @param access The access object. + @param count [out] A buffer in which to return the count. + */ + SPAPI SPErr (*GetAccessCount)( SPAccessRef access, int32 *count ); + /** Retrieves the platform-specific resource access information of a plug-in accessor. + This is for the resource-chain in Mac OS, or the plug-in library in Windows. + @param access The access object. + @param info [out] A buffer in which to return the information structure. + */ + SPAPI SPErr (*GetAccessInfo)( SPAccessRef access, SPPlatformAccessInfo *info ); + + /** Retrieves the platform-specific resource access information of a plug-in accessor. + This is for the resource-chain in Mac OS, or the plug-in library in Windows. + <> + @param access The access object. + @param info [out] A buffer in which to return the information structure. + */ + SPAPI SPErr (*GetPluginResourceAccess)( SPPluginRef plugin, SPPlatformAccessRef *resourceAccess ); + /** <> */ + SPAPI SPErr (*SetPluginResourceAccess)( SPPluginRef plugin, SPPlatformAccessRef resourceAccess ); + + /** Sends a message to a plug-in, using an accessor object. + @param access The access object. + @param caller The caller. + @param slector The selector. + @param message The message, as required for the selector. + @param result [out] A buffer in which to return the result of the call, + returned by the called plug-in. + */ + SPAPI SPErr (*CallPlugin)( SPAccessRef access, const char *caller, const char *selector, + void *message, SPErr *result ); + + /** Retrieves the current plug-in, whose access information is the current + resource context. This is typically the last plug-in to + receive a call, but can be set by a plug-in adapter, or by + \c #SetCurrentPlugin(). + @param plugin [out] A buffer in which to return the plug-in object, + */ + SPAPI SPErr (*GetCurrentPlugin)( SPPluginRef *plugin ); + /** Makes a plug-in and its resource context current. An adapter can use + this to set the resource context before making a call to a plug-in. + Before making this call, you should save the reference for the current + plug-in, and restore it when this plug-in no longer needs to be current. + @param plugin The plug-in object, + */ + SPAPI SPErr (*SetCurrentPlugin)( SPPluginRef plugin ); + +} SPAccessSuite; + +/** Internal */ +SPAPI SPErr SPAcquirePlugin( SPPluginRef plugin, SPAccessRef *access ); +/** Internal */ +SPAPI SPErr SPReleasePlugin( SPAccessRef access ); + +/** Internal */ +SPAPI SPErr SPGetPluginAccess( SPPluginRef plugin, SPAccessRef *access ); +/** Internal */ +SPAPI SPErr SPGetAccessPlugin( SPAccessRef access, SPPluginRef *plugin ); +/** Internal */ +SPAPI SPErr SPGetAccessEntry( SPAccessRef access, SPEntry *entry ); +/** Internal */ +SPAPI SPErr SPGetAccessCount( SPAccessRef access, int32 *count ); +/** Internal */ +SPAPI SPErr SPGetAccessInfo( SPAccessRef access, SPPlatformAccessInfo *info ); + +/** Internal */ +SPAPI SPErr SPGetPluginResourceAccess( SPPluginRef plugin, SPPlatformAccessRef *resourceAccess ); +/** Internal */ +SPAPI SPErr SPSetPluginResourceAccess( SPPluginRef plugin, SPPlatformAccessRef resourceAccess ); + +/** Internal */ +SPAPI SPErr SPCallPlugin( SPAccessRef access, const char *caller, const char *selector, + void *message, SPErr *result ); + +/** Internal */ +SPAPI SPErr SPGetCurrentPlugin( SPPluginRef *plugin ); +/** Internal */ +SPAPI SPErr SPSetCurrentPlugin( SPPluginRef plugin ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPAdapts.h b/External/AE SDK/Headers/SP/SPAdapts.h new file mode 100644 index 00000000..9f12d5bb --- /dev/null +++ b/External/AE SDK/Headers/SP/SPAdapts.h @@ -0,0 +1,406 @@ +/***********************************************************************/ +/* */ +/* SPAdapts.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPAdapters__ +#define __SPAdapters__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPCaches.h" +#include "SPMData.h" +#include "SPProps.h" + +#ifdef __cplusplus +extern "C" { +#endif + + + +/******************************************************************************* + ** + ** Constants + ** + **/ + +/** SPAdapters suite name */ +#define kSPAdaptersSuite "SP Adapters Suite" +/** SPAdapters suite version */ +#define kSPAdaptersSuiteVersion 3 + +/** @ingroup Callers + Caller for a plug-in adapter. Sent to plug-ins + with adapters to allow the adapter to load or unload + files of managed types, or to make translations for + compatability with legacy versions of PICA, the application, + or earlier versions of the plug-in. + See \c #SPAdaptersSuite. */ +#define kSPAdaptersCaller "SP Adapters" + +/** @ingroup Selectors + Received by a plug-in with an adapter on application startup, after + PICA completes its plug-in startup process. Use for initialization + related to the adapter. + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersStartupSelector "Start up" +/** @ingroup Selectors + Received by a plug-in with an adapter on application shutdown, after + PICA completes its plug-in shutdown process. Use for termination cleanup + related to the adapter. + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersShutdownSelector "Shut down" +/** @ingroup Selectors + Received by a plug-in with an adapter after a call to + \c #SPCachesSuite::SPFlushCaches(), for a final flush of + any memory used for private data, including PICA lists and + string pools. + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersDisposeInfoSelector "Dispose info" +/** @ingroup Selectors + Received by a plug-in with an adapter when the application + frees memory, to allow garbage collection. + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersFlushSelector "Flush" + +// Second generation adapters (has property 'adpt'/2) +//--------------------------------------------------- +/** @ingroup Selectors + Received by a plug-in after its initialization, to allow it to + register its own adapter. Get the adapter list from PICA and + use \c #SPAdaptersSuite::AddAdapter( ) to register your adapter. + For example: + @code +SPAdapterRef oldAPI; +SPAdapterListRef adapterList; +SPErr error; +error = sSPRuntime->GetRuntimeAdapterList( &adapterList); +error = sSPAdapters->AddAdapter( adapterList, message->d.self, "old API adapter", &oldAPI ); + @endcode + + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersRegisterPluginsSelector "Register plugins" + +/** @ingroup Selectors + Received by a plug-in with an adapter before it is loaded, to allow the + adapter to perform needed translations before the load occurs. The + handler does not need to call the load operation. + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersLoadPluginSelector "Load plugin" +/** @ingroup Selectors + Received by a plug-in with an adapter before it is unloaded, to allow the + adapter to perform needed translations before the unload occurs. The + handler does not need to call the unload operation. + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersReleasePluginSelector "Release plugin" + +/** @ingroup Selectors + Received by a plug-in with an adapter when the application needs to + communicate with it. The adapter should relay the message, performing + any required translation. + See \c #kSPAdaptersCaller, \c #SPAdaptersMessage, \c #SPAdaptersSuite. */ +#define kSPAdaptersSendMessageSelector "Send message" + +// First generation adapters (no 'adpt' property, or 'adpt'/1 ) +//------------------------------------------------------------- +// These messages are only for the "SP2 Adapter" that is built into +// Sweet Pea and maybe legacy adapters (i.e., AI6Adapter for AI7). +// For newer adapters, all of these methods are now deprecated. +// New adapters should do the vast majority of their processing via +// the message kSPAdaptersSendMessageSelector. +/** @deprecated Used internally. */ +#define kSPAdaptersFindPropertySelector "Find property" +/** @deprecated Used internally. */ +#define kSPAdaptersAboutSelector "About" +/** @deprecated Used internally. */ +#define kSPAdaptersAcquireSuiteHostSelector "Acquire Suite" +/** @deprecated Used internally. */ +#define kSPAdaptersReleaseSuiteHostSelector "Release Suite" + +/** PICA global list of registered plug-in adapters. + @see \c #SPAdaptersSuite::AddAdapter(), \c #SPRuntimeSuite::GetRuntimeAdapterList(). */ +#define kSPRuntimeAdapterList ((SPAdapterListRef)NULL) + + +/******************************************************************************* + ** + ** Types + ** + **/ + +/** An opaque reference to an adapter object. Access using the \c #SPAdaptersSuite. */ +typedef struct SPAdapter *SPAdapterRef; +/** A list of adapter objects. Create with + \c #SPAdaptersSuite::AllocateAdapterList(), or use + the global list, \c #kSPRuntimeAdapterList. */ +typedef struct SPAdapterList *SPAdapterListRef; +/** An iterator object for examining an adapter list. + See \c #SPAdaptersSuite::NewAdapterListIterator(). */ +typedef struct SPAdapterListIterator *SPAdapterListIteratorRef; + +/** The message passed with all \c #kSPAdaptersCaller calls. + Fields are used by specific selectors as indicated. */ +typedef struct SPAdaptersMessage { + /** The message data. All selectors. */ + SPMessageData d; + /** The adapter object. All selectors. If you add more than + one adapter for a plug-in, use this to determine which handler to use. */ + SPAdapterRef adapter; + + /** For \c #kSPAdaptersAboutSelector, the plug-in object for which to display information. + No longer used. <> */ + struct SPPlugin *targetPlugin; + /** For \c #kSPAdaptersAboutSelector, the target result of the handler, if any. + No longer used. <> */ + SPErr targetResult; + + /** For \c #kSPAdaptersFindPropertySelector. + No longer used. */ + PIType vendorID; + /** For \c #kSPAdaptersFindPropertySelector. + No longer used. */ + PIType propertyKey; + /** For \c #kSPAdaptersFindPropertySelector. + No longer used. */ + int32 propertyID; + /** For \c #kSPAdaptersFindPropertySelector. + No longer used. */ + void *property; + + /** For \c #kSPAdaptersFlushSelector. The procedure with which to flush caches, + passed from the call to \c #SPCachesSuite::SPFlushCaches(). + The adapter should call this to determine which plug-ins are being removed from + memory, and unload them. */ + SPFlushCachesProc flushProc; + /** For \c #kSPAdaptersFlushSelector. Return the result of the flush procedure, + the number of plug-ins removed.*/ + int32 flushed; + + /** For \c #kSPAdaptersAcquireSuiteHostSelector and \c #kSPAdaptersReleaseSuiteHostSelector. + No longer used.*/ + struct SPSuiteList *suiteList; /* use these if you need name, apiVersion, internalVersion */ + /** For \c #kSPAdaptersAcquireSuiteHostSelector and \c #kSPAdaptersReleaseSuiteHostSelector. + No longer used.*/ + struct SPSuite *suite; + /** For \c #kSPAdaptersAcquireSuiteHostSelector and \c #kSPAdaptersReleaseSuiteHostSelector. + No longer used.*/ + struct SPPlugin *host; /* plug-in hosting the suite, to be aquired/released by adapter */ + /** For \c #kSPAdaptersAcquireSuiteHostSelector and \c #kSPAdaptersReleaseSuiteHostSelector. + No longer used.*/ + const void *suiteProcs; /* returned here if reallocated */ + /** For \c #kSPAdaptersAcquireSuiteHostSelector and \c #kSPAdaptersReleaseSuiteHostSelector. + No longer used.*/ + int32 acquired; /* returned here */ + + /** For \c #kSPAdaptersSendMessageSelector. + The caller to pass to the adapted plug-in. */ + const char *plugin_caller; + /** For \c #kSPAdaptersSendMessageSelector. + The selector to pass to the adapted plug-in. */ + const char *plugin_selector; + /** For \c #kSPAdaptersSendMessageSelector. + The message to pass to the adapted plug-in. */ + void *plugin_message; +} SPAdaptersMessage; + +/** A string pool structure. See \c #SPStringsSuite. */ +struct SPStringPool; + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + An adapter is an interface between the PICA plug-in manager and + an individual plug-in. PICA and application plug-ins are hosted by + internal PICA adapters. Plug-ins can add other adapters to PICA's + \e adapter \e list, allowing non-PICA plug-ins to run under the PICA API. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPAdaptersSuite and \c #kSPAdaptersSuiteVersion. + + An adapter searches the PICA \e file \e list (\c #kSPRuntimeFileList) + for plug-ins types that it supports, and adds them to the \e plug-in \e list + (\c #kSPRuntimePluginList). When notified by PICA to do so, the adapter is + responsible for loading and calling the plug-ins it adds, and must + do any conversion of messages, data structures or other API elements. + An adapter can be used to update + + There are always at least two adapters, the internal adapters for PICA + and for the application, in the global adapter list (\c #kSPRuntimeAdapterList). + The internal adapters translate any legacy function calls into those + currently supported by PICA and the application. + + You can provide an adapter for backward compatability with older + versions of your own plug-ins, or to interpret your own file types. + To make an adapter available for your plug-in, add it in response to the + \c #kSPAdaptersRegisterPluginsSelector when your plug-in is loaded. + + You can also use this suite to create and maintain your own adapter list, + in addition to the global list. + + Use the adapter to load and call the adapted plug-in. For example, to + verify that a message could be sent to a plug-in: +@code +SPErr error; +SPPluginRef pluginToCall; +SPAdapterRef pluginsAdapter; +char *adapterName; +int32 adapterVersion; + +error = sSPPlugins->GetPluginAdapter( pluginToCall, &pluginsAdapter ); +error = sSPAdapters->GetAdapterName( pluginsAdapter, &adapterName ); +if ( strcmp( adapterName, kSPSweetPea2Adapter ) == 0 ) { + // it is a PICA plug-in, call it as such with sSPInterface. + } else if ( strcmp( adapterName, "MYAPP Legacy Plug-in Adapter" ) == 0 ) { + // it is an adapted plug-in, call it with the adapter's + // interface suite + error = sSPAdapters->GetAdapterVersion( pluginsAdapter, &adapterVersion ); + if ( adapterVersion == 1 ) { + // use one hypothetical interface suite + } else if ( adapterVersion == 2) { + // use another hypothetical interface suite + } + } +@endcode +*/ +typedef struct SPAdaptersSuite { + + /** Allocates a new list of adapters. You can keep your own list, + or obtain the global list with \c #SPRuntimeSuite::GetRuntimeAdapterList(). + @param stringPool The string pool in which to keep adapter names. + @param adapterList [out] A buffer in which to return the new list object. + */ + SPAPI SPErr (*AllocateAdapterList)( struct SPStringPool *stringPool, SPAdapterListRef *adapterList ); + /** Frees a list of adapters allocated with \c #AllocateAdapterList(), and + also frees any entries in the list. Do not free the global list (\c #kSPRuntimeAdapterList). + @param adapterList The adapter list object. + */ + SPAPI SPErr (*FreeAdapterList)( SPAdapterListRef adapterList ); + /** Creates a new adapter object and adds it to an adapter list. Do this in + response to the \c #kSPAdaptersRegisterPluginsSelector message. + @param adapterList The adapter list object, or \c NULL to use the + global list. + @param host This plug-in object, for which the adapter is responsible. + @param name The unique, identifying name of the adapter. + @param version The version number of the adapter. Only the latest version + of any adapter is used to start up plug-ins. + @param adapter [out] A buffer in which to return the new adapter object, or + \c NULL if you add only one adapter. If you add more than one adapter, + compare this to \c #SPAdaptersMessage::adapter to determine which handler to use. + @see \c #AllocateAdapterList() + */ + SPAPI SPErr (*AddAdapter)( SPAdapterListRef adapterList, struct SPPlugin *host, const char *name, + int32 version, SPAdapterRef *adapter ); + + /** Retrieves an adapter by name. + @param adapterList The adapter list object, or \c NULL to use the + global list. + @param name The unique, identifying name of the adapter. + @param adapter [out] A buffer in which to return the adapter object. + */ + SPAPI SPErr (*SPFindAdapter)( SPAdapterListRef adapterList, const char *name, SPAdapterRef *adapter ); + + /** Creates an iterator object with which to traverse an adapter list. + The iterator is initially set to the first adapter in the list. + @param adapterList The adapter list object, or \c NULL to use the + global list. + @param iter [out] A buffer in which to return the new iterator object. + @see \c #NextAdapter(), \c #DeleteAdapterListIterator() + */ + SPAPI SPErr (*NewAdapterListIterator)( SPAdapterListRef adapterList, SPAdapterListIteratorRef *iter ); + /** Retrieves the current adapter and advances an adapter-list iterator to the + next adapter in the list. + @param iter The adapter-list iterator object. + @param adapter [out] A buffer in which to return the current adapter object, \c NULL + if the end of the list has been reached. + @see \c #NewAdapterListIterator(), + */ + SPAPI SPErr (*NextAdapter)( SPAdapterListIteratorRef iter, SPAdapterRef *adapter ); + /** Frees an adapter-list iterator that is no longer needed. + @param iter The adapter-list iterator object. + @see \c #NewAdapterListIterator(), + */ + SPAPI SPErr (*DeleteAdapterListIterator)( SPAdapterListIteratorRef iter ); + + /** Retrieves the plug-in that an adapter manages. + @param adapter The adapter object. + @param plug-in [out] A buffer in which to return the plug-in object. + */ + SPAPI SPErr (*GetAdapterHost)( SPAdapterRef adapter, struct SPPlugin **plugin ); + /** Retrieves the unique, identifying name of an adapter. + @param adapter The adapter object. + @param name [out] A buffer in which to return the name string. + */ + SPAPI SPErr (*GetAdapterName)( SPAdapterRef adapter, const char **name ); + /** Retrieves the version of an adapter. + @param adapter The adapter object. + @param version [out] A buffer in which to return the version number. + */ + SPAPI SPErr (*GetAdapterVersion)( SPAdapterRef adapter, int32 *version ); + +} SPAdaptersSuite; + + +/** Internal */ +SPAPI SPErr SPAllocateAdapterList( struct SPStringPool *stringPool, SPAdapterListRef *adapterList ); +/** Internal */ +SPAPI SPErr SPFreeAdapterList( SPAdapterListRef adapterList ); + +/** Internal */ +SPAPI SPErr SPAddAdapter( SPAdapterListRef adapterList, struct SPPlugin *host, const char *name, + int32 version, SPAdapterRef *adapter ); + +/** Internal */ +SPAPI SPErr SPFindAdapter( SPAdapterListRef adapterList, const char *name, SPAdapterRef *adapter ); + +/** Internal */ +SPAPI SPErr SPNewAdapterListIterator( SPAdapterListRef adapterList, SPAdapterListIteratorRef *iter ); +/** Internal */ +SPAPI SPErr SPNextAdapter( SPAdapterListIteratorRef iter, SPAdapterRef *adapter ); +/** Internal */ +SPAPI SPErr SPDeleteAdapterListIterator( SPAdapterListIteratorRef iter ); + +/** Internal */ +SPAPI SPErr SPGetAdapterHost( SPAdapterRef adapter, struct SPPlugin **plugin ); +/** Internal */ +SPAPI SPErr SPGetAdapterName( SPAdapterRef adapter, const char **name ); +/** Internal */ +SPAPI SPErr SPGetAdapterVersion( SPAdapterRef adapter, int32 *version ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPBasic.h b/External/AE SDK/Headers/SP/SPBasic.h new file mode 100644 index 00000000..c0273a40 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPBasic.h @@ -0,0 +1,184 @@ +/***********************************************************************/ +/* */ +/* SPBasic.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPBasic__ +#define __SPBasic__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** PICA basic suite name */ +#define kSPBasicSuite "SP Basic Suite" +/** PICA basic suite version */ +#define kSPBasicSuiteVersion 4 + + +/******************************************************************************* + ** + ** Suite + ** + **/ + +/** @ingroup Suites + This suite provides basic memory management for PICA (the Adobe plug-in manager) + and defines the basic functions for acquiring and releasing other suites. + + A suite consists of a list of function pointers. The application, or a + plug-in that loads a suite, provides valid pointers when the suite is + acquired. When a suite is not available, the pointers are set to the + address of the \c #Undefined() function. + + Do not attempt to acquire a suite (other than the \c #SPBlocksSuite) + in response to a PICA access (\c #kSPAccessCaller) or property + (\c #kSPPropertiesCaller) message. Most suites are unavailable + during these load and unload operations. + + You can acquire all the suites you will need when your plug-in is first + loaded, as long as you release them before your plug-in is unloaded. + At shutdown, however, it is most efficient to acquire only those + suites explicitly needed to shut down; for example, to free memory + and save preferences. + + The \c SPBasicSuite itself is a part of the message data passed + to your plug-in with any call. To access it from the message data structure: + @code + SPBasicSuite sBasic = message->d.basic; + sBasic->function( ) + @endcode + */ +typedef struct SPBasicSuite { + /** Acquires a function suite. Loads the suite if necessary, + and increments its reference count. For example: + @code +SPErr error; +SPBasicSuite *sBasic = message->d.basic; +AIRandomSuite *sRandom; +sBasic->AcquireSuite( kAIRandomSuite, kAIRandomVersion, &sRandom ); + @endcode + @param name The suite name. + @param version The suite version number. + @param suite [out] A buffer in which to return the suite pointer. + @see \c #SPSuitesSuite::AcquireSuite() + */ + SPAPI SPErr (*AcquireSuite)( const char *name, int32 version, const void **suite ); + /** Decrements the reference count of a suite and unloads it when the + reference count reaches 0. + @param name The suite name. + @param version The suite version number. + */ + SPAPI SPErr (*ReleaseSuite)( const char *name, int32 version ); + /** Compares two strings for equality. + @param token1 The first null-terminated string. + @param token2 The second null-terminated string. + @return True if the strings are the same, false otherwise. + */ + SPAPI SPBoolean (*IsEqual)( const char *token1, const char *token2 ); + /** Allocates a block of memory. + @param size The number of bytes. + @param block [out] A buffer in which to return the block pointer. + @see \c #SPBlocksSuite::AllocateBlock() + */ + SPAPI SPErr (*AllocateBlock)( size_t size, void **block ); + /** Frees a block of memory allocated with \c #AllocateBlock(). + @param block The block pointer. + @see \c #SPBlocksSuite::FreeBlock() + */ + SPAPI SPErr (*FreeBlock)( void *block ); + /** Reallocates a block previously allocated with \c #AllocateBlock(). + Increases the size without changing the location, if possible. + @param block The block pointer. + @param newSize The new number of bytes. + @param newblock [out] A buffer in which to return the new block pointer. + @see \c #SPBlocksSuite::ReallocateBlock() + */ + SPAPI SPErr (*ReallocateBlock)( void *block, size_t newSize, void **newblock ); + /** A function pointer for unloaded suites. This is a protective measure + against other plug-ins that may mistakenly use the suite after they have + released it. + + A plug-in that exports a suite should unload the suite's procedure pointers + when it is unloaded, and restore them when the plug-in is reloaded. + \li On unload, replace the suite's procedure pointers + with the address of this function. + \li On reload, restore the suite's procedure + pointers with the updated addresses of their functions. + + For example: + @code + SPErr UnloadSuite( MySuite *mySuite, SPAccessMessage *message ) { + mySuite->functionA = (void *) message->d.basic->Undefined; + mySuite->functionB = (void *) message->d.basic->Undefined; + } + + SPErr ReloadSuite( MySuite *mySuite, SPAccessMessage *message ) { + mySuite->functionA = functionA; + mySuite->functionB = functionB; + } + @endcode + */ + SPAPI SPErr (*Undefined)( void ); + +} SPBasicSuite; + + +/** Internal */ +SPAPI SPErr SPBasicAcquireSuite( const char *name, int32 version, const void **suite ); +/** Internal */ +SPAPI SPErr SPBasicReleaseSuite( const char *name, int32 version ); +/** Internal */ +SPAPI SPBoolean SPBasicIsEqual( const char *token1, const char *token2 ); +/** Internal */ +SPAPI SPErr SPBasicAllocateBlock( size_t size, void **block ); +/** Internal */ +SPAPI SPErr SPBasicFreeBlock( void *block ); +/** Internal */ +SPAPI SPErr SPBasicReallocateBlock( void *block, size_t newSize, void **newblock ); +/** Internal */ +SPAPI SPErr SPBasicUndefined( void ); + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPBckDbg.h b/External/AE SDK/Headers/SP/SPBckDbg.h new file mode 100644 index 00000000..b7bfe08c --- /dev/null +++ b/External/AE SDK/Headers/SP/SPBckDbg.h @@ -0,0 +1,118 @@ +/***********************************************************************/ +/* */ +/* SPBckDbg.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPBlockDebug__ +#define __SPBlockDebug__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** SPBlockDebug suite name */ +#define kSPBlockDebugSuite "SP Block Debug Suite" +/** SPBlockDebug suite version */ +#define kSPBlockDebugSuiteVersion 2 + + +/******************************************************************************* + ** + ** Suite + ** + **/ + +/** @ingroup Suites + This suite provides basic debugging capability for blocks of memory + allocated with the \c #SPBlocksSuite. Debugging can only be enabled + in the developement environment. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPBlockDebugSuite and \c #kSPBlockDebugSuiteVersion. + */ +typedef struct SPBlockDebugSuite { + /** Reports whether block debugging is enabled. + @param enabled [out] A buffer in which to return 1 if debugging + is enabled, 0 otherwise. + */ + SPAPI SPErr (*GetBlockDebugEnabled)( int32 *enabled ); + /** Turns debugging on or off. + @param debug 1 to turn debugging on, 0 to turn it off. + */ + SPAPI SPErr (*SetBlockDebugEnabled)( int32 debug ); + /** Retrieves the first block of memory allocated. Use with \c #GetNextBlock() + to iterate through all allocated blocks. + @param block [out] A buffer in which to return the block pointer. + */ + SPAPI SPErr (*GetFirstBlock)( void **block ); + /** Retrieves the block of memory allocated immediately after a given block. + Use with \c #GetFirstBlock() to iterate through all allocated blocks. + @param block The current block pointer + @param nextblock [out] A buffer in which to return the next block pointer. + */ + SPAPI SPErr (*GetNextBlock)( void *block, void **nextblock ); + /** Retrieves the debugging tag assigned to a block of memory when it + was allocated or reallocated. + @param block The block pointer. + @param debug [out] A buffer in which to return the tag string. + @see \c #SPBlocksSuite::AllocateBlock(), \c #SPBlocksSuite::ReallocateBlock() + */ + SPAPI SPErr (*GetBlockDebug)( void *block, const char **debug ); + +} SPBlockDebugSuite; + + +/** Internal */ +SPAPI SPErr SPGetBlockDebugEnabled( int32 *enabled ); +/** Internal */ +SPAPI SPErr SPSetBlockDebugEnabled( int32 debug ); +/** Internal */ +SPAPI SPErr SPGetFirstBlock( void **block ); +/** Internal */ +SPAPI SPErr SPGetNextBlock( void *block, void **nextblock ); +/** Internal */ +SPAPI SPErr SPGetBlockDebug( void *block, const char **debug ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPBlocks.h b/External/AE SDK/Headers/SP/SPBlocks.h new file mode 100644 index 00000000..cdb0effd --- /dev/null +++ b/External/AE SDK/Headers/SP/SPBlocks.h @@ -0,0 +1,118 @@ +/***********************************************************************/ +/* */ +/* SPBlocks.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPBlocks__ +#define __SPBlocks__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#ifdef SWEETPEA_STRICTER_HOST_COMPATIBILITY +#include +#endif +#include "SPTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** SPBlocks suite name */ +#define kSPBlocksSuite "SP Blocks Suite" +/** SPBlocks suite version */ +#define kSPBlocksSuiteVersion 2 + + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + This suite provides basic memory management for PICA (the Adobe plug-in manager), + with debugging capability for the development version of the application. + + Unlike other suites, this suite is available during plug-in load and unload operations. + You can acquire it in response to a PICA access (\c #kSPAccessCaller) or property + (\c #kSPPropertiesCaller) message, and use it to allocate and free memory + for the plug-in you are loading or unloading. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPBlocksSuite and \c #kSPBlocksSuiteVersion. + */ +typedef struct SPBlocksSuite { + + /** Allocates a block of memory. + @param size The number of bytes. + @param debug Optional. A tag for the block, available in the + developement version of the application. Otherwise ignored. + See \c #SPBlockDebugSuite::GetBlockDebug(). + @param block [out] A buffer in which to return the block pointer. + @see \c #SPBasicSuite::AllocateBlock() + */ + SPAPI SPErr (*AllocateBlock)( size_t size, const char *debug, void **block ); + /** Frees a block of memory allocated with \c #AllocateBlock(). + @param block The block pointer. + @see \c #SPBasicSuite::FreeBlock() + */ + SPAPI SPErr (*FreeBlock)( void *block ); + /** Reallocates a block previously allocated with \c #AllocateBlock(). + Increases the size without changing the location, if possible. + @param block The block pointer. + @param newSize The new number of bytes. + @param debug Optional. A tag for the block, available in the + developement version of the application. Otherwise ignored. + See \c #SPBlockDebugSuite::GetBlockDebug(). + @param newblock [out] A buffer in which to return the new block pointer. + @see \c #SPBasicSuite::ReallocateBlock() + */ + SPAPI SPErr (*ReallocateBlock)( void *block, size_t newSize, const char *debug, void **rblock ); + +} SPBlocksSuite; + +/** Internal */ +SPAPI SPErr SPAllocateBlock( size_t size, const char *debug, void **block ); +/** Internal */ +SPAPI SPErr SPFreeBlock( void *block ); +/** Internal */ +SPAPI SPErr SPReallocateBlock( void *block, size_t newSize, const char *debug, void **rblock ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPCOM.h b/External/AE SDK/Headers/SP/SPCOM.h new file mode 100644 index 00000000..0783c1fb --- /dev/null +++ b/External/AE SDK/Headers/SP/SPCOM.h @@ -0,0 +1,9 @@ +/* (c) Copyright 2002. Adobe Systems, Incorporated. All rights reserved. */ + +#pragma once + +#ifndef __SPCOM__ +#define __SPCOM__ +/* This module is obsolete. */ +#endif // __SPCOM__ + diff --git a/External/AE SDK/Headers/SP/SPCaches.h b/External/AE SDK/Headers/SP/SPCaches.h new file mode 100644 index 00000000..c2150f6e --- /dev/null +++ b/External/AE SDK/Headers/SP/SPCaches.h @@ -0,0 +1,128 @@ +/***********************************************************************/ +/* */ +/* SPCaches.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPCaches__ +#define __SPCaches__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPMData.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** Cache suite name */ +#define kSPCachesSuite "SP Caches Suite" +/** Cache suite version */ +#define kSPCachesSuiteVersion 2 + +/* To receive these, an PIConditionalMessages property must be present + * with the PIAcceptsPurgeCachesMessage flag set. */ +/** @ingroup Callers + The cache management caller. See \c #SPCachesSuite */ +#define kSPCacheCaller "SP Cache" +/** @ingroup Selectors + Received by plug-in adapters with the \c #PIAcceptsPurgeCachesMessage flag set + in the \c #PIConditionalMessages property, when a call has + been made to \c #SPCachesSuite::SPFlushCaches(). Accompanied by + the \c #SPPurgeCachesMessage. + @see \c #SPAdaptersSuite, \c #kSPAdaptersDisposeInfoSelector + */ +#define kSPPluginPurgeCachesSelector "Plug-in Purge" + +/* The plug-in should return one of these two responses when it receives the kSPPluginPurgeCachesSelector */ +//<> +//#define kSPPluginCachesFlushResponse 'pFls' +//#define kSPPluginCouldntFlushResponse kSPNoError; +#include "SPErrorCodes.h" + +/******************************************************************************* + ** + ** Types + ** + **/ +/** Prototype for the cache-flushing procedure an adapter calls in response to the + \c #kSPAdaptersDisposeInfoSelector, to determine which plug-ins to unload, + and inform the caller of whether its managed plug-in have been unloaded. + @param type The plug-in type, as set by the adapter.<> + @param data A pointer to the adapter-defined plug-in data. <> + @param flushed [out] A buffer in which to return the result, + the number of plug-ins actually unloaded. + */ +typedef SPErr (*SPFlushCachesProc)( const char *type, void *data, int32 *flushed ); + +/** Message passed with the \c #kSPPluginPurgeCachesSelector. */ +typedef struct SPPurgeCachesMessage { + /** The message data. */ + SPMessageData d; +} SPPurgeCachesMessage; + + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + This suite allows you to manage PICA cache memory. + + PICA plug-ins are intended to move in and out of memory (cache) as necessary, + to allow a small memory footprint. By default, PICA keeps loaded plug-ins in + cache until the application heap has been filled, and then unloads them. + Beyond this simple strategy, the application and plug-ins can use this + function to unload plug-ins when needed. Plug-ins do not typically need + to do this. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPCachesSuite and \c #kSPCachesSuiteVersion. +*/ +typedef struct SPCachesSuite { + /** Sends a message to all plug-in adapters telling them to unload any + unused plug-ins from memory. + @param flushProc The procedure the adapter uses to determine which + plug-ins to unload. + @param flushed [out] A buffer in which to return the result of the + procedure calls, the total number of plug-ins actually unloaded. + */ + SPAPI SPErr (*SPFlushCaches)( SPFlushCachesProc flushProc, int32 *flushed ); + +} SPCachesSuite; + +/** Internal */ +SPAPI SPErr SPFlushCaches( SPFlushCachesProc flushProc, int32 *flushed ); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPConfig.h b/External/AE SDK/Headers/SP/SPConfig.h new file mode 100644 index 00000000..499d7b25 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPConfig.h @@ -0,0 +1,76 @@ +/***********************************************************************/ +/* */ +/* SPConfig.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +/** + + SPConfig.h is the environment configuration file for Sweet Pea. It + defines MAC_ENV or WIN_ENV. These are used to control platform-specific + sections of code. + + **/ + +#ifndef __SPCnfig__ +#define __SPCnfig__ + +#if defined(__APPLE_CC__) +#if !defined (MAC_ENV) && !defined(SIMULATED_WASM) +#define MAC_ENV 1 +#endif +#endif + +/* + * Windows + */ +#if defined(_WINDOWS) || defined(_MSC_VER) || defined(WINDOWS) // PSMod, better compiler check +#ifndef WIN_ENV +#define WIN_ENV 1 +#endif +#endif + +#ifndef qiOS +#if defined(MAC_ENV) && defined(__arm__) +#define qiOS 1 +#endif +#endif + +/* + * Make certain that one and only one of the platform constants is defined. + */ + +#ifdef __ANDROID__ + #define ANDROID_ENV 1 +#endif + +#ifdef __LINUX__ + #define UNIX_ENV 1 +#endif + +#if defined (__EMSCRIPTEN__) + #define WEB_ENV 1 +#endif + +#if !defined(WIN_ENV) && !defined(MAC_ENV) && !defined(ANDROID_ENV) && !defined(UNIX_ENV) && !defined(WEB_ENV) + #error +#endif + +#if defined(WIN_ENV) && defined(MAC_ENV) && defined(ANDROID_ENV) && defined(UNIX_ENV) && defined (WEB_ENV) + #error +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPEDebug.c b/External/AE SDK/Headers/SP/SPEDebug.c new file mode 100644 index 00000000..97c14e3e --- /dev/null +++ b/External/AE SDK/Headers/SP/SPEDebug.c @@ -0,0 +1,2 @@ +// (c) Copyright 2002. Adobe Systems, Incorporated. All rights reserved. + diff --git a/External/AE SDK/Headers/SP/SPErrorCodes.h b/External/AE SDK/Headers/SP/SPErrorCodes.h new file mode 100644 index 00000000..137faaed --- /dev/null +++ b/External/AE SDK/Headers/SP/SPErrorCodes.h @@ -0,0 +1,172 @@ +/***********************************************************************/ +/* */ +/* SPErrorCodes.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPErrorCodes__ +#define __SPErrorCodes__ + +#if PRAGMA_ONCE +#pragma once +#endif + +/******************************************************************************* + ** + ** General Errors + ** + **/ + +// General errors +#define kASNoError 0 +#define kASUnimplementedError '!IMP' +#define kASUserCanceledError 'stop' + + +/******************************************************************************* + ** + ** SP Errors + ** + **/ + +// General errors +/** @ingroup Errors + PICA no-error code is \c NULL. All other + PICA errors are strings, except \c #kSPOutOfMemoryError. See \c SPTypes.h. */ +#define kSPNoError 0 +/** @ingroup Errors + PICA error, applies to all PICA suites. See \c SPTypes.h. */ +#define kSPUnimplementedError '!IMP' +/** @ingroup Errors + PICA error. */ +#define kSPUserCanceledError 'stop' +#define kSPOperationInterrupted 'intr' +#define kSPLogicError 'fbar' // general programming error + +// SPAccessSuite errors +/** @ingroup Errors + PICA access error. See \c #SPAccessSuite. */ +#define kSPCantAcquirePluginError '!Acq' +/** @ingroup Errors + PICA access error. See \c #SPAccessSuite. */ +#define kSPCantReleasePluginError '!Rel' +/** @ingroup Errors + PICA access error. See \c #SPAccessSuite. */ +#define kSPPluginAlreadyReleasedError 'AlRl' + +// SPAdaptsSuite errors +/** @ingroup Errors + PICA adapter error. See \c #SPAdaptsSuite */ +#define kSPAdapterAlreadyExistsError 'AdEx' +/** @ingroup Errors + PICA adapter error.See \c #SPAdaptsSuite */ +#define kSPBadAdapterListIteratorError 'BdAL' + +// SPBasicSuite errors +/** @ingroup Errors + Basic PICA error. See \c #SPBasicSuite */ +#define kSPBadParameterError 'Parm' + +// Block debugging errors +/** @ingroup Errors + PICA debugging error. See \c #SPBlockDebugSuite */ +#define kSPCantChangeBlockDebugNowError '!Now' +/** @ingroup Errors + PICA debugging error. See \c #SPBlockDebugSuite */ +#define kSPBlockDebugNotEnabledError '!Nbl' + +// SPBlocks errors +/** @ingroup Errors + PICA memory management error. See \c #SPBlocksSuite */ +#define kSPOutOfMemoryError (int32(0xFFFFFF6c)) /* -108, same as Mac memFullErr */ +/** @ingroup Errors + PICA memory management error. See \c #SPBlocksSuite */ +#define kSPBlockSizeOutOfRangeError 'BkRg' + +// SPCaches errors +/** @ingroup Errors + PICA cache-flushing error. See \c #SPCachesSuite */ +#define kSPPluginCachesFlushResponse 'pFls' +/** @ingroup Errors + PICA cache-flushing error. See \c #SPCachesSuite */ +#define kSPPluginCouldntFlushResponse kSPNoError; + +// SPFiles errors +/** @ingroup Errors + PICA file-access error. See \c #SPFilesSuite */ +#define kSPTroubleAddingFilesError 'TAdd' +/** @ingroup Errors + PICA file-access error. See \c #SPFilesSuite */ +#define kSPBadFileListIteratorError 'BFIt' + +// SPHost errors +/** @ingroup Errors + PICA plug-in atart-up error. See \c #SPHostSuite */ +#define kSPTroubleInitializingError 'TIni' // Some non-descript problem encountered while starting up. +/** @ingroup Errors PICA plug-in atart-up error. See \c #SPHostSuite */ +#define kHostCanceledStartupPluginsError 'H!St' + +// SPInterface errors +/** @ingroup Errors + PICA interface error. See \c #SPInterfaceSuite */ +#define kSPNotASweetPeaPluginError 'NSPP' +/** @ingroup Errors + PICA interface error. See \c #SPInterfaceSuite */ +#define kSPAlreadyInSPCallerError 'AISC' + +// SPPlugins errors +/** @ingroup Errors + PICA plug-in error. See \c #SPPluginsSuite */ +#define kSPUnknownAdapterError '?Adp' +/** @ingroup Errors + PICA plug-in error. See \c #SPPluginsSuite */ +#define kSPBadPluginListIteratorError 'PiLI' +/** @ingroup Errors + PICA plug-in error. See \c #SPPluginsSuite */ +#define kSPBadPluginHost 'PiH0' +/** @ingroup Errors + PICA plug-in error. See \c #SPPluginsSuite */ +#define kSPCantAddHostPluginError 'AdHo' +/** @ingroup Errors + PICA plug-in error. See \c #SPPluginsSuite */ +#define kSPPluginNotFound 'P!Fd' + +// SPProperties errors +/** @ingroup Errors + PICA properties error. See \c #SPPropertiesSuite */ +#define kSPCorruptPiPLError 'CPPL' +/** @ingroup Errors + PICA properties error. See \c #SPPropertiesSuite */ +#define kSPBadPropertyListIteratorError 'BPrI' + +// SPSuites errors +/** @ingroup Errors + PICA suite access error. See \c #SPSuitesSuite */ +#define kSPSuiteNotFoundError 'S!Fd' +/** @ingroup Errors + PICA suite access error. See \c #SPSuitesSuite */ +#define kSPSuiteAlreadyExistsError 'SExi' +/** @ingroup Errors + PICA suite access error. See \c #SPSuitesSuite */ +#define kSPSuiteAlreadyReleasedError 'SRel' +/** @ingroup Errors + PICA suite access error. See \c #SPSuitesSuite */ +#define kSPBadSuiteListIteratorError 'SLIt' +/** @ingroup Errors + PICA suite access error. See \c #SPSuitesSuite */ +#define kSPBadSuiteInternalVersionError 'SIVs' + +#endif diff --git a/External/AE SDK/Headers/SP/SPErrors.h b/External/AE SDK/Headers/SP/SPErrors.h new file mode 100644 index 00000000..7b8fd8f3 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPErrors.h @@ -0,0 +1,34 @@ +/***********************************************************************/ +/* */ +/* SPErrors.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + + +/******************************************************************************* + ** + ** Errors + ** + **/ +/** @ingroup Errors + PICA access error. See \c #SPAccessSuite. */ +#define kSPCantAcquirePluginError '!Acq' +/** @ingroup Errors + PICA access error. See \c #SPAccessSuite. */ +#define kSPCantReleasePluginError '!Rel' +/** @ingroup Errors + PICA access error. See \c #SPAccessSuite. */ +#define kSPPluginAlreadyReleasedError 'AlRl' diff --git a/External/AE SDK/Headers/SP/SPFiles.h b/External/AE SDK/Headers/SP/SPFiles.h new file mode 100644 index 00000000..fa19c09c --- /dev/null +++ b/External/AE SDK/Headers/SP/SPFiles.h @@ -0,0 +1,511 @@ +/***********************************************************************/ +/* */ +/* SPFiles.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPFiles__ +#define __SPFiles__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPProps.h" + +#include "photoshop/config/platform.hpp" + +#if PS_PLATFORM_APPLE +#include "CoreFoundation/CoreFoundation.h" +#if PS_OS_MAC +#include "Carbon/Carbon.h" +#endif +#endif + +#if PS_OS_IOS +#include "photoshop/platform/EmulateEndianOnIOS.h" +#include "photoshop/platform/EmulateMacErrorsOnIOS.h" +#include "photoshop/platform/EmulateQuickdrawOnIOS.h" +#include "photoshop/platform/EmulateOSAPIsOnIOS.h" +#include "photoshop/platform/EmulateCarbonFilesOnIOS.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** Files suite name */ +#define kSPFilesSuite "SP Files Suite" +/** Files suite version */ +#define kSPFilesSuitePrevVers 3 +#define kSPFilesSuiteVersion 4 + +/** PICA global list of potential plug-in files. . + @see \c #SPRuntimeSuite::GetRuntimeFileList().*/ +#define kSPRuntimeFileList ((SPFileListRef)NULL) + +/** Return value for \c #SPFilesSuite::GetFilePropertyList(), + indicating that the file has no property list. */ +#define kFileDoesNotHavePiPL (SPPropertyListRef)((intptr_t)-1) +/** Return value for \c #SPFilesSuite::GetFilePropertyList(), + indicating that the file has multiple property lists. <> */ +#define kFileHasMulitplePiPLs NULL + +/******************************************************************************* + ** + ** Types + ** + **/ + +/** The maximum number of characters allowed in a file path specification. */ +#define kMaxPathLength 300 + +/** Opaque reference to a file. Access with the \c #SPFilesSuite. */ +typedef struct SPFile *SPFileRef; +/** Opaque reference to a file list. Access with the \c #SPFilesSuite. */ +typedef struct SPFileList *SPFileListRef; +/** Opaque reference to a file-list iterator. Access with the \c #SPFilesSuite. */ +typedef struct SPFileListIterator *SPFileListIteratorRef; +/** Opaque reference to a platform-specific file specification. Access with the \c #SPFilesSuite. */ +typedef struct OpaqueSPPlatformFileRef SPPlatformFileRef; + +#define kXPlatFileSpecVersion 1 + +/** The replacement for SPPlatformFileSpecification and SPPlatformFileSpecificationW, +** used in SP Files Suite version 4 and later */ +typedef struct XPlatFileSpec { + int32 mFileSpecVersion; ///< \brief kXPlatFileSpecVersion + ///< + ///< A value of zero implies "not initialized", + ///< and you should not attempt to use mFileReference +#if defined(WIN_ENV) || defined(ANDROID_ENV) || WEB_ENV || defined(UNIX_ENV) + uint16* mFileReference; ///< \brief mFileReference could be as long as 64K but MUST be NULL terminated. +#elif defined(MAC_ENV) + CFURLRef mFileReference; ///< \brief A CFURLRef, as defined by Mac OS X +#endif +} XPlatFileSpec; + + +/*******************************************************************************/ + +#if defined (MAC_ENV) +#if PRAGMA_STRUCT_ALIGN // DRSWAT +#pragma options align=mac68k +#endif // PRAGMA_STRUCT_ALIGN + + +/** A file specification: + \li In Mac OS 32 bit, the same as \c FSSpec. + \li In Windows, a path string. */ + + +#if USE_POSIX_API + +typedef struct SPPlatformFileSpecification { /* this handles unicode file names */ + /** The file path string. */ + char path[kMaxPathLength]; +} SPPlatformFileSpecification; + +typedef struct SPPlatformFileSpecificationW { /* this handles unicode file names */ + /** mReference could be as long as 64K but MUST be NULL terminated. */ + uint16 *mReference; +} SPPlatformFileSpecificationW; + +/**Platform-specific file metadata. */ +typedef struct SPPlatformFileInfo { + /** File attribute flags; see Windows documentation. */ + uint32 attributes; + /** Least-significant byte of the file creation date-time (Windows).*/ + uint32 lowCreationTime; + /** Most-significant byte of the file creation date-time (Windows).*/ + uint32 highCreationTime; + /** Least-significant byte of the file modification date-time (Windows).*/ + uint32 lowModificationTime; + /** Most-significant byte of the file cremodification date-time (Windows).*/ + uint32 highModificationTime; + /** The file-name extension indicating the file type (Windows). */ + const char *extension; +} SPPlatformFileInfo; + +#elif PS_PLATFORM_APPLE + +typedef struct SPPlatformFileSpecification { /* this handles unicode file names */ + FSRef mReference; +} SPPlatformFileSpecification; + +typedef struct SPPlatformFileSpecificationW { /* this handles unicode file names */ + FSRef mReference; +} SPPlatformFileSpecificationW; + +#if PRAGMA_STRUCT_ALIGN // DRSWAT +#pragma options align=reset +#endif + + /*******************************************************************************/ + + /** Platform-specific file metadata. */ + typedef struct SPPlatformFileInfo { /* On Mac OS*/ + /** Not used. */ + uint32 attributes; //Unused, but still required to maintain binary compatibility + /** Date file was created (Mac OS). */ + uint32 creationDate; + /** Data file was last modified (Mac OS). */ + uint32 modificationDate; + /** Type of file for Finder (Mac OS). */ + uint32 finderType; + /** File creator (Mac OS). */ + uint32 finderCreator; + /** File flags for Finder; see Mac OS documentation. */ + uint16 finderFlags; + } SPPlatformFileInfo; +#endif // PS_PLATFORM_APPLE + +#endif // MAC_ENV + +/*******************************************************************************/ + +#ifdef WIN_ENV +/** A file specification in Windows. */ +typedef struct SPPlatformFileSpecification { + /** The file path string. */ + char path[kMaxPathLength]; +} SPPlatformFileSpecification; + +/** A widechar file specification in Windows to handle unicode file names. */ +typedef struct SPPlatformFileSpecificationW { + /** mReference could be as long as 64K but MUST be NULL terminated. */ + uint16 *mReference; +} SPPlatformFileSpecificationW; + +/*******************************************************************************/ + +/**Platform-specific file metadata. */ +typedef struct SPPlatformFileInfo { + /** File attribute flags; see Windows documentation. */ + uint32 attributes; + /** Least-significant byte of the file creation date-time (Windows).*/ + uint32 lowCreationTime; + /** Most-significant byte of the file creation date-time (Windows).*/ + uint32 highCreationTime; + /** Least-significant byte of the file modification date-time (Windows).*/ + uint32 lowModificationTime; + /** Most-significant byte of the file cremodification date-time (Windows).*/ + uint32 highModificationTime; + /** The file-name extension indicating the file type (Windows). */ + const uint16 *extension; +} SPPlatformFileInfo; +#endif // WIN_ENV + +/*******************************************************************************/ + + +#if defined(__ANDROID__) || defined(__LINUX__) || defined (__EMSCRIPTEN__) || defined(SIMULATED_WASM) +typedef struct SPPlatformFileSpecification { + /** The file path string. */ + char path[kMaxPathLength]; +} SPPlatformFileSpecification; + +/** A widechar file specification in Windows to handle unicode file names. */ +typedef struct SPPlatformFileSpecificationW { + /** mReference could be as long as 64K but MUST be NULL terminated. */ + uint16 *mReference; +} SPPlatformFileSpecificationW; + +/*******************************************************************************/ + +/**Platform-specific file metadata. */ +typedef struct SPPlatformFileInfo { + uint32 attributes; + uint32 lowCreationTime; + uint32 highCreationTime; + uint32 lowModificationTime; + uint32 highModificationTime; + const uint16 *extension; +} SPPlatformFileInfo; +#endif // __ANDROID__ + +/** Conversion from new platform file specification to old platform file +** specification, and vice-versa. It's okay to pass NULL pointers to these +** functions. If you do, the value returned will be a default constructed +** structure (i.e. zero-filled) +*/ +/** Internal ? */ +SPAPI SPPlatformFileSpecification OldFileSpecFromXplatFileSpec(const XPlatFileSpec* newSpec); + +SPAPI SPPlatformFileSpecificationW OldFileSpecWFromXplatFileSpec(const XPlatFileSpec* newSpec); + +/// Caller owns the CFURLRef contained in XPlatFileSpec::mFileReference +SPAPI XPlatFileSpec XplatFileSpecFromOldFileSpec(const SPPlatformFileSpecification* oldSpec); + +/// Caller owns the CFURLRef contained in XPlatFileSpec::mFileReference +SPAPI XPlatFileSpec XplatFileSpecFromOldFileSpecW(const SPPlatformFileSpecificationW* oldSpecW); + +/*******************************************************************************/ + +/** Internal */ +typedef SPBoolean (*SPAddPiPLFilterProc)( SPPlatformFileInfo *info ); + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + This suite allows you to access the PICA files list. This list, created at startup, + contains references to every file in the application's plug-in folder, including + any resolved file and folder aliases. PICA maintains this list, and uses it to find plug-ins. + + Use this suite to access the plug-in file list, in order to avoid redundant directory + scans. Adapters looking for their own plug-ins and PICA plug-ins looking for + support files should scan the list to locate relevant files rather than walking + platform directory structures on their own. + + Similarly, you can use this suite to create, maintain, and access your own lists + of files in a platform-independant and efficient manner. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPFilesSuite and \c #kSPFilesSuiteVersion (4). + */ + +typedef struct SPFilesSuite { + /** Creates a new file list. Typically, you use the main PICA file list to access + plug-in files, available through \c #SPRuntimeSuite::GetRuntimeFileList(). + You can use this to track other file collections. If you create a new list, you + must free it when it is no longer needed, using \c #FreeFileList(). + @param fileList [out] A buffer in which to return the new file list object. + */ + SPAPI SPErr (*AllocateFileList)( SPFileListRef *fileList ); + /** Frees a file list created with \c #AllocateFileList(), and any entries in the list. + @param fileList The file list object. + */ + SPAPI SPErr (*FreeFileList)( SPFileListRef fileList ); + + /** Adds a file or all files in a directory to a file list. Searches a directory + recursively for contained files. + @param fileList The file list object. + @param file The file or directory specification. + */ + SPAPI SPErr (*AddFiles)( SPFileListRef fileList, const XPlatFileSpec *file ); + + /** Creates a file-list iterator object to use with \c #NextFile() for iterating + through a file list. The iterator is initially set to the first file in the list. + When the iterator is no longer needed, free it with \c #DeleteFileListIterator(). + @param fileList The file list object. + @param iter [out] A buffer in which to return the new iterator object. + */ + SPAPI SPErr (*NewFileListIterator)( SPFileListRef fileList, SPFileListIteratorRef *iter ); + /** Retrieves the current file from a file list iterator, and advances the iterator. + @param iter The iterator object. + @param file [out] A buffer in which to return the current file object, or \c NULL + if the end of the list has been reached. + */ + SPAPI SPErr (*NextFile)( SPFileListIteratorRef iter, SPFileRef *file ); + /** Frees a file-list iterator created with /c #NewFileListIterator(). + @param iter The iterator object. + */ + SPAPI SPErr (*DeleteFileListIterator)( SPFileListIteratorRef iter ); + + /** Retrieves the platform-specific file specification for a file. + @param file The file object. + @param fileSpec [out] A buffer in which to return the file specification. + */ + SPAPI SPErr (*GetFileSpecification)( SPFileRef file, XPlatFileSpec *fileSpec ); + /** Retrieves the metadata for a file. + @param file The file object. + @param info [out] A buffer in which to return the file information. + */ + SPAPI SPErr (*GetFileInfo)( SPFileRef file, SPPlatformFileInfo *info ); + + /** Reports whether a file in a file list is a plug-in. + @param file The file object. + @param isAPlugin [out] A buffer in which to return true if the file is a plug-in. + */ + SPAPI SPErr (*GetIsAPlugin)( SPFileRef file, SPBoolean *isAPlugin ); + /** Sets whether a file in a file list is a plug-in. + @param file The file object. + @param isAPlugin True to mark the file as a plug-in, false to mark it as not a plug-in. + */ + SPAPI SPErr (*SetIsAPlugin)( SPFileRef file, SPBoolean isAPlugin ); + + /** Retrieves the property list for a file. + @param file The file object. + @param propertList [out] A buffer in which to return the property list, + or \c #kFileDoesNotHavePiPL if the file does not have a property list, + or \c #kFileHasMulitplePiPLs if the file has multiple property lists. + @see \c SPPiPL.h + */ + SPAPI SPErr (*GetFilePropertyList)( SPFileRef file, SPPropertyListRef *propertList ); + /** Sets the property list for a file. + @param file The file object. + @param propertList The new property list. + */ + SPAPI SPErr (*SetFilePropertyList)( SPFileRef file, SPPropertyListRef propertList ); + +} SPFilesSuite; + + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + This suite allows you to access the PICA files list. This list, created at startup, + contains references to every file in the application's plug-in folder, including + any resolved file and folder aliases. PICA maintains this list, and uses it to find plug-ins. + + Use this suite to access the plug-in file list, in order to avoid redundant directory + scans. Adapters looking for their own plug-ins and PICA plug-ins looking for + support files should scan the list to locate relevant files rather than walking + platform directory structures on their own. + + Similarly, you can use this suite to create, maintain, and access your own lists + of files in a platform-independant and efficient manner. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPFilesSuite and \c #kSPFilesSuitePrevVers (3). + */ +typedef struct SPFilesV3Suite { + /** Creates a new file list. Typically, you use the main PICA file list to access + plug-in files, available through \c #SPRuntimeSuite::GetRuntimeFileList(). + You can use this to track other file collections. If you create a new list, you + must free it when it is no longer needed, using \c #FreeFileList(). + @param fileList [out] A buffer in which to return the new file list object. + */ + SPAPI SPErr (*AllocateFileList)( SPFileListRef *fileList ); + /** Frees a file list created with \c #AllocateFileList(), and any entries in the list. + @param fileList The file list object. + */ + SPAPI SPErr (*FreeFileList)( SPFileListRef fileList ); + + /** Adds a file or all files in a directory to a file list. Searches a directory + recursively for contained files. + @param fileList The file list object. + @param file The file or directory specification. + */ + SPAPI SPErr (*AddFiles)( SPFileListRef fileList, const SPPlatformFileSpecification *file ); + + /** Creates a file-list iterator object to use with \c #NextFile() for iterating + through a file list. The iterator is initially set to the first file in the list. + When the iterator is no longer needed, free it with \c #DeleteFileListIterator(). + @param fileList The file list object. + @param iter [out] A buffer in which to return the new iterator object. + */ + SPAPI SPErr (*NewFileListIterator)( SPFileListRef fileList, SPFileListIteratorRef *iter ); + /** Retrieves the current file from a file list iterator, and advances the iterator. + @param iter The iterator object. + @param file [out] A buffer in which to return the current file object, or \c NULL + if the end of the list has been reached. + */ + SPAPI SPErr (*NextFile)( SPFileListIteratorRef iter, SPFileRef *file ); + /** Frees a file-list iterator created with /c #NewFileListIterator(). + @param iter The iterator object. + */ + SPAPI SPErr (*DeleteFileListIterator)( SPFileListIteratorRef iter ); + + /** Retrieves the platform-specific file specification for a file. + @param file The file object. + @param fileSpec [out] A buffer in which to return the file specification. + */ + SPAPI SPErr (*GetFileSpecification)( SPFileRef file, SPPlatformFileSpecification *fileSpec ); + /** Retrieves the metadata for a file. + @param file The file object. + @param info [out] A buffer in which to return the file information. + */ + SPAPI SPErr (*GetFileInfo)( SPFileRef file, SPPlatformFileInfo *info ); + + /** Reports whether a file in a file list is a plug-in. + @param file The file object. + @param isAPlugin [out] A buffer in which to return true if the file is a plug-in. + */ + SPAPI SPErr (*GetIsAPlugin)( SPFileRef file, SPBoolean *isAPlugin ); + /** Sets whether a file in a file list is a plug-in. + @param file The file object. + @param isAPlugin True to mark the file as a plug-in, false to mark it as not a plug-in. + */ + SPAPI SPErr (*SetIsAPlugin)( SPFileRef file, SPBoolean isAPlugin ); + + /** Retrieves the property list for a file. + @param file The file object. + @param propertList [out] A buffer in which to return the property list, + or \c #kFileDoesNotHavePiPL if the file does not have a property list, + or \c #kFileHasMulitplePiPLs if the file has multiple property lists. + @see \c SPPiPL.h + */ + SPAPI SPErr (*GetFilePropertyList)( SPFileRef file, SPPropertyListRef *propertList ); + /** Sets the property list for a file. + @param file The file object. + @param propertList The new property list. + */ + SPAPI SPErr (*SetFilePropertyList)( SPFileRef file, SPPropertyListRef propertList ); + +} SPFilesV3Suite; + + +/** Internal */ +SPAPI SPErr SPAllocateFileList( SPFileListRef *fileList ); +/** Internal */ +SPAPI SPErr SPFreeFileList( SPFileListRef fileList ); +/** Internal */ +SPAPI SPErr SPAddFiles( SPFileListRef fileList, const SPPlatformFileSpecification *file ); +/** Internal */ +SPAPI SPErr SPNewAddFiles( SPFileListRef fileList, const XPlatFileSpec *file ); + +/** Internal */ +SPAPI SPErr SPNewFileListIterator( SPFileListRef fileList, SPFileListIteratorRef *iter ); +/** Internal */ +SPAPI SPErr SPNextFile( SPFileListIteratorRef iter, SPFileRef *file ); +/** Internal */ +SPAPI SPErr SPDeleteFileListIterator( SPFileListIteratorRef iter ); + +/** Internal */ +SPAPI SPErr SPGetFileSpecification( SPFileRef file, SPPlatformFileSpecification *fileSpec ); +/** Internal */ +SPAPI SPErr SPNewGetFileSpecification( SPFileRef file, XPlatFileSpec *fileSpec ); +/** Internal */ +SPAPI SPErr SPGetFileInfo( SPFileRef file, SPPlatformFileInfo *info ); +/** Internal */ +SPAPI SPErr SPGetIsAPlugin( SPFileRef file, SPBoolean *isAPlugin ); +/** Internal */ +SPAPI SPErr SPSetIsAPlugin( SPFileRef file, SPBoolean isAPlugin ); + +/** Internal */ +SPAPI SPErr SPGetFilePropertyList( SPFileRef file, SPPropertyListRef *propertList ); +/** Internal */ +SPAPI SPErr SPSetFilePropertyList( SPFileRef file, SPPropertyListRef propertList ); + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPHost.h b/External/AE SDK/Headers/SP/SPHost.h new file mode 100644 index 00000000..601bf736 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPHost.h @@ -0,0 +1,176 @@ +/***********************************************************************/ +/* */ +/* SPHost.h */ +/* */ +/* Copyright 1995-1999 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPHost__ +#define __SPHost__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPAccess.h" +#include "SPAdapts.h" +#include "SPBasic.h" +#include "SPBckDbg.h" +#include "SPBlocks.h" +#include "SPCaches.h" +#include "SPFiles.h" +#include "SPInterf.h" +#include "SPPlugs.h" +#include "SPProps.h" +#include "SPRuntme.h" +#include "SPStrngs.h" +#include "SPSuites.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ + + +/* + * The version number of the Sweet Pea host interface. You can compare it to the + * version number that Sweet Pea was compiled with to determine that you are + * running the version you think you are. See SPVersion() below. + * + * This number consists of a hi word which is the major version number reflecting + * changes to the SP inteface, and a low word which is the minor revision number, + * for instance indicating bug fixes. + */ + +#define kSPVersion 0x000B0002 // version 11.2 + + +/* + * Options available to the host at init time. They are: + * + * kSPHostBlockDebugOption - block allocation debugging is enabled. See + * SPBckDbg.h for details. + * + * Examples: + * + * SPInit( hostProcs, pluginsFolder, kSPHostNoOptions, error ); + * // No debugging. + * + * SPInit( hostProcs, pluginsFolder, kSPHostBlockDebugOption, error ); + * // Enable block debugging. + */ + +#define kSPHostNoOptions 0 +#define kSPHostBlockDebugOption (1<<0L) + + +/******************************************************************************* + ** + ** Functions + ** + **/ + +/* + * SPInit() initializes Sweet Pea. It is the first call made to Sweet Pea. It + * initializes its suites and builds the list of application files. + * + * HostProcs points to a filled-in structure of host callbacks, as described + * in SPRuntme.h. It may be NULL, in which case Sweet Pea uses its default + * versions for all of the host callbacks. PluginFolder is the file spec of the + * plug-ins folder. The contents of this folder are collected into the application + * files list (see SPFiles.h). Options may be any of the host options described + * above. + */ +SPErr SPInit( SPHostProcs *hostProcs, const SPPlatformFileSpecification *pluginFolder, int32 options ); + +/* + * SPXPlatInit() uses the XPlatFileSpec rather than the SPPlatformFileSpecification. + * + * Otherwise it's identical to SPInit (and actually calls through to it for Photoshop 17.0) + */ +SPErr SPXPlatInit( SPHostProcs *hostProcs, const XPlatFileSpec *pluginFolder, int32 options ); + +SPBoolean SPInited( void ); + +/* + * SPTerm() terminates Sweet Pea. Call this when your application quits. + */ +SPErr SPTerm( void ); + +/* + * SPStartupPlugins() scans the list of application files and builds the list + * of plug-ins. It then starts them up, calling each in turn with a start up + * message (see SPPlugs.h). Call this sometime after SPInit(). + */ +SPErr SPStartupPlugins( void ); + +/* + * SPShutdownPlugins() shuts down the plug-ins. It calls each in turn with a + * shut down message (see SPPlugs.h). Call this when your application quits + * before calling SPTerm(). + */ +SPErr SPShutdownPlugins( void ); + + +#ifdef MAC_ENV +/* + * SPSetPPCLoadHeap() sets the destination heap of plug-in accesses on PowerPPC + * Macintoshes. Plug-ins can load into the system heap or the application heap. + */ +typedef enum { + kAppHeap = 0, + kSysHeap +} SPTargetHeap; + +SPErr SPSetPPCLoadHeap( SPTargetHeap target ); + +/* + * SPSetHostBundleRef() lets sweet pea know the bundle ref of the host. + */ +SPErr SPSetHostBundleRef(CFBundleRef hostBundle); +#endif + + +/* + * SPVersion() returns the version number of the Sweet Pea host interface (this + * file) for which Sweet Pea was built. You can compare this to the constant + * kSPVersion to make sure you're using the version you think you are. + */ +uint32 SPVersion( void ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPInterf.h b/External/AE SDK/Headers/SP/SPInterf.h new file mode 100644 index 00000000..276d09f0 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPInterf.h @@ -0,0 +1,180 @@ +/***********************************************************************/ +/* */ +/* SPInterf.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPInterface__ +#define __SPInterface__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPBasic.h" +#include "SPFiles.h" +#include "SPMData.h" +#include "SPPlugs.h" +#include "SPProps.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** PICA Interface suite name. */ +#define kSPInterfaceSuite "SP Interface Suite" +/** PICA Interface suite version. */ +#define kSPInterfaceSuiteVersion 2 + +/** PICA messaging system caller; see \c #SPInterfaceSuite. */ +#define kSPInterfaceCaller "SP Interface" +/** PICA messaging system startup; see \c #SPInterfaceSuite. */ +#define kSPInterfaceStartupSelector "Startup" +/** PICA messaging system shutdown; see \c #SPInterfaceSuite. */ +#define kSPInterfaceShutdownSelector "Shutdown" +/** PICA messaging system request for information; see \c #SPInterfaceSuite. + Illustrator sends this call to all plug-ins to implement + the "About Plug-ins" feature.*/ +#define kSPInterfaceAboutSelector "About" + +/** Adapter name for PICA version 2. */ +#define kSPSweetPea2Adapter "Sweet Pea 2 Adapter" +/** Adapter version for PICA version 2.*/ +#define kSPSweetPea2AdapterVersion 1 + +/******************************************************************************* + ** + ** Types + ** + **/ + +/** A basic message, sent with \c #kSPInterfaceCaller. */ +typedef struct SPInterfaceMessage { + + /** The message data. */ + SPMessageData d; + +} SPInterfaceMessage; + + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + This suite provides is the ability for a plug-in to call + other plug-ins, by sending a message to the main entry point. + This is how the application communicates with plug-ins. + + Use \c #SetupMessageData() to prepare the message for a call, + \c #SendMessage() to send the call with the message, and + \c #EmptyMessageData() to terminate the operation, allowing + PICA to release the basic suite and store global variables. + + These calls work only with PICA plug-ins. Before making the calls, + use \c #SPAdaptersSuite::GetAdapterName() to determine that + the target is a PICA plug-in. For non-PICA plug-ins, use the + interface suite provided by the adapter. See \c #SPAdaptersSuite. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPInterfaceSuite and \c #kSPInterfaceSuiteVersion. +*/ +typedef struct SPInterfaceSuite { + + /** Sends a message to a PICA plug-in, loading it if needed and + passing the caller, selector, and message to the main entry point. + @param plug-in The target plug-in object. + @param caller The caller constant. See @ref Callers. + @param selector The selector constant. See @ref Selectors. + @param message The message, initialized by \c #SetupMessageData(). + @param result [out] A buffer in which to return the result of the call, + as returned by the target plug-in. + */ + SPAPI SPErr (*SendMessage)( SPPluginRef plugin, const char *caller, const char *selector, + void *message, SPErr *result ); + + /** Initializes a message to be sent with \c #SendMessage(). + The function fills in the basic suite, the plug-in reference, + and the globals pointer that PICA keeps for that plug-in. + You must provide any additional data needed. + @param plugin The target plug-in object. + @param data The message structure, initialized with data required + for the intended call. + */ + SPAPI SPErr (*SetupMessageData)( SPPluginRef plugin, SPMessageData *data ); + /** Terminates a call to another plug-in, releasing the basic suite and + updating the target plug-in's globals pointer, in case it has changed. + Use after a call to \c #SendMessage(). + @param plugin The target plug-in object. + @param data The message structure, updated during the call. + */ + SPAPI SPErr (*EmptyMessageData)( SPPluginRef plugin, SPMessageData *data ); + + /** Starts up the plug-in in a plug-in list that exports a given suite. + Searches in the given plug-in list for the plug-in that exports the named + suite, and, if found, sends it the startup message. + @param pluginList The plug-in list object. Access PICA's global plug-in + list using \c #SPRuntimeSuite::GetRuntimePluginList(), + or create your own lists with \c #SPPluginsSuite::AllocatePluginList(). + @param name The suite name constant. + @param version The suite version number constant. + @param started [out] A buffer in which to return true (non-zero) if a + plug-in that exports the suite was found, false (0) if not. + */ + SPAPI SPErr (*StartupExport)( SPPluginListRef pluginList, const char *name, int32 version, + int32 *started ); + +} SPInterfaceSuite; + + +/** Internal */ +SPAPI SPErr SPSendMessage( SPPluginRef plugin, const char *caller, const char *selector, + void *message, SPErr *result ); + +/** Internal */ +SPAPI SPErr SPSetupMessageData( SPPluginRef plugin, SPMessageData *data ); +/** Internal */ +SPAPI SPErr SPEmptyMessageData( SPPluginRef plugin, SPMessageData *data ); + +/** Internal */ +SPAPI SPErr SPStartupExport( SPPluginListRef pluginList, const char *name, int32 version, + int32 *started ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPMData.h b/External/AE SDK/Headers/SP/SPMData.h new file mode 100644 index 00000000..507e5fff --- /dev/null +++ b/External/AE SDK/Headers/SP/SPMData.h @@ -0,0 +1,66 @@ +/***********************************************************************/ +/* */ +/* SPMData.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPMessageData__ +#define __SPMessageData__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Types + ** + **/ + +/** The value of \c #SPMessageData::SPCheck, if the message data associated + with a call to a plug-in has come from \c #SPInterfaceSuite::SendMessage(), + or is prepared using \c #SPInterfaceSuite::SetupMessageData(). */ +#define kSPValidSPMessageData 'SPCk' + +/** Basic suite-access information provided with every call. */ +typedef struct SPMessageData { + /** \c #kSPValidSPMessageData if this is a valid PICA message. */ + int32 SPCheck; + /** This plug-in, an \c #SPPluginRef. */ + struct SPPlugin *self; + /** An array of application-wide global variables. */ + void *globals; + /** A pointer to the basic PICA suite, which you use to obtain all other suites. */ + struct SPBasicSuite *basic; + +} SPMessageData; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPObject.h b/External/AE SDK/Headers/SP/SPObject.h new file mode 100644 index 00000000..9c419b2b --- /dev/null +++ b/External/AE SDK/Headers/SP/SPObject.h @@ -0,0 +1,15 @@ +/****************************************************************************** + SPObject.h + +Purpose: + Defines the suite for registering and creating Sweet Pea objects. + It is a "conventional" Sweet Pea suite used to provide + COM-like objects from Sweet Pea plugins. + + Copyright (c) 1995-1998, 2002 Adobe Systems Incorporated. +******************************************************************************/ +#pragma once +#ifndef __SPObject__ +#define __SPObject__ +/* This module is obsolete. */ +#endif /* __SPObject__ */ diff --git a/External/AE SDK/Headers/SP/SPPiPL.h b/External/AE SDK/Headers/SP/SPPiPL.h new file mode 100644 index 00000000..02aac5d8 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPPiPL.h @@ -0,0 +1,302 @@ +/***********************************************************************/ +/* */ +/* SPPiPL.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPPiPL__ +#define __SPPiPL__ + + +/******************************************************************************* + ** + ** Imports and alignment + ** + **/ + +#include "SPTypes.h" + + +#if PRAGMA_STRUCT_ALIGN +#pragma options align=mac68k +#endif + + +/******************************************************************************* + ** + ** Constants + ** + ** Note: 4-character long IDs must be defined in hexidecimal, not long + ** literal ('long'), due to Windows RC compilers not understanding what + ** to do with them. + ** + **/ + +/** Vendor identifier for a plug-in resource, \c #PIProperty::vendorID value. +
'ADBE' Vendor identifier for PICA-generic applications. */ +#define PIAdobeVendorID (PIType)0x41444245L + +/** Property mechanism version property, \c #PIProperty::propertyKey value +
'ivrs' PICA plug-in version. */ +#define PISPVersionProperty (PIType)0x69767273L + +/** Plug-in resource type, \c #PIProperty::propertyKey value. +
'impt' Suite import information. */ +#define PIImportsProperty (PIType)0x696D7074L + +/** Plug-in resource type, \c #PIProperty::propertyKey value. +
'expt' Suite export information. */ +#define PIExportsProperty (PIType)0x65787074L + +/** Plug-in resource type, \c #PIProperty::propertyKey value. +
'ppcR' Power PC resource information. */ +#define PIPowerPCCodeResProperty (PIType)0x70706352L + +/** Plug-in resource type, \c #PIProperty::propertyKey value. +
'heap' Mac OS PPC-only. +
If not defined, loads application default heap. +
If 0, loads system heap */ +#define PIDestinationHeapProperty (PIType)0x68656170L +/** Value of \c #PIDestinationHeapProperty, loads system heap */ +#define PILoadInAppHeap (1L<<0) + +/** Plug-in resource type, \c #PIProperty::propertyKey value. +
'adpt' Adapter version property (a long value) */ +#define PIAdapterProperty (PIType)0x61647074L + +/** Plug-in resource type, \c #PIProperty::propertyKey value. +
'pinm' Internal plug-in name */ +#define PIPluginNameProperty (PIType)0x70696E6DL + +/** Plug-in resource type, \c #PIProperty::propertyKey value. +
'AcpM' Message flags */ +#define PIConditionalMessages (PIType)0x4163704DL +/** Flag bit for \c #PIConditionalMessages: plug-in accepts property changes. <> */ +#define PIAcceptsPropertyMessage (1L<<0) +/** Flag bit for \c #PIConditionalMessages: skip shutdown. <> */ +#define PISkipShutDownMessage (1L<<1) +/** Flag bit for \c #PIConditionalMessages: plug-in accepts purge-cache messages. */ +#define PIAcceptsPurgeCachesMessage (1L<<2) +/** Flag bit for \c #PIConditionalMessages: skip startup message. <> */ +#define PISkipStartupMessage (1L<<3) + +/** Internal. Plug-in resource type, \c #PIProperty::propertyKey value. +
'RelP' generated by Illustrator to optimize program launch */ +#define PIReleasePluginEarly 0x52656c50 + +/******************************************************************************* + ** + ** General PiPL properties and structures + ** + ** Many hosts multiply define these properties, so we bracket them + ** so they are only defined once. + ** + **/ + +#ifndef kGeneralPiPLPropertiesDefined // Already defined? +/** Internal: Defines the general properties only if the application has + not already done so. */ +#define kGeneralPiPLPropertiesDefined // Only define once. + +/** Data type for plug-in property key and vendor ID. See \c #PIProperty. */ +typedef SPUInt32 PIType; + +/** Plug-in properties version number. */ +#define kCurrentPiPLVersion 0 + +// 'kind' giving the plug-in's kind: +#define PIKindProperty (PIType)0x6b696e64L + +// 'm68k' 68k code descriptor. See struct below. +#define PI68KCodeProperty (PIType)0x6d36386bL + +// 'pwpc' PowerPC code descriptor. See struct below. +#define PIPowerPCCodeProperty (PIType)0x70777063L + +// 'ppcb' PowerPC CARBON code descriptor. See struct below. +#define PIPowerPCCarbonCodeProperty 'ppcb' + +// 'mach' PowerPC Mach-O code descriptor. See struct below. +#define PIPowerPCMachOCodeProperty 'mach' + +// 'mi32' Intel 32 Mach-O code descriptor. See struct below. +#define PIMacIntel32Property 'mi32' + +// 'mi64' Intel 64 Mach-O code descriptor. See struct below. +#define PIMacIntel64Property 'mi64' + +// 'ma64' ARM 64 Mach-O code descriptor. See struct below. +#define PIMacARM64Property 'ma64' + +// 'frag' PowerPC fragment descriptor. See struct below. +#define PICodeFragmentProperty 'frag' + +// 'frgc' PowerPC CARBON fragment descriptor. See struct below. +#define PICarbonCodeFragmentProperty 'frgc' + +// '8664' Win32 Intel code descriptor. See struct below. +#define PIWin64X86CodeProperty (PIType)0x38363634L + +// 'wx86' Win32 Intel code descriptor. See struct below. +#define PIWin32X86CodeProperty (PIType)0x77783836L + +// \deprecated 'fx86' Win16 Intel code descriptor. See struct below. +#define PIWin16X86CodeProperty (PIType)0x66783836L + +/** Plug-in property. Properties contain information about + plug-in resource files, such as their type and location. */ +typedef struct PIProperty { + /** Vendor-specific identifier. */ + PIType vendorID; + /** Identification key for this resource type. */ + PIType propertyKey; + /** 0-based index of this resource within its type. + Must be unique for properties of a given type within + a property list. */ + SPInt32 propertyID; + /** Number of characters in the data array. Rounded to a multiple of 4. */ + SPInt32 propertyLength; + /** The property data array that contains the property value, a string of 4 characters. */ + char propertyData[1]; +} PIProperty; + +/** Plug-in property list. Provides the version number of the plug-in + property mechanism itself, and properties for the associated plug-in. + */ +typedef struct PIPropertyList { + /** Version number for the \c #PIProperty structure. */ + SPInt32 version; + /** Number of properties in the list. */ + SPInt32 count; + /** The properties array. */ + PIProperty properties[1]; +} PIPropertyList; + +/* Following structures describe resource file types used in plug-in property lists. + * These structures obey Macintosh 68k alignment and padding rules though + * generally they are laid out so fields have natural alignment and any + * needed padding is explicit in the structure. + */ + //<> + +/** 68k code descriptor. */ +typedef struct PI68KCodeDesc { + /** Property type key code. */ + PIType fType; + /** Property type unique identifier. */ + int16 fID; +} PI68KCodeDesc; + +/** PowerPC code descriptor. */ +typedef struct PICFMCodeDesc { + /** The offset within the data fork for the start of this plugin's + code fragment. This allows more than one code-fragment-based + plug-in per file. */ + SPInt32 fContainerOffset; + /** The length of this plug-in's code fragment. If this + is the only fragment in the file, the length is 0. */ + SPInt32 fContainerLength; + /** The entry-point name, used to look up the address of + the function to call within the fragment; allows a single code + fragment to export more than one plug-in. + + If the name is an empty string, the default entry point + for the code fragment is used. The entry-point name + must be an exported symbol of the code fragment. */ + unsigned char fEntryName[1]; +} PICFMCodeDesc; + +/** PowerPC Mach-O code descriptor. */ +typedef struct PIMachCodeDesc +{ + /** Property type key code <> */ + unsigned char fEntryName[1]; +} PIMachCodeDesc; + +// For 'mi32' PICodeMacIntel32Property: +// For 'mi64' PICodeMacIntel64Property: +typedef struct PIMacIntelMachCodeDesc +{ + unsigned char fEntryName[1]; +} PIMacIntelMachCodeDesc; + +typedef struct PIFragmentCodeDesc +{ + SPInt32 fFragmentResource; + SPInt32 fFramentNumber; + unsigned char fEntryName[1]; +} PIFragmentCodeDesc; + +/** The entry point name for 64 bit windows, used to lookup the function +which is called to invoke the plug-in. A \c NULL terminated string, padded +with additional \ NULL charcters if needed to satisfy the 4-byte alignment +requirement. See @ref PIWin64X86CodeProperty above. */ +typedef struct PIWin64X86CodeDesc +{ + char fEntryName[1]; +} PIWin64X86CodeDesc; + +/** The entry point name for 32 bit windows, used to lookup the function +which is called to invoke the plug-in. A \c NULL terminated string, padded +with additional \ NULL charcters if needed to satisfy the 4-byte alignment +requirement. See @ref PIWin32X86CodeProperty above. */ +typedef struct PIWin32X86CodeDesc { + char fEntryName[1]; +} PIWin32X86CodeDesc; + +/** \deprecated Win16 Intel code descriptor. +See @ref PIWin16X86CodeProperty above. */ +typedef struct PIWin16X86CodeDesc { + char fEntryName[1]; +} PIWin16X86CodeDesc; + +#endif // kGeneralPiPLPropertiesDefined + + +/******************************************************************************* + ** + ** Additional Types + ** + **/ + +/** CFM code descriptor */ +typedef struct PICFMCodeResourceDesc { + /** Not used. */ + SPInt32 fContainerOffset; /* Currently unused, reserved. */ + /** The length of this plug-in's code fragment. If this + is the only fragment in the file, the length is 0. */ + SPInt32 fContainerLength; + /** Resource type key code. <> */ + PIType fType; + /** Unique identifier for the resource within the type. <> */ + int16 fID; + /** The entry-point name, used to look up the address of + the function to call within the fragment; allows a single code + fragment to export more than one plug-in. + + If the name is an empty string, the default entry point + for the code fragment is used. The entry-point name + must be an exported symbol of the code fragment. */ + unsigned char fEntryName[1]; +} PICFMCodeResourceDesc; + +/*******************************************************************************/ + +#if PRAGMA_STRUCT_ALIGN +#pragma options align=reset +#endif + +#endif // SPPiPL diff --git a/External/AE SDK/Headers/SP/SPPlugs.h b/External/AE SDK/Headers/SP/SPPlugs.h new file mode 100644 index 00000000..7cbd83be --- /dev/null +++ b/External/AE SDK/Headers/SP/SPPlugs.h @@ -0,0 +1,631 @@ +/***********************************************************************/ +/* */ +/* SPPlugs.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPPlugins__ +#define __SPPlugins__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPFiles.h" +#include "SPAdapts.h" +#include "SPProps.h" +#include "SPStrngs.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** PICA plugins suite name */ +#define kSPPluginsSuite "SP Plug-ins Suite" +/** PICA plugins suite version */ +#define kSPPluginsSuiteVersion4 4 +/** PICA plugins suite version */ +#define kSPPluginsSuiteVersion5 5 +/** PICA plugins suite version */ +#define kSPPluginsSuiteVersion6 6 + +#define kSPPluginsSuiteVersion kSPPluginsSuiteVersion4 + +/** PICA global list of available plug-ins.. + @see \c #SPRuntimeSuite::GetRuntimePluginList(). */ +#define kSPRuntimePluginList ((SPPluginListRef)NULL) + + +/******************************************************************************* + ** + ** Types + ** + **/ + +/** Opaque reference to a plug-in object. Access with the \c #SPPluginsSuite. */ +typedef struct SPPlugin *SPPluginRef; +/** A list of plug-in objects. Create with + \c #SPPluginsSuite::AllocatePluginList(), or use + the global list, \c #kSPRuntimePluginList. */ +typedef struct SPPluginList *SPPluginListRef; +/** An iterator object for examining a plug-in list. + See \c #SPPluginsSuite::NewPluginListIterator(). */ +typedef struct SPPluginListIterator *SPPluginListIteratorRef; + +/** PICA file-access error */ +typedef struct _SPErrorData +{ + /** The file for which the error occurred. */ + SPPlatformFileSpecification mErrorFile; + /** Error code, see @ref Errors. */ + SPErr mErrorCode; +} SPErrorData, *SPErrorDataPtr; + +/** File-access error */ +typedef struct _SPXPlatErrorData +{ + /** The file for which the error occurred. */ + XPlatFileSpec mErrorFile; + /** Error code, see @ref Errors. */ + SPErr mErrorCode; +} SPXPlatErrorData, *SPXPlatErrorDataPtr; + +/** */ +typedef SPAPI SPErr (*SPPluginEntryFunc)( const char *caller, const char *selector, void *message ); + +/******************************************************************************* + ** + ** Suite + ** + **/ + +/** This suite allows you to access and manipulate the plug-in object for your own + and those of other plug-ins managed by the Adobe plug-in manager (PICA). + You can access both plug-ins provided with the application (\e host plug-ins), + and external plug-ins.You can query and set plug-in states, + including the "broken" state, which indicates that a plug-in has + become unavailable due to an error condition. + + You can also use this suite to create and use your own lists of plug-ins, + in addition to the global list kept by the application. + + For higher-level access to plug-ins, see \c #AIPluginSuite. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPPluginsSuite and \c #kSPPluginsSuiteVersion. + */ +typedef struct SPPluginsSuite { + + /** Creates a new plug-in list. You can also access PICA's global plug-in list, + using \c #SPRuntimeSuite::GetRuntimePluginList(). + @param stringPool The string pool in which to keep plug-in names. + @param pluginList [out] A buffer in which to return the new list object. + */ + SPAPI SPErr (*AllocatePluginList)( SPStringPoolRef strings, SPPluginListRef *pluginList ); + /** Frees a list of plug-ins allocated with \c #AllocatePluginList(), and + also frees any entries in the list. Do not free the global list (\c #kSPRuntimePluginList). + @param pluginList The plug-in list object. + */ + SPAPI SPErr (*FreePluginList)( SPPluginListRef pluginList ); + + /** Creates a new plug-in object and adds it to a plug-in list. + @param pluginList The plug-in list object, or \c NULL to use the + global list. + @param fileSpec The file specification for the plug-in code and resources. + @param PiPL The structure containing the plug-in properties. + @param adapterName The unique identifiying name of the adapter for the new plug-in. + @param adapterInfo A pointer to the adapter-defined structure that stores needed + information about this plug-in. + @param plugin [out] A buffer in which to return the new plug-in object. + @see \c #AllocatePluginList(), \c #SPAdaptersSuite + */ + SPAPI SPErr (*AddPlugin)( SPPluginListRef pluginList, const SPPlatformFileSpecification *fileSpec, + PIPropertyList *PiPL, const char *adapterName, void *adapterInfo, SPPluginRef *plugin ); + + /** Creates an iterator object with which to traverse a plug-in list. + The iterator is initially set to the first plug-in in the list. + @param pluginList The plug-in list object, or \c NULL to use the + global list. + @param iter [out] A buffer in which to return the new iterator object. + @see \c #NextPlugin(), \c #DeletePluginListIterator() + */ + SPAPI SPErr (*NewPluginListIterator)( SPPluginListRef pluginList, SPPluginListIteratorRef *iter ); + /** Retrieves the current plug-in and advances a plug-in-list iterator to the next plug-in in the list. + @param iter The plug-in-list iterator object. + @param plugin [out] A buffer in which to return the current plug-in object, \c NULL + if the end of the list has been reached. + @see \c #NewPluginListIterator(), + */ + SPAPI SPErr (*NextPlugin)( SPPluginListIteratorRef iter, SPPluginRef *plugin ); + /** Frees a plug-in-list iterator that is no longer needed. + @param iter The plug-in-list iterator object. + @see \c #NewPluginListIterator(), + */ + SPAPI SPErr (*DeletePluginListIterator)( SPPluginListIteratorRef iter ); + /** Reports whether a plug-in that is needed <> is + available in a plug-in list. + @param pluginList The plug-in list object, or \c NULL to use the global list. + @param available [out] A buffer in which to return true if the plug-in <> + is found in the list. + @see \c #SPInterfaceSuite::StartupExport() + */ + SPAPI SPErr (*GetPluginListNeededSuiteAvailable)( SPPluginListRef pluginList, SPBoolean *available ); + + /** Retrieves <> for a plug-in provided by the application. <> + @param plugin The plug-in object. + @param host A pointer to the callback procedure. <> + */ + SPAPI SPErr (*GetPluginHostEntry)( SPPluginRef plugin, SPPluginEntryFunc *hostEntry ); + /** Retrieves the code and resources file of a plug-in. + @param plugin The plug-in object. + @param fileSpec [out] A buffer in which to return the file specification. + @see \c #SPFilesSuite + */ + SPAPI SPErr (*GetPluginFileSpecification)( SPPluginRef plugin, SPPlatformFileSpecification *fileSpec ); + /** Retrieves the property list of a plug-in. + @param plugin The plug-in object. + @param propertList [out] A buffer in which to return the property list object. + @see \c #SPPropertiesSuite + */ + SPAPI SPErr (*GetPluginPropertyList)( SPPluginRef plugin, SPPropertyListRef *propertList ); + /** Retrieves the global variables of a plug-in. This is the same value passed in messages + to the plug-in, which PICA stores when the plug-in is unloaded. + @param plugin The plug-in object. + @param globals [out] A buffer in which to return a pointer to the global variable array. + */ + SPAPI SPErr (*GetPluginGlobals)( SPPluginRef plugin, void **globals ); + /** Sets the global variables for a plug-in. This is the same value passed in messages + to the plug-in, which PICA stores when the plug-in is unloaded. + @param plugin The plug-in object. + @param globals The new global variable array. + */ + SPAPI SPErr (*SetPluginGlobals)( SPPluginRef plugin, void *globals ); + /** Reports whether a plug-in has received and returned from the interface start-up message. + @param plugin The plug-in object. + @param started [out] A buffer in which to return true (non-zero) if the plug-in has been started, + false (0) otherwise. + */ + SPAPI SPErr (*GetPluginStarted)( SPPluginRef plugin, int32 *started ); + /** Sets whether a plug-in has received and returned from the interface start-up message. + @param plugin The plug-in object. + @param started True (non-zero) if the plug-in has been started, false (0) otherwise. + */ + SPAPI SPErr (*SetPluginStarted)( SPPluginRef plugin, int32 started ); + /** Reports whether a plug-in is instructed to skip the start-up message. + @param plugin The plug-in object. + @param skipShutdown [out] A buffer in which to return true (non-zero) if the plug-in skips + the start-up message, false (0) otherwise. + */ + SPAPI SPErr (*GetPluginSkipShutdown)( SPPluginRef plugin, int32 *skipShutdown ); + /** Instructs a plug-in to respond or not to respond to the start-up message. + @param plugin The plug-in object. + @param skipShutdown True (non-zero) to skip the start-up message, false (0) + to respond normally to the start-up message. + */ + SPAPI SPErr (*SetPluginSkipShutdown)( SPPluginRef plugin, int32 skipShutdown ); + /** Reports whether a plug-in has reported an error condition that makes it unavailable. + @param plugin The plug-in object. + @param broken [out] A buffer in which to return true (non-zero) if + the plug-in is marked as broken, false (0) otherwise. + */ + SPAPI SPErr (*GetPluginBroken)( SPPluginRef plugin, int32 *broken ); + /** Sets or clears the broken flag that marks a plug-in as unavailable due to an + error condition. + @param plugin The plug-in object. + @param broken True (non-zero) to mark the plug-in as broken, false (0) + to clear the broken flag. + */ + SPAPI SPErr (*SetPluginBroken)( SPPluginRef plugin, int32 broken ); + /** Retrieves the adapter for a plug-in. + @param plugin The plug-in object. + @param adapter [out] A buffer in which to return the adapter object. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*GetPluginAdapter)( SPPluginRef plugin, SPAdapterRef *adapter ); + /** Retrieves the adapter-specific information for a plug-in. Typically + used only by the adapter that defined the information. Other plug-ins + should use \c #AIPluginSuite::GetPluginOptions(). + @param plugin The plug-in object. + @param adapterInfo [out] A buffer in which to return a pointer to the adapter-defined + information structure. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*GetPluginAdapterInfo)( SPPluginRef plugin, void **adapterInfo ); + /** Sets the adapter-specific information for a plug-in. Typically + used only by the adapter that defined the information. Other plug-ins + should use \c #AIPluginSuite::SetPluginOptions(). + @param plugin The plug-in object. + @param adapterInfo The adapter-defined information structure. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*SetPluginAdapterInfo)( SPPluginRef plugin, void *adapterInfo ); + + /** Retrieves a specific property from the property list for a plug-in. If + the property is not found in the list, sends the plug-in the + \c #kSPPropertiesAcquireSelector message. The plug-in can ignore the + message, or it can create and return the requested property. In either + case, this function adds the (possibly \c NULL) property to the list + and returns it. + @param plugin The plug-in object. + @param vendorID The property vendor ID code. + @param propetyKey The property type key code. + @param propertyID The specific property identifier. + @param p [out] A buffer in which to return a pointer to the property object. + @see \c #SPPropertiesSuite + */ + SPAPI SPErr (*FindPluginProperty)( SPPluginRef plugin, PIType vendorID, PIType propertyKey, int32 propertyID, PIProperty **p ); + + /** Retrieves the name of a plug-in. + @param plugin The plug-in object. + @param name [out] A buffer in which to return the name string. + */ + SPAPI SPErr (*GetPluginName)( SPPluginRef plugin, const char **name ); + /** Sets the name of a plug-in. + @param plugin The plug-in object. + @param name The new name string. + */ + SPAPI SPErr (*SetPluginName)( SPPluginRef plugin, const char *name ); + /** Retrieves a plug-in by name. + @param name The name string. + @param plugin [out] A buffer in which to return the plug-in object. + */ + SPAPI SPErr (*GetNamedPlugin)( const char *name, SPPluginRef *plugin); + + /** Sets the property list for a plug-in. + @param plugin The plug-in object. + @param file The file containing the property list. <> + */ + SPAPI SPErr (*SetPluginPropertyList)( SPPluginRef plugin, SPFileRef file ); + + // Plug-ins suite version 5 + /* This attribute frees the adapterInfo field for private data for adapters. + <> */ + /** Retrieves host information for a plug-in. <> + @param plugin The plug-in object. + @param hostInfo [out] A buffer in which to return a pointer to the + host information structure. + */ + SPAPI SPErr (*GetPluginHostInfo)( SPPluginRef plugin, void **hostInfo ); + /** Sets host information for a plug-in. <> + @param plugin The plug-in object. + @param hostInfo The new host information structure. + */ + SPAPI SPErr (*SetPluginHostInfo)( SPPluginRef plugin, void *hostInfo ); + +} SPPluginsSuite; + + + +/******************************************************************************* + ** + ** Suite + ** + **/ + +/** This suite allows you to access and manipulate the plug-in object but uses + the XPlatFileSpec rather than the SPPlatformFileSpecification as in previous + versions. + + For higher-level access to plug-ins, see \c #AIPluginSuite. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPPluginsSuite and \c #kSPPluginsSuiteVersion6. + */ +typedef struct SPXPlatPluginsSuite { + + /** Creates a new plug-in list. You can also access PICA's global plug-in list, + using \c #SPRuntimeSuite::GetRuntimePluginList(). + @param stringPool The string pool in which to keep plug-in names. + @param pluginList [out] A buffer in which to return the new list object. + */ + SPAPI SPErr (*AllocatePluginList)( SPStringPoolRef strings, SPPluginListRef *pluginList ); + /** Frees a list of plug-ins allocated with \c #AllocatePluginList(), and + also frees any entries in the list. Do not free the global list (\c #kSPRuntimePluginList). + @param pluginList The plug-in list object. + */ + SPAPI SPErr (*FreePluginList)( SPPluginListRef pluginList ); + + /** Creates a new plug-in object and adds it to a plug-in list. + @param pluginList The plug-in list object, or \c NULL to use the + global list. + @param fileSpec The file specification for the plug-in code and resources. + @param PiPL The structure containing the plug-in properties. + @param adapterName The unique identifiying name of the adapter for the new plug-in. + @param adapterInfo A pointer to the adapter-defined structure that stores needed + information about this plug-in. + @param plugin [out] A buffer in which to return the new plug-in object. + @see \c #AllocatePluginList(), \c #SPAdaptersSuite + */ + SPAPI SPErr (*AddXPlatPlugin)( SPPluginListRef pluginList, const XPlatFileSpec *fileSpec, + PIPropertyList *PiPL, const char *adapterName, void *adapterInfo, SPPluginRef *plugin ); + + /** Creates an iterator object with which to traverse a plug-in list. + The iterator is initially set to the first plug-in in the list. + @param pluginList The plug-in list object, or \c NULL to use the + global list. + @param iter [out] A buffer in which to return the new iterator object. + @see \c #NextPlugin(), \c #DeletePluginListIterator() + */ + SPAPI SPErr (*NewPluginListIterator)( SPPluginListRef pluginList, SPPluginListIteratorRef *iter ); + /** Retrieves the current plug-in and advances a plug-in-list iterator to the next plug-in in the list. + @param iter The plug-in-list iterator object. + @param plugin [out] A buffer in which to return the current plug-in object, \c NULL + if the end of the list has been reached. + @see \c #NewPluginListIterator(), + */ + SPAPI SPErr (*NextPlugin)( SPPluginListIteratorRef iter, SPPluginRef *plugin ); + /** Frees a plug-in-list iterator that is no longer needed. + @param iter The plug-in-list iterator object. + @see \c #NewPluginListIterator(), + */ + SPAPI SPErr (*DeletePluginListIterator)( SPPluginListIteratorRef iter ); + /** Reports whether a plug-in that is needed <> is + available in a plug-in list. + @param pluginList The plug-in list object, or \c NULL to use the global list. + @param available [out] A buffer in which to return true if the plug-in <> + is found in the list. + @see \c #SPInterfaceSuite::StartupExport() + */ + SPAPI SPErr (*GetPluginListNeededSuiteAvailable)( SPPluginListRef pluginList, SPBoolean *available ); + + /** Retrieves <> for a plug-in provided by the application. <> + @param plugin The plug-in object. + @param host A pointer to the callback procedure. <> + */ + SPAPI SPErr (*GetPluginHostEntry)( SPPluginRef plugin, SPPluginEntryFunc *hostEntry ); + /** Retrieves the code and resources file of a plug-in. + @param plugin The plug-in object. + @param fileSpec [out] A buffer in which to return the file specification. + @see \c #SPFilesSuite + */ + SPAPI SPErr (*GetPluginXplatFileSpec)( SPPluginRef plugin, XPlatFileSpec *fileSpec ); + /** Retrieves the property list of a plug-in. + @param plugin The plug-in object. + @param propertList [out] A buffer in which to return the property list object. + @see \c #SPPropertiesSuite + */ + SPAPI SPErr (*GetPluginPropertyList)( SPPluginRef plugin, SPPropertyListRef *propertList ); + /** Retrieves the global variables of a plug-in. This is the same value passed in messages + to the plug-in, which PICA stores when the plug-in is unloaded. + @param plugin The plug-in object. + @param globals [out] A buffer in which to return a pointer to the global variable array. + */ + SPAPI SPErr (*GetPluginGlobals)( SPPluginRef plugin, void **globals ); + /** Sets the global variables for a plug-in. This is the same value passed in messages + to the plug-in, which PICA stores when the plug-in is unloaded. + @param plugin The plug-in object. + @param globals The new global variable array. + */ + SPAPI SPErr (*SetPluginGlobals)( SPPluginRef plugin, void *globals ); + /** Reports whether a plug-in has received and returned from the interface start-up message. + @param plugin The plug-in object. + @param started [out] A buffer in which to return true (non-zero) if the plug-in has been started, + false (0) otherwise. + */ + SPAPI SPErr (*GetPluginStarted)( SPPluginRef plugin, int32 *started ); + /** Sets whether a plug-in has received and returned from the interface start-up message. + @param plugin The plug-in object. + @param started True (non-zero) if the plug-in has been started, false (0) otherwise. + */ + SPAPI SPErr (*SetPluginStarted)( SPPluginRef plugin, int32 started ); + /** Reports whether a plug-in is instructed to skip the start-up message. + @param plugin The plug-in object. + @param skipShutdown [out] A buffer in which to return true (non-zero) if the plug-in skips + the start-up message, false (0) otherwise. + */ + SPAPI SPErr (*GetPluginSkipShutdown)( SPPluginRef plugin, int32 *skipShutdown ); + /** Instructs a plug-in to respond or not to respond to the start-up message. + @param plugin The plug-in object. + @param skipShutdown True (non-zero) to skip the start-up message, false (0) + to respond normally to the start-up message. + */ + SPAPI SPErr (*SetPluginSkipShutdown)( SPPluginRef plugin, int32 skipShutdown ); + /** Reports whether a plug-in has reported an error condition that makes it unavailable. + @param plugin The plug-in object. + @param broken [out] A buffer in which to return true (non-zero) if + the plug-in is marked as broken, false (0) otherwise. + */ + SPAPI SPErr (*GetPluginBroken)( SPPluginRef plugin, int32 *broken ); + /** Sets or clears the broken flag that marks a plug-in as unavailable due to an + error condition. + @param plugin The plug-in object. + @param broken True (non-zero) to mark the plug-in as broken, false (0) + to clear the broken flag. + */ + SPAPI SPErr (*SetPluginBroken)( SPPluginRef plugin, int32 broken ); + /** Retrieves the adapter for a plug-in. + @param plugin The plug-in object. + @param adapter [out] A buffer in which to return the adapter object. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*GetPluginAdapter)( SPPluginRef plugin, SPAdapterRef *adapter ); + /** Retrieves the adapter-specific information for a plug-in. Typically + used only by the adapter that defined the information. Other plug-ins + should use \c #AIPluginSuite::GetPluginOptions(). + @param plugin The plug-in object. + @param adapterInfo [out] A buffer in which to return a pointer to the adapter-defined + information structure. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*GetPluginAdapterInfo)( SPPluginRef plugin, void **adapterInfo ); + /** Sets the adapter-specific information for a plug-in. Typically + used only by the adapter that defined the information. Other plug-ins + should use \c #AIPluginSuite::SetPluginOptions(). + @param plugin The plug-in object. + @param adapterInfo The adapter-defined information structure. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*SetPluginAdapterInfo)( SPPluginRef plugin, void *adapterInfo ); + + /** Retrieves a specific property from the property list for a plug-in. If + the property is not found in the list, sends the plug-in the + \c #kSPPropertiesAcquireSelector message. The plug-in can ignore the + message, or it can create and return the requested property. In either + case, this function adds the (possibly \c NULL) property to the list + and returns it. + @param plugin The plug-in object. + @param vendorID The property vendor ID code. + @param propetyKey The property type key code. + @param propertyID The specific property identifier. + @param p [out] A buffer in which to return a pointer to the property object. + @see \c #SPPropertiesSuite + */ + SPAPI SPErr (*FindPluginProperty)( SPPluginRef plugin, PIType vendorID, PIType propertyKey, int32 propertyID, PIProperty **p ); + + /** Retrieves the name of a plug-in. + @param plugin The plug-in object. + @param name [out] A buffer in which to return the name string. + */ + SPAPI SPErr (*GetPluginName)( SPPluginRef plugin, const char **name ); + /** Sets the name of a plug-in. + @param plugin The plug-in object. + @param name The new name string. + */ + SPAPI SPErr (*SetPluginName)( SPPluginRef plugin, const char *name ); + /** Retrieves a plug-in by name. + @param name The name string. + @param plugin [out] A buffer in which to return the plug-in object. + */ + SPAPI SPErr (*GetNamedPlugin)( const char *name, SPPluginRef *plugin); + + /** Sets the property list for a plug-in. + @param plugin The plug-in object. + @param file The file containing the property list. <> + */ + SPAPI SPErr (*SetPluginPropertyList)( SPPluginRef plugin, SPFileRef file ); + + // Plug-ins suite version 5 + /* This attribute frees the adapterInfo field for private data for adapters. + <> */ + /** Retrieves host information for a plug-in. <> + @param plugin The plug-in object. + @param hostInfo [out] A buffer in which to return a pointer to the + host information structure. + */ + SPAPI SPErr (*GetPluginHostInfo)( SPPluginRef plugin, void **hostInfo ); + /** Sets host information for a plug-in. <> + @param plugin The plug-in object. + @param hostInfo The new host information structure. + */ + SPAPI SPErr (*SetPluginHostInfo)( SPPluginRef plugin, void *hostInfo ); + +} SPXPlatPluginsSuite; + + +/** Internal */ +SPAPI SPErr SPAllocatePluginList( SPStringPoolRef strings, SPPluginListRef *pluginList ); +/** Internal */ +SPAPI SPErr SPFreePluginList( SPPluginListRef pluginList ); +/** Internal */ +SPAPI SPErr SPGetPluginListNeededSuiteAvailable( SPPluginListRef pluginList, SPBoolean *available ); + +/** Internal */ +SPAPI SPErr SPAddPlugin( SPPluginListRef pluginList, const SPPlatformFileSpecification *fileSpec, + PIPropertyList *PiPL, const char *adapterName, void *adapterInfo, SPPluginRef *plugin ); + +/** Internal */ +SPAPI SPErr SPAddXPlatPlugin( SPPluginListRef pluginList, const XPlatFileSpec *fileSpec, + PIPropertyList *PiPL, const char *adapterName, void *adapterInfo, SPPluginRef *plugin ); + +/** Internal */ +SPAPI SPErr SPNewPluginListIterator( SPPluginListRef pluginList, SPPluginListIteratorRef *iter ); +/** Internal */ +SPAPI SPErr SPNextPlugin( SPPluginListIteratorRef iter, SPPluginRef *plugin ); +/** Internal */ +SPAPI SPErr SPDeletePluginListIterator( SPPluginListIteratorRef iter ); + +/** Internal */ +SPAPI SPErr SPGetHostPluginEntry( SPPluginRef plugin, SPPluginEntryFunc *hostEntry ); +/** Internal */ +SPAPI SPErr SPGetPluginFileSpecification( SPPluginRef plugin, SPPlatformFileSpecification *fileSpec ); +/** Internal */ +SPAPI SPErr SPGetPluginXplatFileSpec( SPPluginRef plugin, XPlatFileSpec *fileSpec ); +/** Internal */ +SPAPI SPErr SPGetPluginPropertyList( SPPluginRef plugin, SPPropertyListRef *propertyList ); +/** Internal */ +SPAPI SPErr SPGetPluginGlobals( SPPluginRef plugin, void **globals ); +/** Internal */ +SPAPI SPErr SPSetPluginGlobals( SPPluginRef plugin, void *globals ); +/** Internal */ +SPAPI SPErr SPGetPluginStarted( SPPluginRef plugin, int32 *started ); +/** Internal */ +SPAPI SPErr SPSetPluginStarted( SPPluginRef plugin, int32 started ); +/** Internal */ +SPAPI SPErr SPGetPluginSkipShutdown( SPPluginRef plugin, int32 *skipShutdown ); +/** Internal */ +SPAPI SPErr SPSetPluginSkipShutdown( SPPluginRef plugin, int32 skipShutdown ); +/** Internal */ +SPAPI SPErr SPGetPluginBroken( SPPluginRef plugin, int32 *broken ); +/** Internal */ +SPAPI SPErr SPSetPluginBroken( SPPluginRef plugin, int32 broken ); +/** Internal */ +SPAPI SPErr SPGetPluginAdapter( SPPluginRef plugin, SPAdapterRef *adapter ); +/** Internal */ +SPAPI SPErr SPGetPluginAdapterInfo( SPPluginRef plugin, void **adapterInfo ); +/** Internal */ +SPAPI SPErr SPSetPluginAdapterInfo( SPPluginRef plugin, void *adapterInfo ); + +/** Internal */ +SPAPI SPErr SPFindPluginProperty( SPPluginRef plugin, PIType vendorID, PIType propertyKey, + int32 propertyID, PIProperty **p ); + +/** Internal */ +SPAPI SPErr SPGetPluginName( SPPluginRef plugin, const char **name ); +/** Internal */ +SPAPI SPErr SPSetPluginName( SPPluginRef plugin, const char *name ); +/** Internal */ +SPAPI SPErr SPGetNamedPlugin( const char *name, SPPluginRef *plugin); + +/** Internal */ +SPAPI SPErr SPSetPluginPropertyList( SPPluginRef plugin, SPFileRef file ); + +/** Internal */ +SPErr SPAddHostPlugin( SPPluginListRef pluginList, SPPluginEntryFunc entry, void *access, const char *adapterName, + void *adapterInfo, SPPluginRef *plugin, const char *name); + /* access is SPPlatformAccessRef */ + + +// Plug-ins suite version 5 +/* This attribute frees the adapterInfo field for private data for adapters. */ +/** Internal */ +SPAPI SPErr SPGetPluginHostInfo( SPPluginRef plugin, void **hostInfo ); +/** Internal */ +SPAPI SPErr SPSetPluginHostInfo( SPPluginRef plugin, void *hostInfo ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPProps.h b/External/AE SDK/Headers/SP/SPProps.h new file mode 100644 index 00000000..748c7ba7 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPProps.h @@ -0,0 +1,316 @@ +/***********************************************************************/ +/* */ +/* SPProps.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPProperties__ +#define __SPProperties__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPMData.h" +#include "SPPiPL.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ + +/** PICA properties suite name */ +#define kSPPropertiesSuite "SP Properties Suite" +/** PICA properties suite version */ +#define kSPPropertiesSuiteVersion2 2 +/** PICA properties suite version */ +#define kSPPropertiesSuiteVersion kSPPropertiesSuiteVersion2 // minimal is default +/** PICA properties suite version */ +#define kSPPropertiesSuiteVersion3 3 + +/** @ingroup Callers + PICA plug-in property operation; sent with \c #SPPropertiesMessage. + See \c #SPPropertiesSuite. */ +#define kSPPropertiesCaller "SP Properties" +/** @ingroup Selectors + Acquire PICA plug-in properties; sent with \c #SPPropertiesMessage. + See \c #SPPropertiesSuite.*/ +#define kSPPropertiesAcquireSelector "Acquire" +/** @ingroup Selectors + Release PICA plug-in properties; sent with \c #SPPropertiesMessage. + See \c #SPPropertiesSuite.*/ +#define kSPPropertiesReleaseSelector "Release" + + +/******************************************************************************* + ** + ** Types + ** + **/ +/** An opaque reference to a plug-in property. Access with the \c #SPPropertiesSuite. */ +typedef struct SPProperty *SPPropertyRef; +/** An opaque reference to a plug-in property list. Create and access with the \c #SPPropertiesSuite. */ +typedef struct SPPropertyList *SPPropertyListRef; +/** An opaque reference to an iterator for a plug-in property list. Create and access with the \c #SPPropertiesSuite. */ +typedef struct SPPropertyListIterator *SPPropertyListIteratorRef; + +/** Message passed with the \c #kSPPropertiesCaller. */ +typedef struct SPPropertiesMessage { + /** The message data. */ + SPMessageData d; + + /** Unique identifier for the vendor defining this property type. This allows + you to define your own properties in a way that + does not conflict with either Adobe or other vendors. + Use a registered application creator code to ensure uniqueness. + All PICA properties use \c #PIAdobeVendorID.*/ + PIType vendorID; + /** The property type key code, typically identifies a resource type. */ + PIType propertyKey; + /** The unique property identifier, for multiple resources of a given + type. Normally, there is only one, and the ID value is 0. */ + int32 propertyID; + + /** A structure containing the property data, or value. */ + void *property; + /** Reference count. Increment when a property is acquired, decrement + when it is released. */ + int32 refCon; + /** True (non-zero) if this property does not change betweeen sessions + and can be cached by the application in the start-up preferences + file, false (0) otherwise. Typically true. */ + int32 cacheable; + +} SPPropertiesMessage; + + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + Use these functions to create, access, and manage plug-in property lists + associated with a specific plug-in. Plug-in properties provide the + application with resource information for the plug-in, such as the types + and locations of code files, and the plug-in version. + + A plug-in can be associated with multiple properties lists. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPPropertiesSuite and \c #kSPPropertiesSuiteVersion. + */ +typedef struct SPPropertiesSuite { + + /** Creates a new plug-in property list. + @param stringPool The string pool in which to keep plug-in names. + @param propertyList [out] A buffer in which to return the new list object. + */ + SPAPI SPErr (*AllocatePropertyList)( SPPropertyListRef *propertyList ); + /** Frees a list of plug-in properties allocated with \c #AllocatePropertyList(), and + also frees any entries in the list. If the list is one of a chain, frees the + entire chain. + @param propertyList The plug-in properties list object. + @see \c #SPHasMultiplePropertyLists() + */ + SPAPI SPErr (*FreePropertyList)( SPPropertyListRef propertyList ); + + /** Adds a set of properties to a plug-in properties list. This set is typically + read from a resource file.Creates an \c #SPPropertyRef for each property, + but does not return these objects. + @param propertyList The plug-in properties list object. + @param pList A pointer to the low-level structure for the set of properties to add. + @param refCon The initial reference count for properties in the set. + @param cacheable True (non-zero) if these properties do not change betweeen sessions + and can be cached by the application in the start-up preferences + file, false (0) otherwise. Typically true. + @see \c #AddProperty() + */ + SPAPI SPErr (*AddProperties)( SPPropertyListRef propertyList, PIPropertyList *pList, int32 refCon, int32 cacheable ); + + /** Creates a new individual property and adds it to a plug-in properties list. + Typically called to install a property returned from an \c #kSPPropertiesAcquireSelector message. + @param propertyList The plug-in properties list object. + @param vendorID The vendor identifier for the new property. + @param propertyKey The type key code for the new property. + @param propertyID The unique identifier for the individual property (normally 0). + @param p A pointer to the property value structure. + <> + @param refCon The initial reference count for property. + @param cacheable True (non-zero) if this property does not change betweeen sessions + and can be cached by the application in the start-up preferences + file, false (0) otherwise. Typically true. + @param property [out] A buffer in which to return the new property object. + @see \c #AllocatePropertyList(), \c #AddProperties() + */ + SPAPI SPErr (*AddProperty)( SPPropertyListRef propertyList, PIType vendorID, PIType propertyKey, int32 propertyID, PIProperty *p, + int32 refCon, int32 cacheable, SPPropertyRef *property ); + + /** Retrieves a property from a plug-in properties list, or from any list in its chain. + @param propertyList The plug-in properties list object. + @param vendorID The vendor identifier for the new property. + @param propertyKey The type key code for the new property. + @param propertyID The unique identifier for the individual property (normally 0). + @param property [out] A buffer in which to return the property object, or \c NULL if a + matching property is not found. + @param \c #FindPropertyLocal() + */ + SPAPI SPErr (*FindProperty)( SPPropertyListRef propertyList, PIType vendorID, PIType propertyKey, int32 propertyID, SPPropertyRef *property ); + + /** Creates an iterator object with which to traverse a plug-in properties list. + The iterator is initially set to the first property in the list. + @param propertyList The plug-in properties list object. + @param iter [out] A buffer in which to return the new iterator object. + @see \c #NextProperty(), \c #DeletePropertyListIterator() + */ + SPAPI SPErr (*NewPropertyListIterator)( SPPropertyListRef propertyList, SPPropertyListIteratorRef *iter ); + /** Retrieves the current property and advances a plug-in properties list iterator + to the next property in the list. + @param iter The plug-in properties list iterator object. + @param property [out] A buffer in which to return the current property object, \c NULL + if the end of the list has been reached. + @see \c #NewPropertyListIterator(), + */ + SPAPI SPErr (*NextProperty)( SPPropertyListIteratorRef iter, SPPropertyRef *property ); + /** Frees a plug-in properties list iterator that is no longer needed. + @param iter The plug-in properties list iterator object. + @see \c #NewPropertyListIterator(), + */ + SPAPI SPErr (*DeletePropertyListIterator)( SPPropertyListIteratorRef iter ); + + /** Retrieves the low-level property structure of a property object. + @param property The property object. + @param p [out] A buffer in which to return a pointer to the property structure. + */ + SPAPI SPErr (*GetPropertyPIProperty)( SPPropertyRef property, PIProperty **p ); + /** Retrieves the current reference count of a property. + @param property The property object. + @param refCon [out] A buffer in which to return the reference count. + */ + SPAPI SPErr (*GetPropertyRefCon)( SPPropertyRef property, int32 *refCon ); + /** Reports whether a property is cacheable. + @param property The property object. + @param cacheable [out] A buffer in which to return true (non-zero) + if this property does not change betweeen sessions + and can be cached by the application in the start-up preferences + file, false (0) otherwise. + */ + SPAPI SPErr (*GetPropertyCacheable)( SPPropertyRef property, int32 *cacheable ); + /** Reports whether a property was allocated by the plug-in that contains it. + @param property The property object. + @param allocatedByPlugin [out] A buffer in which to return true (non-zero) + if this property was created after being acquired from a + \c #kSPPropertiesAcquireSelector message, false (0) if the + property was read from a resource file. + @see \c #AddProperty(), \c #AddProperties() + */ + SPAPI SPErr (*GetPropertyAllocatedByPlugin)( SPPropertyRef property, int32 *allocatedByPlugin ); + + // kSPPropertiesSuiteVersion3 + /** Reports whether a plug-in properties list is one of a chain of properties lists for its plug-in. + (Note that this function returns a boolean value, not an error code.) + @param propertyList The plug-in properties list object. + @return True (non-zero) if the list is one of a chain, false (0) otherwise. + @see \c #GetNextPropertyList() + */ + SPAPI SPBoolean (*SPHasMultiplePropertyLists)(SPPropertyListRef propertyList); + /** Retrieves the next plug-in properties list in a properties-list chain. + @param propertyList The current plug-in properties list object. + @param nextPropertyList [out] A buffer in which to return the next properties list object, + or \c NULL if the end of the chain has been reached. + */ + SPAPI SPErr (*GetNextPropertyList)(SPPropertyListRef propertyList, SPPropertyListRef *nextPropertyList); + /** Retrieves a property from a plug-in properties list, but does not search in other + lists in the chain. + @param propertyList The plug-in properties list object. + @param vendorID The vendor identifier for the new property. + @param propertyKey The type key code for the new property. + @param propertyID The unique identifier for the individual property (normally 0). + @param property [out] A buffer in which to return the property object, or \c NULL if a + matching property is not found. + @see \c #FindProperty() + */ + SPAPI SPErr (*FindPropertyLocal)( SPPropertyListRef propertyList, PIType vendorID, PIType propertyKey, + int32 propertyID, SPPropertyRef *property ); + +} SPPropertiesSuite; + + +/** Internal */ +SPAPI SPErr SPAllocatePropertyList( SPPropertyListRef *propertyList ); +/** Internal */ +SPAPI SPErr SPFreePropertyList( SPPropertyListRef propertyList ); + +/** Internal */ +SPAPI SPErr SPAddProperties( SPPropertyListRef propertyList, PIPropertyList *pList, int32 refCon, + int32 cacheable ); + +/** Internal */ +SPAPI SPErr SPAddProperty( SPPropertyListRef propertyList, PIType vendorID, PIType propertyKey, + int32 propertyID, PIProperty *p, int32 refCon, int32 cacheable, SPPropertyRef *property ); + +/** Internal */ +SPAPI SPErr SPFindProperty( SPPropertyListRef propertyList, PIType vendorID, PIType propertyKey, + int32 propertyID, SPPropertyRef *property ); + +/** Internal */ +SPAPI SPErr SPNewPropertyListIterator( SPPropertyListRef propertyList, SPPropertyListIteratorRef *iter ); +/** Internal */ +SPAPI SPErr SPNextProperty( SPPropertyListIteratorRef iter, SPPropertyRef *property ); +/** Internal */ +SPAPI SPErr SPDeletePropertyListIterator( SPPropertyListIteratorRef iter ); + +/** Internal */ +SPAPI SPErr SPGetPropertyPIProperty( SPPropertyRef property, PIProperty **p ); +/** Internal */ +SPAPI SPErr SPGetPropertyRefCon( SPPropertyRef property, int32 *refCon ); +/** Internal */ +SPAPI SPErr SPGetPropertyCacheable( SPPropertyRef property, int32 *cacheable ); +/** Internal */ +SPAPI SPErr SPGetPropertyAllocatedByPlugin( SPPropertyRef property, int32 *allocatedByPlugin ); + +/** Internal */ +SPAPI SPBoolean SPHasMultiplePropertyLists(SPPropertyListRef propertyList); +/** Internal */ +SPAPI SPErr SPGetNextPropertyList(SPPropertyListRef propertyList, SPPropertyListRef *nextPropertyList); + +/** Internal */ +SPAPI SPErr SPFindPropertyLocal( SPPropertyListRef propertyList, PIType vendorID, + PIType propertyKey, int32 propertyID, SPPropertyRef *property ); + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPRuntme.h b/External/AE SDK/Headers/SP/SPRuntme.h new file mode 100644 index 00000000..8f6f6aa6 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPRuntme.h @@ -0,0 +1,500 @@ +/***********************************************************************/ +/* */ +/* SPRuntme.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPRuntime__ +#define __SPRuntime__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPAdapts.h" +#include "SPFiles.h" +#include "SPPlugs.h" +#include "SPStrngs.h" +#include "SPSuites.h" +#include "SPStrngs.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ + +#define kSPRuntimeSuite "SP Runtime Suite" +#define kSPRuntimeSuiteVersion 5 +#define kSPRuntimeSuiteXPlatVersion 6 + + +/******************************************************************************* + ** + ** Types + ** + **/ + +/* INTERNAL DOCS + * PICA makes callbacks into the host through the host procs. The host + * procs are filled in by the host and passed to Sweet Pea at SPInit(). + * + * hostData - data that is given back to each host proc when Sweet Pea + * calls it. Sweet Pea does nothing with it itself. + * + * extAllocate - implementation of the Block Suite's AllocateBlock() routine. + * It is identical to ANSI C malloc(). It returns a pointer to the + * beginning of the allocated block or NULL. + * + * extFree - implementation of the Block Suite's FreeBlock() routine. It is + * identical to ANSI C free(). Note that you can pass it NULL. + * + * extReallocate - implementation of the Block Suite's ReallocateBlock() + * routine. It is identical to ANSI C realloc(). It returns a pointer + * to the resized block or NULL. Note that you can pass it NULL or a + * newSize of 0. + * + * intAllocate, intFree, intReallocate - routines used by Sweet Pea for + * its own memory needs. You may want to allocate blocks differently + * with plug-ins and Sweet Pea. Plug-ins are unbounded in their memory + * needs, while Sweet Pea's memory usage can be approximated. + * + * startupNotify - called as each plug-in is started up. This is intended + * as a way to tell the user what's happening during start up. + * Note that plug-ins may start up at any time, not just during + * SPStartupPlugins(). + * + * shutdownNotify - called as each plug-in is shut down. Also intended as + * a way to let users know what's going on. + * + * assertTrap - called when a fatal assert is triggered. Sweet Pea does + * not expect execution to continue after an assert. + * + * throwTrap - called when an internal error is thrown. This can be used + * during debugging to catch errors as they happen. It should return + * to allow Sweet Pea to handle the error. + * + * + * To aid in getting Sweet Pea up and running quickly, you can set any of + * these to NULL and Sweet Pea will use a default implementation. However: + * you cannot mix your implementations of the memory routines with + * Sweet Pea's defaults. + * + * + * The string pool functions replace the default routines used internally + * and exported by the Strings suite. Because they are exported, the behaviors + * listed below should be followed. + * + * allocateStringPool - creates a new string pool instance. The host app and + * Sweet Pea have a string pool which can be used by a plug-in, or a plug-in + * can create its own. See the notes in SPStrngs.h on how the pool is + * implemented. + * The function should return kSPNoError if the pool is allocated successfully + * or kSPOutOfMemoryError if allocation fails. + * + * freeStringPool - disposes of the string pool and any associated memory. The + * funtion should return kSPNoError + * + * makeWString - the string pool keeps a list of added strings. When a new string is + * added with MakeWString(), the routine checks to see if it is already in the + * pool. If so, the address of the string instance in the pool is returned. If + * not, it will add it to the pool and return the address of the newly + * created string instance. The behavior is: + * + * if ( string == NULL ) + * *wString = NULL; + * returns kSPNoError; + * else if ( string in string pool ) + * *wString = found string; + * returns kSPNoError; + * else add string + * if successful + * *wString = new string; + * returns kSPNoError; + * else + * *wString = nil + * returns kSPOutOfMemoryError + * + * appStringPool - if the host application has already allocated a string pool to use, + * it's reference should be passed here. If this value is NULL, Sweet Pea will + * allocate the pool when initialized and dispose of it at termination. + * + * filterEvent - a function called for each event allowing the host to cancel it. + * The event type is indicative of what the filter is to do. A file validation + * is called before a directory entry is added to the file list (kAddFile). + * A plug-in validation before a file is checked for PiPL information (kAddPlugin); + * the host might examine the file name/type to determine whether it should be added. + * For these 'add' events the return value is TRUE if the item should be skipped + * or FALSE if should be should be added. The default filter proc, used (if NULL) + * is passed, will skip files/folders in ( ). + * The other event is kSuitesAvailable. It is called when the last suite adding + * plug-in (as determined by available PiPL information) has been added. This is + * a point at which the host can cancel the startup process; for instance, if the host + * requires a suite from a plug-in, this is the time to check for it. If the + * host returns TRUE, the startup process continues. If it returns FALSE, the + * plug-in startup is canceled and the host would likely terminate or startup in + * an alternate manner. + * + * overrideAddPlugins - if supplied, SP will call the host to create the runtime + * plug-in list. This occurs at SPStartupPlugins(). The function takes no parameters + * as it is up to the host to determine how to do this. For instance, the host can do + * this from cached data or, as SP would, from the file list. A returned error will + * stop the plug-in startup process. + * + * overrideStartup - a function called for each SP2 plug-in before it is sent the + * startup message. If the host returns FALSE, SP will startup the plug-in normal. + * If the host returns true, it is assumed that the host has handled the startup + * for the plug-in, so SP will not do anything for the plug-in. This is intended + * to be used with a plug-in caching scheme. + * The host would be responsible, for instance, for defining the cacheable + * information in the PiPL, adding it when the callback is made, and later issuing + * a startup message when the plug-in is actually needed (e.g. when a menu item + * is selected.) Two notes: don't forget to SetPluginStarted(), and make sure + * to use a string pooled char* to kSPInterfaceCaller and kSPInterfaceStartupSelector. + * + * resolveLink - Windows only. If the search for plug-ins is to recurse sub-folders, + * the host needs to suply this routine. When a .lnk file is encountered, the + * resolveLink host callback function will be called and should return a resolved path. + * This is a host callback due to OLE issues such as initialization, which the SP + * libary does not currently handle. If it returns an error code, the result will + * be ignored. + * + * getPluginAccess - Allows the host to set the plug-in access information. This would + * be used if, for instance, the host kept its own plug-in list (ala, Photoshop), but + * still needed these to be compatible with SPPlugins (e.g. whose accesses are used by ADM) + * + * memoryIsCritical - Mac only. Allows the host to indicate that memory is in a critical state + * (really low, but can't be purged because you are, say, shutdown.) + * If so and the plug-in load target heap is the app heap, when a plug-in fails to load + * SP will then try to load the plug-in into the system heap + */ + +/* These are passed in startup and shutdown host notify procs and the filter file proc. */ +/** A notification event type, that an adapter passes to the \c #SPStartupNotifyProc + and \c #SPShutdownNotifyProc when the associated plug-in is loaded or unloaded. + */ +typedef enum { + /** Sent to the \c #SPStartupNotifyProc after a file has been added as a plug-in. + The \c notifyData value is the plug-in object, an \c #SPPluginRef. */ + kAddFile, /* Internal: for filter file, received before a file is + added to a file list, notifyData is a pointer to the + SPPlatformFileSpecification */ + /** Sent to the \c #SPStartupNotifyProc after a plug-in has been added. + The \c notifyData value is the plug-in object, an \c #SPPluginRef. */ + kAddPlugin, /* Internal: for filter file, received before a file is + checked to see if it is a plugin, notifyData is the + files SPFileRef */ + /** Sent to the \c #SPStartupNotifyProc to specify a general message for the application splash screen. + The \c notifyData value is a pointer to a C string, char**. */ + kSetMessage, + /** Internal */ + kSuitesAvailable, /* Internal: used only by event filter to allow host to + check for suites it requires, notifyDatais NULL */ + /** Internal */ + kError, /* Internal: notifyData is SPErrorDataPtr*/ + /** Sent to the \c #SPStartupNotifyProc after the plug-in is started. + The \c notifyData value is the plug-in object, an \c #SPPluginRef. */ + kStartingupPlugin, /* Internal: for filter file, received before a file is + checked to see if it is a plugin, notifyData is the + files SPFileRef */ + kXPlatError, /* Internal: notifyData is SPXPlatErrorData */ + /** Sent to the \c #SPStartupNotifyProc after the plug-in is started. + The \c notifyData value is the plug-in object, an \c #SPPluginRef. */ + /** Internal */ + kNoEvent = 0xffffffff + } NotifyEvent; + +/** Internal */ +typedef void *(*SPAllocateProc)( size_t size, void *hostData ); +/** Internal */ +typedef void (*SPFreeProc)( void *block, void *hostData ); +/** Internal */ +typedef void *(*SPReallocateProc)( void *block, size_t newSize, void *hostData ); +/** Called by an adapter to inform the application that a plug-in is being started up. + The application uses this information to track the start-up process; for example, + to display a list of plug-ins being loaded. + @param event The notification event constant that identifies which event occurred. + @param notifyData A pointer to plug-in-defined initialization data. + @param hostData A pointer to application-defined initialization data. + @return Nothing. + */ +typedef void (*SPStartupNotifyProc)( NotifyEvent event, void *notifyData, void *hostData ); +/** Called by an adapter to inform the application that a plug-in is being shut down. + The application uses this information to track the shut-down process. + @param event The notificatin event. + @param notifyData A pointer to plug-in-defined termination data. + @param hostData A pointer to application-defined termination data. + @return Nothing. + */ +typedef void (*SPShutdownNotifyProc)( NotifyEvent event, void *notifyData, void *hostData ); +/** Internal */ +typedef void (*SPAssertTrapProc)( const char *failMessage, void *hostData ); +/** Internal */ +typedef void (*SPThrowTrapProc)( SPErr error, void *hostData ); +/** Internal */ +typedef void (*SPDebugTrapProc)( const char *debugMessage, void *hostData ); + +/** Internal */ +typedef SPAPI SPErr (*SPAllocateStringPoolProc)( SPStringPoolRef *pool ); +/** Internal */ +typedef SPAPI SPErr (*SPFreeStringPoolProc)( SPStringPoolRef stringPool ); +/** Internal */ +typedef SPAPI SPErr (*SPMakeWStringProc)( SPStringPoolRef stringPool, const char *string, + const char **wString ); + +/** Internal */ +typedef SPAPI SPErr (*SPGetHostAccessInfoProc)( SPPlatformAccessInfo *spHostAccessInfo ); + +/** Internal */ +typedef SPAPI SPBoolean (*SPFilterEventProc)( NotifyEvent event, const void *eventData ); +/** Internal */ +typedef SPAPI SPErr (*SPAddPluginsProc)( void ); +/** Internal */ +typedef SPAPI SPBoolean (*SPOverrideStartupProc)( SPPluginRef currentPlugin ); + +#if defined(WIN_ENV) || defined(ANDROID_ENV) +/** Internal */ +typedef SPAPI SPErr (*SPResolveLinkProc)(const char *shortcutFile, char *resolvedPath); +#endif + +/** Internal */ +typedef SPAPI SPErr (*GetNativePluginAccessProc)(SPPluginRef plugin, SPAccessRef *access); + +/** Internal */ +typedef SPAPI SPBoolean (*MemoryIsCriticalProc)( void ); + +/** Callback procedures provided to PICA by the application. + Plug-ins do not use these, except for adapters, which + call the initialization and termination procedures. + @see \c #SPRuntimeSuite::GetRuntimeHostFileSpec() */ +typedef struct SPHostProcs { + + void *hostData; + + SPAllocateProc extAllocate; + SPFreeProc extFree; + SPReallocateProc extReallocate; + + SPAllocateProc intAllocate; + SPFreeProc intFree; + SPReallocateProc intReallocate; + /** Plug-in initialization procedure */ + SPStartupNotifyProc startupNotify; + /** Plug-in termination procedure */ + SPShutdownNotifyProc shutdownNotify; + + SPAssertTrapProc assertTrap; + SPThrowTrapProc throwTrap; + SPDebugTrapProc debugTrap; + + SPAllocateStringPoolProc allocateStringPool; + SPFreeStringPoolProc freeStringPool; + SPMakeWStringProc makeWString; + SPStringPoolRef appStringPool; + + SPFilterEventProc filterEvent; + SPAddPluginsProc overrideAddPlugins; + SPOverrideStartupProc overridePluginStartup; + +#if defined(WIN_ENV) || defined(ANDROID_ENV) + SPResolveLinkProc resolveLink; +#endif + + GetNativePluginAccessProc getPluginAccess; + +#ifdef MAC_ENV + // enable second-chance plugin loading for success-critical situations + MemoryIsCriticalProc memoryIsCritical; +#endif + +} SPHostProcs; + + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + This suite allows you to obtain specific references to the + PICA global lists and string pool. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPRuntimeSuite and \c #kSPRuntimeSuiteVersion. + */ +typedef struct SPRuntimeSuite { + /** Retrieves the PICA global string pool. + @param stringPool [out] A buffer in which to return the string-pool object. + @see \c #SPStringsSuite + */ + SPAPI SPErr (*GetRuntimeStringPool)( SPStringPoolRef *stringPool ); + /** Retrieves the PICA global suite list. + @param suiteList [out] A buffer in which to return the list object. + @see \c #SPSuitesSuite + */ + SPAPI SPErr (*GetRuntimeSuiteList)( SPSuiteListRef *suiteList ); + /** Retrieves the PICA global file list. + @param fileList [out] A buffer in which to return the list object. + @see \c #SPFilesSuite + */ + SPAPI SPErr (*GetRuntimeFileList)( SPFileListRef *fileList ); + /** Retrieves the PICA global plug-in list. + @param pluginList [out] A buffer in which to return the list object. + @see \c #SPPluginsSuite + */ + SPAPI SPErr (*GetRuntimePluginList)( SPPluginListRef *pluginList ); + /** Retrieves the PICA global adapter list. + @param adapterList [out] A buffer in which to return the list object. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*GetRuntimeAdapterList)( SPAdapterListRef *adapterList ); + /** Retrieves the block of function pointers supplied to PICA by the + application, which contains memory management routines, notification routines, + exception handling, and string pool routines. + + A plug-in does not normally call the host functions directly; you + can use the PICA suite functions for most operations. An adapter, however, + uses the host functions for start-up and shut-down notification. + @param hostProcs [out] A buffer in which to return a pointer to the + block of function pointers. + */ + SPAPI SPErr (*GetRuntimeHostProcs)( SPHostProcs **hostProcs ); + /** Retrieves the location of the application's plug-in folder. + @param pluginFolder [out] A buffer in which to return the + file specification for the directory that contains plug-ins. + */ + SPAPI SPErr (*GetRuntimePluginsFolder)( SPPlatformFileSpecification *pluginFolder ); + /** Retrieves the location of the application's executable file. + @param hostFileSpec [out] A buffer in which to return the + file specification for the application's executable file. + */ + SPAPI SPErr (*GetRuntimeHostFileSpec)( SPPlatformFileSpecification *hostFileSpec ); +} SPRuntimeSuite; + + + +/******************************************************************************* + ** + ** Suite + ** + **/ +/** @ingroup Suites + This suite allows you to obtain specific references to the + PICA global lists and string pool using the new XPlatFileSpec + rather than the old SPPlatformFileSpecification. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPRuntimeSuite and \c #kSPRuntimeSuiteXPlatVersion. + */ +typedef struct SPXPlatRuntimeSuite { + /** Retrieves the PICA global string pool. + @param stringPool [out] A buffer in which to return the string-pool object. + @see \c #SPStringsSuite + */ + SPAPI SPErr (*GetRuntimeStringPool)( SPStringPoolRef *stringPool ); + /** Retrieves the PICA global suite list. + @param suiteList [out] A buffer in which to return the list object. + @see \c #SPSuitesSuite + */ + SPAPI SPErr (*GetRuntimeSuiteList)( SPSuiteListRef *suiteList ); + /** Retrieves the PICA global file list. + @param fileList [out] A buffer in which to return the list object. + @see \c #SPFilesSuite + */ + SPAPI SPErr (*GetRuntimeFileList)( SPFileListRef *fileList ); + /** Retrieves the PICA global plug-in list. + @param pluginList [out] A buffer in which to return the list object. + @see \c #SPPluginsSuite + */ + SPAPI SPErr (*GetRuntimePluginList)( SPPluginListRef *pluginList ); + /** Retrieves the PICA global adapter list. + @param adapterList [out] A buffer in which to return the list object. + @see \c #SPAdaptersSuite + */ + SPAPI SPErr (*GetRuntimeAdapterList)( SPAdapterListRef *adapterList ); + /** Retrieves the block of function pointers supplied to PICA by the + application, which contains memory management routines, notification routines, + exception handling, and string pool routines. + + A plug-in does not normally call the host functions directly; you + can use the PICA suite functions for most operations. An adapter, however, + uses the host functions for start-up and shut-down notification. + @param hostProcs [out] A buffer in which to return a pointer to the + block of function pointers. + */ + SPAPI SPErr (*GetRuntimeHostProcs)( SPHostProcs **hostProcs ); + /** Retrieves the location of the application's plug-in folder. + @param pluginFolder [out] A buffer in which to return the + file specification for the directory that contains plug-ins. + */ + SPAPI SPErr (*XPlatGetRuntimePluginsFolder)( XPlatFileSpec *pluginFolder ); + /** Retrieves the location of the application's executable file. + @param hostFileSpec [out] A buffer in which to return the + file specification for the application's executable file. + */ + SPAPI SPErr (*XPlatGetRuntimeHostFileSpec)( XPlatFileSpec *hostFileSpec ); +} SPXPlatRuntimeSuite; + + +/** Internal */ +SPAPI SPErr SPGetRuntimeStringPool( SPStringPoolRef *stringPool ); +/** Internal */ +SPAPI SPErr SPGetRuntimeSuiteList( SPSuiteListRef *suiteList ); +/** Internal */ +SPAPI SPErr SPGetRuntimeFileList( SPFileListRef *fileList ); +/** Internal */ +SPAPI SPErr SPGetRuntimePluginList( SPPluginListRef *pluginList ); +/** Internal */ +SPAPI SPErr SPGetRuntimeAdapterList( SPAdapterListRef *adapterList ); +/** Internal */ +SPAPI SPErr SPGetRuntimeHostProcs( SPHostProcs **hostProcs ); +/** Internal */ +SPAPI SPErr SPGetRuntimePluginsFolder( SPPlatformFileSpecification *pluginFolder ); +/** Internal */ +SPAPI SPErr SPXPlatGetRuntimePluginsFolder( XPlatFileSpec *pluginFolder ); +/** Internal */ +SPAPI SPErr SPGetRuntimeHostFileSpec( SPPlatformFileSpecification *hostFileSpec ); +/** Internal */ +SPAPI SPErr SPXPlatGetRuntimeHostFileSpec( XPlatFileSpec *hostFileSpec ); + +/** Internal */ +typedef struct +{ + SPAPI SPErr (*SPAcquireSuiteFunc)( SPSuiteListRef suiteList, const char *name, int32 apiVersion, int32 internalVersion, const void **suiteProcs ); + SPAPI SPErr (*SPReleaseSuiteFunc)( SPSuiteListRef suiteList, const char *name, int32 apiVersion, int32 internalVersion ); + SPErr (*spAllocateBlockFunc)( SPAllocateProc allocateProc, size_t size, const char *debug, void **block ); + SPErr (*spFreeBlockFunc)( SPFreeProc freeProc, void *block ); + SPErr (*spReallocateBlockFunc)( SPReallocateProc reallocateProc, void *block, size_t newSize, const char *debug, void **newblock ); + SPHostProcs *gProcs; +} SPBasicFuncStruct; + +/** Internal */ +void SetUpBasicFuncs(SPBasicFuncStruct *inStruct); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPSTSPrp.h b/External/AE SDK/Headers/SP/SPSTSPrp.h new file mode 100644 index 00000000..956173b3 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPSTSPrp.h @@ -0,0 +1,52 @@ +/***********************************************************************/ +/* */ +/* SPSTSPrp.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPSTSPrp__ +#define __SPSTSPrp__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPPiPL.h" + + +/******************************************************************************* + ** + ** Constants + ** + **/ + +/** Internal */ +#define PISuperTopSecretProperty 'StsP' +/** Internal */ +#define PISuperTopSecretValue 'clEn' + + +/******************************************************************************* + ** + ** Types + ** + **/ + + +#endif diff --git a/External/AE SDK/Headers/SP/SPStrngs.h b/External/AE SDK/Headers/SP/SPStrngs.h new file mode 100644 index 00000000..ebe9bed4 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPStrngs.h @@ -0,0 +1,132 @@ +/***********************************************************************/ +/* */ +/* SPStrngs.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPStrings__ +#define __SPStrings__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** PICA strings suite name */ +#define kSPStringsSuite "SP Strings Suite" +/** PICA strings suite version */ +#define kSPStringsSuiteVersion 2 + +/** Globally available PICA strings resources. + @see \c #SPRuntimeSuite::GetRuntimeStringPool(). */ +#define kSPRuntimeStringPool ((SPStringPoolRef)NULL) + + +/******************************************************************************* + ** + ** Types + ** + **/ + +/* If you override the default string pool handler by defining host proc routines, + * how the string pool memory allocation and searching is done is up to you. As an example, + * the structure below is similar to what Sweet Pea uses for its default string pool + * routines. The pool is a sorted list of strings of number count, kept in memory referenced + * by the heap field. + * + * typedef struct SPStringPool { + * + * SPPoolHeapRef heap; + * int32 count; + * + * } SPStringPool; + */ + +/** Opaque reference to a string pool. Access with the \c #SPStringsSuite. */ +typedef struct SPStringPool *SPStringPoolRef; + + +/******************************************************************************* + ** + ** Suite + ** + **/ + +/** @ingroup Suites + This suite allows you to work with the PICA string pool. + + PICA manages a string pool, which provides an efficient central + storage space for C strings. When a string is placed in the pool, PICA + checks whether it already exists in the pool, and if so, returns a + pointer to the existing string. If not, it copies the string into the pool, + and returns a pointer to the copy. + + This mechanisms atomizes the strings. Because each string exists in + only one place, strings can be compared by address, rather than character + by character, and string searches are made much more efficient. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPStringsSuite and \c #kSPStringsSuiteVersion. + */ +typedef struct SPStringsSuite { + + /** Creates a new string pool and allocates an initial block of memory for + its strings. You can also access PICA's global string pool, + using \c #SPRuntimeSuite::GetRuntimeStringPool(). + @param stringPool [out] A buffer in which to return the new string pool reference. + */ + SPAPI SPErr (*AllocateStringPool)( SPStringPoolRef *stringPool ); + /** Frees the memory used for a string pool created with \c #AllocateStringPool(). + Do not free the global string pool (\c #kSPRuntimeStringPool). + @param stringPool The string pool reference. + */ + SPAPI SPErr (*FreeStringPool)( SPStringPoolRef stringPool ); + /** Adds a string to a string pool, or, if the string has already been added + to the pool, retrieves a reference to the pooled string. + @param stringPool The string pool reference. + @param string The string. + @param wString [out] A buffer in which to return the address of + the atomized string in the pool. + */ + SPAPI SPErr (*MakeWString)( SPStringPoolRef stringPool, const char *string, const char **wString ); + +} SPStringsSuite; + + +SPAPI SPErr SPAllocateStringPool( SPStringPoolRef *stringPool ); +SPAPI SPErr SPFreeStringPool( SPStringPoolRef stringPool ); +SPAPI SPErr SPMakeWString( SPStringPoolRef stringPool, const char *string, const char **wString ); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPSuites.h b/External/AE SDK/Headers/SP/SPSuites.h new file mode 100644 index 00000000..17b8dc93 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPSuites.h @@ -0,0 +1,284 @@ +/***********************************************************************/ +/* */ +/* SPSuites.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + +#ifndef __SPSuites__ +#define __SPSuites__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPTypes.h" +#include "SPAccess.h" +#include "SPPlugs.h" +#include "SPStrngs.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************************************************************************* + ** + ** Constants + ** + **/ +/** PICA suite-management suite name */ +#define kSPSuitesSuite "SP Suites Suite" +/** PICA suite-management suite version */ +#define kSPSuitesSuiteVersion 2 + +/** Internal */ +#define kSPLatestInternalVersion 0 + +/** PICA global list of available suites. + @see \c #SPRuntimeSuite::GetRuntimeSuiteList(). */ +#define kSPRuntimeSuiteList ((SPSuiteListRef)NULL) + + +/******************************************************************************* + ** + ** Types + ** + **/ + +/** Opaque reference to a suite object. Access with the \c #SPSuitesSuite. */ +typedef struct SPSuite *SPSuiteRef; +/** A list of suite objects. Create with + \c #SPSuitesSuite::AllocateSuiteList(), or use + the global list, \c #kSPRuntimeSuiteList. */ +typedef struct SPSuiteList *SPSuiteListRef; +/** An iterator object for examining a suite list. + See \c #SPSuitesSuite::NewSuiteListIterator(). */ +typedef struct SPSuiteListIterator *SPSuiteListIteratorRef; + + +/******************************************************************************* + ** + ** Suite + ** + **/ + +/** @ingroup Suites + This suite allows you to create, manage, and access PICA function suites. + + A suite associates a name and version number with a pointer to an array of + function pointers. The functions generally haves some common purpose, such as + accessing a data type, and are used by plug-ins to interact with PICA, with + the application, and with each other. + + In order to use a function in a suite, you must first \e acquire it. + This suite provides the low-level function \c #AcquireSuite(), + but a plug-in more typically uses the \c #SPBasicSuite, which is provided + with every message to a plug-in. + + PICA creates a global suite list at application startup, which contains + references to every suite added by PICA, the application, or other plug-ins. + You can use this suite to create and manage additional suite lists. + + \li Acquire this suite using \c #SPBasicSuite::AcquireSuite() with the constants + \c #kSPSuitesSuite and \c #kSPSuitesSuiteVersion. + */ +typedef struct SPSuitesSuite { + + /** Creates a new suite list. You can also access PICA's global suite list, + using \c #SPRuntimeSuite::GetRuntimeSuiteList(). + @param stringPool The string pool in which to keep suite names. + @param plugins <> + @param suiteList [out] A buffer in which to return the new list object. + */ + SPAPI SPErr (*AllocateSuiteList)( SPStringPoolRef stringPool, SPPluginListRef plugins, + SPSuiteListRef *suiteList ); + + /** Frees a list of suites allocated with \c #AllocateSuiteList(), and + also frees any entries in the list. Do not free the global list (\c #kSPRuntimeSuiteList). + @param suiteList The suite list object. + */ + SPAPI SPErr (*FreeSuiteList)( SPSuiteListRef suiteList ); + + /** Creates a new plug-in function suite and adds it to a suite list. + Identifying constants for the suite name and version must be made + available in a public header file. + @param suiteList The suite list object, or \c NULL to use the + global list. + @param host The plug-in object providing the suite. + @param name The unique name of the suite. + @param apiVersion The public version number of the suite. + @param internalVersion The internal version number of the suite. + @param suiteProcs A pointer to a structure containing the function pointers + for the suite. + @param suite [out] A buffer in which to return the new suite object. + */ + SPAPI SPErr (*AddSuite)( SPSuiteListRef suiteList, SPPluginRef host, const char *name, + int32 apiVersion, int32 internalVersion, const void *suiteProcs, SPSuiteRef *suite ); + + /** Acquires a function suite from a suite list. Loads the suite if necessary, + and increments its reference count. This function differs from + \c #SPBasicSuite::AcquireSuite() in that you can specify a suite list + and internal version number. + @param suiteList The suite list object, or \c NULL to use the + global list. + @param name The suite name. + @param version The public suite version number. + @param internalVersion The internal suite version number. + @param suiteProcs [out] A buffer in which to return a pointer to the + suite function pointer array. + */ + SPAPI SPErr (*AcquireSuite)( SPSuiteListRef suiteList, const char *name, int32 apiVersion, + int32 internalVersion, const void **suiteProcs ); + + /** Decrements the reference count of a suite in a suite list and unloads it when the + reference count reaches 0. + @param suiteList The suite list object, or \c NULL to use the + global list. + @param name The suite name. + @param version The public suite version number. + @param internalVersion The internal suite version number. + */ + SPAPI SPErr (*ReleaseSuite)( SPSuiteListRef suiteList, const char *name, int32 apiVersion, + int32 internalVersion ); + + /** Retrieves a suite from a suite list. + @param suiteList The suite list object, or \c NULL to use the + global list. + @param name The suite name. + @param version The public suite version number. + @param internalVersion The internal suite version number. + @param suiteProcs [out] A buffer in which to return the suite object, or + \c NULL if no matching suite is found in the list. + */ + SPAPI SPErr (*FindSuite)( SPSuiteListRef suiteList, const char *name, int32 apiVersion, + int32 internalVersion, SPSuiteRef *suite ); + + /** Creates an iterator object with which to traverse a suite list. + The iterator is initially set to the first suite in the list. + @param suiteList The suite list object, or \c NULL to use the + global list. + @param iter [out] A buffer in which to return the new iterator object. + @see \c #NextSuite(), \c #DeleteSuiteListIterator() + */ + SPAPI SPErr (*NewSuiteListIterator)( SPSuiteListRef suiteList, SPSuiteListIteratorRef *iter ); + /** Retrieves the current suite and advances a suite-list iterator to the next suite in the list. + @param iter The suite-list iterator object. + @param suite [out] A buffer in which to return the current suite object, \c NULL + if the end of the list has been reached. + @see \c #NewSuiteListIterator(), + */ + SPAPI SPErr (*NextSuite)( SPSuiteListIteratorRef iter, SPSuiteRef *suite ); + /** Frees a suite-list iterator that is no longer needed. + @param iter The suite-list iterator object. + @see \c #NewSuiteListIterator(), + */ + SPAPI SPErr (*DeleteSuiteListIterator)( SPSuiteListIteratorRef iter ); + + /** Retrieves the plug-in that provides a suite. + @param suite The suite object. + @param plugin [out] A buffer in which to return the plug-in object. + */ + SPAPI SPErr (*GetSuiteHost)( SPSuiteRef suite, SPPluginRef *plugin ); + /** Retrieves the unique name of a suite. + @param suite The suite object. + @param name [out] A buffer in which to return the name string. + */ + SPAPI SPErr (*GetSuiteName)( SPSuiteRef suite, const char **name ); + /** Retrieves the public version number of a suite. + @param suite The suite object. + @param version [out] A buffer in which to return the public version number. + */ + SPAPI SPErr (*GetSuiteAPIVersion)( SPSuiteRef suite, int32 *version ); + /** Retrieves the internal version number of a suite. + @param suite The suite object. + @param version [out] A buffer in which to return the internal version number. + */ + SPAPI SPErr (*GetSuiteInternalVersion)( SPSuiteRef suite, int32 *version ); + /** Retrieves the function pointer array of a suite. + @param suite The suite object. + @param suiteProcs [out] A buffer in which to return a pointer + to the function pointer array. + */ + SPAPI SPErr (*GetSuiteProcs)( SPSuiteRef suite, const void **suiteProcs ); + /** Retrieves the current reference count of a suite. + @param suite The suite object. + @param count [out] A buffer in which to return the reference count. + */ + SPAPI SPErr (*GetSuiteAcquireCount)( SPSuiteRef suite, int32 *count ); + +} SPSuitesSuite; + + +/** Internal */ +SPAPI SPErr SPAllocateSuiteList( SPStringPoolRef stringPool, SPPluginListRef plugins, + SPSuiteListRef *suiteList ); + +/** Internal */ +SPAPI SPErr SPFreeSuiteList( SPSuiteListRef suiteList ); + +/** Internal */ +SPAPI SPErr SPAddSuite( SPSuiteListRef suiteList, SPPluginRef host, const char *name, + int32 apiVersion, int32 internalVersion, const void *suiteProcs, SPSuiteRef *suite ); + +/** Internal */ +SPAPI SPErr SPAcquireSuite( SPSuiteListRef suiteList, const char *name, int32 apiVersion, + int32 internalVersion, const void **suiteProcs ); + +/** Internal */ +SPAPI SPErr SPReleaseSuite( SPSuiteListRef suiteList, const char *name, int32 apiVersion, + int32 internalVersion ); + +/** Internal */ +SPAPI SPErr SPFindSuite( SPSuiteListRef suiteList, const char *name, int32 apiVersion, + int32 internalVersion, SPSuiteRef *suite ); + +/** Internal */ +SPAPI SPErr SPNewSuiteListIterator( SPSuiteListRef suiteList, SPSuiteListIteratorRef *iter ); +/** Internal */ +SPAPI SPErr SPNextSuite( SPSuiteListIteratorRef iter, SPSuiteRef *suite ); +/** Internal */ +SPAPI SPErr SPDeleteSuiteListIterator( SPSuiteListIteratorRef iter ); + +/** Internal */ +SPAPI SPErr SPGetSuiteHost( SPSuiteRef suite, SPPluginRef *plugin ); +/** Internal */ +SPAPI SPErr SPGetSuiteName( SPSuiteRef suite, const char **name ); +/** Internal */ +SPAPI SPErr SPGetSuiteAPIVersion( SPSuiteRef suite, int32 *version ); +/** Internal */ +SPAPI SPErr SPGetSuiteInternalVersion( SPSuiteRef suite, int32 *version ); +/** Internal */ +SPAPI SPErr SPGetSuiteProcs( SPSuiteRef suite, const void **suiteProcs ); +/** Internal */ +SPAPI SPErr SPGetSuiteAcquireCount( SPSuiteRef suite, int32 *count ); + + +/******************************************************************************* + ** + ** Errors + ** + **/ + +#include "SPErrorCodes.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/External/AE SDK/Headers/SP/SPTypes.h b/External/AE SDK/Headers/SP/SPTypes.h new file mode 100644 index 00000000..182c0810 --- /dev/null +++ b/External/AE SDK/Headers/SP/SPTypes.h @@ -0,0 +1,175 @@ +/***********************************************************************/ +/* */ +/* SPTypes.h */ +/* */ +/* Copyright 1995-2006 Adobe Systems Incorporated. */ +/* All Rights Reserved. */ +/* */ +/* Patents Pending */ +/* */ +/* NOTICE: All information contained herein is the property of Adobe */ +/* Systems Incorporated. Many of the intellectual and technical */ +/* concepts contained herein are proprietary to Adobe, are protected */ +/* as trade secrets, and are made available only to Adobe licensees */ +/* for their internal use. Any reproduction or dissemination of this */ +/* software is strictly forbidden unless prior written permission is */ +/* obtained from Adobe. */ +/* */ +/***********************************************************************/ + + +/** + + These are the basic declarations used by Sweet Pea. + + **/ + + +#ifndef __SPTypes__ +#define __SPTypes__ + + +/******************************************************************************* + ** + ** Imports + ** + **/ + +#include "SPConfig.h" + + +/* + * You can replace SPTypes.h with your own. Define OTHER_SP_TYPES_H on the + * command line or in SPConfig.h to be the name of the replacement file. + * + * Example: + * + * #define OTHER_SP_TYPES_H "MySPTypes.h" + * #include "SPBasic.h" // for example + * + * Sweet Pea depends on TRUE, FALSE, SPErr, etc. Your replacement must + * define them. + */ + +#ifdef OTHER_SP_TYPES_H +#include OTHER_SP_TYPES_H +#else + + +/******************************************************************************* + ** + ** Constants + ** + **/ + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef NULL + +#ifdef MAC_ENV +#if !defined(__cplusplus) && (defined(__SC__) || defined(THINK_C)) +#define NULL ((void *) 0) +#else +#define NULL 0 +#endif +#endif + +#ifdef WIN_ENV +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif + +#endif + + +/* + * SPAPI is placed in front of procedure declarations in the API. On the Mac + * it used to be 'pascal', which forced consistent calling conventions across different + * compilers. No longer needed. On Windows it's nothing. + * + * Example: + * + * SPAPI void *SPAllocateBlock( int32 size, const char *debug, SPErr *error ); + * + */ + +#if defined(MAC_ENV) || defined(__ANDROID__) || defined(__LINUX__) || defined (__EMSCRIPTEN__) || defined(SIMULATED_WASM) +#if defined(__GNUC__) +#define SPAPI +#else +#define SPAPI pascal +#endif +#endif + +#ifdef WIN_ENV +#define SPAPI +#endif + +#include "PSIntTypes.h" + +typedef uint8 SPUInt8; +typedef uint16 SPUInt16; +typedef uint32 SPUInt32; + +typedef int32 SPInt32; + +#if defined(MAC_ENV) || defined(__ANDROID__) || defined(__LINUX__) || defined (__EMSCRIPTEN__) || defined(SIMULATED_WASM) + +/* SPBoolean is the same a Macintosh Boolean. */ +typedef uint8 SPBoolean; + +#endif + +#ifdef WIN_ENV + +/* SPBoolean is the same a Windows BOOL. */ +typedef int32 SPBoolean; + +#endif + + +/******************************************************************************* + ** + ** Error Handling + ** + **/ + +/* + * Error codes in Sweet Pea are C strings, with the exception of the code for + * no error, which is NULL. The error can first be compared with kSPNoError to + * test if the function succeeded. If it is not NULL then the error can be + * string-compared with predefined error strings. + * + * Example: + * + * SPErr error = kSPNoError; + * + * block = SPAllocateBlock( size, debug, &error ); + * if ( error != kSPNoError ) { + * if ( strcmp( error, kSPOutOfMemoryError ) == 0 ) + * FailOutOfMemory(); + * ... + * } + */ + +typedef int32 SPErr; + +/* + * kSPNoError and kSPUnimplementedError are universal. Other error codes should + * be defined in the appropriate header files. + */ + +#include "SPErrorCodes.h" + +#endif /* OTHER_SP_TYPES_H */ + +#endif diff --git a/External/AE SDK/Headers/SP/artemis/config/platform.hpp b/External/AE SDK/Headers/SP/artemis/config/platform.hpp new file mode 100755 index 00000000..5d128c4a --- /dev/null +++ b/External/AE SDK/Headers/SP/artemis/config/platform.hpp @@ -0,0 +1,114 @@ +// +// ADOBE CONFIDENTIAL +// __________________ +// +// Copyright 2016 Adobe +// All Rights Reserved. +// +// NOTICE: All information contained herein is, and remains +// the property of Adobe and its suppliers, if any. The intellectual +// and technical concepts contained herein are proprietary to Adobe +// and its suppliers and are protected by all applicable intellectual +// property laws, including trade secret and copyright laws. +// Dissemination of this information or reproduction of this material +// is strictly forbidden unless prior written permission is obtained +// from Adobe. +// + +#ifndef ARTEMIS_PLATFORM_HPP +#define ARTEMIS_PLATFORM_HPP + +/* + The ARTEMIS_PLATFORM() macro is used to conditionalize code based on platform or platform + attibutes. + + It is used as: + + #if ARTEMIS_PLATFORM(MACOS) + #endif + + The attributes currently create a hierarchy from general to specific, items lower in the + hierarchy imply their parent are defined as '1', all others are '0'. + + This graph may eventually become a DAG. Higher level nodes represent a set of services that the + lower level nodes have in common. As such, it should rarely be necessary to write an expression + using more than one of these terms. If you find yourself doing so, please name the common + service and add the flag. + + An unqualified else clause should only be written entirely in terms of standard constructs that + has no platform dependencies and should not assume that 'not X' implies some other 'Y'. + + POSIX - any Posix compliant platform + APPLE - any Apple platform + MACOS - compiled for macOS + IOS - compiled for iOS + LINUX - compiled for Linux + ANDROID - compiled for Android + MICROSOFT - any Microsoft platform + UWP - Compiled for UWP + WIN32 - Compiled for Win32 +*/ +#define ARTEMIS_PLATFORM(X) (ARTEMIS_PRIVATE_PLATFORM_##X()) + +/**************************************************************************************************/ + +// The *_PRIVATE_* macros are just that. Don't use them directly. + +#define ARTEMIS_PRIVATE_PLATFORM_ANDROID() 0 +#define ARTEMIS_PRIVATE_PLATFORM_WEB() 0 +#define ARTEMIS_PRIVATE_PLATFORM_APPLE() 0 +#define ARTEMIS_PRIVATE_PLATFORM_IOS() 0 +#define ARTEMIS_PRIVATE_PLATFORM_LINUX() 0 +#define ARTEMIS_PRIVATE_PLATFORM_MACOS() 0 +#define ARTEMIS_PRIVATE_PLATFORM_MICROSOFT() 0 +#define ARTEMIS_PRIVATE_PLATFORM_POSIX() 0 +#define ARTEMIS_PRIVATE_PLATFORM_UWP() 0 +#define ARTEMIS_PRIVATE_PLATFORM_WIN32() 0 + +#if defined(__ANDROID__) + #undef ARTEMIS_PRIVATE_PLATFORM_POSIX + #define ARTEMIS_PRIVATE_PLATFORM_POSIX() 1 + #undef ARTEMIS_PRIVATE_PLATFORM_ANDROID + #define ARTEMIS_PRIVATE_PLATFORM_ANDROID() 1 +#elif defined(_WIN32) + #include // for #define WINVER + #include + + #undef ARTEMIS_PRIVATE_PLATFORM_MICROSOFT + #define ARTEMIS_PRIVATE_PLATFORM_MICROSOFT() 1 + + #if defined(WINAPI_FAMILY) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + #undef ARTEMIS_PRIVATE_PLATFORM_UWP + #define ARTEMIS_PRIVATE_PLATFORM_UWP() 1 + #else + #undef ARTEMIS_PRIVATE_PLATFORM_WIN32 + #define ARTEMIS_PRIVATE_PLATFORM_WIN32() 1 + #endif +#elif defined(__APPLE__) && !defined (__SIMULATED_WASM__) + #include "TargetConditionals.h" + + #undef ARTEMIS_PRIVATE_PLATFORM_POSIX + #define ARTEMIS_PRIVATE_PLATFORM_POSIX() 1 + #undef ARTEMIS_PRIVATE_PLATFORM_APPLE + #define ARTEMIS_PRIVATE_PLATFORM_APPLE() 1 + + #if TARGET_OS_SIMULATOR || TARGET_OS_IPHONE + #undef ARTEMIS_PRIVATE_PLATFORM_IOS + #define ARTEMIS_PRIVATE_PLATFORM_IOS() 1 + #elif TARGET_OS_MAC + #undef ARTEMIS_PRIVATE_PLATFORM_MACOS + #define ARTEMIS_PRIVATE_PLATFORM_MACOS() 1 + #endif +#elif defined(__LINUX__) + #undef ARTEMIS_PRIVATE_PLATFORM_POSIX + #define ARTEMIS_PRIVATE_PLATFORM_POSIX() 1 + #undef ARTEMIS_PRIVATE_PLATFORM_LINUX + #define ARTEMIS_PRIVATE_PLATFORM_LINUX() 1 +#elif defined(__EMSCRIPTEN__) || defined (__SIMULATED_WASM__) + #undef ARTEMIS_PRIVATE_PLATFORM_POSIX + #define ARTEMIS_PRIVATE_PLATFORM_POSIX() 1 + #undef ARTEMIS_PRIVATE_PLATFORM_WEB + #define ARTEMIS_PRIVATE_PLATFORM_WEB() 1 +#endif + +#endif // ARTEMIS_PLATFORM_HPP diff --git a/External/AE SDK/Headers/SP/photoshop/config/platform.hpp b/External/AE SDK/Headers/SP/photoshop/config/platform.hpp new file mode 100755 index 00000000..e9f9da0b --- /dev/null +++ b/External/AE SDK/Headers/SP/photoshop/config/platform.hpp @@ -0,0 +1,95 @@ +// +// ADOBE CONFIDENTIAL +// __________________ +// +// Copyright 2016 Adobe +// All Rights Reserved. +// +// NOTICE: All information contained herein is, and remains +// the property of Adobe and its suppliers, if any. The intellectual +// and technical concepts contained herein are proprietary to Adobe +// and its suppliers and are protected by all applicable intellectual +// property laws, including trade secret and copyright laws. +// Dissemination of this information or reproduction of this material +// is strictly forbidden unless prior written permission is obtained +// from Adobe. +// + +#ifndef PHOTOSHOP_PLATFORM_HPP +#define PHOTOSHOP_PLATFORM_HPP + +/**************************************************************************************************/ + +#ifdef RC_INVOKED // Windows Resource Compiler + + // #error Windows resource compiler - do not include this file! + +#else + +/**************************************************************************************************/ + +#include + +/**************************************************************************************************/ + +// alias to the private artemis macros via concatenation because calling PHOTOSHOP_PLATFORM(X) errors +// when PHOTOSHOP_PLATFORM(X) = (ARTEMIS_PLATFORM(X)) when the value of X is itself defined as a +// macro. This is especially problematic for WIN32. + +#define PHOTOSHOP_PLATFORM(X) (ARTEMIS_PRIVATE_PLATFORM_##X()) +#define PHOTOSHOP_ARCH(X) (ARTEMIS_PRIVATE_ARCH_##X()) +#define PHOTOSHOP_BITS(X) (ARTEMIS_PRIVATE_BITS_##X()) +#define PHOTOSHOP_CPU(A,B) (ARTEMIS_PRIVATE_ARCH_##A() && ARTEMIS_PRIVATE_BITS_##B()) +#define PHOTOSHOP_PLATFORM_ARCH(X, A) (ARTEMIS_PRIVATE_PLATFORM_##X() && ARTEMIS_PRIVATE_ARCH_##A()) +#define PHOTOSHOP_PLATFORM_ARCH_BITS(X, A, B) (ARTEMIS_PRIVATE_PLATFORM_##X() && ARTEMIS_PRIVATE_ARCH_##A() && ARTEMIS_PRIVATE_BITS_##B()) + +// Really, these need to die a horrible death. However, they are still required +// for rez_defines.h (See the comment in rez_platform.h for more details.) +#define PS_PLATFORM_ANDROID PHOTOSHOP_PLATFORM(ANDROID) +#define PS_PLATFORM_WEB PHOTOSHOP_PLATFORM(WEB) +#define PS_PLATFORM_APPLE PHOTOSHOP_PLATFORM(APPLE) +#define PS_PLATFORM_IOS PHOTOSHOP_PLATFORM(IOS) +#define PS_PLATFORM_LINUX PHOTOSHOP_PLATFORM(LINUX) +#define PS_PLATFORM_MACOS PHOTOSHOP_PLATFORM(MACOS) +#define PS_PLATFORM_MS PHOTOSHOP_PLATFORM(MICROSOFT) +#define PS_PLATFORM_POSIX PHOTOSHOP_PLATFORM(POSIX) +#define PS_PLATFORM_UWP PHOTOSHOP_PLATFORM(UWP) +#define PS_PLATFORM_WIN32 PHOTOSHOP_PLATFORM(WIN32) + +// Is there a reason why the above are replicated here? +#ifndef PS_OS_WIN // Some Windows projects define this in their props file + #define PS_OS_WIN PHOTOSHOP_PLATFORM(MICROSOFT) +#endif +#ifndef PS_OS_IOS // Some Windows projects define this in their props file + #define PS_OS_IOS PHOTOSHOP_PLATFORM(IOS) +#endif +#ifndef PS_OS_MAC // Some Windows projects define this in their props file + #define PS_OS_MAC PHOTOSHOP_PLATFORM(MACOS) +#endif +#ifndef PS_OS_ANDROID // Some Windows projects define this in their props file + #define PS_OS_ANDROID PHOTOSHOP_PLATFORM(ANDROID) +#endif + +#define PS_OS_WEB POISONED_MACRO_PS_OS_WEB() + +/**************************************************************************************************/ + +// Deprecated + +#define qPSIsWin (PHOTOSHOP_PLATFORM(MICROSOFT)) +#define qPSIsMac (PHOTOSHOP_PLATFORM(APPLE)) + +// REVISIT (sparent) : This also come from Switches.h... sometimes. Untangle + +// #ifndef MSWindows +// #define MSWindows (PHOTOSHOP_PLATFORM(MICROSOFT)) +// #endif + +// Macintosh is only defined for apple platforms +#if PHOTOSHOP_PLATFORM(APPLE) && !defined(Macintosh) + #define Macintosh 1 +#endif + +/**************************************************************************************************/ +#endif // RC_INVOKED +#endif // PHOTOSHOP_PLATFORM_HPP diff --git a/External/AE SDK/Headers/Smart_Utils.cpp b/External/AE SDK/Headers/Smart_Utils.cpp new file mode 100644 index 00000000..b67378b7 --- /dev/null +++ b/External/AE SDK/Headers/Smart_Utils.cpp @@ -0,0 +1,62 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#include "Smart_Utils.h" + + +PF_Boolean IsEmptyRect(const PF_LRect *r){ + return (r->left >= r->right) || (r->top >= r->bottom); +} + +void UnionLRect(const PF_LRect *src, PF_LRect *dst) +{ + if (IsEmptyRect(dst)) { + *dst = *src; + } else if (!IsEmptyRect(src)) { + dst->left = mmin(dst->left, src->left); + dst->top = mmin(dst->top, src->top); + dst->right = mmax(dst->right, src->right); + dst->bottom = mmax(dst->bottom, src->bottom); + } +} + +PF_Boolean +IsEdgePixel( + PF_LRect *rectP, + A_long x, + A_long y) +{ + PF_Boolean x_hitB = FALSE, + y_hitB = FALSE; + + x_hitB = ((x == rectP->left) || (x == rectP->right)); + + y_hitB = ((y == rectP->top) || (y == rectP->bottom)); + + if (x_hitB){ + y_hitB = ((y >= rectP->top) && (y <= rectP->bottom)); + } else { + if (y_hitB){ + x_hitB = ((x >= rectP->left) && (x <= rectP->right)); + } + } + return (x_hitB && y_hitB); +} \ No newline at end of file diff --git a/External/AE SDK/Headers/Smart_Utils.h b/External/AE SDK/Headers/Smart_Utils.h new file mode 100644 index 00000000..3e1c03ce --- /dev/null +++ b/External/AE SDK/Headers/Smart_Utils.h @@ -0,0 +1,34 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#include "AE_Effect.h" +#include "SPTypes.h" + +#ifndef mmin + #define mmin(a,b) ((a) < (b) ? (a) : (b)) + #define mmax(a,b) ((a) > (b) ? (a) : (b)) +#endif + +PF_Boolean IsEmptyRect(const PF_LRect *r); + +void UnionLRect(const PF_LRect *src, PF_LRect *dst); + +PF_Boolean IsEdgePixel(PF_LRect *rectP, A_long x, A_long y); \ No newline at end of file diff --git a/External/AE SDK/Headers/String_Utils.c b/External/AE SDK/Headers/String_Utils.c new file mode 100644 index 00000000..b897d050 --- /dev/null +++ b/External/AE SDK/Headers/String_Utils.c @@ -0,0 +1,6 @@ +#include "String_Utils.h" + +A_char *GetStringPtr(int strNum) +{ + return g_strs[strNum].str; +} \ No newline at end of file diff --git a/External/AE SDK/Headers/String_Utils.h b/External/AE SDK/Headers/String_Utils.h new file mode 100644 index 00000000..eadf62e7 --- /dev/null +++ b/External/AE SDK/Headers/String_Utils.h @@ -0,0 +1,48 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + + +/* String_Utils.h */ + + +#pragma once + +#ifndef STRING_UTILS_H +#define STRING_UTILS_H + +#ifdef __cplusplus +extern "C" { +#endif +A_char *GetStringPtr(int strNum); +#ifdef __cplusplus +} +#endif + +#define STR(_foo) GetStringPtr(_foo) + + + + + + + +#endif /* STRING_UTILS_H */ \ No newline at end of file diff --git a/External/AE SDK/Headers/SuiteHelper.h b/External/AE SDK/Headers/SuiteHelper.h new file mode 100644 index 00000000..ff050ccd --- /dev/null +++ b/External/AE SDK/Headers/SuiteHelper.h @@ -0,0 +1,97 @@ +#ifndef _H_SUITEHELPER +#define _H_SUITEHELPER + +#include "A.h" +#include "SPBasic.h" + +#include + +template +struct SuiteTraits +{ + static const A_char* i_name; + static const int32_t i_version; +}; + +template +class AssertAndThrowOnMissingSuite +{ +public: + void operator()() + { + assert( false ); + A_THROW(A_Err_MISSING_SUITE); + } +}; + + +class MissingSuiteErrFunc_NoOp +{ +public: + void operator()() + { + //swallow the error, not much we want to do or can do + } +}; + + +template > +class SuiteHelper +{ +public: + SuiteHelper(const SPBasicSuite* const basic_suiteP); + ~SuiteHelper(); + + const SuiteType* operator->() const; + SuiteType* get() const; + +private: + mutable SuiteType* i_SuiteP; + const SPBasicSuite* const i_basic_suiteP; +}; + + +template +SuiteHelper::SuiteHelper(const SPBasicSuite* const basic_suiteP) : i_basic_suiteP(basic_suiteP), i_SuiteP( NULL ) +{ + assert(basic_suiteP); + const void * acquired_suite = NULL; + + A_Err err = i_basic_suiteP->AcquireSuite(SuiteTraits::i_name, SuiteTraits::i_version, &acquired_suite); + if (err || !acquired_suite) { + MissingSuiteErrFunc error_func; + error_func(); + } else { + i_SuiteP = reinterpret_cast(const_cast(acquired_suite)); + } +} + +template +SuiteHelper::~SuiteHelper() +{ + if (i_SuiteP) { + + #ifdef DEBUG + A_Err err = + #endif + + i_basic_suiteP->ReleaseSuite(SuiteTraits::i_name, SuiteTraits::i_version); + + #ifdef DEBUG + assert( !err ); + #endif + } +} + +template +const SuiteType* SuiteHelper::operator->() const +{ + return i_SuiteP; +} + +template +SuiteType* SuiteHelper::get() const +{ + return i_SuiteP; +} +#endif diff --git a/External/AE SDK/Headers/adobesdk/DrawbotSuite.h b/External/AE SDK/Headers/adobesdk/DrawbotSuite.h new file mode 100644 index 00000000..409ed070 --- /dev/null +++ b/External/AE SDK/Headers/adobesdk/DrawbotSuite.h @@ -0,0 +1,660 @@ +/************************************************************************** +* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2009 Adobe Systems Incorporated +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains the property of +* Adobe Systems Incorporated and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe Systems +* Incorporated and its suppliers and may be covered by U.S. and Foreign +* Patents,patents in process,and are protected by trade secret or copyright +* law. Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained from +* Adobe Systems Incorporated. +**************************************************************************/ + +#ifndef DRAWBOT_SUITE_H +#define DRAWBOT_SUITE_H + +#include + +#ifdef __cplusplus + #include // for std::exception +#endif +//Sweet pea header +#include + +#ifdef ADOBE_SDK_INTERNAL + #include +#else + #include +#endif + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/* +C STYLE +-------- +Drawbot suites can be used to draw paths, strings, images using application-provided DrawbotRef. Use C++ style (mentioned later in the file) +if you are creating cpp files as it is more elegant and you don't have to deal with retain/release of objects. + +Below function takes DrawbotRef and strokes a circle & a rectangle. + +void DrawSomething(DRAWBOT_DrawRef drawbot_ref) +{ + //Acquire drawbot (drawbot_suiteP), supplier (supplier_suiteP), surface (surface_suiteP) & path (path_suiteP) suites + ... + + //Get the supplier and surface reference from drawbot_ref + DRAWBOT_SupplierRef supplier_ref; + DRAWBOT_SurfaceRef surface_ref; + + drawbot_suiteP->GetSupplier(drawbot_ref, &supplier_ref); + drawbot_suiteP->GetSurface(drawbot_ref, &surface_ref); + + //Save the surface state by pushing it in stack. It is required to restore state if you are going to clip/transform surface + //or change interpolation/anti-aliasing policy. + surface_suiteP->PushStateStack(surface_ref); + + //Create a new red-color brush. + DRAWBOT_BrushRef brush_ref; + + supplier_suiteP->NewBrush(supplier_ref, DRAWBOT_ColorRGBA(1.0f, 0.0f, 0.0f, 1.0f), &brush_ref); + + //Create a new path + DRAWBOT_PathRef path_ref; + + supplier_suiteP->NewPath(supplier_ref, &path_ref); + + //Add a rectangle to the path + DRAWBOT_RectF32 rect1(0.0f, 0.0f, 50.0f, 50.0f); + + path_suiteP->AddRect(path_ref, rect1); + + //Add a circle to the path + path_suiteP->AddArc(path_ref, DRAWBOT_PointF32(25.0f, 25.0f), 10.0f, 0.0f, 360.0f); + + //Fill the path using red-colored brush. + surface_suiteP->FillPath(surface_ref, brush_ref, path_ref, kDRAWBOT_FillType_EvenOdd); + + //We are done. Release (delete) all the objects. There will be memory leak if you don't release. + surface_suiteP->ReleaseObject((DRAWBOT_ObjectRef)path_ref); + surface_suiteP->ReleaseObject((DRAWBOT_ObjectRef)brush_ref); + + //Don't forget to pop surface state (if pushed earlier) + surface_suiteP->PopStateStack(surface_ref); + + //DO NOT CALL ReleaseObject on surface_ref and supplier_ref as you did not create them. + + //Release drawbot (drawbot_suiteP), supplier (supplier_suiteP), surface (surface_suiteP) & path (path_suiteP) suites +} +*/ + + +#define kDRAWBOT_DrawSuite "DRAWBOT Draw Suite" +#define kDRAWBOT_DrawSuite_Version1 1 + +#define kDRAWBOT_DrawSuite_VersionCurrent kDRAWBOT_DrawSuite_Version1 +#define DRAWBOT_DrawbotSuiteCurrent DRAWBOT_DrawbotSuite1 + +typedef struct DRAWBOT_DrawbotSuite1 { + + //Get the supplier from the drawbot_ref + SPAPI SPErr (*GetSupplier)( DRAWBOT_DrawRef in_drawbot_ref, + DRAWBOT_SupplierRef *out_supplierP); + + //Get the surface from the drawbot_ref + SPAPI SPErr (*GetSurface)( DRAWBOT_DrawRef in_drawbot_ref, + DRAWBOT_SurfaceRef *out_surfaceP); + +} DRAWBOT_DrawbotSuite1; + + + +#define kDRAWBOT_SupplierSuite "DRAWBOT Supplier Suite" +#define kDRAWBOT_SupplierSuite_Version1 1 + +#define kDRAWBOT_SupplierSuite_VersionCurrent kDRAWBOT_SupplierSuite_Version1 +#define DRAWBOT_SupplierSuiteCurrent DRAWBOT_SupplierSuite1 + +typedef struct DRAWBOT_SupplierSuite1 { + + //Create a new pen. + //It should be released with ReleaseObject api. + SPErr (*NewPen)( DRAWBOT_SupplierRef in_supplier_ref, + const DRAWBOT_ColorRGBA *in_colorP, + float in_size, + DRAWBOT_PenRef *out_penP); + + //Create a new brush. + //It should be released with ReleaseObject api. + SPErr (*NewBrush)(DRAWBOT_SupplierRef in_supplier_ref, + const DRAWBOT_ColorRGBA *in_colorP, + DRAWBOT_BrushRef *out_brushP); + + //Check if current supplier supports text. + SPErr (*SupportsText)(DRAWBOT_SupplierRef in_supplier_ref, + DRAWBOT_Boolean *out_supports_textPB); + + //Get default font size. + SPErr (*GetDefaultFontSize)( DRAWBOT_SupplierRef in_supplier_ref, + float *out_font_sizeF); + + //Create a new font with default settings. + //You can pass default font size from GetDefaultFontSize. + //It should be released with ReleaseObject api. + SPErr (*NewDefaultFont)( DRAWBOT_SupplierRef in_supplier_ref, + float in_font_sizeF, + DRAWBOT_FontRef *out_fontP); + + //Create a new image from buffer. + //It should be released with ReleaseObject api. + SPErr (*NewImageFromBuffer)( DRAWBOT_SupplierRef in_supplier_ref, + int in_width, + int in_height, + int in_row_bytes, + DRAWBOT_PixelLayout in_pl, + const void *in_dataP, + DRAWBOT_ImageRef *out_imageP); + + //Create a new path. + //It should be released with ReleaseObject api. + SPErr (*NewPath)( DRAWBOT_SupplierRef in_supplier_ref, + DRAWBOT_PathRef *out_pathP); + + + //A given drawbot implementation can support multiple channel orders, but will likely + //prefer one over the other. Use below apis to get the preferred layout for any api that + //takes DRAWBOT_PixelLayout (ex- NewImageFromBuffer). + + SPErr (*SupportsPixelLayoutBGRA)( DRAWBOT_SupplierRef in_supplier_ref, + DRAWBOT_Boolean *out_supports_bgraPB); + + SPErr (*PrefersPixelLayoutBGRA) ( DRAWBOT_SupplierRef in_supplier_ref, + DRAWBOT_Boolean *out_prefers_bgraPB); + + SPErr (*SupportsPixelLayoutARGB)( DRAWBOT_SupplierRef in_supplier_ref, + DRAWBOT_Boolean *out_supports_argbPB); + + SPErr (*PrefersPixelLayoutARGB) ( DRAWBOT_SupplierRef in_supplier_ref, + DRAWBOT_Boolean *out_prefers_argbPB); + + //Retain (increase reference count) any object (pen, brush, path etc) + //Ex: It should be used when any object is copied and the copied object should be retained. + SPErr (*RetainObject)(DRAWBOT_ObjectRef in_obj_ref); + + //Release (decrease reference count) any object (pen, brush, path etc) + //This function MUST be called for any object created using NewXYZ() from this suite. + SPErr (*ReleaseObject)(DRAWBOT_ObjectRef in_obj_ref); + +} DRAWBOT_SupplierSuite1; + + +#define kDRAWBOT_SurfaceSuite "DRAWBOT Surface Suite" +#define kDRAWBOT_SurfaceSuite_Version1 1 +#define kDRAWBOT_SurfaceSuite_Version2 2 + +#define kDRAWBOT_SurfaceSuite_VersionCurrent kDRAWBOT_SurfaceSuite_Version2 +#define DRAWBOT_SurfaceSuiteCurrent DRAWBOT_SurfaceSuite2 + +typedef struct DRAWBOT_SurfaceSuite1 { + + //Push the current surface state in stack. It should be popped to retrieve old state. + SPErr (*PushStateStack)( DRAWBOT_SurfaceRef in_surface_ref); + + //Pop the last pushed surface state. + SPErr (*PopStateStack)( DRAWBOT_SurfaceRef in_surface_ref); + + //Paint a rectangle with a color on the surface. + SPErr (*PaintRect)( DRAWBOT_SurfaceRef in_surface_ref, + const DRAWBOT_ColorRGBA *in_colorP, + const DRAWBOT_RectF32 *in_rectPR); + + //Fill a path using a brush and fill type. + SPErr (*FillPath)( DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_BrushRef in_brush_ref, + DRAWBOT_PathRef in_path_ref, + DRAWBOT_FillType in_fill_type); + + //Stroke a path using a pen. + SPErr (*StrokePath)( DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_PenRef in_pen_ref, + DRAWBOT_PathRef in_path_ref); + + //Clip the surface + SPErr (*Clip)( DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_SupplierRef in_supplier_ref, + const DRAWBOT_Rect32 *in_rectPR); + + //Get clip bounds + SPErr (*GetClipBounds)( + DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_Rect32 *out_rectPR); + + //Checks whether a rect is within the clip bounds. + SPErr (*IsWithinClipBounds)( + DRAWBOT_SurfaceRef in_surface_ref, + const DRAWBOT_Rect32 *in_rectPR, + DRAWBOT_Boolean *out_withinPB); + + //Transform the last surface state. + SPErr (*Transform)( DRAWBOT_SurfaceRef in_surface_ref, + const DRAWBOT_MatrixF32 *in_matrixP); + + //Draw a string + SPErr (*DrawString)( DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_BrushRef in_brush_ref, + DRAWBOT_FontRef in_font_ref, + const DRAWBOT_UTF16Char *in_stringP, + const DRAWBOT_PointF32 *in_originP, + DRAWBOT_TextAlignment in_alignment_style, + DRAWBOT_TextTruncation in_truncation_style, + float in_truncation_width); + + //Draw an image (created using NewImageFromBuffer())on the surface + //alpha = [0.0f, 1.0f] + SPErr (*DrawImage)( DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_ImageRef in_image_ref, + const DRAWBOT_PointF32 *in_originP, + float in_alpha); + + SPErr (*SetInterpolationPolicy)( + DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_InterpolationPolicy in_interp); + + SPErr (*GetInterpolationPolicy)( + DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_InterpolationPolicy *out_interpP); + + SPErr (*SetAntiAliasPolicy)( + DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_AntiAliasPolicy in_policy); + + SPErr (*GetAntiAliasPolicy)( + DRAWBOT_SurfaceRef in_surface_ref, + DRAWBOT_AntiAliasPolicy *out_policyP); + + //Flush drawing + SPErr (*Flush)( DRAWBOT_SurfaceRef in_surface_ref); + + //Get the transform of the surface state. + SPErr (*GetTransformToScreenScale)(DRAWBOT_SurfaceRef in_surface_ref, + float* out_scale); +} DRAWBOT_SurfaceSuite2; + +typedef DRAWBOT_SurfaceSuite2 DRAWBOT_SurfaceSuite1; // At the time, the last function was Flush. + + +#define kDRAWBOT_PathSuite "DRAWBOT Path Suite" +#define kDRAWBOT_PathSuite_Version1 1 + +#define kDRAWBOT_PathSuite_VersionCurrent kDRAWBOT_PathSuite_Version1 +#define DRAWBOT_PathSuiteCurrent DRAWBOT_PathSuite1 + +typedef struct DRAWBOT_PathSuite1 { + + //Move to a point + SPErr (*MoveTo)( DRAWBOT_PathRef in_path_ref, + float in_x, + float in_y); + + //Add a line to the path + SPErr (*LineTo)( DRAWBOT_PathRef in_path_ref, + float in_x, + float in_y); + + //Add a cubic bezier to the path + SPErr (*BezierTo)(DRAWBOT_PathRef in_path_ref, + const DRAWBOT_PointF32 *in_pt1P, + const DRAWBOT_PointF32 *in_pt2P, + const DRAWBOT_PointF32 *in_pt3P); + + //Add a rect to the path + SPErr (*AddRect)( DRAWBOT_PathRef in_path_ref, + const DRAWBOT_RectF32 *in_rectPR); + + //Add a arc to the path + //zero start degrees == 3 o'clock + //sweep is clockwise + //units in degrees + SPErr (*AddArc)( DRAWBOT_PathRef in_path_ref, + const DRAWBOT_PointF32 *in_centerP, + float in_radius, + float in_start_angle, + float in_sweep); + + SPErr (*Close)( DRAWBOT_PathRef in_path_ref); + +} DRAWBOT_PathSuite1; + + +#define kDRAWBOT_PenSuite "DRAWBOT Pen Suite" +#define kDRAWBOT_PenSuite_Version1 1 + +#define kDRAWBOT_PenSuite_VersionCurrent kDRAWBOT_PenSuite_Version1 +#define DRAWBOT_PenSuiteCurrent DRAWBOT_PenSuite1 + +typedef struct DRAWBOT_PenSuite1 { + + //Make the line dashed + SPErr (*SetDashPattern)( DRAWBOT_PenRef in_pen_ref, + const float *in_dashesP, + int in_pattern_size); + +} DRAWBOT_PenSuite1; + +#define kDRAWBOT_ImageSuite "DRAWBOT Image Suite" +#define kDRAWBOT_ImageSuite_Version1 1 + +#define kDRAWBOT_ImageSuite_VersionCurrent kDRAWBOT_ImageSuite_Version1 +#define DRAWBOT_ImageSuiteCurrent DRAWBOT_ImageSuite1 + +typedef struct DRAWBOT_ImageSuite1 { + + //Make the line dashed + SPErr (*SetScaleFactor)( DRAWBOT_ImageRef in_image_ref, + float in_scale_factor); + +} DRAWBOT_ImageSuite1; + +//Collection of latest drawbot suites +typedef struct { + DRAWBOT_DrawbotSuiteCurrent *drawbot_suiteP; + DRAWBOT_SupplierSuiteCurrent *supplier_suiteP; + DRAWBOT_SurfaceSuiteCurrent *surface_suiteP; + DRAWBOT_PathSuiteCurrent *path_suiteP; + DRAWBOT_PenSuiteCurrent *pen_suiteP; + DRAWBOT_ImageSuiteCurrent *image_suiteP; +} DRAWBOT_Suites; + + +#ifdef __cplusplus + } // end extern "C" +#endif + + + +#ifdef __cplusplus //C++ Style + +/* +Use C++ style as it will automatically deal with memory management of objects. Below example will make it clear. + +Below function takes DrawbotRef and strokes a circle & a rectangle. + +void DrawSomething(DRAWBOT_DrawRef drawbot_ref) +{ + //Acquire drawbot (drawbot_suiteP), supplier (supplier_suiteP), surface (surface_suiteP) & path (path_suiteP) suites + ... + + //Get the supplier and surface reference from drawbot_ref + DRAWBOT_SupplierRef supplier_ref; + DRAWBOT_SurfaceRef surface_ref; + + drawbot_suiteP->GetSupplier(drawbot_ref, &supplier_ref); + drawbot_suiteP->GetSurface(drawbot_ref, &surface_ref); + + //Save the surface state by pushing it in stack. It is required to restore if you are going to clip or transform surface. + //Below call acts like a a scoper: it will push the current surface state and automatically pop at the end of scope. + DRAWBOT_SaveAndRestoreStateStack sc_save_state(surface_suiteP, surface_ref); + + //Create a new red-color brush. + //Compare below call with C-style apis. It is compact and brush will be automatically released at the end of scope. + DRAWBOT_BrushP brushP(supplier_suiteP, supplier_ref, DRAWBOT_ColorRGBA(1.0f, 0.0f, 0.0f, 1.0f)); + + //Create a new path + DRAWBOT_PathP pathP(supplier_suiteP, supplier_ref); + + //Add a rectangle to the path + DRAWBOT_RectF32 rect1(0.0f, 0.0f, 50.0f, 50.0f); + + path_suiteP->AddRect(pathP, rect1); + + //Add a circle to the path + path_suiteP->AddArc(pathP, DRAWBOT_PointF32(25.0f, 25.0f), 10.0f, 0.0f, 360.0f); + + //Fill the path using red-colored brush. + surface_suiteP->FillPath(surface_ref, brushP, pathP, kDRAWBOT_FillType_EvenOdd); + + //Release drawbot (drawbot_suiteP), supplier (supplier_suiteP), surface (surface_suiteP) & path (path_suiteP) suites + + //We are DONE. You don't have to release brush & path objects as you did in C-style. +} +*/ +class DRAWBOT_Exception : public std::exception { +public: + DRAWBOT_Exception(SPErr err): mErr(err) + { + } + virtual ~DRAWBOT_Exception() throw () {} + + SPErr mErr; +}; + +#define DRAWBOT_ErrorToException(EXPR) { SPErr _err = (EXPR); if (_err) throw DRAWBOT_Exception(_err); } + + +//SharedRefImpl declaration + +template +class SharedRefImpl { +public: + SharedRefImpl(DRAWBOT_SupplierSuiteCurrent *suiteP, REF_T r = 0, bool retainB = true) + : + mRef(r), + mSuiteP(suiteP) + { + if (retainB) { + RetainObject(); + } + } + + virtual ~SharedRefImpl() + { + ReleaseObject(); + } + + //copy constructor + SharedRefImpl(SharedRefImpl const & rhs) + { + *this = rhs; + } + + //assignment operator + SharedRefImpl & operator=(SharedRefImpl const & rhs) + { + mSuiteP = rhs.mSuiteP; + mRef = rhs.mRef; + + RetainObject(); + + return *this; + } + + inline REF_T Get() const + { + return mRef; + } + + inline operator REF_T() const + { + return mRef; + } + + inline void Reset(REF_T rhs = 0, bool retainB = true) + { + if (mRef != rhs) { + ReleaseObject(); + + mRef = rhs; + + if (retainB) { + RetainObject(); + } + } + } + +private: + void ReleaseObject() + { + if (mRef) { + DRAWBOT_ErrorToException(mSuiteP->ReleaseObject(reinterpret_cast(mRef))); + mRef = NULL; + } + } + + void RetainObject() + { + if (mRef) { + DRAWBOT_ErrorToException(mSuiteP->RetainObject(reinterpret_cast(mRef))); + } + } + + REF_T mRef; + DRAWBOT_SupplierSuiteCurrent *mSuiteP; +}; + + +//DRAWBOT_PenP declaration + +class DRAWBOT_PenP : public SharedRefImpl { + typedef SharedRefImpl _inherited; +public: + + DRAWBOT_PenP( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref, + const DRAWBOT_ColorRGBA *colorP, + float sizeF) + : + _inherited(suiteP) + { + New(suiteP, supplier_ref, colorP, sizeF); + } + + void New( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref, + const DRAWBOT_ColorRGBA *colorP, + float sizeF) + { + DRAWBOT_PenRef pen_ref; + + DRAWBOT_ErrorToException(suiteP->NewPen(supplier_ref, colorP, sizeF, &pen_ref)); + + Reset(pen_ref, false); + } +}; + + +//DRAWBOT_PathP declaration + +class DRAWBOT_PathP : public SharedRefImpl { + typedef SharedRefImpl _inherited; +public: + DRAWBOT_PathP( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref) + : + _inherited(suiteP) + { + New(suiteP, supplier_ref); + } + + void New( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref) + { + DRAWBOT_PathRef path_ref; + + DRAWBOT_ErrorToException(suiteP->NewPath(supplier_ref, &path_ref)); + + Reset(path_ref, false); + } +}; + + +//DRAWBOT_BrushP declaration + +class DRAWBOT_BrushP : public SharedRefImpl { + typedef SharedRefImpl _inherited; +public: + DRAWBOT_BrushP( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref, + const DRAWBOT_ColorRGBA *colorP) + : + _inherited(suiteP) + { + New(suiteP, supplier_ref, colorP); + } + + void New( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref, + const DRAWBOT_ColorRGBA *colorP) + { + DRAWBOT_BrushRef brush_ref; + + DRAWBOT_ErrorToException(suiteP->NewBrush(supplier_ref, colorP, &brush_ref)); + + Reset(brush_ref, false); + } +}; + + +//DRAWBOT_FontP declaration + +class DRAWBOT_FontP : public SharedRefImpl { + typedef SharedRefImpl _inherited; +public: + DRAWBOT_FontP( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref, + float in_font_size) + : + _inherited(suiteP) + { + New(suiteP, supplier_ref, in_font_size); + } + + void New( DRAWBOT_SupplierSuiteCurrent *suiteP, + const DRAWBOT_SupplierRef supplier_ref, + float in_font_size) + { + DRAWBOT_FontRef font_ref; + + DRAWBOT_ErrorToException(suiteP->NewDefaultFont(supplier_ref, in_font_size, &font_ref)); + + Reset(font_ref, false); + } +}; + + +class DRAWBOT_SaveAndRestoreStateStack { +public: + DRAWBOT_SaveAndRestoreStateStack( DRAWBOT_SurfaceSuiteCurrent *suiteP, + const DRAWBOT_SurfaceRef surface_ref) + : + mSurfaceRef(surface_ref), + mSuiteP(suiteP) + { + DRAWBOT_ErrorToException(mSuiteP->PushStateStack(mSurfaceRef)); + } + + ~DRAWBOT_SaveAndRestoreStateStack() + { + (void)mSuiteP->PopStateStack(mSurfaceRef); + } + +private: + DRAWBOT_SurfaceRef mSurfaceRef; + DRAWBOT_SurfaceSuiteCurrent *mSuiteP; +}; + + +#endif //C++ Style + + +#include + +#endif //DRAWBOT_SUITE_H diff --git a/External/AE SDK/Headers/adobesdk/config/AdobesdkTypes.h b/External/AE SDK/Headers/adobesdk/config/AdobesdkTypes.h new file mode 100755 index 00000000..4dc90478 --- /dev/null +++ b/External/AE SDK/Headers/adobesdk/config/AdobesdkTypes.h @@ -0,0 +1,54 @@ +/************************************************************************** +* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2009 Adobe Systems Incorporated +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains the property of +* Adobe Systems Incorporated and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe Systems +* Incorporated and its suppliers and may be covered by U.S. and Foreign +* Patents,patents in process,and are protected by trade secret or copyright +* law. Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained from +* Adobe Systems Incorporated. +**************************************************************************/ + +/** + Definition of common types used by adobesdk. +**/ + +#ifndef ADOBESDK_CONFIG_TYPES_H +#define ADOBESDK_CONFIG_TYPES_H + +#include + +#include "stdint.h" + + +typedef uint16_t ADOBESDK_UTF16Char; +typedef uint8_t ADOBESDK_UTF8Char; +typedef uint8_t ADOBESDK_Boolean; + +enum +{ + kAdobesdk_False = 0, + kAdobesdk_True = 1 +}; + + +typedef ADOBESDK_UTF16Char DRAWBOT_UTF16Char; +typedef ADOBESDK_Boolean DRAWBOT_Boolean; + + +typedef struct +{ + int64_t opaque[2]; +} ADOBESDK_String; + + +#include + +#endif //ADOBESDK_CONFIG_TYPES_H diff --git a/External/AE SDK/Headers/adobesdk/config/PostConfig.h b/External/AE SDK/Headers/adobesdk/config/PostConfig.h new file mode 100755 index 00000000..f10326ad --- /dev/null +++ b/External/AE SDK/Headers/adobesdk/config/PostConfig.h @@ -0,0 +1,2 @@ + +#pragma pack( pop, AdobeSDKExternalAlign ) \ No newline at end of file diff --git a/External/AE SDK/Headers/adobesdk/config/PreConfig.h b/External/AE SDK/Headers/adobesdk/config/PreConfig.h new file mode 100755 index 00000000..2675004d --- /dev/null +++ b/External/AE SDK/Headers/adobesdk/config/PreConfig.h @@ -0,0 +1,23 @@ + +//Must be balanced with PostConfig.h! + +#ifdef _WINDOWS + //disable warning in VS2008 about unbalanced struct alignment changes + #pragma warning( disable : 4103 ) + + // This is taken from PreConfig_Win.h in dvacore, there is a bug in the VS2010 xlocnum header in particular where it is + // incorrectly putting a declspec on a static member of a template class 'numpunct'. + #if defined(_MSC_VER) && (_MSC_VER >= 1600) && defined(PREMIERE_INTERNAL) + // Compilation problems due to locale id being marked as dllimport. -jacquave 2/18/2010 + // Also, opened a Technical Support Request with Microsoft, # 111021865918375. + + // http://connect.microsoft.com/VisualStudio/feedback/details/572376/msvc10-c-std-numpunct-has-a-hardcoded-dllimport-in-definition + // http://dotnetforum.net/topic/7346-vs2010-error-c2491-stdnumpunctid-while-using-stdbasic-fstream-in-ccli/ + #ifdef __cplusplus + #include "dvacore/config/win/xlocnum_hack.h" + #endif + #endif +#endif + +//8 byte alignment for adobesdk public files. +#pragma pack( push, AdobeSDKExternalAlign, 8 ) diff --git a/External/AE SDK/Headers/adobesdk/drawbotsuite/DrawbotSuiteTypes.h b/External/AE SDK/Headers/adobesdk/drawbotsuite/DrawbotSuiteTypes.h new file mode 100755 index 00000000..5c1ee028 --- /dev/null +++ b/External/AE SDK/Headers/adobesdk/drawbotsuite/DrawbotSuiteTypes.h @@ -0,0 +1,148 @@ +/************************************************************************** + * + * ADOBE CONFIDENTIAL + * ___________________ + * + * Copyright 2009 Adobe Systems Incorporated + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains the property of + * Adobe Systems Incorporated and its suppliers, if any. The intellectual + * and technical concepts contained herein are proprietary to Adobe Systems + * Incorporated and its suppliers and may be covered by U.S. and Foreign + * Patents,patents in process,and are protected by trade secret or copyright + * law. Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained from + * Adobe Systems Incorporated. + **************************************************************************/ +// Author: pankajn@adobe.com + +#ifndef DRAWBOT_SUITE_TYPES_H +#define DRAWBOT_SUITE_TYPES_H + +#include + + +typedef struct _DRAWBOT_DrawRef *DRAWBOT_DrawRef; +typedef struct _DRAWBOT_SupplierRef *DRAWBOT_SupplierRef; +typedef struct _DRAWBOT_SurfaceRef *DRAWBOT_SurfaceRef; +typedef struct _DRAWBOT_PenRef *DRAWBOT_PenRef; +typedef struct _DRAWBOT_PathRef *DRAWBOT_PathRef; +typedef struct _DRAWBOT_BrushRef *DRAWBOT_BrushRef; +typedef struct _DRAWBOT_ImageRef *DRAWBOT_ImageRef; +typedef struct _DRAWBOT_FontRef *DRAWBOT_FontRef; +typedef struct _DRAWBOT_ObjectRef *DRAWBOT_ObjectRef; + + +// 0.0f to 1.0f +typedef struct { + float red; + float green; + float blue; + float alpha; +} DRAWBOT_ColorRGBA; + + +typedef struct { + float x; + float y; +} DRAWBOT_PointF32; + + +typedef struct { + float left; + float top; + float width; //not right + float height; //not bottom +} DRAWBOT_RectF32; + + +typedef struct { + int left; + int top; + int width; //not right + int height; //not bottom +} DRAWBOT_Rect32; + + +typedef struct { + float mat[3][3]; +} DRAWBOT_MatrixF32; + + +//Enum to fill a path +enum { + kDRAWBOT_FillType_EvenOdd = 0, + kDRAWBOT_FillType_Winding, + + kDRAWBOT_FillType_Default = kDRAWBOT_FillType_Winding +}; +typedef int DRAWBOT_FillType; + + +//Enum to specify pixel layout of buffer to create an image. +enum { + kDRAWBOT_PixelLayout_24RGB = 0, + kDRAWBOT_PixelLayout_24BGR, + kDRAWBOT_PixelLayout_32RGB, // ARGB (A is ignored). + kDRAWBOT_PixelLayout_32BGR, // BGRA (A is ignored). + kDRAWBOT_PixelLayout_32ARGB_Straight, + kDRAWBOT_PixelLayout_32ARGB_Premul, + kDRAWBOT_PixelLayout_32BGRA_Straight, + kDRAWBOT_PixelLayout_32BGRA_Premul +}; +typedef int DRAWBOT_PixelLayout; + + +//Enum to specify the text alignment (used in DrawString) +enum { + kDRAWBOT_TextAlignment_Left = 0, + kDRAWBOT_TextAlignment_Center, + kDRAWBOT_TextAlignment_Right, + + kDRAWBOT_TextAlignment_Default = kDRAWBOT_TextAlignment_Left +}; +typedef int DRAWBOT_TextAlignment; + + +//Enum to specify text truncation (used in DrawString) +enum { + kDRAWBOT_TextTruncation_None = 0, + kDRAWBOT_TextTruncation_End, + kDRAWBOT_TextTruncation_EndEllipsis, + kDRAWBOT_TextTruncation_PathEllipsis // tries to preserve the disk name ellipsis in middle of string +}; +typedef int DRAWBOT_TextTruncation; + + +//Enum to specify surface interpolation level +enum { + kDRAWBOT_InterpolationPolicy_None = 0, + kDRAWBOT_InterpolationPolicy_Med, + kDRAWBOT_InterpolationPolicy_High, + + kDRAWBOT_InterpolationPolicy_Default = kDRAWBOT_InterpolationPolicy_None +}; +typedef int DRAWBOT_InterpolationPolicy; + + +//Enum to specify drawing anti-aliasing level +enum { + kDRAWBOT_AntiAliasPolicy_None = 0, + kDRAWBOT_AntiAliasPolicy_Med, + kDRAWBOT_AntiAliasPolicy_High, + + kDRAWBOT_AntiAliasPolicy_Default = kDRAWBOT_AntiAliasPolicy_None +}; +typedef int DRAWBOT_AntiAliasPolicy; + + +#include + +#endif //DRAWBOT_SUITE_TYPES_H + + + + + + \ No newline at end of file diff --git a/External/AE SDK/Headers/entry.h b/External/AE SDK/Headers/entry.h new file mode 100644 index 00000000..6a0175db --- /dev/null +++ b/External/AE SDK/Headers/entry.h @@ -0,0 +1,53 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +/* + Entry.h + + Part of the Adobe After Effects SDK. +*/ + +#include "AE_PluginData.h" + +#ifdef AE_OS_WIN + #define DllExport __declspec( dllexport ) +#elif defined AE_OS_MAC + #define DllExport __attribute__ ((visibility ("default"))) +#endif + + +#define AE_ENTRY_POINT "EffectMain" +#define AE_RESERVED_INFO 8 + +#define PF_REGISTER_EFFECT(INPTR, CBPTR, NAME, MATCHNAME, CATEGORY,RESERVEDINFO) \ + result = (*(CBPTR))((INPTR),\ + reinterpret_cast(NAME),\ + reinterpret_cast(MATCHNAME),\ + reinterpret_cast(CATEGORY),\ + reinterpret_cast(AE_ENTRY_POINT),\ + 'eFKT',\ + PF_AE_PLUG_IN_VERSION,\ + PF_AE_PLUG_IN_SUBVERS,\ + RESERVEDINFO);\ + if(result == A_Err_NONE)\ + {\ + result = PF_Err_NONE;\ + } diff --git a/External/AE SDK/Resources/AE_General.r b/External/AE SDK/Resources/AE_General.r new file mode 100644 index 00000000..a0b146cf --- /dev/null +++ b/External/AE SDK/Resources/AE_General.r @@ -0,0 +1,548 @@ +/* + File: AE_General.r + + Copyright 1991-96 by Adobe Systems Inc.. + + Photoshop's Rinclude with AE extensions + +*/ + +#ifndef __AEPIGeneral_r__ +#define __AEPIGeneral_r__ + +#ifndef kPIPropertiesVersion +#define kPIPropertiesVersion 0 +#endif + +type 'PiPL' + { + longint = kPIPropertiesVersion; + longint = $$CountOf(properties); + array properties + { + switch + { + +/* Properties for all types of plug-ins. */ + + case Kind: + longint = '8BIM'; + key longint = 'kind'; + longint = 0; + longint = 4; + literal longint Filter = '8BFM', Parser = '8BYM', ImageFormat='8BIF', + Extension = '8BXM', Acquire = '8BAM', Export = '8BEM', + /* AE specific */ + AEEffect = 'eFKT', AEImageFormat = 'FXIF', AEAccelerator = 'eFST', + AEGeneral = 'AEgp', AEGP = 'AEgx', AEForeignProjectFormat = 'eFPF'; + + case Version: + longint = '8BIM'; + key longint = 'vers'; + longint = 0; + longint = 4; + longint; + + case Priority: + longint = '8BIM'; + key longint = 'prty'; + longint = 0; + longint = 4; + longint; + + case RequiredHost: + longint = '8BIM'; + key longint = 'host'; + longint = 0; + longint = 4; + literal longint; + + case Name: + longint = '8BIM'; + key longint = 'name'; + longint = 0; +#if DeRez + fill long; +#else + longint = (nameEnd[$$ArrayIndex(properties)] - nameStart[$$ArrayIndex(properties)]) / 8; +#endif + nameStart: + pstring; + nameEnd: + align long; + + case Category: + longint = '8BIM'; + key longint = 'catg'; + longint = 0; +#if DeRez + fill long; +#else + longint = (catgEnd[$$ArrayIndex(properties)] - catgStart[$$ArrayIndex(properties)]) / 8; +#endif + catgStart: + pstring; + catgEnd: + align long; + + case Code68k: + longint = '8BIM'; + key longint = 'm68k'; + longint = 0; + longint = 6; + literal longint; + integer; + align long; + + case Code68kFPU: + longint = '8BIM'; + key longint = '68fp'; + longint = 0; + longint = 6; + literal longint; + integer; + align long; + + case CodePowerPC: + longint = '8BIM'; + key longint = 'pwpc'; + longint = 0; +#if DeRez + fill long; +#else + longint = (pwpcEnd[$$ArrayIndex(properties)] - pwpcStart[$$ArrayIndex(properties)]) / 8; +#endif + pwpcStart: + longint; + longint; + pstring; + pwpcEnd: + align long; + + case CodeCarbonPowerPC: + longint = '8BIM'; + key longint = 'ppcb'; + longint = 0; + #if DeRez + fill long; + #else + longint = (pwpcCarbonEnd[$$ArrayIndex(properties)] - pwpcCarbonStart[$$ArrayIndex(properties)]) / 8; + #endif + pwpcCarbonStart: + longint; + longint; + pstring; + pwpcCarbonEnd: + align long; + + // Mach-O Support + case CodeMachOPowerPC: + longint = '8BIM'; + key longint = 'mach'; + longint = 0; + #if DeRez + fill long; + #else + longint = (pwpcMachEnd[$$ArrayIndex(properties)] - pwpcMachStart[$$ArrayIndex(properties)]) / 8; + #endif + pwpcMachStart: + pstring; + pwpcMachEnd: + align long; + + // Mach-O Intel 32bit Support + case CodeMacIntel32: + longint = '8BIM'; + key longint = 'mi32'; + longint = 0; + #if DeRez + fill long; + #else + longint = (pwpcMacIntel32End[$$ArrayIndex(properties)] - pwpcMacIntel32Start[$$ArrayIndex(properties)]) / 8; + #endif + pwpcMacIntel32Start: + pstring; + pwpcMacIntel32End: + align long; + + // Mach-O Intel 64bit Support + case CodeMacIntel64: + longint = '8BIM'; + key longint = 'mi64'; + longint = 0; + #if DeRez + fill long; + #else + longint = (pwpcMacIntel64End[$$ArrayIndex(properties)] - pwpcMacIntel64Start[$$ArrayIndex(properties)]) / 8; + #endif + pwpcMacIntel64Start: + pstring; + pwpcMacIntel64End: + align long; + + case CodeMacARM64: + longint = '8BIM'; + key longint = 'ma64'; + longint = 0; + #if DeRez + fill long; + #else + longint = (pwpcMacARM64End[$$ArrayIndex(properties)] - pwpcMacARM64Start[$$ArrayIndex(properties)]) / 8; + #endif + pwpcMacARM64Start: + pstring; + pwpcMacARM64End: + align long; + + +#ifdef AE_OS_WIN /* For documentation purposes only. */ + case CodeWin32X86: + longint = '8BIM'; + key longint = 'wx86'; + longint = 0; + longint = (win32x86End[$$ArrayIndex(properties)] - win32x86Start[$$ArrayIndex(properties)]) / 8; + win32x86Start: + cstring; + win32x86End: + align long; + + case CodeWin64X86: + longint = '8BIM'; + key longint = '8664'; + longint = 0; + longint = (win64x86End[$$ArrayIndex(properties)] - win64x86Start[$$ArrayIndex(properties)]) / 8; + win64x86Start: + cstring; + win64x86End: + align long; +#endif + + case SupportedModes: + longint = '8BIM'; + key longint = 'mode'; + longint = 0; +#if DeRez + fill long; +#else + longint = (modeEnd[$$ArrayIndex(properties)] - modeStart[$$ArrayIndex(properties)]) / 8; +#endif + modeStart: + boolean noBitmap, doesSupportBitmap; + boolean noGrayScale, doesSupportGrayScale; + boolean noIndexedColor, doesSupportIndexedColor; + boolean noRGBColor, doesSupportRGBColor; + boolean noCMYKColor, doesSupportCMYKColor; + boolean noHSLColor, doesSupportHSLColor; + boolean noHSBColor, doesSupportHSBColor; + boolean noMultichannel, doesSupportMultichannel; + boolean noDuotone, doesSupportDuotone; + boolean noLABColor, doesSupportLABColor; + boolean noGray16, doesSupportGray16; + boolean noRGB48, doesSupportRGB48; + boolean noLab48, doesSupportLab48; + boolean noCMYK64, doesSupportCMYK64; + boolean noDeepMultichannel, doesSupportDeepMultichannel; + boolean noDuotone16, doesSupportDuotone16; + modeEnd: + align long; + +/* Filter plug-in properties. */ + + case FilterCaseInfo: + longint = '8BIM'; + key longint = 'fici'; + longint = 0; + longint = 28; + array [7] + { + byte inCantFilter = 0, + inStraightData = 1, + inBlackMat = 2, + inGrayMat = 3, + inWhiteMat = 4, + inDefringe = 5, + inBlackZap = 6, + inGrayZap = 7, + inWhiteZap = 8, + inBackgroundZap = 10, + inForegroundZap = 11; + byte outCantFilter = 0, + outStraightData = 1, + outBlackMat = 2, + outGrayMat = 3, + outWhiteMat = 4, + outFillMask = 9; + fill bit [5]; + boolean doesNotFilterLayerMasks, filtersLayerMasks; + boolean doesNotWorkWithBlankData, worksWithBlankData; + boolean copySourceToDestination, doNotCopySourceToDestination; + fill byte; + } ; + +/* Export plug-in properties. */ + + case ExportFlags: + longint = '8BIM'; + key longint = 'expf'; + longint = 0; +#if DeRez + fill long; +#else + longint = (expFlagsEnd[$$ArrayIndex(properties)] - expFlagsStart[$$ArrayIndex(properties)]) / 8; +#endif + expFlagsStart: + boolean expDoesNotSupportTransparency, expSupportsTransparency; + fill bit[7]; + expFlagsEnd: + align long; + +/* Format plug-in properties. */ +// If this property is present, then its on. No parameters + case SupportsPOSIXIO: + longint = '8BIM'; + key longint = 'fxio'; + longint = 0; + longint = 4; + literal longint = 1; + + case FmtFileType: + longint = '8BIM'; + key longint = 'fmTC'; + longint = 0; + longint = 8; + literal longint; /* Default file type. */ + literal longint; /* Default file creator. */ + + case ReadTypes: + longint = '8BIM'; + key longint = 'RdTy'; + longint = 0; + longint = $$CountOf(ReadableTypes) * 8; + wide array ReadableTypes { literal longint; literal longint; } ; + + case WriteTypes: + longint = '8BIM'; + key longint = 'WrTy'; + longint = 0; + longint = $$CountOf(WritableTypes) * 8; + wide array WritableTypes { literal longint; literal longint; } ; + + case FilteredTypes: + longint = '8BIM'; + key longint = 'fftT'; + longint = 0; + longint = $$CountOf(FilteredTypes) * 8; + wide array FilteredTypes { literal longint; literal longint; } ; + + case ReadExtensions: + longint = '8BIM'; + key longint = 'RdEx'; + longint = 0; + longint = $$CountOf(ReadableExtensions) * 4; + wide array ReadableExtensions { literal longint; } ; + + case WriteExtensions: + longint = '8BIM'; + key longint = 'WrEx'; + longint = 0; + longint = $$CountOf(WriteableExtensions) * 4; + wide array WriteableExtensions { literal longint; } ; + + case FilteredExtensions: + longint = '8BIM'; + key longint = 'fftE'; + longint = 0; + longint = $$CountOf(FilteredExtensions) * 4; + wide array FilteredExtensions { literal longint; } ; + + case FormatFlags: + longint = '8BIM'; + key longint = 'fmtf'; + longint = 0; +/* longint = (fmtFlagsEnd[$$ArrayIndex(properties)] - fmtFlagsStart[$$ArrayIndex(properties)]) / 8; */ + longint = 1; + fmtFlagsStart: + boolean fmtReadsAllTypes, fmtDoesntReadAllTypes; + boolean fmtDoesNotSaveImageResources, fmtSavesImageResources; + boolean fmtCannotRead, fmtCanRead; + boolean fmtCannotWrite, fmtCanWrite; + boolean fmtWritesAll, fmtCanWriteIfRead; + fill bit[3]; + fmtFlagsEnd: + align long; + + case FormatICCFlags: + longint = '8BIM'; + key longint = 'fmip'; + longint = 0; + //longint = (iccFlagsEnd[$ArrayIndex(properties)] - iccFlagsStart[$ArrayIndex(properties)]) / 8; + longint = 1; + iccFlagsStart: + boolean iccCannotEmbedGray, iccCanEmbedGray; + boolean iccCannotEmbedIndexed, iccCanEmbedIndexed; + boolean iccCannotEmbedRGB, iccCanEmbedRGB; + boolean iccCannotEmbedCMYK, iccCanEmbedCMYK; + fill bit[4]; + iccFlagsEnd: + align long; + + case FormatMaxSize: + longint = '8BIM'; + key longint = 'mxsz'; + longint = 0; + longint = 4; + Point; + + case FormatMaxChannels: + longint = '8BIM'; + key longint = 'mxch'; + longint = 0; + longint = $$CountOf(ChannelsSupported) * 2; + wide array ChannelsSupported { integer; } ; + align long; + + /* after effects specific PiPL atoms */ + + case AE_PiPL_Version: + longint = '8BIM'; + key longint = 'ePVR'; + longint = 0; + longint = 4; + integer; + integer; + + case AE_Effect_Spec_Version: + longint = '8BIM'; + key longint = 'eSVR'; + longint = 0; + longint = 4; + integer; + integer; + + + case AE_Effect_Version: + longint = '8BIM'; + key longint = 'eVER'; + longint = 0; + longint = 4; + longint; + + + case AE_Effect_Info_Flags: + longint = '8BIM'; + key longint = 'eINF'; + longint = 0; + longint = 2; + integer; + align long; +/* + case AE_Effect_Global_OutFlags: + longint = '8BIM'; + key longint = 'eGLO'; + longint = 0; +#if DeRez + fill long; +#else + longint = (gloEnd[$$ArrayIndex(properties)] - gloStart[$$ArrayIndex(properties)]) / 8; +#endif + gloStart: + fill bit[6]; + boolean noReserved4, reserved4; + boolean noReserved3, reserved3; + boolean noReserved2, reserved2; + boolean noReserved1, reserved1; + boolean noObsolete, obsolete; + boolean noAudio, audio; + boolean noShutterAngle, shutterAngle; + boolean noNopRender, nopRender; + boolean noRefreshUI, refreshUI; + boolean noCustomNtrp, customNtrp; + boolean noCustomUI, customUI; + boolean noNonSquareOnly, nonSquareOnly; + boolean noWorksInPlace, worksInPlace; + boolean noShrinkBuf, shrinkBuf; + boolean noWriteInput, writeInput; + boolean noPixIndep, pixIndep; + boolean noExpandBuf, expandBuf; + boolean noErrMsg, errMsg; + boolean noSendDialog, sendDialog; + boolean noOutputExtent, outputExtent; + boolean noDialog, dialog; + boolean noSeqFlatten, seqFlatten; + boolean noSendParamsUpdate, sendParamsUpdate; + boolean noRandomness, randomness; + boolean noWideTimeInput, wideTimeInput; + boolean noKeepRsrcOpen, keepRsrcOpen; + gloEnd: + align long; +*/ + case AE_Effect_Global_OutFlags: + longint = '8BIM'; + key longint = 'eGLO'; + longint = 0; + longint = 4; + longint; + + case AE_Effect_Global_OutFlags_2: + longint = '8BIM'; + key longint = 'eGL2'; + longint = 0; + longint = 4; + longint; + + case AE_Effect_Match_Name: + longint = '8BIM'; + key longint = 'eMNA'; + longint = 0; +#if DeRez + fill long; +#else + longint = (matchNameEnd[$$ArrayIndex(properties)] - matchNameStart[$$ArrayIndex(properties)]) / 8; +#endif + matchNameStart: + pstring; + matchNameEnd: + align long; + + case AE_ImageFormat_Extension_Info: + longint = '8BIM'; + key longint = 'FXMF'; + longint = 0; + longint = 16; + integer; /* major version */ + integer; /* minor version */ + fill bit[21]; + boolean hasOptions, hasNoOptions; + boolean sequentialOnly, nonSequentialOk; + boolean noInteractRequired, mustInteract; + boolean noInteractPut, hasInteractPut; + boolean noInteractGet, hasInteractGet; + boolean hasTime, hasNoTime; + boolean noVideo, hasVideo; + boolean noStill, still; + boolean noFile, hasFile; + boolean noOutput, output; + boolean noInput, input; + longint = 0; /* reserved */ + literal longint;/* signature */ + + + case AE_Reserved: + longint = '8BIM'; + key longint = 'aeRD'; + longint = 0; + longint = 4; + longint; + + case AE_Reserved_Info: + longint = '8BIM'; + key longint = 'aeFL'; + longint = 0; + longint = 4; + longint; + }; + }; + }; + + +#endif diff --git a/External/AE SDK/Resources/Mach-O_prefix.h b/External/AE SDK/Resources/Mach-O_prefix.h new file mode 100644 index 00000000..e5da3715 --- /dev/null +++ b/External/AE SDK/Resources/Mach-O_prefix.h @@ -0,0 +1 @@ +#define __MACH__ 1 \ No newline at end of file diff --git a/External/AE SDK/Resources/PiPLtool.exe b/External/AE SDK/Resources/PiPLtool.exe new file mode 100755 index 00000000..a50f04f6 --- /dev/null +++ b/External/AE SDK/Resources/PiPLtool.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c4d33fe38e8b8bd99c4dc98f4bebcd2f486c016ae6d9259775060b2ef9fac05 +size 201216 diff --git a/External/AE SDK/Util/AEFX_ArbParseHelper.c b/External/AE SDK/Util/AEFX_ArbParseHelper.c new file mode 100644 index 00000000..29d75396 --- /dev/null +++ b/External/AE SDK/Util/AEFX_ArbParseHelper.c @@ -0,0 +1,174 @@ +// AEFX_ArbParseHelper.c +// + + + +#include "AEFX_ArbParseHelper.h" + +#include +#include +#include +#include +#include + +PF_Err +AEFX_AppendText( A_char *srcAC, /* >> */ + const A_u_long dest_sizeL, /* >> */ + A_char *destAC, /* <> */ + A_u_long *current_indexPLu) /* <> */ +{ + PF_Err err = PF_Err_NONE; + + A_u_long new_strlenLu = (A_u_long) strlen(srcAC) + *current_indexPLu; + + + if (new_strlenLu <= dest_sizeL) { + destAC[*current_indexPLu] = 0x00; + + strcat(destAC, srcAC); + *current_indexPLu = new_strlenLu; + } else { + err = AEFX_ParseError_APPEND_ERROR; + } + + return err; +} + + + + +PF_Err +AEFX_ParseCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + A_char *bufAC) /* << AEFX_CELL_SIZE */ +{ + (void)out_data; + (void)in_data; + + PF_Err err = PF_Err_NONE; + A_char c; + A_char buf[AEFX_CELL_SIZE]; + A_char *scan; + A_short count; + + if (startPC[*current_indexPL] == AEFX_Char_EOL) { + err = AEFX_ParseError_EXPECTING_MORE_DATA; + } else if (startPC[*current_indexPL] == 0) { + err = AEFX_ParseError_EXPECTING_MORE_DATA; + } else { + count = 0; + scan = buf; + while ((c = startPC[(*current_indexPL)++]) != 0) { + if (c == AEFX_Char_TAB) + break; + if (c == AEFX_Char_EOL) { + (*current_indexPL)--; + break; + } + + *scan++ = c; + + if (++count >= AEFX_CELL_SIZE) + break; + } + *scan = 0; + + // trim spaces from head + scan = buf; + while (isspace(*scan)) + scan++; + + strcpy(bufAC, scan); + + // trim spaces from end (guaranteed not to scan past start of string, because + // if the string were all spaces, it would be trimmed down to nothing in the + // head-trim step above + if (*bufAC) { + scan = bufAC + strlen(bufAC) - 1; + while (*scan == AEFX_Char_SPACE) { + *scan-- = 0; + } + } + } + + return err; + +} + + +/** AEFX_ParseFpLong + + Reads in the next cell in the input stream and converts it to a double. + The first non-space character must be numeric. + +**/ +PF_Err +AEFX_ParseFpLong( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_FpLong *dPF) /* << */ +{ + PF_Err err = PF_Err_NONE; + A_char c; + A_char *end_ptr; + A_char buf[AEFX_CELL_SIZE]; + + err = AEFX_ParseCell(in_data, out_data, startPC, current_indexPL, buf); + + if (!err) { + c = buf[0]; + + if (!isdigit(c) && c != '.' && c != '-') { + err = AEFX_ParseError_EXPECTING_A_NUMBER; + } else { + errno = 0; + *dPF = strtod(buf, &end_ptr); + } + } + + return err; +} + + + +PF_Err +AEFX_MatchCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *strPC, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_Boolean *matchPB0) /* << */ +{ + PF_Err err = PF_Err_NONE; + A_char buf[AEFX_CELL_SIZE]; + A_u_long origLu = *current_indexPL; + PF_Boolean found = 0; + + if (startPC[*current_indexPL] == AEFX_Char_EOL) { + found = 0; + err = AEFX_ParseError_EXPECTING_MORE_DATA; + } else { + err = AEFX_ParseCell(in_data, out_data, startPC, current_indexPL, buf); + + if (!err) { + found = STR_EQUAL(buf, strPC); + + if (!found) + *current_indexPL = origLu; + } + } + + if (!err && !found && matchPB0 == NULL) { + err = AEFX_ParseError_MATCH_ERROR; + } + + if (matchPB0) + *matchPB0 = found; + + return err; +} + + diff --git a/External/AE SDK/Util/AEFX_ArbParseHelper.h b/External/AE SDK/Util/AEFX_ArbParseHelper.h new file mode 100644 index 00000000..fa79fa3e --- /dev/null +++ b/External/AE SDK/Util/AEFX_ArbParseHelper.h @@ -0,0 +1,75 @@ +// AEFX_ArbParseHelper.h +// + +// This file has no header, and is designed to by #included as necessary. -jja 9/30/98 + + +#ifndef _H_AEFX_ArbParseHelper +#define _H_AEFX_ArbParseHelper + +#include + +#define AEFX_Char_TAB '\t' +#define AEFX_Char_EOL '\r' +#define AEFX_Char_SPACE ' ' + +#ifndef AEFX_CELL_SIZE +#define AEFX_CELL_SIZE 256 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +enum { + AEFX_ParseError_EXPECTING_MORE_DATA = 0x00FEBE00, + AEFX_ParseError_APPEND_ERROR, + AEFX_ParseError_EXPECTING_A_NUMBER, + AEFX_ParseError_MATCH_ERROR +}; +typedef A_long AEFX_ParseErrors; + + + +#ifndef STR_EQUAL + #define STR_EQUAL(A, B) (strcmp((A),(B)) == 0) +#endif + + +PF_Err +AEFX_AppendText( A_char *srcAC, /* >> */ + const A_u_long dest_sizeL, /* >> */ + A_char *destAC, /* <> */ + A_u_long *current_indexPLu); /* <> */ + + +PF_Err +AEFX_ParseFpLong( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_FpLong *dPF); /* << */ + + +PF_Err +AEFX_MatchCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *strPC, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + PF_Boolean *matchPB0); /* << */ + +PF_Err +AEFX_ParseCell( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const A_char *startPC, /* >> */ + A_u_long *current_indexPL, /* << */ + A_char *bufAC); /* << AEFX_CELL_SIZE */ + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/External/AE SDK/Util/AEFX_ChannelDepthTpl.h b/External/AE SDK/Util/AEFX_ChannelDepthTpl.h new file mode 100644 index 00000000..55c0546d --- /dev/null +++ b/External/AE SDK/Util/AEFX_ChannelDepthTpl.h @@ -0,0 +1,59 @@ +#ifndef _H_AEFX_CHANNELDEPTHTPL +#define _H_AEFX_CHANNELDEPTHTPL + +/** AEFX_ChannelDepthTpl.h + + (c) 2005 Adobe Systems Incorporated + +**/ + +// Basic pixel traits structure. This structure is never used per se, merely overidden -- see below. +template +struct PixelTraits { + typedef int PixType; + typedef int DataType; + static DataType + LutFunc(DataType input, const DataType *map); + + enum {max_value = 0 }; +}; + + +// 8 bit pixel types, constants, and functions +template <> +struct PixelTraits{ + typedef PF_Pixel8 PixType; + typedef u_char DataType; + static DataType + LutFunc(DataType input, const DataType *map){return map[input];} + enum {max_value = PF_MAX_CHAN8}; +}; + +// 16 bit pixel types, constants, and functions +template <> +struct PixelTraits{ + typedef PF_Pixel16 PixType; + typedef u_short DataType; + static u_short + LutFunc(u_short input, const u_short *map); + enum {max_value = PF_MAX_CHAN16}; +}; + + +inline u_short +PixelTraits::LutFunc(u_short input, + const u_short *map) +{ + u_short index = input >> (15 - PF_TABLE_BITS); + uint32_t fract = input & ((1 << (15 - PF_TABLE_BITS)) - 1); + A_long result = map [index]; + + if (fract) { + result += ((((A_long) map [index + 1] - result) * fract) + + (1 << (14 - PF_TABLE_BITS))) >> (15 - PF_TABLE_BITS); + } + return (u_short) result; + +} + +#endif //_H_AEFX_CHANNELDEPTHTPL \ No newline at end of file diff --git a/External/AE SDK/Util/AEFX_SuiteHelper.c b/External/AE SDK/Util/AEFX_SuiteHelper.c new file mode 100644 index 00000000..9ddd9b2a --- /dev/null +++ b/External/AE SDK/Util/AEFX_SuiteHelper.c @@ -0,0 +1,139 @@ +/************************************************************************** +* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2009 Adobe Systems Incorporated +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains the property of +* Adobe Systems Incorporated and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe Systems +* Incorporated and its suppliers and may be covered by U.S. and Foreign +* Patents,patents in process,and are protected by trade secret or copyright +* law. Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained from +* Adobe Systems Incorporated. +**************************************************************************/ + + +/** AEFX_SuiteHelper.c + + Contains helper routines for acquiring/releasing suites. + +**/ + +#include "AEFX_SuiteHelper.h" +#include + +PF_Err AEFX_AcquireSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0, /* >> */ + void **suite) /* << */ +{ + PF_Err err = PF_Err_NONE; + SPBasicSuite *bsuite; + + bsuite = in_data->pica_basicP; + + if (bsuite) { + (*bsuite->AcquireSuite)((char*)name, version, (const void**)suite); + + if (!*suite) { + err = PF_Err_BAD_CALLBACK_PARAM; + } + } else { + err = PF_Err_BAD_CALLBACK_PARAM; + } + + if (err) { + const char *error_stringPC = error_stringPC0 ? error_stringPC0 : "Not able to acquire AEFX Suite."; + + out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + + PF_SPRINTF(out_data->return_msg, error_stringPC); + } + + return err; +} + + + +PF_Err AEFX_ReleaseSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0) /* >> */ +{ + PF_Err err = PF_Err_NONE; + SPBasicSuite *bsuite; + + bsuite = in_data->pica_basicP; + + if (bsuite) { + (*bsuite->ReleaseSuite)((char*)name, version); + } else { + err = PF_Err_BAD_CALLBACK_PARAM; + } + + if (err) { + const char *error_stringPC = error_stringPC0 ? error_stringPC0 : "Not able to release AEFX Suite."; + + out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + + PF_SPRINTF(out_data->return_msg, error_stringPC); + } + + return err; +} + + +PF_Err AEFX_AcquireDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + DRAWBOT_Suites *suitesP) /* << */ +{ + PF_Err err = PF_Err_NONE; + + if (suitesP == NULL) { + out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + + PF_SPRINTF(out_data->return_msg, "NULL suite pointer passed to AEFX_AcquireDrawbotSuites"); + + err = PF_Err_UNRECOGNIZED_PARAM_TYPE; + } + + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent, NULL, (void **)&suitesP->drawbot_suiteP); + } + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent, NULL, (void **)&suitesP->supplier_suiteP); + } + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent, NULL, (void **)&suitesP->surface_suiteP); + } + if (!err) { + err = AEFX_AcquireSuite(in_data, out_data, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent, NULL, (void **)&suitesP->path_suiteP); + } + + return err; +} + + +PF_Err AEFX_ReleaseDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data) /* >> */ +{ + PF_Err err = PF_Err_NONE; + + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent, NULL); + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent, NULL); + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent, NULL); + AEFX_ReleaseSuite(in_data, out_data, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent, NULL); + + return err; +} + + + + diff --git a/External/AE SDK/Util/AEFX_SuiteHelper.h b/External/AE SDK/Util/AEFX_SuiteHelper.h new file mode 100644 index 00000000..2ede44c8 --- /dev/null +++ b/External/AE SDK/Util/AEFX_SuiteHelper.h @@ -0,0 +1,157 @@ +/************************************************************************** +* +* ADOBE CONFIDENTIAL +* ___________________ +* +* Copyright 2009 Adobe Systems Incorporated +* All Rights Reserved. +* +* NOTICE: All information contained herein is, and remains the property of +* Adobe Systems Incorporated and its suppliers, if any. The intellectual +* and technical concepts contained herein are proprietary to Adobe Systems +* Incorporated and its suppliers and may be covered by U.S. and Foreign +* Patents,patents in process,and are protected by trade secret or copyright +* law. Dissemination of this information or reproduction of this material +* is strictly forbidden unless prior written permission is obtained from +* Adobe Systems Incorporated. +**************************************************************************/ + +#ifndef AEFX_SUITE_HELPER_H +#define AEFX_SUITE_HELPER_H + + +/** AEFX_SuiteHelper.h + + Contains helper routines for acquiring/releasing suites. + + NOTE: If you're writing C++ plug-ins that support exceptions, use the AEGP_SuiteHandler class or AEFX_SuiteScoper. + +**/ + +#include +#include +#include +#include + + + +#ifdef __cplusplus + extern "C" { +#endif + +PF_Err AEFX_AcquireSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0, /* >> */ + void **suite); /* << */ + + +PF_Err AEFX_ReleaseSuite( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version, /* >> */ + const char *error_stringPC0); /* >> */ + + +PF_Err AEFX_AcquireDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + DRAWBOT_Suites *suiteP); /* << */ + + +PF_Err AEFX_ReleaseDrawbotSuites( PF_InData *in_data, /* >> */ + PF_OutData *out_data); /* >> */ + + +#ifdef __cplusplus + } +#endif + + +#ifdef __cplusplus + + template + class AEFX_SuiteHelperT + { + public: + AEFX_SuiteHelperT( PF_InData *in_data, /* >> */ + PF_OutData *out_data, /* >> */ + const char *name, /* >> */ + int32_t version) : /* >> */ + mInDataP(in_data), mOutDataP(out_data), mSuiteName(name), mSuiteVersion(version), mSuiteP(NULL) + { + void *suiteP(NULL); + + PF_Err err = AEFX_AcquireSuite(mInDataP, mOutDataP, mSuiteName, mSuiteVersion, NULL, &suiteP); + + if (err) { + A_THROW(err); + } + + mSuiteP = reinterpret_cast(suiteP); + } + + ~AEFX_SuiteHelperT() + { + (void)AEFX_ReleaseSuite(mInDataP, mOutDataP, mSuiteName, mSuiteVersion, NULL); + } + + const SuiteType* operator->() const + { + return mSuiteP; + } + + SuiteType* get() const + { + return mSuiteP; + } + + private: + + PF_InData *mInDataP; + PF_OutData *mOutDataP; + const char *mSuiteName; + int32_t mSuiteVersion; + SuiteType *mSuiteP; + }; + + + +// clients of this class probably should just be using the regular template +// instead + +class AEFX_DrawbotSuitesScoper +{ +public: + AEFX_DrawbotSuitesScoper(PF_InData *in_data, PF_OutData *out_data) + : + i_in_data(in_data), + i_out_data(out_data) + { + PF_Err err = AEFX_AcquireDrawbotSuites(in_data, out_data, &i_suites); + + if (err) { + A_THROW(err); + } + } + + inline DRAWBOT_Suites* Get() + { + return &i_suites; + } + + ~AEFX_DrawbotSuitesScoper() + { + AEFX_ReleaseDrawbotSuites(i_in_data, i_out_data); + } + +private: + DRAWBOT_Suites i_suites; + PF_InData *i_in_data; + PF_OutData *i_out_data; +}; + +#endif + + +#endif // AEFX_SUITE_HELPER_H diff --git a/External/AE SDK/Util/AEGP_SuiteHandler.cpp b/External/AE SDK/Util/AEGP_SuiteHandler.cpp new file mode 100644 index 00000000..146a5f5e --- /dev/null +++ b/External/AE SDK/Util/AEGP_SuiteHandler.cpp @@ -0,0 +1,66 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +/** AEGP_SuiteHandler.cpp + + Implementation of AEGP_SuiteHandler non-inlines. See AEGP_SuiteHandler.h for usage. + + created 9/11/2000 jms +**/ + + +#include +#include + +AEGP_SuiteHandler::AEGP_SuiteHandler(const SPBasicSuite *pica_basicP) : + i_pica_basicP(pica_basicP) +{ + AEFX_CLR_STRUCT(i_suites); + + if (!i_pica_basicP) { //can't construct w/out basic suite, everything else is demand loaded + MissingSuiteError(); + } +} + +AEGP_SuiteHandler::~AEGP_SuiteHandler() +{ + ReleaseAllSuites(); +} + +// Had to go to the header file to be inlined to please CW mach-o target +/*void *AEGP_SuiteHandler::pLoadSuite(A_char *nameZ, A_long versionL) const +{ + const void *suiteP; + A_long err = i_pica_basicP->AcquireSuite(nameZ, versionL, &suiteP); + + if (err || !suiteP) { + MissingSuiteError(); + } + + return (void*)suiteP; +}*/ + +// Free a particular suite. Ignore errors, because, what is there to be done if release fails? +void AEGP_SuiteHandler::ReleaseSuite(const A_char *nameZ, A_long versionL) +{ + i_pica_basicP->ReleaseSuite(nameZ, versionL); +} + diff --git a/External/AE SDK/Util/AEGP_SuiteHandler.h b/External/AE SDK/Util/AEGP_SuiteHandler.h new file mode 100644 index 00000000..59bc043b --- /dev/null +++ b/External/AE SDK/Util/AEGP_SuiteHandler.h @@ -0,0 +1,601 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + + +/** AEGP_SuiteHandler.h + + DEPRECATED: + This way of doing things is out of date. See AEFX_SuiteHandlerTemplate.h for the + new way of doing things. + + -kjw 2/28/2014 + + A very helpful class that manages demand loading and automatic, exception-safe freeing + of AEGP suites. + + USAGE INSTRUCTIONS: + + The accompanying file, AEGP_SuiteHandler.cpp, is designed to be compiled right into + the client application or plug-in. + + You'll get a link error. + + This is because AEGP_SuiteHandler.cpp lacks a definition for the MissingSuiteError() + method. You must provide one to define the error handling behaviour of the class. + This function may or may not display an error message etc. but it must end + by throwing an exception. It cannot return. + + Other than that, usage is pretty trivial. Construct with a pointer to the PICA + basic suite, and then call the public method to obtain lazily loaded pointers + to other AEGP suites. Upon desctruction, all loaded suites are freed (so this class + is really handy for writing exception-safe AEGP code.) + + NOTE!!! If you need to upgrade a suite, DO NOT SIMPLY UPDATE THE VERSION NUMBER. + You should: + 1. Add a new member to the Suites structure for that suite. + 2. Add the boiler plate macro to release the suite in ReleaseAllSuites (AEGP_SUITE_RELEASE_BOILERPLATE). + 3. Add the boiler plate macro to define the suite. (AEGP_SUITE_ACCESS_BOILERPLATE) + + If you have any questions, ask me. -jja 5/7/2004 + + If you'll be using ADM suites, #define I_NEED_ADM_SUPPORT before #including AEGP_SuiteHandler.h. + + -bbb 9/16/2004 +**/ + +#ifndef _H_AEGP_SUITEHANDLER +#define _H_AEGP_SUITEHANDLER + +#include +#include +#include +#include +#include +#include +#include + +#ifdef I_NEED_ADM_SUPPORT +#include +#include +#include +#include +#include +#include +#include +#endif + +// Suite registration and handling object +class AEGP_SuiteHandler { + +private: + // forbid copy construct + AEGP_SuiteHandler(const AEGP_SuiteHandler&) {} + AEGP_SuiteHandler& operator=(const AEGP_SuiteHandler&) { return *this; } + + // basic suite pointer + const SPBasicSuite *i_pica_basicP; + + // Suites we can register. These are mutable because they are demand loaded using a const object. + + struct Suites { + AEGP_KeyframeSuite4 *keyframe_suite4P; + AEGP_StreamSuite3 *stream_suite3P; + AEGP_StreamSuite4 *stream_suite4P; + AEGP_StreamSuite5 *stream_suite5P; + AEGP_MarkerSuite1 *marker_suite1P; + AEGP_MarkerSuite2 *marker_suite2P; + AEGP_MarkerSuite3 *marker_suite3P; + AEGP_CompSuite4 *comp_suite4P; + AEGP_CompSuite5 *comp_suite5P; + AEGP_CompSuite6 *comp_suite6P; + AEGP_CompSuite7 *comp_suite7P; + AEGP_CompSuite8 *comp_suite8P; + AEGP_CompSuite9 *comp_suite9P; + AEGP_CompSuite10 *comp_suite10P; + AEGP_CompSuite11 *comp_suite11P; + AEGP_LayerSuite3 *layer_suite3P; + AEGP_LayerSuite4 *layer_suite4P; + AEGP_StreamSuite2 *stream_suite2P; + AEGP_DynamicStreamSuite2 *dynamic_stream_suite2P; + AEGP_DynamicStreamSuite3 *dynamic_stream_suite3P; + AEGP_DynamicStreamSuite4 *dynamic_stream_suite4P; + AEGP_KeyframeSuite3 *keyframe_suite3P; + AEGP_CanvasSuite5 *canvas_suite5P; + AEGP_CanvasSuite6 *canvas_suite6P; + AEGP_CanvasSuite7 *canvas_suite7P; + AEGP_CanvasSuite8 *canvas_suite8P; + AEGP_CameraSuite2 *camera_suite2P; + AEGP_RegisterSuite5 *register_suite5P; + AEGP_MemorySuite1 *memory_suite1P; + AEGP_ItemViewSuite1 *item_view_suite1P; + AEGP_ItemSuite9 *item_suite9P; + AEGP_ItemSuite8 *item_suite8P; + AEGP_ItemSuite7 *item_suite7P; + AEGP_ItemSuite6 *item_suite6P; + AEGP_ItemSuite5 *item_suite5P; + AEGP_ItemSuite1 *item_suite1P; + AEGP_LightSuite1 *light_suite1P; + AEGP_LightSuite2 *light_suite2P; + AEGP_EffectSuite1 *effect_suite1P; + AEGP_EffectSuite2 *effect_suite2P; + AEGP_EffectSuite3 *effect_suite3P; + AEGP_EffectSuite4 *effect_suite4P; + AEGP_MaskSuite4 *mask_suite4P; + AEGP_MaskOutlineSuite1 *mask_outline_suite1P; + AEGP_MaskOutlineSuite2 *mask_outline_suite2P; + AEGP_MaskOutlineSuite3 *mask_outline_suite3P; + AEGP_CommandSuite1 *command_suite1P; + AEGP_UtilitySuite3 *utility_suite3P; + AEGP_RenderSuite1 *render_suite1P; + AEGP_RenderSuite2 *render_suite2P; + AEGP_RenderSuite3 *render_suite3P; + AEGP_RenderSuite4 *render_suite4P; + AEGP_RenderSuite5 *render_suite5P; + PF_ANSICallbacksSuite1 *ansi_callbacks_suite1P; + PF_HandleSuite1 *handle_suite1P; + PF_FillMatteSuite2 *fill_matte_suite2P; + PF_WorldTransformSuite1 *world_transform_suite1P; + AEGP_QueryXformSuite2 *query_xform_suite2P; + AEGP_CompositeSuite2 *composite_suite2P; + PF_WorldSuite1 *world_suite1P; + AEGP_PFInterfaceSuite1 *pf_interface_suite1P; + AEGP_MathSuite1 *math_suite1P; + PF_AdvTimeSuite4 *adv_time_suite4P; + PF_PathQuerySuite1 *path_query_suite1P; + PF_PathDataSuite1 *path_data_suite1P; + PF_ParamUtilsSuite3 *param_utils_suite3P; + PFAppSuite4 *app_suite4P; + PFAppSuite5 *app_suite5P; + PFAppSuite6 *app_suite6P; + PF_AdvAppSuite2 *adv_app_suite2P; + AEGP_IOInSuite4 *io_in_suite4P; + AEGP_IOOutSuite4 *io_out_suite4P; + AEGP_PersistentDataSuite3 *persistent_data_suite3P; + AEGP_PersistentDataSuite4 *persistent_data_suite4P; + AEGP_RenderQueueSuite1 *render_queue_suite1P; + AEGP_RQItemSuite2 *rq_item_suite2P; + AEGP_OutputModuleSuite4 *output_module_suite4P; + AEGP_FIMSuite3 *fim_suite3P; + PF_Sampling8Suite1 *sampling_8_suite1P; + PF_Sampling16Suite1 *sampling_16_suite1P; + PF_Iterate8Suite1 *iterate_8_suite1P; + PF_iterate16Suite1 *iterate_16_suite1P; + PF_iterateFloatSuite1 *iterate_float_suite1P; + PF_Iterate8Suite2 *iterate_8_suite2P; + PF_iterate16Suite2 *iterate_16_suite2P; + PF_iterateFloatSuite2 *iterate_float_suite2P; + AEGP_CollectionSuite2 *collection_suite2P; + AEGP_TextDocumentSuite1 *text_document_suite1P; + AEGP_SoundDataSuite1 *sound_data_suite1P; + AEGP_IterateSuite1 *aegp_iterate_suite1P; + AEGP_IterateSuite2 *aegp_iterate_suite2P; + AEGP_TextLayerSuite1 *text_layer_suite1P; + AEGP_ArtisanUtilSuite1 *artisan_util_suite1P; + AEGP_WorldSuite2 *aegp_world_suite_2P; + AEGP_WorldSuite3 *aegp_world_suite_3P; + AEGP_RenderOptionsSuite1 *render_options_suite_1P; + AEGP_LayerRenderOptionsSuite1 *layer_render_options_suite_1P; + AEGP_LayerRenderOptionsSuite2 *layer_render_options_suite_2P; + AEGP_RenderAsyncManagerSuite1 *async_manager_suite_1P; + AEGP_TrackerSuite1 *tracker_suite_1P; + AEGP_TrackerUtilitySuite1 *tracker_utility_suite_1P; + PF_HelperSuite2 *helper_suite_2P; + AEGP_LayerSuite5 *layer_suite_5P; + AEGP_LayerSuite6 *layer_suite_6P; + AEGP_LayerSuite7 *layer_suite_7P; + AEGP_LayerSuite8 *layer_suite_8P; + +#ifdef I_NEED_ADM_SUPPORT + ADMBasicSuite8 *adm_basic_suite_8P; + ADMDialogSuite8 *adm_dialog_suite_8P; + ADMDialogGroupSuite3 *adm_dialog_group_suite_3P; + ADMItemSuite8 *adm_item_suite_8P; + ADMListSuite3 *adm_list_suite_3P; + ADMEntrySuite5 *adm_entry_suite_5P; + ADMNotifierSuite2 *adm_notifier_suite_2P; +#endif + AEGP_LayerSuite1 *layer_suite_1P; + AEGP_MaskSuite1 *mask_suite_1P; + AEGP_MaskSuite5 *mask_suite_5P; + AEGP_MaskSuite6 *mask_suite_6P; + AEGP_StreamSuite1 *stream_suite_1P; + AEGP_CompSuite1 *comp_suite_1P; + AEGP_CollectionSuite1 *collection_suite_1P; + AEGP_KeyframeSuite1 *keyframe_suite_1P; + PF_AdvAppSuite1 *adv_app_suite_1P; + AEGP_UtilitySuite1 *utility_suite_1P; + AEGP_RenderOptionsSuite2 *render_options_suite_2P; + AEGP_ProjSuite5 *proj_suite_5P; + AEGP_ProjSuite6 *proj_suite_6P; + AEGP_FootageSuite5 *footage_suite_5P; + AEGP_RQItemSuite3 *rq_item_suite_3P; + AEGP_UtilitySuite4 *utility_suite_4P; + AEGP_ColorSettingsSuite3 *color_settings_suite_3P; + AEGP_ColorSettingsSuite2 *color_settings_suite_2P; + AEGP_ColorSettingsSuite1 *color_settings_suite_1P; + PF_AdvItemSuite1 *adv_item_suite_1P; + AEGP_RenderOptionsSuite3 *render_options_suite_3P; + PF_ColorParamSuite1 *color_param_suite_1P; + PF_SamplingFloatSuite1 *sampling_float_suite_1P; + AEGP_UtilitySuite5 *utility_suite_5P; + AEGP_UtilitySuite6 *utility_suite_6P; + PF_EffectCustomUISuite1 *custom_ui_suite1P; + PF_EffectCustomUISuite2 *custom_ui_suite2P; + PF_EffectCustomUIOverlayThemeSuite1 *custom_ui_theme_suite1P; + + //Drawbot Suites + DRAWBOT_DrawbotSuiteCurrent *drawing_suite_currentP; + DRAWBOT_SupplierSuiteCurrent *drawbot_supplier_suite_currentP; + DRAWBOT_SurfaceSuiteCurrent *drawbot_surface_suite_currentP; + DRAWBOT_PathSuiteCurrent *drawbot_path_suite_currentP; + + SPSuitesSuite *suites_suite_2P; + }; + + mutable Suites i_suites; + + // private methods + // I had to make this inline by moving the definition from the .cpp file + // CW mach-o target was freaking otherwise when seeing the call to this + // function in inlined public suite accessors below + + void *LoadSuite(const A_char *nameZ, A_long versionL) const + { + const void *suiteP; + A_long err = i_pica_basicP->AcquireSuite(nameZ, versionL, &suiteP); + + if (err || !suiteP) { + MissingSuiteError(); + } + + return (void*)suiteP; + } + + void ReleaseSuite(const A_char *nameZ, A_long versionL); + void ReleaseAllSuites() + { + #define AEGP_SUITE_RELEASE_BOILERPLATE(MEMBER_NAME, kSUITE_NAME, kVERSION_NAME) \ + if (i_suites.MEMBER_NAME) { \ + ReleaseSuite(kSUITE_NAME, kVERSION_NAME); \ + } + + AEGP_SUITE_RELEASE_BOILERPLATE(marker_suite1P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(marker_suite2P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(marker_suite3P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite3P, kAEGPLayerSuite, kAEGPLayerSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite4P, kAEGPLayerSuite, kAEGPLayerSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite5P, kAEGPStreamSuite, kAEGPStreamSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite4P, kAEGPStreamSuite, kAEGPStreamSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite3P, kAEGPStreamSuite, kAEGPStreamSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite2P, kAEGPStreamSuite, kAEGPStreamSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(stream_suite_1P, kAEGPStreamSuite, kAEGPStreamSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(dynamic_stream_suite2P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(dynamic_stream_suite3P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(dynamic_stream_suite4P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(keyframe_suite4P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(keyframe_suite3P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(keyframe_suite_1P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite4P, kAEGPCompSuite, kAEGPCompSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite5P, kAEGPCompSuite, kAEGPCompSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite6P, kAEGPCompSuite, kAEGPCompSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite7P, kAEGPCompSuite, kAEGPCompSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite8P, kAEGPCompSuite, kAEGPCompSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite9P, kAEGPCompSuite, kAEGPCompSuiteVersion9); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite10P, kAEGPCompSuite, kAEGPCompSuiteVersion10); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite11P, kAEGPCompSuite, kAEGPCompSuiteVersion11); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite5P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite6P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite7P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(canvas_suite8P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(camera_suite2P, kAEGPCameraSuite, kAEGPCameraSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(register_suite5P, kAEGPRegisterSuite, kAEGPRegisterSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(item_view_suite1P, kAEGPItemViewSuite, kAEGPItemViewSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite8P, kAEGPItemSuite, kAEGPItemSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite7P, kAEGPItemSuite, kAEGPItemSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite6P, kAEGPItemSuite, kAEGPItemSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite5P, kAEGPItemSuite, kAEGPItemSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(item_suite1P, kAEGPItemSuite, kAEGPItemSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(pf_interface_suite1P, kAEGPPFInterfaceSuite, kAEGPPFInterfaceSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(math_suite1P, kAEGPMathSuite, kAEGPMathSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_time_suite4P, kPFAdvTimeSuite, kPFAdvTimeSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(path_query_suite1P, kPFPathQuerySuite, kPFPathQuerySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(memory_suite1P, kAEGPMemorySuite, kAEGPMemorySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(path_data_suite1P, kPFPathDataSuite, kPFPathDataSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(param_utils_suite3P, kPFParamUtilsSuite, kPFParamUtilsSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(app_suite4P, kPFAppSuite, kPFAppSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(app_suite5P, kPFAppSuite, kPFAppSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(app_suite6P, kPFAppSuite, kPFAppSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_app_suite2P, kPFAdvAppSuite, kPFAdvAppSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(light_suite1P, kAEGPLightSuite, kAEGPLightSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(light_suite2P, kAEGPLightSuite, kAEGPLightSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite1P, kAEGPEffectSuite, kAEGPEffectSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite2P, kAEGPEffectSuite, kAEGPEffectSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite3P, kAEGPEffectSuite, kAEGPEffectSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(effect_suite4P, kAEGPEffectSuite, kAEGPEffectSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite4P, kAEGPMaskSuite, kAEGPMaskSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_outline_suite1P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_outline_suite2P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_outline_suite3P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(command_suite1P, kAEGPCommandSuite, kAEGPCommandSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite3P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite1P, kAEGPRenderSuite, kAEGPRenderSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite2P, kAEGPRenderSuite, kAEGPRenderSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite3P, kAEGPRenderSuite, kAEGPRenderSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite4P, kAEGPRenderSuite, kAEGPRenderSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(render_suite5P, kAEGPRenderSuite, kAEGPRenderSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(ansi_callbacks_suite1P, kPFANSISuite, kPFANSISuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(handle_suite1P, kPFHandleSuite, kPFHandleSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(fill_matte_suite2P, kPFFillMatteSuite, kPFFillMatteSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(world_transform_suite1P, kPFWorldTransformSuite, kPFWorldTransformSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(query_xform_suite2P, kAEGPQueryXformSuite, kAEGPQueryXformSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(composite_suite2P, kAEGPCompositeSuite, kAEGPCompositeSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(world_suite1P, kPFWorldSuite, kPFWorldSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(io_in_suite4P, kAEGPIOInSuite, kAEGPIOInSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(io_out_suite4P, kAEGPIOOutSuite, kAEGPIOOutSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(render_queue_suite1P, kAEGPRenderQueueSuite, kAEGPRenderQueueSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(rq_item_suite2P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(output_module_suite4P, kAEGPOutputModuleSuite, kAEGPOutputModuleSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(fim_suite3P, kAEGPFIMSuite, kAEGPFIMSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(math_suite1P, kAEGPMathSuite, kAEGPMathSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_time_suite4P, kPFAdvTimeSuite, kPFAdvTimeSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(sampling_8_suite1P, kPFSampling8Suite, kPFSampling8SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(sampling_16_suite1P, kPFSampling16Suite, kPFSampling16SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_8_suite1P, kPFIterate8Suite, kPFIterate8SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_16_suite1P, kPFIterate16Suite, kPFIterate16SuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_float_suite1P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_8_suite2P, kPFIterate8Suite, kPFIterate8SuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_16_suite2P, kPFIterate16Suite, kPFIterate16SuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(iterate_float_suite2P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(collection_suite2P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(text_document_suite1P, kAEGPTextDocumentSuite, kAEGPTextDocumentSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(sound_data_suite1P, kAEGPSoundDataSuite, kAEGPSoundDataVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(text_layer_suite1P, kAEGPTextLayerSuite, kAEGPTextLayerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(artisan_util_suite1P, kAEGPArtisanUtilSuite, kAEGPArtisanUtilSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(aegp_world_suite_2P, kAEGPWorldSuite, kAEGPWorldSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(aegp_world_suite_3P, kAEGPWorldSuite, kAEGPWorldSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(render_options_suite_1P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(tracker_suite_1P, kAEGPTrackerSuite, kAEGPTrackerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(tracker_utility_suite_1P, kAEGPTrackerUtilitySuite, kAEGPTrackerUtilitySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(helper_suite_2P, kPFHelperSuite2, kPFHelperSuite2Version2); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_5P, kAEGPLayerSuite, kAEGPLayerSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_6P, kAEGPLayerSuite, kAEGPLayerSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_7P, kAEGPLayerSuite, kAEGPLayerSuiteVersion7); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_8P, kAEGPLayerSuite, kAEGPLayerSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_item_suite_1P, kPFAdvItemSuite, kPFAdvItemSuiteVersion1); +#ifdef I_NEED_ADM_SUPPORT + AEGP_SUITE_RELEASE_BOILERPLATE(adm_basic_suite_8P, kADMBasicSuite, kADMBasicSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_dialog_suite_8P, kADMDialogSuite, kADMDialogSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_dialog_group_suite_3P, kADMDialogGroupSuite, kADMDialogGroupSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_item_suite_8P, kADMItemSuite, kADMItemSuiteVersion8); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_list_suite_3P, kADMListSuite, kADMListSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_entry_suite_5P, kADMEntrySuite, kADMEntrySuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(adm_notifier_suite_2P, kADMNotifierSuite, kADMNotifierSuiteVersion2); +#endif + AEGP_SUITE_RELEASE_BOILERPLATE(layer_suite_1P, kAEGPLayerSuite, kAEGPLayerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite_1P, kAEGPMaskSuite, kAEGPMaskSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite_5P, kAEGPMaskSuite, kAEGPMaskSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(mask_suite_6P, kAEGPMaskSuite, kAEGPMaskSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(comp_suite_1P, kAEGPCompSuite, kAEGPCompSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(collection_suite_1P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(adv_app_suite_1P, kPFAdvAppSuite, kPFAdvAppSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_1P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(render_options_suite_2P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_render_options_suite_1P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(layer_render_options_suite_2P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(async_manager_suite_1P, kAEGPRenderAsyncManagerSuite, kAEGPRenderAsyncManagerSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(proj_suite_5P, kAEGPProjSuite, kAEGPProjSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(proj_suite_6P, kAEGPProjSuite, kAEGPProjSuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(footage_suite_5P, kAEGPFootageSuite, kAEGPFootageSuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(rq_item_suite_3P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_4P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(persistent_data_suite4P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion4); + AEGP_SUITE_RELEASE_BOILERPLATE(persistent_data_suite3P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(color_settings_suite_3P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion3); + AEGP_SUITE_RELEASE_BOILERPLATE(color_settings_suite_2P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(color_settings_suite_1P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(color_param_suite_1P, kPFColorParamSuite, kPFColorParamSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(sampling_float_suite_1P, kPFSamplingFloatSuite, kPFSamplingFloatSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_5P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion5); + AEGP_SUITE_RELEASE_BOILERPLATE(utility_suite_6P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion6); + AEGP_SUITE_RELEASE_BOILERPLATE(custom_ui_suite1P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(custom_ui_suite2P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion2); + AEGP_SUITE_RELEASE_BOILERPLATE(custom_ui_theme_suite1P, kPFEffectCustomUIOverlayThemeSuite, kPFEffectCustomUIOverlayThemeSuiteVersion1); + AEGP_SUITE_RELEASE_BOILERPLATE(drawing_suite_currentP, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(drawbot_supplier_suite_currentP, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(drawbot_surface_suite_currentP, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(drawbot_path_suite_currentP, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent); + AEGP_SUITE_RELEASE_BOILERPLATE(suites_suite_2P, kSPSuitesSuite, kSPSuitesSuiteVersion); +} + + // Here is the error handling function which must be defined. + // It must exit by throwing an exception, it cannot return. + void MissingSuiteError() const; + +public: + // To construct, pass pica_basicP + AEGP_SuiteHandler(const SPBasicSuite *pica_basicP); + ~AEGP_SuiteHandler(); + + const SPBasicSuite *Pica() const { return i_pica_basicP; } + + #define AEGP_SUITE_ACCESS_BOILERPLATE(SUITE_NAME, VERSION_NUMBER, SUITE_PREFIX, MEMBER_NAME, kSUITE_NAME, kVERSION_NAME) \ + SUITE_PREFIX##SUITE_NAME##VERSION_NUMBER *SUITE_NAME##VERSION_NUMBER() const \ + { \ + if (i_suites.MEMBER_NAME == NULL) { \ + i_suites.MEMBER_NAME = (SUITE_PREFIX##SUITE_NAME##VERSION_NUMBER*) \ + LoadSuite(kSUITE_NAME, kVERSION_NAME); \ + } \ + return i_suites.MEMBER_NAME; \ + } + + AEGP_SUITE_ACCESS_BOILERPLATE(MarkerSuite, 1, AEGP_, marker_suite1P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MarkerSuite, 2, AEGP_, marker_suite2P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(MarkerSuite, 3, AEGP_, marker_suite3P, kAEGPMarkerSuite, kAEGPMarkerSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 3, AEGP_, layer_suite3P, kAEGPLayerSuite, kAEGPLayerSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 4, AEGP_, layer_suite4P, kAEGPLayerSuite, kAEGPLayerSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 5, AEGP_, stream_suite5P, kAEGPStreamSuite, kAEGPStreamSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 4, AEGP_, stream_suite4P, kAEGPStreamSuite, kAEGPStreamSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 3, AEGP_, stream_suite3P, kAEGPStreamSuite, kAEGPStreamSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 2, AEGP_, stream_suite2P, kAEGPStreamSuite, kAEGPStreamSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(StreamSuite, 1, AEGP_, stream_suite_1P, kAEGPStreamSuite, kAEGPStreamSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(DynamicStreamSuite, 2, AEGP_, dynamic_stream_suite2P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(DynamicStreamSuite, 3, AEGP_, dynamic_stream_suite3P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(DynamicStreamSuite, 4, AEGP_, dynamic_stream_suite4P, kAEGPDynamicStreamSuite, kAEGPDynamicStreamSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(KeyframeSuite, 4, AEGP_, keyframe_suite4P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(KeyframeSuite, 3, AEGP_, keyframe_suite3P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(KeyframeSuite, 1, AEGP_, keyframe_suite_1P, kAEGPKeyframeSuite, kAEGPKeyframeSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 4, AEGP_, comp_suite4P, kAEGPCompSuite, kAEGPCompSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 5, AEGP_, comp_suite5P, kAEGPCompSuite, kAEGPCompSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 6, AEGP_, comp_suite6P, kAEGPCompSuite, kAEGPCompSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 7, AEGP_, comp_suite7P, kAEGPCompSuite, kAEGPCompSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 8, AEGP_, comp_suite8P, kAEGPCompSuite, kAEGPCompSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 9, AEGP_, comp_suite9P, kAEGPCompSuite, kAEGPCompSuiteVersion9); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 10, AEGP_, comp_suite10P, kAEGPCompSuite, kAEGPCompSuiteVersion10); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 11, AEGP_, comp_suite11P, kAEGPCompSuite, kAEGPCompSuiteVersion11); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 5, AEGP_, canvas_suite5P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 6, AEGP_, canvas_suite6P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 7, AEGP_, canvas_suite7P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(CanvasSuite, 8, AEGP_, canvas_suite8P, kAEGPCanvasSuite, kAEGPCanvasSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(CameraSuite, 2, AEGP_, camera_suite2P, kAEGPCameraSuite, kAEGPCameraSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RegisterSuite, 5, AEGP_, register_suite5P, kAEGPRegisterSuite, kAEGPRegisterSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(MemorySuite, 1, AEGP_, memory_suite1P, kAEGPMemorySuite, kAEGPMemorySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemViewSuite, 1, AEGP_, item_view_suite1P, kAEGPItemViewSuite, kAEGPItemViewSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 9, AEGP_, item_suite9P, kAEGPItemSuite, kAEGPItemSuiteVersion9); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 8, AEGP_, item_suite8P, kAEGPItemSuite, kAEGPItemSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 7, AEGP_, item_suite7P, kAEGPItemSuite, kAEGPItemSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 6, AEGP_, item_suite6P, kAEGPItemSuite, kAEGPItemSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 5, AEGP_, item_suite5P, kAEGPItemSuite, kAEGPItemSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 1, AEGP_, item_suite1P, kAEGPItemSuite, kAEGPItemSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(PFInterfaceSuite, 1, AEGP_, pf_interface_suite1P, kAEGPPFInterfaceSuite, kAEGPPFInterfaceSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MathSuite, 1, AEGP_, math_suite1P, kAEGPMathSuite, kAEGPMathSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvTimeSuite, 4, PF_, adv_time_suite4P, kPFAdvTimeSuite, kPFAdvTimeSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(PathQuerySuite, 1, PF_, path_query_suite1P, kPFPathQuerySuite, kPFPathQuerySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(PathDataSuite, 1, PF_, path_data_suite1P, kPFPathDataSuite, kPFPathDataSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ParamUtilsSuite, 3, PF_, param_utils_suite3P, kPFParamUtilsSuite, kPFParamUtilsSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(AppSuite, 4, PF, app_suite4P, kPFAppSuite, kPFAppSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(AppSuite, 5, PF, app_suite5P, kPFAppSuite, kPFAppSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(AppSuite, 6, PF, app_suite6P, kPFAppSuite, kPFAppSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvAppSuite, 2, PF_, adv_app_suite2P, kPFAdvAppSuite, kPFAdvAppSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(LightSuite, 1, AEGP_, light_suite1P, kAEGPLightSuite, kAEGPLightSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(LightSuite, 2, AEGP_, light_suite2P, kAEGPLightSuite, kAEGPLightSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 1, AEGP_, effect_suite1P, kAEGPEffectSuite, kAEGPEffectSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 2, AEGP_, effect_suite2P, kAEGPEffectSuite, kAEGPEffectSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 3, AEGP_, effect_suite3P, kAEGPEffectSuite, kAEGPEffectSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectSuite, 4, AEGP_, effect_suite4P, kAEGPEffectSuite, kAEGPEffectSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 4, AEGP_, mask_suite4P, kAEGPMaskSuite, kAEGPMaskSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskOutlineSuite, 1, AEGP_, mask_outline_suite1P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskOutlineSuite, 2, AEGP_, mask_outline_suite2P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskOutlineSuite, 3, AEGP_, mask_outline_suite3P, kAEGPMaskOutlineSuite, kAEGPMaskOutlineSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(CommandSuite, 1, AEGP_, command_suite1P, kAEGPCommandSuite, kAEGPCommandSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 3, AEGP_, utility_suite3P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 1, AEGP_, render_suite1P, kAEGPRenderSuite, kAEGPRenderSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 2, AEGP_, render_suite2P, kAEGPRenderSuite, kAEGPRenderSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 3, AEGP_, render_suite3P, kAEGPRenderSuite, kAEGPRenderSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 4, AEGP_, render_suite4P, kAEGPRenderSuite, kAEGPRenderSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderSuite, 5, AEGP_, render_suite5P, kAEGPRenderSuite, kAEGPRenderSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(ANSICallbacksSuite, 1, PF_, ansi_callbacks_suite1P, kPFANSISuite, kPFANSISuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(HandleSuite, 1, PF_, handle_suite1P, kPFHandleSuite, kPFHandleSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(FillMatteSuite, 2, PF_, fill_matte_suite2P, kPFFillMatteSuite, kPFFillMatteSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldTransformSuite, 1, PF_, world_transform_suite1P, kPFWorldTransformSuite, kPFWorldTransformSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(QueryXformSuite, 2, AEGP_, query_xform_suite2P, kAEGPQueryXformSuite, kAEGPQueryXformSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(CompositeSuite, 2, AEGP_, composite_suite2P, kAEGPCompositeSuite, kAEGPCompositeSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldSuite, 1, PF_, world_suite1P, kPFWorldSuite, kPFWorldSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IOInSuite, 4, AEGP_, io_in_suite4P, kAEGPIOInSuite, kAEGPIOInSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(IOOutSuite, 4, AEGP_, io_out_suite4P, kAEGPIOOutSuite, kAEGPIOOutSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderQueueSuite, 1, AEGP_, render_queue_suite1P, kAEGPRenderQueueSuite, kAEGPRenderQueueSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(RQItemSuite, 2, AEGP_, rq_item_suite2P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(OutputModuleSuite, 4, AEGP_, output_module_suite4P, kAEGPOutputModuleSuite, kAEGPOutputModuleSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(FIMSuite, 3, AEGP_, fim_suite3P, kAEGPFIMSuite, kAEGPFIMSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(Sampling8Suite, 1, PF_, sampling_8_suite1P, kPFSampling8Suite, kPFSampling8SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Sampling16Suite, 1, PF_, sampling_16_suite1P, kPFSampling16Suite, kPFSampling16SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate8Suite, 1, PF_, iterate_8_suite1P, kPFIterate8Suite, kPFIterate8SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate16Suite, 1, PF_, iterate_16_suite1P, kPFIterate16Suite, kPFIterate16SuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateFloatSuite, 1, PF_, iterate_float_suite1P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate8Suite, 2, PF_, iterate_8_suite2P, kPFIterate8Suite, kPFIterate8SuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(Iterate16Suite, 2, PF_, iterate_16_suite2P, kPFIterate16Suite, kPFIterate16SuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateFloatSuite, 2, PF_, iterate_float_suite2P, kPFIterateFloatSuite, kPFIterateFloatSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(CollectionSuite, 2, AEGP_, collection_suite2P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(TextDocumentSuite, 1, AEGP_, text_document_suite1P, kAEGPTextDocumentSuite, kAEGPTextDocumentSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(SoundDataSuite, 1, AEGP_, sound_data_suite1P, kAEGPSoundDataSuite, kAEGPSoundDataVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateSuite, 1, AEGP_, aegp_iterate_suite1P, kAEGPIterateSuite, kAEGPIterateSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(IterateSuite, 2, AEGP_, aegp_iterate_suite2P, kAEGPIterateSuite, kAEGPIterateSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(TextLayerSuite, 1, AEGP_, text_layer_suite1P, kAEGPTextLayerSuite, kAEGPTextLayerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ArtisanUtilSuite, 1, AEGP_, artisan_util_suite1P, kAEGPArtisanUtilSuite, kAEGPArtisanUtilSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldSuite, 2, AEGP_, aegp_world_suite_2P, kAEGPWorldSuite, kAEGPWorldSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(WorldSuite, 3, AEGP_, aegp_world_suite_3P, kAEGPWorldSuite, kAEGPWorldSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderOptionsSuite, 1, AEGP_, render_options_suite_1P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(TrackerSuite, 1, AEGP_, tracker_suite_1P, kAEGPTrackerSuite, kAEGPTrackerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(TrackerUtilitySuite, 1, AEGP_, tracker_utility_suite_1P, kAEGPTrackerUtilitySuite, kAEGPTrackerUtilitySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(HelperSuite, 2, PF_, helper_suite_2P, kPFHelperSuite2, kPFHelperSuite2Version2); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 5, AEGP_, layer_suite_5P, kAEGPLayerSuite, kAEGPLayerSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 6, AEGP_, layer_suite_6P, kAEGPLayerSuite, kAEGPLayerSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 7, AEGP_, layer_suite_7P, kAEGPLayerSuite, kAEGPLayerSuiteVersion7); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 8, AEGP_, layer_suite_8P, kAEGPLayerSuite, kAEGPLayerSuiteVersion8); +#ifdef I_NEED_ADM_SUPPORT + AEGP_SUITE_ACCESS_BOILERPLATE(BasicSuite, 8, ADM, adm_basic_suite_8P, kADMBasicSuite, kADMBasicSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(DialogSuite, 8, ADM, adm_dialog_suite_8P, kADMDialogSuite, kADMDialogSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(DialogGroupSuite, 3, ADM, adm_dialog_group_suite_3P, kADMDialogGroupSuite, kADMDialogGroupSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(ItemSuite, 8, ADM, adm_item_suite_8P, kADMItemSuite, kADMItemSuiteVersion8); + AEGP_SUITE_ACCESS_BOILERPLATE(ListSuite, 3, ADM, adm_list_suite_3P, kADMListSuite, kADMListSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(EntrySuite, 5, ADM, adm_entry_suite_5P, kADMEntrySuite, kADMEntrySuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(NotifierSuite, 2, ADM, adm_notifier_suite_2P, kADMNotifierSuite, kADMNotifierSuiteVersion2); +#endif + AEGP_SUITE_ACCESS_BOILERPLATE(LayerSuite, 1, AEGP_, layer_suite_1P, kAEGPLayerSuite, kAEGPLayerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvItemSuite, 1, PF_, adv_item_suite_1P, kPFAdvItemSuite, kPFAdvItemSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 1, AEGP_, mask_suite_1P, kAEGPMaskSuite, kAEGPMaskSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 5, AEGP_, mask_suite_5P, kAEGPMaskSuite, kAEGPMaskSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(MaskSuite, 6, AEGP_, mask_suite_6P, kAEGPMaskSuite, kAEGPMaskSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(CompSuite, 1, AEGP_, comp_suite_1P, kAEGPCompSuite, kAEGPCompSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(CollectionSuite, 1, AEGP_, collection_suite_1P, kAEGPCollectionSuite, kAEGPCollectionSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(AdvAppSuite, 1, PF_, adv_app_suite_1P, kPFAdvAppSuite, kPFAdvAppSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 1, AEGP_, utility_suite_1P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderOptionsSuite, 2, AEGP_, render_options_suite_2P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderOptionsSuite, 3, AEGP_, render_options_suite_3P, kAEGPRenderOptionsSuite, kAEGPRenderOptionsSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerRenderOptionsSuite, 1, AEGP_, layer_render_options_suite_1P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(LayerRenderOptionsSuite, 2, AEGP_, layer_render_options_suite_2P, kAEGPLayerRenderOptionsSuite, kAEGPLayerRenderOptionsSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(RenderAsyncManagerSuite, 1, AEGP_, async_manager_suite_1P, kAEGPRenderAsyncManagerSuite, kAEGPRenderAsyncManagerSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ProjSuite, 5, AEGP_, proj_suite_5P, kAEGPProjSuite, kAEGPProjSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(ProjSuite, 6, AEGP_, proj_suite_6P, kAEGPProjSuite, kAEGPProjSuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(FootageSuite, 5, AEGP_, footage_suite_5P, kAEGPFootageSuite, kAEGPFootageSuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(RQItemSuite, 3, AEGP_, rq_item_suite_3P, kAEGPRQItemSuite, kAEGPRQItemSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 4, AEGP_, utility_suite_4P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorSettingsSuite, 3, AEGP_, color_settings_suite_3P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorSettingsSuite, 2, AEGP_, color_settings_suite_2P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorSettingsSuite, 1, AEGP_, color_settings_suite_1P, kAEGPColorSettingsSuite, kAEGPColorSettingsSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(ColorParamSuite, 1, PF_, color_param_suite_1P, kPFColorParamSuite, kPFColorParamSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(PersistentDataSuite, 4, AEGP_, persistent_data_suite4P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion4); + AEGP_SUITE_ACCESS_BOILERPLATE(PersistentDataSuite, 3, AEGP_, persistent_data_suite3P, kAEGPPersistentDataSuite, kAEGPPersistentDataSuiteVersion3); + AEGP_SUITE_ACCESS_BOILERPLATE(SamplingFloatSuite, 1, PF_, sampling_float_suite_1P, kPFSamplingFloatSuite, kPFSamplingFloatSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 5, AEGP_, utility_suite_5P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion5); + AEGP_SUITE_ACCESS_BOILERPLATE(UtilitySuite, 6, AEGP_, utility_suite_6P, kAEGPUtilitySuite, kAEGPUtilitySuiteVersion6); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectCustomUISuite, 1, PF_, custom_ui_suite1P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectCustomUISuite, 2, PF_, custom_ui_suite2P, kPFEffectCustomUISuite, kPFEffectCustomUISuiteVersion2); + AEGP_SUITE_ACCESS_BOILERPLATE(EffectCustomUIOverlayThemeSuite, 1, PF_, custom_ui_theme_suite1P, kPFEffectCustomUIOverlayThemeSuite, kPFEffectCustomUIOverlayThemeSuiteVersion1); + AEGP_SUITE_ACCESS_BOILERPLATE(DrawbotSuite, Current, DRAWBOT_, drawing_suite_currentP, kDRAWBOT_DrawSuite, kDRAWBOT_DrawSuite_VersionCurrent); + AEGP_SUITE_ACCESS_BOILERPLATE(SupplierSuite, Current, DRAWBOT_, drawbot_supplier_suite_currentP, kDRAWBOT_SupplierSuite, kDRAWBOT_SupplierSuite_VersionCurrent); + AEGP_SUITE_ACCESS_BOILERPLATE(SurfaceSuite, Current, DRAWBOT_, drawbot_surface_suite_currentP, kDRAWBOT_SurfaceSuite, kDRAWBOT_SurfaceSuite_VersionCurrent); + AEGP_SUITE_ACCESS_BOILERPLATE(PathSuite, Current, DRAWBOT_, drawbot_path_suite_currentP, kDRAWBOT_PathSuite, kDRAWBOT_PathSuite_VersionCurrent); + + AEGP_SUITE_ACCESS_BOILERPLATE(SuitesSuite, , SP, suites_suite_2P, kSPSuitesSuite, kSPSuitesSuiteVersion); +}; + +#endif diff --git a/External/AE SDK/Util/AEGP_Utils.cpp b/External/AE SDK/Util/AEGP_Utils.cpp new file mode 100644 index 00000000..95f7cdb6 --- /dev/null +++ b/External/AE SDK/Util/AEGP_Utils.cpp @@ -0,0 +1,38 @@ +#include "AEGP_Utils.h" + + +A_Err GetNewFirstLayerInFirstComp( + SPBasicSuite *sP, + AEGP_LayerH *first_layerPH) +{ + A_Err err = A_Err_NONE; + + AEGP_ItemH itemH = NULL; + AEGP_ItemType type = AEGP_ItemType_NONE; + AEGP_CompH compH = NULL; + AEGP_ProjectH projH = NULL; + A_long num_projectsL = 0, + num_layersL = 0; + + AEGP_SuiteHandler suites(sP); + + (void)num_projectsL; + ERR(suites.ProjSuite5()->AEGP_GetProjectByIndex(0, &projH)); + ERR(suites.ItemSuite8()->AEGP_GetFirstProjItem(projH, &itemH)); + ERR(suites.ItemSuite6()->AEGP_GetItemType(itemH, &type)); + + while ((itemH != NULL) && (type != AEGP_ItemType_COMP)){ + ERR(suites.ItemSuite6()->AEGP_GetNextProjItem(projH, itemH, &itemH)); + ERR(suites.ItemSuite6()->AEGP_GetItemType(itemH, &type)); + } + if (!err && (type == AEGP_ItemType_COMP)){ + err = suites.CompSuite4()->AEGP_GetCompFromItem(itemH, &compH); + } + if (!err && compH) { + err = suites.LayerSuite5()->AEGP_GetCompNumLayers(compH, &num_layersL); + } + if (!err && num_layersL){ + err = suites.LayerSuite5()->AEGP_GetCompLayerByIndex(compH, 0, first_layerPH); + } + return err; +} diff --git a/External/AE SDK/Util/AEGP_Utils.h b/External/AE SDK/Util/AEGP_Utils.h new file mode 100644 index 00000000..a2f2b06f --- /dev/null +++ b/External/AE SDK/Util/AEGP_Utils.h @@ -0,0 +1,9 @@ +#include "A.h" +#include "AE_GeneralPlug.h" +#include "AEGP_SuiteHandler.h" +#include "AE_Macros.h" + +A_Err GetNewFirstLayerInFirstComp( + SPBasicSuite *sP, + AEGP_LayerH *first_layerPH); + diff --git a/External/AE SDK/Util/DuckSuite.h b/External/AE SDK/Util/DuckSuite.h new file mode 100644 index 00000000..59f9953c --- /dev/null +++ b/External/AE SDK/Util/DuckSuite.h @@ -0,0 +1,13 @@ +#include "A.h" +#include + +#ifdef AE_OS_WIN + #include +#endif + +#define kDuckSuite1 "AEGP Duck Suite" +#define kDuckSuiteVersion1 1 + +typedef struct DuckSuite1 { + SPAPI A_Err (*Quack)(A_u_short timesSu); +} DuckSuite1; \ No newline at end of file diff --git a/External/AE SDK/Util/MissingSuiteError.cpp b/External/AE SDK/Util/MissingSuiteError.cpp new file mode 100644 index 00000000..5be71f4f --- /dev/null +++ b/External/AE SDK/Util/MissingSuiteError.cpp @@ -0,0 +1,43 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#include "AEGP_SuiteHandler.h" + +void AEGP_SuiteHandler::MissingSuiteError() const +{ + // Yes, we've read Scott Meyers, and know throwing + // a stack-based object can cause problems. Since + // the err is just a long, and since we aren't de- + // referencing it in any way, risk is mimimal. + + // As always, we expect those of you who use + // exception-based code to do a little less rudi- + // mentary job of it than we are here. + + // Also, excuse the Madagascar-inspired monkey + // joke; couldn't resist. + // -bbb 10/10/05 + + PF_Err poop = PF_Err_BAD_CALLBACK_PARAM; + + throw poop; +} + diff --git a/External/AE SDK/Util/Param_Utils.h b/External/AE SDK/Util/Param_Utils.h new file mode 100644 index 00000000..f4129069 --- /dev/null +++ b/External/AE SDK/Util/Param_Utils.h @@ -0,0 +1,343 @@ +#ifndef H_PARAM_UTILS +#define H_PARAM_UTILS + +// do not include DVA headers here +#include +#include + +// requires the explicit use of 'def' for the struct name + +#define PF_ParamDef_IS_PUI_FLAG_SET(_defP, _puiFlag) \ + (((_defP)->ui_flags & _puiFlag) != 0) + +#define PF_ParamDef_IS_PARAM_FLAG_SET(_defP, _paramFlag) \ + (((_defP)->flags & _paramFlag) != 0) + + +#define PF_ADD_COLOR(NAME, RED, GREEN, BLUE, ID)\ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_COLOR; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.cd.value.red = (RED); \ + def.u.cd.value.green = (GREEN); \ + def.u.cd.value.blue = (BLUE); \ + def.u.cd.value.alpha = 255; \ + def.u.cd.dephault = def.u.cd.value; \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_ARBITRARY2(NAME, WIDTH, HEIGHT, PARAM_FLAGS, PUI_FLAGS, DFLT, ID, REFCON)\ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_ARBITRARY_DATA; \ + def.flags = (PARAM_FLAGS); \ + PF_STRCPY(def.name, (NAME) ); \ + def.ui_width = (WIDTH);\ + def.ui_height = (HEIGHT);\ + def.ui_flags = (PUI_FLAGS); \ + def.u.arb_d.value = NULL;\ + def.u.arb_d.pad = 0;\ + def.u.arb_d.dephault = (DFLT); \ + def.uu.id = def.u.arb_d.id = (ID); \ + def.u.arb_d.refconPV = REFCON; \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_ARBITRARY(NAME, WIDTH, HEIGHT, PUI_FLAGS, DFLT, ID, REFCON)\ + PF_ADD_ARBITRARY2(NAME, WIDTH, HEIGHT, PF_ParamFlag_NONE, PUI_FLAGS, DFLT, ID, REFCON) + +#define PF_ADD_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_SLIDER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.sd.value_str[0] = '\0'; \ + def.u.sd.value_desc[0] = '\0'; \ + def.u.sd.valid_min = (VALID_MIN); \ + def.u.sd.slider_min = (SLIDER_MIN); \ + def.u.sd.valid_max = (VALID_MAX); \ + def.u.sd.slider_max = (SLIDER_MAX); \ + def.u.sd.value = def.u.sd.dephault = (DFLT); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_FIXED(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, PREC, DISP, FLAGS, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_FIX_SLIDER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.fd.value_str[0] = '\0'; \ + def.u.fd.value_desc[0] = '\0'; \ + def.u.fd.valid_min = (PF_Fixed)((VALID_MIN) * 65536.0); \ + def.u.fd.slider_min = (PF_Fixed)((SLIDER_MIN) * 65536.0); \ + def.u.fd.valid_max = (PF_Fixed)((VALID_MAX) * 65536.0); \ + def.u.fd.slider_max = (PF_Fixed)((SLIDER_MAX) * 65536.0); \ + def.u.fd.value = def.u.fd.dephault = (PF_Fixed)((DFLT) * 65536.0); \ + def.u.fd.precision = (A_short)(PREC); \ + def.u.fd.display_flags |= (A_short)(DISP); \ + def.flags |= (FLAGS); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// why does fs_flags get or-ed in? and why is CURVE_TOLERANCE param ignored? and .flags is never set. oy. +#define PF_ADD_FLOAT_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, CURVE_TOLERANCE, DFLT, PREC, DISP, WANT_PHASE, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_FLOAT_SLIDER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.fs_d.valid_min = (VALID_MIN); \ + def.u.fs_d.slider_min = (SLIDER_MIN); \ + def.u.fs_d.valid_max = (VALID_MAX); \ + def.u.fs_d.slider_max = (SLIDER_MAX); \ + def.u.fs_d.value = (DFLT); \ + def.u.fs_d.dephault = (PF_FpShort)(def.u.fs_d.value); \ + def.u.fs_d.precision = (PREC); \ + def.u.fs_d.display_flags = (DISP); \ + def.u.fs_d.fs_flags |= (WANT_PHASE) ? PF_FSliderFlag_WANT_PHASE : 0; \ + def.u.fs_d.curve_tolerance = AEFX_AUDIO_DEFAULT_CURVE_TOLERANCE;\ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// safer newer version +#define PF_ADD_FLOAT_SLIDERX(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, PREC, DISP, FLAGS, ID) \ + do { \ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS); \ + PF_ADD_FLOAT_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, 0, DFLT, PREC, DISP, 0, ID); \ + } while (0) + +// copied from Pr version of Param_Utils.h. It is used in some of Pr versions of AE effects +#define PF_ADD_FLOAT_EXPONENTIAL_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, CURVE_TOLERANCE, DFLT, PREC, DISP, WANT_PHASE, EXPONENT, ID) \ +do {\ +PF_Err priv_err = PF_Err_NONE; \ +def.param_type = PF_Param_FLOAT_SLIDER; \ +PF_STRCPY(def.name, (NAME) ); \ +def.u.fs_d.valid_min = (VALID_MIN); \ +def.u.fs_d.slider_min = (SLIDER_MIN); \ +def.u.fs_d.valid_max = (VALID_MAX); \ +def.u.fs_d.slider_max = (SLIDER_MAX); \ +def.u.fs_d.value = (DFLT); \ +def.u.fs_d.dephault = (DFLT); \ +def.u.fs_d.precision = (PREC); \ +def.u.fs_d.display_flags = (DISP); \ +def.u.fs_d.fs_flags |= (WANT_PHASE) ? PF_FSliderFlag_WANT_PHASE : 0; \ +def.u.fs_d.curve_tolerance = AEFX_AUDIO_DEFAULT_CURVE_TOLERANCE;\ +def.u.fs_d.useExponent = true;\ +def.u.fs_d.exponent = EXPONENT;\ +def.uu.id = (ID); \ +if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ +} while (0) + +enum { PF_Precision_INTEGER, PF_Precision_TENTHS, PF_Precision_HUNDREDTHS, PF_Precision_THOUSANDTHS, PF_Precision_TEN_THOUSANDTHS }; + +#define PF_ADD_CHECKBOX(NAME_A, NAME_B, DFLT, FLAGS, ID)\ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_CHECKBOX; \ + PF_STRCPY(def.name, NAME_A); \ + def.u.bd.u.nameptr = (NAME_B); \ + def.u.bd.value = (DFLT); \ + def.u.bd.dephault = (PF_Boolean)(def.u.bd.value); \ + def.flags |= (FLAGS); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// safer newer version +#define PF_ADD_CHECKBOXX(NAME, DFLT, FLAGS, ID)\ + do {\ + AEFX_CLR_STRUCT(def); \ + PF_ADD_CHECKBOX(NAME, "", DFLT, FLAGS, ID); \ + } while (0) + +#define PF_ADD_BUTTON(PARAM_NAME, BUTTON_NAME, PUI_FLAGS, PARAM_FLAGS, ID)\ + do {\ + AEFX_CLR_STRUCT(def); \ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_BUTTON; \ + PF_STRCPY(def.name, PARAM_NAME); \ + def.u.button_d.u.namesptr = (BUTTON_NAME); \ + def.flags = (PARAM_FLAGS); \ + def.ui_flags = (PUI_FLAGS); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_ANGLE(NAME, DFLT, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_ANGLE; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.ad.value = def.u.ad.dephault = (PF_Fixed)((DFLT) * 65536.0); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + + +#define PF_ADD_NULL(NAME, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_NO_DATA; \ + PF_STRCPY(def.name, (NAME) ); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + + +#define PF_ADD_POPUP(NAME, CHOICES, DFLT, STRING, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_POPUP; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.pd.num_choices = (CHOICES); \ + def.u.pd.dephault = (DFLT); \ + def.u.pd.value = def.u.pd.dephault; \ + def.u.pd.u.namesptr = (STRING); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_LAYER(NAME, DFLT, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_LAYER; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.ld.dephault = (DFLT); \ + def.uu.id = ID;\ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_255_SLIDER(NAME, DFLT, ID)\ + PF_ADD_SLIDER( (NAME), 0, 255, 0, 255, (DFLT), (ID)) + +#define PF_ADD_PERCENT(NAME, DFLT, ID)\ + PF_ADD_FIXED( (NAME), 0, 100, 0, 100, (DFLT), 1, 1, 0, (ID)) + +#define PF_ADD_POINT(NAME, X_DFLT, Y_DFLT, RESTRICT_BOUNDS, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_POINT; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.td.restrict_bounds = RESTRICT_BOUNDS;\ + def.u.td.x_value = def.u.td.x_dephault = (X_DFLT << 16); \ + def.u.td.y_value = def.u.td.y_dephault = (Y_DFLT << 16); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_POINT_3D(NAME, X_DFLT, Y_DFLT, Z_DFLT, ID) \ + do {\ + AEFX_CLR_STRUCT(def); \ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_POINT_3D; \ + PF_STRCPY(def.name, (NAME) ); \ + def.u.point3d_d.x_value = def.u.point3d_d.x_dephault = X_DFLT; \ + def.u.point3d_d.y_value = def.u.point3d_d.y_dephault = Y_DFLT; \ + def.u.point3d_d.z_value = def.u.point3d_d.z_dephault = Y_DFLT; \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_TOPIC(NAME, ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_GROUP_START; \ + PF_STRCPY(def.name, (NAME) ); \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_END_TOPIC(ID) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_GROUP_END; \ + def.uu.id = (ID); \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +#define PF_ADD_VERSIONED_FLAG(NAME) \ + do {\ + PF_Err priv_err = PF_Err_NONE; \ + def.param_type = PF_Param_CHECKBOX; \ + def.name[0] = 0; \ + def.u.bd.u.nameptr = (NAME); \ + def.u.bd.value = true; \ + def.u.bd.dephault = false; \ + def.flags = PF_ParamFlag_USE_VALUE_FOR_OLD_PROJECTS; \ + def.ui_flags = PF_PUI_INVISIBLE; \ + if ((priv_err = PF_ADD_PARAM(in_data, -1, &def)) != PF_Err_NONE) return priv_err; \ + } while (0) + +// newer safer version +#define PF_ADD_TOPICX(NAME, FLAGS, ID) \ + do {\ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS); \ + PF_ADD_TOPIC(NAME, ID); \ + } while (0) + +#define PF_ADD_POPUPX(NAME, NUM_CHOICES, DFLT, ITEMS_STRING, FLAGS, ID) \ + do { \ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS); \ + PF_ADD_POPUP(NAME, NUM_CHOICES, DFLT, ITEMS_STRING, ID); \ + } while (0) + +enum { PF_ParamFlag_NONE=0 }; // SBI:AE_Effect.h + +#define PF_ADD_FLOAT_SLIDERX_DISABLED(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, DFLT, PREC, DISP, FLAGS, ID) \ + do { \ + AEFX_CLR_STRUCT(def); \ + def.flags = (FLAGS);\ + def.ui_flags = PF_PUI_DISABLED;\ + PF_ADD_FLOAT_SLIDER(NAME, VALID_MIN, VALID_MAX, SLIDER_MIN, SLIDER_MAX, 0, DFLT, PREC, DISP, 0, ID); \ + } while (0) + +namespace fxparam_utility { + + template + inline int RoundF(T x) + { + int ret; + + if (x > 0) { + ret = (int)(x + (T)0.5); + } else { + if ((int)(x + (T)0.5) == (x + (T)0.5)) { + ret = (int)x; + } else { + ret = (int)(x - (T)0.5); + } + } + + return ret; + } +}; + +inline PF_Err PF_AddPointControl(PF_InData *in_data, + const char *nameZ, + float x_defaultF, // 0-1 + float y_defaultF, // 0-1 + bool restrict_boundsB, + PF_ParamFlags param_flags, + PF_ParamUIFlags pui_flags, + A_long param_id) +{ + PF_ParamDef def = {{0}}; + namespace du = fxparam_utility; + + def.flags = param_flags; + def.ui_flags = pui_flags; + + PF_ADD_POINT(nameZ, du::RoundF(x_defaultF*100), du::RoundF(y_defaultF*100), restrict_boundsB, param_id); // has error return in macro + + return PF_Err_NONE; +} + + +#endif // H_PARAM_UTILS diff --git a/External/AE SDK/Util/Smart_Utils.cpp b/External/AE SDK/Util/Smart_Utils.cpp new file mode 100644 index 00000000..b67378b7 --- /dev/null +++ b/External/AE SDK/Util/Smart_Utils.cpp @@ -0,0 +1,62 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#include "Smart_Utils.h" + + +PF_Boolean IsEmptyRect(const PF_LRect *r){ + return (r->left >= r->right) || (r->top >= r->bottom); +} + +void UnionLRect(const PF_LRect *src, PF_LRect *dst) +{ + if (IsEmptyRect(dst)) { + *dst = *src; + } else if (!IsEmptyRect(src)) { + dst->left = mmin(dst->left, src->left); + dst->top = mmin(dst->top, src->top); + dst->right = mmax(dst->right, src->right); + dst->bottom = mmax(dst->bottom, src->bottom); + } +} + +PF_Boolean +IsEdgePixel( + PF_LRect *rectP, + A_long x, + A_long y) +{ + PF_Boolean x_hitB = FALSE, + y_hitB = FALSE; + + x_hitB = ((x == rectP->left) || (x == rectP->right)); + + y_hitB = ((y == rectP->top) || (y == rectP->bottom)); + + if (x_hitB){ + y_hitB = ((y >= rectP->top) && (y <= rectP->bottom)); + } else { + if (y_hitB){ + x_hitB = ((x >= rectP->left) && (x <= rectP->right)); + } + } + return (x_hitB && y_hitB); +} \ No newline at end of file diff --git a/External/AE SDK/Util/Smart_Utils.h b/External/AE SDK/Util/Smart_Utils.h new file mode 100644 index 00000000..3e1c03ce --- /dev/null +++ b/External/AE SDK/Util/Smart_Utils.h @@ -0,0 +1,34 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +#include "AE_Effect.h" +#include "SPTypes.h" + +#ifndef mmin + #define mmin(a,b) ((a) < (b) ? (a) : (b)) + #define mmax(a,b) ((a) > (b) ? (a) : (b)) +#endif + +PF_Boolean IsEmptyRect(const PF_LRect *r); + +void UnionLRect(const PF_LRect *src, PF_LRect *dst); + +PF_Boolean IsEdgePixel(PF_LRect *rectP, A_long x, A_long y); \ No newline at end of file diff --git a/External/AE SDK/Util/String_Utils.h b/External/AE SDK/Util/String_Utils.h new file mode 100644 index 00000000..00f9f9ad --- /dev/null +++ b/External/AE SDK/Util/String_Utils.h @@ -0,0 +1,48 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + + + +/* String_Utils.h */ + + +#pragma once + +#ifndef STRING_UTILS_H +#define STRING_UTILS_H + +#if defined(__cplusplus) +extern "C" { +#endif +A_char *GetStringPtr(int strNum); +#if defined(__cplusplus) +} +#endif + +#define STR(_foo) GetStringPtr(_foo) + + + + + + + +#endif /* STRING_UTILS_H */ \ No newline at end of file diff --git a/External/AE SDK/Util/entry.h b/External/AE SDK/Util/entry.h new file mode 100644 index 00000000..6a0175db --- /dev/null +++ b/External/AE SDK/Util/entry.h @@ -0,0 +1,53 @@ +/*******************************************************************/ +/* */ +/* ADOBE CONFIDENTIAL */ +/* _ _ _ _ _ _ _ _ _ _ _ _ _ */ +/* */ +/* Copyright 2007 Adobe Systems Incorporated */ +/* All Rights Reserved. */ +/* */ +/* NOTICE: All information contained herein is, and remains the */ +/* property of Adobe Systems Incorporated and its suppliers, if */ +/* any. The intellectual and technical concepts contained */ +/* herein are proprietary to Adobe Systems Incorporated and its */ +/* suppliers and may be covered by U.S. and Foreign Patents, */ +/* patents in process, and are protected by trade secret or */ +/* copyright law. Dissemination of this information or */ +/* reproduction of this material is strictly forbidden unless */ +/* prior written permission is obtained from Adobe Systems */ +/* Incorporated. */ +/* */ +/*******************************************************************/ + +/* + Entry.h + + Part of the Adobe After Effects SDK. +*/ + +#include "AE_PluginData.h" + +#ifdef AE_OS_WIN + #define DllExport __declspec( dllexport ) +#elif defined AE_OS_MAC + #define DllExport __attribute__ ((visibility ("default"))) +#endif + + +#define AE_ENTRY_POINT "EffectMain" +#define AE_RESERVED_INFO 8 + +#define PF_REGISTER_EFFECT(INPTR, CBPTR, NAME, MATCHNAME, CATEGORY,RESERVEDINFO) \ + result = (*(CBPTR))((INPTR),\ + reinterpret_cast(NAME),\ + reinterpret_cast(MATCHNAME),\ + reinterpret_cast(CATEGORY),\ + reinterpret_cast(AE_ENTRY_POINT),\ + 'eFKT',\ + PF_AE_PLUG_IN_VERSION,\ + PF_AE_PLUG_IN_SUBVERS,\ + RESERVEDINFO);\ + if(result == A_Err_NONE)\ + {\ + result = PF_Err_NONE;\ + } diff --git a/External/popcornfx.qt/Qt5Core.dll b/External/popcornfx.qt/Qt5Core.dll new file mode 100644 index 00000000..c0a7b6b7 --- /dev/null +++ b/External/popcornfx.qt/Qt5Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dae3aefe8afc6ecce88184c8908722af6a1382bcf2a67ea66fe5c97dfa59322a +size 6453232 diff --git a/External/popcornfx.qt/Qt5Gui.dll b/External/popcornfx.qt/Qt5Gui.dll new file mode 100644 index 00000000..b3b7f0cb --- /dev/null +++ b/External/popcornfx.qt/Qt5Gui.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38a6c697833268f5c5013e68e8bb7f7b7ef00bd9946ebfc9d563f533fa55bf66 +size 7208960 diff --git a/External/popcornfx.qt/Qt5Widgets.dll b/External/popcornfx.qt/Qt5Widgets.dll new file mode 100644 index 00000000..fb41e8cd --- /dev/null +++ b/External/popcornfx.qt/Qt5Widgets.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da032d6457d5f6993c3aa3388d62739d9c3387a5d34edd0b7f79a81cb9af6f74 +size 5562880 diff --git a/External/popcornfx.qt/popcornfx.qt.manifest b/External/popcornfx.qt/popcornfx.qt.manifest new file mode 100644 index 00000000..f2161de7 --- /dev/null +++ b/External/popcornfx.qt/popcornfx.qt.manifest @@ -0,0 +1,9 @@ + +" + + + + + + + \ No newline at end of file diff --git a/External/popcornfx.qt/qwindows.dll b/External/popcornfx.qt/qwindows.dll new file mode 100644 index 00000000..4a3eaf74 --- /dev/null +++ b/External/popcornfx.qt/qwindows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f083147f27e7f6ac7d8d97b02e165cfb00af89b2b79ab4524971d0cfc5eaca9 +size 1469952 diff --git a/Native/debugger/PopcornFX.natvis b/Native/debugger/PopcornFX.natvis new file mode 100644 index 00000000..94eba7ef --- /dev/null +++ b/Native/debugger/PopcornFX.natvis @@ -0,0 +1,409 @@ + + + + + + + + + + + + null + {*((char**)((ptrdiff_t)m_Container.m_Ptr + (((sizeof(PopcornFX::CStringContainer) + 4) + (sizeof(void*) - 1)) & ~((ptrdiff_t)(sizeof(void*) - 1))))),s} [Len={m_Container.m_Ptr->m_Length & 0x7FFFFFFF}] + {(char*)((ptrdiff_t)m_Container.m_Ptr + sizeof(PopcornFX::CStringContainer) + (0xF - ((sizeof(PopcornFX::CStringContainer) + 0xF) & ((ptrdiff_t)0xF)))),s} [Len={m_Container.m_Ptr->m_Length & 0x7FFFFFFF}] + null + *((char**)((ptrdiff_t)m_Container.m_Ptr + (((sizeof(PopcornFX::CStringContainer) + 4) + (sizeof(void*) - 1)) & ~((ptrdiff_t)(sizeof(void*) - 1))))),s + (char*)((ptrdiff_t)m_Container.m_Ptr + sizeof(PopcornFX::CStringContainer) + (0xF - ((sizeof(PopcornFX::CStringContainer) + 0xF) & ((ptrdiff_t)0xF)))),s + + + + null + {*((wchar_t**)((ptrdiff_t)m_Container.m_Ptr + sizeof(PopcornFX::CStringUnicodeContainer) + 4)),su} [Len={m_Container.m_Ptr->m_Length & 0x7FFFFFFF}] + {(wchar_t*)(((ptrdiff_t)m_Container.m_Ptr + sizeof(PopcornFX::CStringUnicodeContainer) + 0xF) & ~((ptrdiff_t)0xF)),su} [Len={m_Container.m_Ptr->m_Length & 0x7FFFFFFF}] + null + *((wchar_t**)((ptrdiff_t)m_Container.m_Ptr + sizeof(PopcornFX::CStringUnicodeContainer) + 4)),su + (wchar_t*)(((ptrdiff_t)m_Container.m_Ptr + sizeof(PopcornFX::CStringUnicodeContainer) + 0xF) & ~((ptrdiff_t)0xF)),su + + + + Id=0 null + Id={m_Id} {PopcornFX::CStringInternals::m_StringIdDictionnary->m_StringIdPool.m_Chunks[m_Id / PopcornFX::CStringIdDictionary::kPoolChunkSize][m_Id % PopcornFX::CStringIdDictionary::kPoolChunkSize]} + + PopcornFX::CStringInternals::m_StringIdDictionnary->m_StringIdPool.m_Chunks[m_Id / PopcornFX::CStringIdDictionary::kPoolChunkSize][m_Id % PopcornFX::CStringIdDictionary::kPoolChunkSize] + + + + + null + {m_Data,[m_Length]s} [Len={m_Length}] + + + + null + {m_DataFeed.m_Ptr} + + m_DataFeed.m_Ptr + + + + + {{RefPtr={(void*)m_Ptr}}} + + m_Ptr + + + + {{WeakPtr={(void*)m_Ptr}}} + + m_Ptr + + + + {{ScopedPtr={(void*)m_Ptr}}} + + m_Ptr + + + + + {{A Count={m_Count}}} + + + m_Count + ($T1*)m_Data + + + + + + {{A Count={m_Count}}} + + + m_Count + ($T1*)m_Data + + + + + + {{SDA Count={m_Count & 0x7FFFFFFF} Data={(void*)m_Allocated.m_Data}} + {{SDA Count={m_Count & 0x7FFFFFFF} Data={(void*)(((unsigned long long)m_StaticData + kAlignment - 1) & - kAlignment)}} + + + m_Count & 0x7FFFFFFF + ($T1*)m_Allocated.m_Data + + + m_Count + ($T1*)(((unsigned long long)m_StaticData + kAlignment - 1) & - kAlignment) + + + + + + {{SFA Count={m_Count}, Data={(void*)m_Data}, Cap={m_Capacity}}} + + + m_Count + ($T1*)m_Data + + + + + + {{SA _Count={$T2}, Data={(void*)(((unsigned long long)_m_Data + kAlignment - 1) & - kAlignment)} + + + $T2 + ($T1*)(((unsigned long long)_m_Data + kAlignment - 1) & - kAlignment) + + + + + + {{SCA Count={m_Count}, Data={(void*)(((unsigned long long)_m_Data + kAlignment - 1) & - kAlignment)}}} + + + m_Count + ($T1*)(((unsigned long long)_m_Data + kAlignment - 1) & - kAlignment) + + + + + + {{CA Count={$T2 * m_ChunksCount}({$T2}*{m_ChunksCount}), ChuncksCap={m_ChunksCapacity}}} + + + $T2 * m_ChunksCount + m_Chunks[$i / $T2][$i % $T2] + + + + + + {{SlotA UsedCount={m_UsedSlots} _Count={$T2}}} + + + $T2 + ($T1*)m_Data + + + + + + {{SlotA UsedCount={m_UsedSlots} Count={m_DataSizeInBytes / sizeof($T1)}}} + + + m_DataSizeInBytes / sizeof($T1) + ($T1*)m_Data + + + + + + {{MV Count={m_Count}, Data={(void*)m_Data}, sizeof={sizeof($T1)}}} + + + m_Count + ($T1*)m_Data + + + + + + {{SMV Count={m_Storage.m_Count}, Data={(void*)m_Storage.m_RawDataPtr}, Stride={m_Storage.m_Stride}, sizeof={sizeof($T1)}}} + + + m_Storage.m_Count + *(($T1*)(m_Storage.m_RawDataPtr + $i * m_Storage.m_Stride)) + + + + + + {{SMVF Count={m_Storage.m_Count}, Data={(void*)m_Storage.m_RawDataPtr}, Stride={m_Storage.m_Stride}, Footp={m_ElementFootprintInBytes}, sizeof={sizeof($T1)}} + + + m_Storage.m_Count + *(($T1*)(m_Storage.m_RawDataPtr + $i * m_Storage.m_Stride)) + + + + + + {{First={m_First}, Second={m_Second}}} + + m_First + m_Second + + + + + {{FHM Count={m_Count}, Data={(void*)m_Slots}, Size={m_Size}}} + + + m_Size + m_Slots + + + + + + + empty + + void (error) + + + const class cr{m_RawBits & 0xFFFF,d} + variable class vr{m_RawBits & 0xFFFF,d} + instance class ir{m_RawBits & 0xFFFF,d} + stream class sr{m_RawBits & 0xFFFF,d} + + + const bool1 cr{m_RawBits & 0xFFFF,d} + variable bool1 vr{m_RawBits & 0xFFFF,d} + instance bool1 ir{m_RawBits & 0xFFFF,d} + stream bool1 sr{m_RawBits & 0xFFFF,d} + + const bool2 cr{m_RawBits & 0xFFFF,d} + variable bool2 vr{m_RawBits & 0xFFFF,d} + instance bool2 ir{m_RawBits & 0xFFFF,d} + stream bool2 sr{m_RawBits & 0xFFFF,d} + + const bool3 cr{m_RawBits & 0xFFFF,d} + variable bool3 vr{m_RawBits & 0xFFFF,d} + instance bool3 ir{m_RawBits & 0xFFFF,d} + stream bool3 sr{m_RawBits & 0xFFFF,d} + + const bool4 cr{m_RawBits & 0xFFFF,d} + variable bool4 vr{m_RawBits & 0xFFFF,d} + instance bool4 ir{m_RawBits & 0xFFFF,d} + stream bool4 sr{m_RawBits & 0xFFFF,d} + + + const int1 cr{m_RawBits & 0xFFFF,d} + variable int1 vr{m_RawBits & 0xFFFF,d} + instance int1 ir{m_RawBits & 0xFFFF,d} + stream int1 sr{m_RawBits & 0xFFFF,d} + + const int2 cr{m_RawBits & 0xFFFF,d} + variable int2 vr{m_RawBits & 0xFFFF,d} + instance int2 ir{m_RawBits & 0xFFFF,d} + stream int2 sr{m_RawBits & 0xFFFF,d} + + const int3 cr{m_RawBits & 0xFFFF,d} + variable int3 vr{m_RawBits & 0xFFFF,d} + instance int3 ir{m_RawBits & 0xFFFF,d} + stream int3 sr{m_RawBits & 0xFFFF,d} + + const int4 cr{m_RawBits & 0xFFFF,d} + variable int4 vr{m_RawBits & 0xFFFF,d} + instance int4 ir{m_RawBits & 0xFFFF,d} + stream int4 sr{m_RawBits & 0xFFFF,d} + + + const float1 cr{m_RawBits & 0xFFFF,d} + variable float1 vr{m_RawBits & 0xFFFF,d} + instance float1 ir{m_RawBits & 0xFFFF,d} + stream float1 sr{m_RawBits & 0xFFFF,d} + + const float2 cr{m_RawBits & 0xFFFF,d} + variable float2 vr{m_RawBits & 0xFFFF,d} + instance float2 ir{m_RawBits & 0xFFFF,d} + stream float2 sr{m_RawBits & 0xFFFF,d} + + const float3 cr{m_RawBits & 0xFFFF,d} + variable float3 vr{m_RawBits & 0xFFFF,d} + instance float3 ir{m_RawBits & 0xFFFF,d} + stream float3 sr{m_RawBits & 0xFFFF,d} + + const float4 cr{m_RawBits & 0xFFFF,d} + variable float4 vr{m_RawBits & 0xFFFF,d} + instance float4 ir{m_RawBits & 0xFFFF,d} + stream float4 sr{m_RawBits & 0xFFFF,d} + + + const orientation cr{m_RawBits & 0xFFFF,d} + variable orientation vr{m_RawBits & 0xFFFF,d} + instance orientation ir{m_RawBits & 0xFFFF,d} + stream orientation sr{m_RawBits & 0xFFFF,d} + + + + + + Range = ]{m_BoundMin.m_Value.m_Data32u,X}, {m_BoundMax.m_Value.m_Data32u,X}[ - ]{m_BoundMin.m_Value.m_Data32f}, {m_BoundMax.m_Value.m_Data32f}[ - ]{m_BoundMin.m_Value.m_Data32s}, {m_BoundMax.m_Value.m_Data32s}[ + Range = ]{m_BoundMin.m_Value.m_Data32u,X}, {m_BoundMax.m_Value.m_Data32u,X}] - ]{m_BoundMin.m_Value.m_Data32f}, {m_BoundMax.m_Value.m_Data32f}] - ]{m_BoundMin.m_Value.m_Data32s}, {m_BoundMax.m_Value.m_Data32s}] + Range = [{m_BoundMin.m_Value.m_Data32u,X}, {m_BoundMax.m_Value.m_Data32u,X}[ - [{m_BoundMin.m_Value.m_Data32f}, {m_BoundMax.m_Value.m_Data32f}[ - [{m_BoundMin.m_Value.m_Data32s}, {m_BoundMax.m_Value.m_Data32s}[ + Range = [{m_BoundMin.m_Value.m_Data32u,X}, {m_BoundMax.m_Value.m_Data32u,X}] - [{m_BoundMin.m_Value.m_Data32f}, {m_BoundMax.m_Value.m_Data32f}] - [{m_BoundMin.m_Value.m_Data32s}, {m_BoundMax.m_Value.m_Data32s}] + + + + X + O + + + + {*(PopcornFX::Range::Internal::_SConstantRange_Natvis*)(m_BoundMin.m_Value.m_Data32u + 0)} + + + 4 + (PopcornFX::Range::Internal::_SConstantRange_Natvis*)(m_BoundMin.m_Value.m_Data32u + $i) + + + + + + {*(PopcornFX::Range::Internal::_SConstantEdge_Natvis*)(m_Edge.m_Data+0)}{*(PopcornFX::Range::Internal::_SConstantEdge_Natvis*)(m_Edge.m_Data+1)}{*(PopcornFX::Range::Internal::_SConstantEdge_Natvis*)(m_Edge.m_Data+2)}{*(PopcornFX::Range::Internal::_SConstantEdge_Natvis*)(m_Edge.m_Data+3)}: |{m_Value.m_Data32u[0],X}, {m_Value.m_Data32u[1],X}, {m_Value.m_Data32u[2],X}, {m_Value.m_Data32u[3],X}| - |{m_Value.m_Data32f[0]}, {m_Value.m_Data32f[1]}, {m_Value.m_Data32f[2]}, {m_Value.m_Data32f[3]}| - |{m_Value.m_Data32s[0]}, {m_Value.m_Data32s[1]}, {m_Value.m_Data32s[2]}, {m_Value.m_Data32s[3]}| + + + + INVALID + void + auto + byte + float + float2 + float3 + float4 + int + int2 + int3 + int4 + bool + bool2 + bool3 + bool4 + orientation + + m_Index + + + + + (PopcornFX::CVStreamSemanticDictionnary::EDefaultOrdinals)(m_Code >> 8) + (m_Code >> 8) + + (PopcornFX::CVStreamSemanticDictionnary::EDefaultOrdinals)(m_Code >> 8) + (m_Code >> 8) + (PopcornFX::SVStreamCode::EElementType)(m_Code & 0x1F) + (m_Code & 0x80) != 0 + (m_Code & 0x40) != 0 + m_Code + + + + + v{(m_Key >> 29) & 0x7,d}.{(m_Key >> 24) & 0x1F,d}.{(m_Key >> 18) & 0x3F,d}.{m_Key & 0x3FFFF,d} + + m_Key + + + + + {m_Data} + + + $T2 + m_Data + + + + + + {m_Axes} + + + $T2 + m_Axes + + + + + + {{{m_Imag[0]}, {m_Imag[1]}, {m_Imag[2]}, {m_Real}}} + + + 4 + m_Imag + + + + + diff --git a/Native/debugger/qt5.natvis b/Native/debugger/qt5.natvis new file mode 100644 index 00000000..65bf3a65 --- /dev/null +++ b/Native/debugger/qt5.natvis @@ -0,0 +1,683 @@ + + + + + + {{ x = {xp}, y = {yp} }} + + xp + yp + + + + + {{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }} + + x1 + y1 + x2 - x1 + 1 + y2 - y1 + 1 + + + + + {{ x = {xp}, y = {yp}, width = {w}, height = {h} }} + + xp + yp + w + h + + + + + + {{ width = {wd}, height = {ht} }} + + wd + ht + + + + + + {{ start point = {pt1}, end point = {pt2} }} + + + {pt1} + + pt1 + + + + {pt2} + + pt2 + + + + + + + + {{ size = {d->size} }} + + d->ref.atomic._q_value + + d->size + (QPoint*)((reinterpret_cast<char*>(d)) + d->offset) + + + + + + {{ size = {d->size} }} + + + d->size > 0 + && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).xp + == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).xp) + && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).yp + == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).yp) + + d->ref.atomic._q_value + + d->size + (QPointF*)((reinterpret_cast<char*>(d)) + d->offset) + + + + + + {{ x = {xp}, y = {yp} }} + + xp + yp + + + + + {{ x = {xp}, y = {yp}, z = {zp} }} + + xp + yp + zp + + + + + {{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }} + + xp + yp + zp + wp + + + + + + {{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }} + + + _m11 + _m12 + _m21 + _m22 + _dx + _dy + + + + + + {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }} + + + m[0][0] + m[1][0] + m[2][0] + m[3][0] + m[0][1] + m[1][1] + m[2][1] + m[3][1] + m[0][2] + m[1][2] + m[2][2] + m[3][2] + m[0][3] + m[1][3] + m[2][3] + m[3][3] + + + + + + {{ horizontal = {static_cast<Policy>(bits.horPolicy)}, vertical = {static_cast<Policy>(bits.verPolicy)}, type = {ControlType(1 << bits.ctype)} }} + + + + QSizePolicy::Policy::{static_cast<Policy>(bits.verPolicy)} + + + QSizePolicy::Policy::{static_cast<Policy>(bits.horPolicy)} + + + QSizePolicy::ControlType::{ControlType(1 << bits.ctype)} + + + + Qt::Vertical (2) + + + Qt::Horizontal (1) + + + static_cast<int>(bits.verStretch) + static_cast<int>(bits.horStretch) + bits.hfw == 1 + bits.wfh == 1 + + + + + {ucs,c} + ucs,c + + ucs > 0xff ? '\0' : char(ucs),c + ucs,c + + + + + {((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub} + ((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub + + d->size + d->ref.atomic._q_value + + d->size + ((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),c + + + + + + {((reinterpret_cast<char*>(d)) + d->offset),sb} + ((reinterpret_cast<char*>(d)) + d->offset),sb + + d->size + d->ref.atomic._q_value + + d->size + ((reinterpret_cast<char*>(d)) + d->offset),c + + + + + + {{ size = {(d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset)} }} + + d.d->ref.atomic._q_value + + (d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset) + + (*(reinterpret_cast<const unsigned char*>((reinterpret_cast<char*>(d.d)) + d.d->offset) + 1 + + ($i >> 3)) & (1 << ($i & 7))) != 0 + + + + + + + + {{ size = {s} }} + + a + + s + ptr + + + + + + {{ julian day = {jd} }} + + + + + {{ millisecond = {mds} }} + {{ milliseconds = {mds} }} + + mds / 3600000, d + mds / 3600000, d + (mds % 3600000) / 60000, d + (mds % 3600000) / 60000, d + (mds / 1000) % 60, d + (mds / 1000) % 60, d + mds % 1000, d + mds % 1000, d + + + + + {d.pattern} + + + + + ref._q_value + + + + + strong reference to shared pointer of type {"$T1"} + + value == 0 + d->weakref._q_value + d->strongref._q_value + + + + + pointer to implicit shared object of type {"$T1"} + + d + + + + + pointer to explicit shared object of type {"$T1"} + + d + + + + + guarded pointer to subclass of QObject of type {"$T1"} + + wp.d == 0 || wp.d->strongref._q_value == 0 || wp.value == 0 + + + + + weak reference to shared pointer of type {"$T1"} + + d == 0 || d->strongref._q_value == 0 || value == 0 + d->weakref._q_value + d->strongref._q_value + + + + + scoped pointer to a dynamically allocated object of type {"$T1"} + + !d + + + + + scoped pointer to dynamically allocated array of objects of type {"$T1"} + + !d + + + + + ({first}, {second}) + + first + second + + + + + + {{ size = {d->size} }} + + d->ref.atomic._q_value + + d->size + ($T1*)((reinterpret_cast<char*>(d)) + d->offset) + + + + + + + + {{ size = {d->end - d->begin} }} + + d->ref.atomic._q_value + + d->end - d->begin + + *reinterpret_cast<$T1*>((sizeof($T1) > sizeof(void*)) + ? reinterpret_cast<Node*>(d->array + d->begin + $i)->v + : reinterpret_cast<$T1*>(d->array + d->begin + $i)) + + + + + + + {{ size = {d->size} }} + + d->ref.atomic._q_value + + d->size + d->n + n + (*(QLinkedListNode<$T1>*)this).t + + + + + + ({key}, {value}) + + key + value + + + + + + {{ size = {d->size} }} + + d->ref.atomic._q_value + + d->size + d->header.left + left + right + *((QMapNode<$T1,$T2>*)this) + + + + + + (empty) + ({key}, {value}) + + key + value + + + + + + {{ size = {d->size} }} + + d->ref.atomic._q_value + + d->numBuckets + *((QHashNode<$T1,$T2>*)d->buckets[$i]) + + + + + + (empty) + ({key}) + + key + + + + + {{ size = {q_hash.d->size} }} + + q_hash + + + + + ({*keyPtr}, {*t}) + + *keyPtr + *t + + + + + {{ size = {hash.d->size} }} + + mx + total + hash.d->ref.atomic._q_value + + hash.d->size + f + n + *((Node*)this) + + + + + + + + Invalid + {d.data.b} + {d.data.i} + {d.data.u} + {d.data.ll} + {d.data.ull} + {d.data.d} + {d.data.c} + + {*((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QString*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QStringList*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QByteArray*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QBitArray*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QDate*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QTime*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + DateTime + Url + Locale + + {*((QRect*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QRectF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QSize*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QSizeF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QLine*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QLineF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QPoint*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + + {*((QPointF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + RegExp + RegularExpression + + {*((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr)))} + + EasingCurve + Uuid + ModelIndex + LastCoreType + Font + Pixmap + Brush + Color + Palette + Image + Polygon + Region + Bitmap + Cursor + KeySequence + Pen + TextLength + TextFormat + Matrix + Transform + Matrix4x4 + Vector2D + Vector3D + Vector4D + Quaternion + PolygonF + Icon + LastGuiType + SizePolicy + UserType + LastType + + + + + + d.data.c + + + *((QString*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + + *((QByteArray*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + + + + + + + *((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QString*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QStringList*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QByteArray*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QBitArray*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QDate*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QTime*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QRect*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QRectF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QSize*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QSizeF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QLine*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QLineF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QPoint*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QPointF*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + *((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr + : reinterpret_cast<const void *>(&d.data.ptr))) + + + + + + + diff --git a/PopcornFX/CHANGELOG.md b/PopcornFX/CHANGELOG.md new file mode 100644 index 00000000..be56853b --- /dev/null +++ b/PopcornFX/CHANGELOG.md @@ -0,0 +1,3 @@ +# Changelog +For each PopcornFX **Editor** / **Runtime SDK** there is one matching After Effects plugin version. +Official changelog for each version can be found [here](https://www.popcornfx.com/category/news/) \ No newline at end of file diff --git a/PopcornFX/LICENSE.md b/PopcornFX/LICENSE.md new file mode 100644 index 00000000..1814cd64 --- /dev/null +++ b/PopcornFX/LICENSE.md @@ -0,0 +1,14 @@ +# After Effects PopcornFX Plugin and its PopcornFX Runtime SDK License + +[PopcornFX store terms & conditions](http://www.popcornfx.com/terms-and-conditions/) +governs the After Effects PopcornFX Plugin, its PopcornFX Runtime SDK, and +related products licenses. + +* After Effects PopcornFX Plugin **source code** AND its PopcornFX Runtime SDK + **source code and binaries**: + * You cannot lease, rent or sell them in any form + * You will only use them in Adobe After Effects + * You cannot use them in a different way + * http://www.popcornfx.com/terms-and-conditions/ +* Any other form of the After Effects PopcornFX Plugin and PopcornFX Runtime SDK: + * http://www.popcornfx.com/terms-and-conditions/ diff --git a/PopcornFX/PK-ShaderTool_r.exe b/PopcornFX/PK-ShaderTool_r.exe new file mode 100755 index 00000000..f3ce6eb1 --- /dev/null +++ b/PopcornFX/PK-ShaderTool_r.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee0b1aa2a15f983cdb1b07466f0c0f385246f7106a4686e6318b0b76e4cd6583 +size 7867904 diff --git a/PopcornFX/PopcornFXInternals/Meshes/default.pkmm b/PopcornFX/PopcornFXInternals/Meshes/default.pkmm new file mode 100644 index 00000000..d47df868 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Meshes/default.pkmm @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82104142fed2d9e31deb8f93ca50471e9e943fa52c582d2e30bacc6c1b24e9b6 +size 67558 diff --git a/PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.0C443080A9914F8E3821857B39F3B3F6.metallib b/PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.0C443080A9914F8E3821857B39F3B3F6.metallib new file mode 100644 index 0000000000000000000000000000000000000000..a49a42033d56fe5cd889a1d3278ba20bc7017ade GIT binary patch literal 69574 zcmeFYXIN8Bw=f(aBmn{>G(!(nq=pUxN@xOt^r{G<2dSZhXy`?{h!jCUKmS%0HJus?O4KXuAKP>}q0!zZ@ikc1|UJ%`oTqy{;7d3f7;;P9Rx zQ!7JFG7z~o)^`|m^Hq7Oy{Z*5CtpaLUkPurf`OKnDe5=9 z|K@3~X>0-mk%Itoz^$)gVhsZwu{QyR!a%8igwi~xVXAFntd0P&aQ-G#{pB|_Gt<#P zfOM0?PrsilG%Zf-Tq#mIolojdQj`Qq3TkMo>D&Xk0vHK1UnhdEgtwQsgBQWmIq0Y) zX77)8ceMBNlL+)8Tyi2DfkU(-o*?1u@9r)}a5}6@n0k4+`$`ykc{@2u7(4lT`4b$R zd?id=agHS7YVQ67b$@#&51h9+$#CKrbr~6Hi~hYH5Qc0&oCZFZV;5Zb1^Zih+*K@*a*d&eE6wSI0{peh$7N zK9UL;;BxVlF#S7UF*!L$IY*2*4o^5V!d%-i8j``7fO`m-;RE1OQ*WD-1rQ|9v4>;$ zi3rMGQacYE1iD8F0@0B3022cOF#Ip1Nq`f(h~;hbLzY2Ph!uC{ab7IO3!()RLjuJMq{Q+8Z$uw2W9 zv;$;ZQw5wI;ao#xm{@PS*kBL)`_6mopPaZQ1^-W76m^KgCuXtr@I6au6;K)yidtXKjF78n#Ohk*veVo9Wkv4Psq zz=BvpYOI_PG(bBx0JMzdS}o)twsXz_l3=+y3OV}=X%`kbN7^};3pw5u()NdQjudiE zwQ%)_xj#svuc;@?SSK|^4%K9+#u(BL3wh)}FgL2MwPJ0dm& z1N9Yx29p>;!-Sw9dQcG;AWug-2cZ7nX5^1XaUp;)fzClt-vW{(0YS0e1%GKoq`jsJ zqN)a&r9$kgu@_=Ue!vZiM*+N`!6c^8fZkX+K#MYHAo@@#V1BD({eUt+GY%SjNb@i4 z{xVbq#|R)2mIIh*K+O&w&WS?WZeaESGycm}NVbg)cBKePjU}K+ZbNXT@Fm6qh9dmS zRY-ia*>jwNnz`YyCNm?n3B(Lrc=b8g_SLIl3=NLG2a)8km z;F-#xxDY@d7~mWKt-q}T>#mUY!y@NEILUP<7D>zYFOB5*!DOPU%*A9Vch!VLA0Wzs z_zR}&P-NAhSCF^A<3lRQEi(KEsTovDhW0?GgDmBksFA=ZkPZ+_fKUZuj8e@)!@IzR z7(s9km`q0yObv=h1G^W{CdC^^g?5YvGx8Nj0gty)g{e#odWnfNQC)h7iFQ~U2N?>^ z2XBYBNscfXb-a7Ti6L`^Mc@$Oh~)IrI0nIk+i{nQc;7U{US;D0L6C`drI)x!K>!F= z?X-Y<0JfUI(r*!g^~JqhNQy1*h#ZFA7x?v&0(!qB$OaxEhEFFUL6NX{jEOA$7MlJW zhHh&CvTjJXg`it2fQDe`7l-IRwb8vt(+e5?W_tVmEv+1)vweKLmPWW}FPfY$gB$@a z%dJaLh5zt^XGz1Ox z2Ra`;N`@5iep%`v>u#z5I~B4^O`y5C6MtrouN_ zL4V^OXCWg4A}{!he%jLu&i|mFIXMOhdL$md9E{0E3N~2`F*8VFgivb439wraLlz+PLm+m90^_7%M2@aS4reAZ zl{j^UsLn*S!@bWp%Lo1eM8A%p+al6Q!_|PD4%jX^oH3M#-6GisC{%jYRT3#w27(fS zkRA$y0$Z@RH#EeXg0$J8V_64~bZe<}ix_%O4E@_rbe|0Aq!C@5b3nM@;q1V1Ib-6L znj@8l)D>$fl$#@!qbQUHJ~0K@K|@`k@~*&ggUSG*p423?ar9bF+KMauym&QCaqX>_E*K&Mi*x(Z;BA05i?)Rp3ZYG>jz>e%3{ z*g!xYAd?Y-60*WCyamE05G@VqzGC>=N3g&qbqv^9<^TZr3G40c?u0%}^U(pn$D*YrF&Ig4St%*B&|!nKlh|LV6Z)hR0g$~P z9w6}UPU4PEo?ZkGUt34KFV5cG>F-U>IA1^DaOUS~>*V=g+6XugKrUxzCxWfBlb?g@ z-wF7+5}a_3w%%U8ct1cJTfC>O3jyy)qKzZC*!l%~JK1^y~E@gPvGd~C%DTst2sYHUleguDDl}&k7Xs&wckw)&azCdaKYxOgl%w+Dcu}-3&I53Q zQ>IQqwmP2P{(eA#)PcnLPv1ka4}1OYOE5XC5dKU5Kh6Jz#o=@Y67YV%*%#0 z2XBKzIE83N6{JzVpG5U22JM=$wU{KCPIah{D)hoJ((_gz>B)^601daB54UqzS_nsx zam8UdL@lom77SonO?@#?=juePIz*b^D;4sJeW0BHp=BE==mpvc7^r)78TJuG+8YSY zenh7n;hA>Mp>|Yics+G6fboX77CemLnjzyXYiDz<#6Hx}w5cVLwH1=}_;8T^9*46xhO=7&J9?%QHlzT^Fj(wx^s9FC zm){&KK=XxDJ&8*itQss?Pr9F6Iq)n|Y|Y)1NsWG+NWZthBq!G-cT=WDO8$uv`RPUh zQT-Rss`Na?*9Sc^7U+|y&tCV%(fBG=&?t%Q*N9xtJsaxFE&z(o?HGA?p?hv>VPvAe zWo}`4WNzkz7ONVTNoz5qT1N3^os?pORJ{?oB`|;Yfc=eh=%=A32m$*BG{n+7OI-yB z|JCY>L!A*HIJ$vD25^3D=LB;3<->Rk8U}WD2rvdZpj;fObPL!dC{zj}m4OW-wUd-F z;LyKQ1x7Gdl#~RJaQp)x5FaEC8ELn03yTDklX3+d8U#uQ8X3W75BnVla7+WBF%T6W z$bnWBJs^2uoOJ+XC_|3P1c9YN?=nHJd=WQg^T=p{4q!AaVpm=Z6oH0amHu5tqY{yA zzl6SWW2Hg92m+dvbU6-!5(S88*qc_MXWT)DB{>Wj0RaXBy$>6>f#R>LMa&Q#CA>H1?eAVTf1!YsKm~>zy;P zmBTpzFOGaQF`5CInzpuweQf{qv6XVP_50gc`9F*PuYP~(|LF8TF_1oF00<&`7zP2U zNpmB=EC};l&_~QH4K)fKk@r^#hKDQ!nVOxPfJWt_AhK~3 z)DaKk3+*VB3hYo0FxLf0Cv7+u;sA3SqLl~3SjP~{qUr_UNVtb8#2#aBhv0#+{3?W8 zMOdnaAH;=YqtKSSv8-`w(me%~VVGWoyQ`gs>Ms`eH(priuSj_N62uqY&U&jOuKlnp z6xF7NNJODDU=h(*9jg%olJ4Or;8NfVoR-MAtGJ-HPFgD>o_ns6gL`j=pD`0h)|S}cer5+2UJ7XFY-^H;zy3D<>Hr5T5ieW#ZK`+}%h2FP}E zIbe&etZK~8*kgq7h)7F5=z`bfRLHy2XEAV7)ot{cmZYI%RuqE$nW|4Nyh zaw~i{<&RBM+qJ;dZ)-2(@9fSuLJ zVu)*{ir77G$gtoQP7Vn7+hwvZ02=(3lih|XoCmv`!lP%0!}9+UguU@H0R7d`>f&D= zr!OMHIkCIbpW|9(A^+let{%*+9_{Fd^ia+ip8b z&F+{l{4{drSzNee6dGlCe~~6gGDdY-lL|W^i6FBD{6L+w5VRli(2?1GiWW!&9C<)v z;aDV`OuzOSn&LB~2QC~9cu_Ti#S5nfBKgy~vS^+flK=Io_Mp+uK3UO{Lu9OR)*Nm) zlvptY2A3ZrKUdH$8fgSZAxOa&3f$*o(1x*MoruQH%tF{4?zuPkQ?-*qG@6SPh=I!o z{rf$&6di&$3X}vxdB-2(oq&TMsl-5$p+GwDlJ=uA;6VjIjX!lm0Fo{eB)!W!oz_6q`ifN zKY~a2AOOb>+(+;Te;vRv1NRX;!j}O!1aKe0BYY!(V*u_Wc!cis9>F8L)F1p2Ji-H?lt9OT{zvc# ze*wUgK1dzGBYeQ0{zvc#p9J7Z_B?_|cmM^m0emF@fPk-*ll<{r3?B-+!m!?12mVHxkY`dy?dT#vLi+ zOkxeF1Smw(@$ek-H@*L5mVXZLKN|2a^dV_+e}Dx*>#svGKvYgf3`aUji+PZ=2$IBz zOUj4?>+at#(h`>-9lG(qkB7bzmJVKyPU65|33V?ZXY=&)mC$esaB>H};SmnM=K+}; z-t$jC4JT)uzq_A!kb@uarSGss!rzx5ahRY<9P*a1$9qZu5{bFHJEFyK1P532p?v5+ zqS^jA=G%JUJ<)&UM2q zai&`5>cPS3&0o)faPxn$u~Bt(RSJC&B!(yhqEH{Ba1&rR4dz*;Hyj!oas^_10kC?g7!XwVhKbF{rNQxOBfDo2TOZ1X1BZUF+0DE*(sm_zh%JO z1rHle+o@@Y7)4>z9@y}wJ@s#^-CjQhB`RTQ8zqAFY4F?rvrQT`eQ`<~%U|`k#a+x} z7Jtwoz9q!VTXth*v6P&vrR^a>I8XC}oX1@6HMi?k#erQ8m1>d9-4o zdRpL?pdn$M7Z**wk5^8+nJE?X1%9=ZF6e!li1M}tPO0<-&-NfkR7Ah-xfGDljmUQ+ z-d0POz`V{Dc8ssEl661AA?PSSr}tM2N?sM$9qZU$qo?uN;((j->rc*@` z67yus5bE&Fy`N7+sVV4$Urj~RTpWavC*c!EN zJuy#`;=FZj;mnPMkB_#*_o~wBLM`TUQZJZr@Zze5_QyK&-PO#w2bYa=TA9t)D3ZR5 zbS8?SEXxWnmYwD^e71OVY2_Ow1%6;Up_Mp15S(~!BDwVy~RBCpk?_S$O@X2QqltzvyhZ5~<(~C}bO)~8Ugf!3b z;05ORi?j`QBqe;Wfj@-j$6LkkSUNK}iDh(R-_zTQW+L6~EiaK*oYmot%Qa)m3C~aa zd=sP}7^JJsJ1)4zm6D;7c6t>H(d$Qq^V!2eN|0Rsu#DlINMW_!vdg%^_+O9>@gx5FL)R z3($uNxJkDFU9Vq#`M*pF+r{BBnZp*$H8N0C<)%KQQ&QJhd?J&$&NX^| zL$M>^mUXHQOVN07G5-&nc3yQhSNIHZ&9cHvsG?bIFT~I!YZ+1)z4Cf`5nlc|7+EYQ z^Xje}|B~xX(`V|boaLSI7abw+0KU;M+>=@#7+#m0KnuMpG{6{Ln_8)@M`Lt*B>e}g zp~v%ie;52!ipxBXcAs@Af9H`qTEidjlC0CKjW1rV)u_S%?ZbDH?|a0^`1TW=2HA;$3OMNQNp1C(2;ADg8u8 zRQQxGHxbyo{&W4u0{^kVe=P7H3;f3d|FOV-Eb#x51xPed|=q@TuM`l$4-57*yID> zli8d8hQT{cPgTO!naI5}Np3S_z%7>kK!hV>`yyv40ul(7axs6cuOG~nZ{HG5pXVK=XEu(kHM8TN7WO#0+#6L(;D*z8N2!5a-;%{}8f-|B=eu5B-!-Qf1P zYjfPG!81Q{YPRap+o#(*H)FyYH`dlyzU@>NSKQxuG;s+(J7c}$uDxHF|KRe@=*P<+ zHq2j#9iQD)F_wH;`FLkO)Mn$;^GUz3KUx18JFx40b$+5fnq7_jO8 z;?iuh()4WOMvp<&_FV4fsnAQCEoM6p*Y;mr{1W^~diJ*4q)N-?qs`bmgSi+fZ6cp4 z2;7!qr-h7j9g=|%;pF(V!U7rBUWh8`y}Vu)xUZDzIwK#5D$X922uIu`&`qCz* zKZcc!t{bQ`BpH0s%fHU7QmV63$fcK)a-vR7Ps;SC$>`9FI2`aWKl!Lza#?;@EPvlBD!gza1~VK8h{wxp%L0 zY$^*cvz2wG3|6c`l{#FY#V4Rrz$R$YmTPofD+h0~Ets)gDkF=MVz|93m7kN3&NrPK zX8Kv26LNjpbjmrwKuSv1K+x4dXGJdKCmX#{`4vW;l@j^#P@_5(lfHZFC-&}qljXj* ziq_$WfrubRats(wbOk|5!9$~9e0+S`y&4%uR`OszJZ2cfD9ETKD=E`gnw8Clj~W#` zaW`IB3n@u4qJQt;?XtV;s@hDwO#`Fx)cFB78zB$2duEqdnwGu24W`>Vdk1DP`08Sn z5@#nK>08!P=N5k4ZoHN8IG*o3PkWEinYuM5vkhJu5&Ma%Y|$}4`$t^`juQP#Tuwu+ z*hpa&0aOI$b>f$$xMyba&HneFq1r8lEu&j<%c-B1`|2S6ZnMAcRb+4}To^kh7 ziQ@Z0wZY~SE0(tOw0e}pps^!c zrv4K~tEOw2PG!Qgh9h+e=Pn{5@6-G)$W;@OB&e=$EDCk+(9Kw3JVF9 zOGXq4e)PJ;*DL$;vV_ytlTDrPr=`<}Z>?O&{&qoLxj{>vaK?oJO}SkV9LKN+^`(|^ z<+)+^^Xj!1+owkg?ij(C%)-NAH0!wz4x-x*8SkH5M~&zFMvm-?vy4? z;X(ez?ThE{oH@2?4e^(qRHC7&V=>UYQ&H9TUiRXP&Di``tFn1jFR!NT1V28tB=TBc z8+M!`ys+Rl&1?iwHQm_kW{8QZsmJ?50u#;LanI3mM;oh0u;i**II6liM{1cMm{@N^ zSXM#1q@^*(CH$nl!f8HRpraLUTtT(_P2rY!%sXRdyp&yIpJ@aHo-)z%CHd;XW%gsy zLy8m7mW7iU{LgNvGyDHKeI0kqHM-YoMakGW%0=hZD}8iaUP~gLtl+W5Li)QmTNh8+ zEk1jm{V2DZLYK|DQooYh=cwME7o-#Wkz{QD{e^-3tB;Q|pZ<7N zQeF!4f6nCL%Wz*rirh*xQLRQOp9hPe70J`pXUNldIm)R62mRW6D{3YM(u8uwbb?E0mOlpnMruoncvOchmb^gUJQqy7MEa z7dza`;;sv;;IA?@lq8d}vLhkFJg+r&zKt4JN;a64a1i^f<3p0iQ+HRahQHVm?F)IR z!Ig&0W$^NH9^*T88xv9#@Hf?4p-M^hn;;6&got)sUCn4p_^b0L#RfzDm@=wn1|B^X zc8(g3zr)i>b=|lWA?ytNXPvh8@FQ1av*q?E{({m{h6GglnCxCY^t#feD7bdFo^_gl z`B}Rg*-Y9RLN=VN1N{T9PkP+uF0FjAHxtklS~>1I=Nv}drPw2vZI1}YGVp4!N{x?= zbui$-yy?gJ-%Uo8Eb79fLn})w@R!>Z`c^)%-dpYOKW1TwU@$}jzh~#mG~X`KbU4;C ze8I`LTrP^C_4qfH(}D4z0jk%}(sb_)Te*sU@Ant2KXzRgnc6sa?Kz7V%Ch}FBo^G5 zMF(L>Wc)l-UxJ$G^`MbSFf-cGIadzFEs4A+5%3>lJ4a>1jB>Cn)NAhpYf76=O);4Y z3FDVW-u=i623~HSww(+7_4?A*)yVmSyXD_ce$@wAp3%>3PmN}`rav_qFi3uGQW)0h zcux82&C`($RYK_sFZ{2`8bf}@<&Lv0`xL>?$P8Gs`F|6;pU#4eyMWVHShJ=-f46qU zo4;>ZlSj3eyY%{}TKQASS44Y`F_7?v%=F+hcT7Lj{; z>aG%0P4#_{R@07NDN9ia)kEGk<*Hw(5_Q^tv*EzI|R9G>l@K6k0`_@k9x* z6m&|R{o>BAYK~65A$8E1Tt>*ZHd9}RlXFfXVsT@AHlk!h)dF#>s<)4)EHh=j`+@++ z^0M2o6|Ch5k7qgw%}nB0IF-yRf^O%!vz`iGcVoL{Wf+PwdS_n~!j$FH?4|P(S6?o; z;c>}5thNlLzg-jm?FVZ8o`{=7gJJrICVdIzdvdCuf2py_r+1+o7L=oJDOy$c=)?qR zGX{Tdvd*BJA(p4+d`1s;iSw)6Y@Q6C0)Ba_-6s5_n2~9mpEg(_~R^ z6=QnJ{JV2U^)Hsm&si5=_sE(vl`4M0xI5giepvJT;yP!^7mpZ)#Y-&StdXJT;nHRg z+{3iYV)S+I`_7BHZJdZM|Az5-9D|yx_I+=^i@Rjz*j>JB9FJtOx;o?&@Ey|oaid&%X2i*SOuS&cPDbq_%Su|CyHaHh8 znil!Uc%W9a*PHos91WkQt}7N%F4Qz2aLv>#Lkj1X$uJ-~;dIgTW}Td{E?z5F*go8c zzvWFtXN29)k1sm=f>utR&-I~|JHf)##sWp73V`c%MYOf$N$Lj`Gd+godBa=kO>lK@ z2mS|%5P2OHI?fzpVsKc#?u-SQIE9hd!l^N*(<2^&F&yHaOJc#iCQcH!rk>|K4EGdcJ3aTLzzYsNE2Vp%lwH;wdlk)}# zUYXYePuV=+-sZB(8}U=5&M&q7sganl;eYW?Cx%1JqAupP8Vy+fgJamlBf}q&U~a}O z1HMK*E??Yz$xamaZovK67TcTOuZ&3bk)MIvp_YEE0@hW`fhZkY8}@W||R*xQ~z zKe;=S;<=!m`uW4aTJ$64T}=Hu!Lf9O6A+ck`M!ybG)S15Y{!CShh_o)=4mOZ(3`Wj zb0`~^JpAC*x+DG~g|V3>)oqql330J;-21Ug&Ti32a_Zx27B`pnR<`thOt6UE4C+&g zUAwErxy}t4rKg0fA8Jx)n}pI)lTDWw*odslFSF6ZvIRLQp& zrLlWYn^igL>yg%Qt2?h|Si5)Z=s9a$x32R`^S9R;I1fE#I_btRPp4TSKxprs4O?uH zorFWEp41Vq#P*iWoT&0k64Qd^v+P6M< z`svC=h*g@A*>Xku-jBj9==k~et-Dj74lc(^byo7UpWx-8R!o(DnQlTcVLo5DSG7qi zA2$`H(K@|zil)oPUM8b!+aYv!pg^q`x%^3#w z1xh0t(5w5z(#ve8Q@SMRe|0Nug+H6#xuFt}X;2tZRb%n!p($+jhu)Jr+)^fvZBN@C z_jG+bBZwIo%)BDxy$B1gj?}vRIbU46FU0bCfx7NSbJP&u0$E&pt(g&;Of;!6 zPvi1Z3X;vRf~x?S?fB1-R=ivjMH6>DQ&ZuH9*3i!<#twHb}I8EP!?xvxn{PnAMFb8r*$?y$~aFzx29S=Q;gL-&NS9 z+?zdX3u{mP8ja?vxcN&=W`%S47?lDVfll$fdW;xz>WJ9~G`F6bq?i1qNi4vwgu#>0pPC*Jo~;(b0R{-(L}5VT^l| zX-Y?Kqxo3mEpmBHbV&Z-$6NldvONv{$}A}nr&(*S5XOG&i*q%#dejF#P%;+m&YVTF zkZV|ODzIIXv1@2#XW*-}TI_#irLp-&LVb}9_faU+VG~-}qH#Ga*eokCjrl=4#dqT; zPj6EeAoT|{_Yh~xvwu8uuvTqsrtWg%WA#hBI^`!l{jxq+(J?i5Osqk*kn=u67Z~i8 z7pGv|MnJ#O5xiVLc4bUGg`F`$;bHV+b7q!Se*f-?`Qw!(<%11R4iMDX3upB-eed&r z;AxhBt7f)~v5(NYH~UR8Rqa-E%5Y0jgKfDVlh_pbEQ~gTPhdRao%Osg8*Eu2$&>nk z%FLuIC@9Df1oZ=RxnF75vqb0c3Bv})jE{4ha-ox+?Ad@%(uiCb`RSpz9%iD)+$!(T zfAOiiyhNQ+Oq-|U0W9j+l~=^|w2M+7U7nVXv{>too7zDo*UH8{I(JrWO(Ru308`C1}`pwsfoaxS*HkrrsHP`wE zhrjPvSTS7rm2MjGb4kX_Q!@PA{Mw}!(WFICy+u3NUZ1o;L|h$4`Z531zY=S8?A_XL$M)d+<4K4NV$ zPgDFsLq%~WCv(lnTv3i*^|F-4=^Q${7m)OvMCfc(i@^jYy)`E3S)h^loXpU6lYXeD zoYb2Kxjve=IIQv>Nrvh0UDD;^+ArR*Eo>bNW5rVkQa{pP^iWbLqjDLZ{V{*#OB9mH zJ?J<+&$TYv`33X+KjshmBxAMVO=gXq;2%mk=y|-pt8 zw)ihfLZdUGv0k5QY_o2VsU(c`+LHNyfL@Gy^QF5sL)T62wzOOLch=h1p0H*6Hdl}q zvO_|^+y19-pWR!}{2sAZE~};x<+Ifi=U(@Q-z=l0)hd%~ITx^VOlq;SGtr8f14*PS z>XkMBoU-h3`DA5Z2a3P={Gjb(k0U{`WQseAYuHeIpDv3p3zo+B7!$LbmB+x#%PVj- zGE|^_z%$zoFP8DuQor-WL^yuX&(+s60srWeH^#lGl`>HNAmZ7htA$~1{SAy4pTBDv zMTFOHr7bqSPySLt2uXX&tUmfP4y#zjb9|@6m+ysTcHWfqwtW}aM)G3EU5Q$$>x@*= zO^pfEsCdusk(Zbn&qprxUTu$*e8FECA%3i*nE7?z9nm*2idc@qps7Xm=H&Xj^=$>? zbtT}GoQ{V#@bB-Q?lY7!9M4pzQro7#GfDftikI(F@cgCANTOYx^}D{PFP|jICUc*D zl{J1Q`RN9WY<|{ ziWE;ev4FhO96i&O^n)t(ZG4lpj{=X`vM_7j6(UzGD*N(7kK95DT?x`s@FZaIv zl2>Ub239k5x_rY@|03S(84SFaIL}Ta@kqw{CtZ_HPWbAiRg)W;zv}nNOsRbr132!c zpkI(!q|N66#rJqgiLKhn^{pP0FY-4R%{)aT#TiDiQ}F3sS(IFVgpsM*Ipzdz?GP%; z*aGC*&ns6y*io}v%ztgZc|NxW%%TzgaG1rjtM)NArPT;7`Wzm55xgF?U>+$xXXApG zsy}#=si>mWl$3bj3j4zEB4vqvw%#W~#{0gIu7jKr{)3vE#??DS%!;bK^ToTU`1@Qw zu#3M2bKxPEG2!ns?t5AF1broZL)6>A6tiE~rYA3cTyy1gNyJP!GG@UKl1|t;Xby5V ztUg?Le|28JsTlLg>aMknNg|TF2M6{&vG#2eMEUVc^%vfyoGcl;c$WRhkk?Y+0a3xQjE2h2Oj&v6eNY~Po7oGUNUZRLEh5~nt2J;=iGY$8St z&Yf`MCh)Ig4e;m*<-!0*=nnKe8%8~3cR~AN5f6^zq1G1-Q5pfUbIp4-Y&>1#Fe(*k!ieS$>G#JL3b#)Z7TI`f^6OL85b)pETU zYIZTlT-N&5a?;1fpt69Ra9l?J8%+V+62`;KCP8$GFq|J5Gn&@%F?x={meJVwni}HT zL!vR*sCta|N)Wu?OOuiXdki_Y1O}OE7)vvc4+?V#UYGE+7HElAP_D0Mt?3^wGs>5; zGVV<}#U8NKWja}KC7MnJHiv%h%(9t9tEt9|Zsw>Sc!&0J99DGeBZ^v>U{%1~FnQW8Fc{?BL9vmicaI@;s+%BoSNW@y zPMW=B#oBGNP~~`mZ-a`DXY$t{7?{iwyr_4Gy5)D1=j*#<%NEMh&)% zMOcui_@4tgKf~#Be7Y85yOF8)*5|9{$o$k<_d=YPZtkUv2H*SexK;XNSfI%I?$4MN z{79&vK-`o#|G0+1MNV9@sH&<>cpsut@rQQ0_;@xg9p;sfsiIMCc2y?tGcfGRO|YOl znNLycMaj?Jzou^($!pDsjYKR|V&LVxOfZiE9uqSJ=PtvKnS#R6>06-#8j-<@Wzf50 z=dO(Gz8~NCXu9#l)?XwTfhvnr1M`pCj31!x%@fF|>pV~SI(tU#CwSp4PTW+XX_}ga z*M!Um=;=0@ys+k$^v2^&^fq8C^dbdc%-T?lb z&qvW}$@gdSlAknfGHp3LJ}rFvb4KFZH9Pn978!(^cgej2`N zu&V6rq(V`IlOAg!^U9;t{3xS}RCl9${MHRLSCEf~uW~k92f6fo9V>tTc;hA~tyXzK zb;-RmHPv!+HyljcI?pH9ij+@PzQU#?I*2~D?yjmV|G3sZNkjkGZze}sbo|-F99>iC z6BAAruQQ97FKqXp-oV`v6pnuxzxtKw$(SYwqvV|9o(vX{nxuIMTD<@ zCgtKk!R7=0mhAkr`Ac-Rm2^?2=Cx9)m**R0dY$)#klnu6Ee zl@7&h_GhWUS_3N~G}e3a^4zaCF;_e{B^YAf>F2z9XEeR1`^mv9>}noe<>|$SinX3p znVj6?w-($7M*Eac`(iAmbN9b(eG zU}p3Id%FAV?)f!}N3LB?aJq*voaaB57I7r%g?Lh2NgRmbA~1wS>pMf+W1p^k;=P2* zpB}Oq6#B}@co662enyy%aQ0ro7h>=C7h!tisPOCD&t*bxDk5)88g{zK$V0afoGNT( z756wiOiFm{_#!EsT_igWzDjY(IgcWD^Fk(_rN>{3;|qJ#j%%O($3(@!XSjLcHgZ%i47J1#Y-DU*rjzIB_d6hR#_)wAo^6)KZsgJOv;nzQm<+eZCJH)KU82%)@n@zQbP2$(+n*lXI_v13Qsh!2 zJrXA{;c!zY+0ljLvSXW2RQ6SLxGT&?35I2z(8|`<9a)(B7W5=JCVsf}UFDaFrHfm? zHm()D0cSIDDE~V4F?fEg-`3e~N+`ZfgI^@8Ak6_Iy7@~XngB6y7@Gp=Wd($hYSsz2T=3(wbY9=Gt)jx?_c-% z6n+Q}Fk+d2Y}3vY116{AtjXcJ^iLEQLkwS8>UcBpO6(j<;bMSR-61h-JGCDu zm+kevt;Zzqg&I!K_UBS1=MMdcs|~L|)bRI9`BS%RKeQ_x-U&IL9Cn3>Qd@eyU=;St zLaF_Qqw%Q^R}`XCo95t^Wj3u_&D}5EbJ-LWn`ffL=PaH;2=Y+7WBYt{_!F{7S*TX^&BUD> z6X!(pg?}vF94VsSt>P$9qFgxlq$ z(Y?Gm&*SQu42Ell&dMyd`U+~WA_gkC;T6_9*@L$T$(I9H=m-2l@)a1XEE)4H4ReA=rLmAWulUsq5gWw^kKjsLjp$;D$k&K~F2s@wfFPd!aMdmnbaDLN7VjS5HmV z+)nA$zk(n z$cVR zLF*z}`wG?v;guc<4^R*)jg<&%Vw&iwj&zIzPB^_(dJbb22{FEwl*=2@I z_Cz@7MAS*Ua7OQjbnVR1?RzVDqLgtMZ6Ggm{c#^Y$+8cVav8NSl@M{4>Rz-}#0Vpe z&%{svFI{JDIKY~cjHlUIIRf@)Gg)u`jBkGY=JV_zr;Dl0cH;}@THjS|M~d65UmUdB z-r?ofG^a&1Z>}RHHcy^W9a1-Xls2-r6#4abP5;gp_j*P4m`e@trEfmZpjCfWk_ zPo;w6;jenxN1k=Oeoepmu5D!eOEEuxje45;d=P{fT3NDWL@2Fc?1*^~%@@q~P=AxU*_)SB_0@J?;7KH>;QS(@W&@<}DN*`C~s( zKD$&Z?jK>tKLF7;E?8!}O;aR|@5#D%hEDbecjbPt+1EM+C1fz=!oaZylN$kURZDlX zs_D<%`ud>fcyl-T_lj3`!hr>RiU|((`8-3Nh!)WiQ=w_~h=+_1_hPTU4YuOlZgXT; zPQGItBvdt=I;N|byl%!5)IpbW6 z9r7;uq<1zYM$G5i{IN+!&%(RtFkq{2BQa-LHf5^>!i>giIf9t2Xy(O z=(2Tj0uzEuNP)2;jZDnHg&X_j9$I15Dr7F_0%9jAC%|imEe5{)P{F!`;Tc4NQ&z6s zjH;n3t95uz8z3{*LwT|8zw6*>0e6g#ujze`H59h@+~ykL1r~QRL=~0QU;FMHH=`&c zgNF`|$SjOfNEK$-_A8y8r48DNz7-WjBHqWcChh$Cevg6T`5GNmjsC5?fzf04uG@R( zgNDviko=6(%97)I>ei6Lv>c9eL|X zxxg+$jCJlg4&)xXoKaWtm@2=X4cOb{J+&&jK|@wey3KyRzC3F9)A3naaa4>3xL`74 zNS37|Vun*RDQuQxUW~#gOTMYMM=@3}7BmP<_2jK)*u^;*Wo3Zi; z^{1XJI~xs(juU5^(g%yg32k6rd+E9uBAHay;LLdF5Sx*#)5^m)dUVhqWfD&HdVd zv6ksXmCUCMc~Mkj;p!B`^F=$gewatf1;8f*H=~?1cmbJvISnE@f06?_(W&A>qU;=n zW@ZUHbDY}diKez(i#^`9@ONogOk>PC6)L8Cs%dSKNTUp!Oz_rZ@NE?@f z`r_5)Q}wL6^6rG=F0P~1{hhaU?)}W}9S`UmXKsG816Gu0ysWYF6Vn9y`fDCJRlr#B_d>Hn;2DJ%gZX}j_kF*}d4bgXL|-?fhdPXv zbs|tEhb!$*=+KQ+F$~N+D_zn*_4Hj%WnQ<}(xBVl>gQO&ysOX{FBbh=1iM9kXc$4C z@GWRruHw-S3F?MLb?`^8CWTzR6`=9NI)|SPjLZ4j1eRzm@35N zC^&OMP?(RW?Bps7lL?}A8SMOE{ve)}BLv1Pmz;$pFwmSTbI4SB7S-y|U`H^LRWmJv z4PZnJB#8?aKw&aHQ87YcBNhYWiGvXe;_j~iFd>LtwV9}D2uDpnnq}kn9EaWxcj)@Q z{m*%+0*~au_AjC40|Ontmj@fg?XY7HC{OD8vFxGeZDV8T2hsy+pO(H)>|+_$B{4L; zZMguN;(=alKY#!oy9FNAfz7$oI0W56zSB8=3ylBN6RntIj-Kik$T~3yXmm^V?qSFF zqlz0xN44B(_gJ^g1h^&7B(Dqtt(9|8!YT~|2(W;TR1{GQ>V>_ZH~sSnZAg-^w*`_^u_UKUk`-Lg zNpB0Bpda7EBq8Wn`PZL{z=Yayc` zcVAcJ{XM2`lk_&6B1sJZ=oqnNSfZ&w0th1j7Da={dcKR}-{`_5nUa9wkN-Sxwd;Am z_Mo7kprFY-PW<5}aQaNd)jGBwJTEC*ko>i);fX&HhXG z$?fBf4E+$HM{hbgc3`dfhf$%jeDzi~4lW>#8WMgT4^!FRoBq| z{{QpG|J_gbr@{DsKCKhn4TJ=_m{uUCzo(7c$r-Tce zDY4gnIjCOONyS+S2utU`jJl)rAhE;M#0IhtHEP90@TgPzOyIslVGivWpSkaCR@W0= zzjyQfHziLiZCXPpS{-;Nu05jyl~%F>gC6+gmIPU=Jdtev)Yg10Ra!zG|L`23>a|G` zkBAP-=Xqy<^xyS?L!j6#-OqnwIQ9`g(<3ZDyFC>5ky8<_}-o?t|;M?X@3b*rf|83WZ6CbrNSD|Zg zL~;*H~It>{nz6h9vVPvsGjL%+BB=>Iv|>i#36=IM3fWn$DpwD;bdN3(eO zQg0{^!*GHo{4D?8BNv&dAn2J4wsp)lTp|t#0*)IB0G!)Q|Dfu~w50te*m-_-OzlDn zkJ@tIP6;s>J5#+9jrLvxqOOaV4J@iyfmIyrR^0wbIWVU|3Vb*exk3k`z$XoWPD!)V z4I`2;9=O1AMJc_AIVQz58lq))TgcO#bCd{!i5Q5D&T^P&iwxr8_b7oCggh6&9%3ub(;#JLiVs63vCBqN#^!5y4KRtugrI@D|okbnjm;) zVKX6_1}={+0Qid@TmrzC@4w33>?aJ#67prBsGlYEg@u%`%Nfbt(pGW3j;zntrd#Sn zkT>hx{0eME{hTBn8v)6@Lvz`}`XBwUIHU&*eeZE#`%@CLXreK+&$s_yuJ;!tTtn{2 zgYytIFB^a{3(YmxqZ`7MMlUL*q|yA%$xz@u6o}p75RftEyd#-RMI*{>Q}N|*$kcbt zth4G-APv#E91QNS>us&Ql(;vw8FU6#S~-p?eqQT zIbK91L4p^8T zb3Iv*J^xi1)OD~K-GA_IhqfABI&lMTm)5A09&u5;{w?L`2dNwKfn3J3d@8lBT*rxmEf|1f%qDYsI*M{xo+y1qDzzMzxV&yNq9PU(QG0^vO503O zrwnz!)w2Sq%2+fIb^z)Ukw(~4otL2Z)oWANR?n(^8k!;1sRj`&badvK2t*&A%hPnI zwK#S%^FM$6ueds5O+wnCyb8q%8WxPp20@ThAj=Un&NPH%V<_JMB;gj5gcapN>-qLSOxZs1~7@B*Xauy?&HGI*ll_}llOhp+n4h@yfe&u05>9m z?@Q&Xr&&UsTg8iZWUK!98<8#o7KKA?T?1fW&WjdU(AWvCv_CU@saWJ=yoXVKpZ1>dW*DVM*< zkzUU{YD`|CK_294j{!Zy7QaNZ#S5EB1p|BQsn%m@Ku z)?r4o{^u83t%I{fps(~Exm3i#*TO7!q(#6(kp46SlkhMG00EaqaF$K5rtfk6QUjIF z%=L3Q;q!C36cL+h*Y$B-Gb!ta)%iBMQcfg{opsEPaVAny&#so%FBop*AtAUyVzrnN zoZjv;@AvEKSrygSksREUUO5ifh7j`)&P-pubQrmK#OX z793w{{xY3r8}uXaTr+C2=&)4PtK_uksoTu61D!7(2!J`OEQIQMD1spfge18eeBVFR z=Ii?09y&H3_IY~GRR?GIR$x}5{{5=2MiTY)DQa@-Ua z`JyCU!BFecUk!3HyDj+_smE^m-5v^H4 z;(R}l6O{s1-~XQH&48yPGY=TbU}fg$JJwE+-_*})hNfag-N6zt<$2!c;ZedR1N-e;@{I+Bjk;fVYK0d4GKD+`$9I?fqMgUUIS|tbZ;! z;@r3;3k{1_OS58*{!jGDXCnx?BxqF8iH=~HyAM#4^x^#WPs+PftDkSN;UCe z`%@`tBV=rN=zO7*r}!zZHP%yy{6LRN4`JlKloaV>hVz1-442#ZoN9lTtfyZw$D}Y< zvd*EFD|NKDpw(gpH^B|X6%*u^B?ab<-42NGj-&B3xJRR3h5-$K=F@rdRg%TD;UQq< zKY{?sJRBW+wD@N4ODKQcD-A$$T*A6p_%3=`C=nuke+(QsD4Et0AqeyYQHqJiLp)9P z1~0w&?p9f4o?ghPYr(oUszIb-hoy}OiqEMUhHmCD12P^&Q^{s3vjdYnphGY5@VG;<5`4>;lA>)zllQv%$F+3R*09*O%lGQF1dkT>KAAAt77yEh$l7uf)dEsGsqNUtx} z5%3n4e19rgB-i+3ZE8VTg3+5sEXD5Dn!(5e^A|@*0oR%^XNzyG0 zAXxLzOGQ)m2=cmW0w@PNpNLbA0%Si=ws~*lBJmGeT8^l-BlCTRM$r7Rq{xp=Dqc*l z5lTSKb>L>_bN}1(cXKItp;_CO`<)c-a-VoqIsSFkt<6aXXKW|e*453+5;?8-Sp*^! z{8)+rc^7wSp8jL0lKUidYd;Kl(4t7j?o}!!HyRU#e%7TZOCc%?xW&=Z9yZI z?bM`B!Qm3pOi57~ev7K^lEtETzf1*Vrdn~EMrU6E=k=BC(azj~su1l9Oj24Y!hfGN zedd>m8yLpu;OA`~++-XQvR;zg#H1(5SKC)0)AI$!NUtSo;4zWdk(tJ(`v=LP_%(=Z zw3^=4oL`3pgcy01l3K^yZQKlh*3uyrZNGVB^?fA_OugB1H6OzSnh-7?R!;D#hyX>+`r@ zo5Y)Zq{5*@a4brtGfddRR2@}xua%{y=`Besr9b6sY@H%!nzV4Ta5mmPcQF*fVmW=& z(W>Rs)Y1cweNCa@=b?xjL7D0j<%6obt^TG948XBPBEWyAko{1T-SCaaJ$_gZ=r_#M zNC^z{}xdjEEQ*8WjzX}!j=OsRW}y{)+zohx034HY!ZP{@)A z7X8Thw*RqwWiV2M|AG_QI*Fu%L{P1yM=lg-A|B;UU9U?w_YRB-$Xf^@fK3!Z3g+D? z26WtXK394CoBh&h!g7eQNGPigPo|Pd=8*YlC`v*U$ske^EP%35k{fP?PA(ZA*b>5h z@(HSS&lxltaSP~r50580_XI23XV*?^IhXWT!MoM6y=uOx{jT3d>GSrjUp~x!Q3;R! zZ@at=ePo@Q`FiJidEE>-4^S`<^sELe2Occ~uXF!@{QjQ>M$$)a1{Gubz0QSRaQb)v#>Kc7nc|yJT&RnN@vJIXG#zN zKv03dCs`>K=dE!cIjHCG-`I{w&r`a4gAwClf70OJX>ZhL^-PiLO^f~Lk(QtKJ8?cuV5Kd0Z9TNC5 z)$%{Vk5SlxJcxi#c1`ROJ{nW@Xq2TJ&r#mNMG7J#fq-dooVi6#kxK1|(9gZp;Y%Cs z_8f)BFLVZn*mxidi()zjDOg*ah1lzBvj7%lCUtu5;@^Aw>JjPJWRA;(QLB*fQDZNq z@YL2qvY&l~Uq*bIc|+fwz@1@FiAaXW&M7WXPLJo)|CqV&6o^ziH!LmG5cWnnfY>8v zz|^ghhlzOks06nWI&C2H|XP|ltzghE`y^N zl7f9)$-E4d7^)F@;j)YoROEmzT$QpLukKePTaRPwuo8FKZGWP!2G@J}@$(pP`m-;J zs6XHUZrCr8Z4Z6zu?$$L%GH{3#=Lj$T_^$smSFV0O4#kTlElF;H7X2iUsgL(yDwBx znc$BTb~h1-)VLUL?yj-D+t{qwu@HT2tZHiI?;s)3w~>?lnm#^K9%rS_$ya0k)*T?d zt=p}s4ujMY&g+%Dn3{HgduRPLV1vR59nW+8h(ETaTz^w&1Ef9pjOdk^#*hmzKKJ}? zG*x&yD%5wFA*{`-?Smo|)-uXckLSoUOZZq(OLK7f81Zx^&^vt~zmXyho2!=fX;!r4 zwL%a$ijcJk&Xfpd&w?xVg81!0{5iBDctiaod1%V}*|-LQxfwDm*7Widy8~F8P5}M1 zthExVe5CS{LovEZmJ*a;HzT!;*qKJeQJ%&6*&N7EnA$)u|ufe=#9}Q_I2$`Di9P)1A-TN^Q5nLe?i#1?QY0@k2L>!EmT!;#Xjb0_)_S^ z``F0-H_|+k_A2iyI_LU`pXUxmGv`L_H#e#^1oWN929fEwwa#98TR}6&A-WCSPRjte z3~sh2Vc(klsaftK@mO)5d^vr4UhDyq^3d}B5MvxouJW|uAitact7aQ2?@9Jyn+4R6 zt;T|b8$>R#B46(BielCP4+js$%h_^wYc-(bqY#34gsW)wtxBXcc=PLN&g6lp))OCS z@5r8c?}2h#-Zyoi@MI!kDny-H*D#o%Dzhi*(;$ND&0wO6D9r>T(c@-ZNXiDuAU`<_divOy{x_Wysul?y#E4`_BL=GSb{Uw{ZSAnf@8gj4H5C_8t~C51(m zbxAK&UctYc=-p)M0E7k} zyiDxh-D*z)hm#`Dr;uJyD?^Yv8CRC^3*glwvG%LT6Taz z{~B_jwZ*md7fIIGpcc0Pqi6$bgHnhNg3J>FkVnp=-$yP-%ACAH-0s}9$7F@#RLHD)$3X0(?(npPYRP#h;3d!g-z3MCeTQ3&_rT*aW(81Qr+b-Wa?dkwTd;Q;&qeR( zplSyF2${Q|Y1fjFhZ2dm^!lF@LpQ1Y-`Tq@-1xROxP!&cVWMJu{=eGwDp*>!Tc*VE z<}bzoSb|2lo*onkL7n;b@xXcmSPJA(hsVqFPL24Q&8Xc+Wy{*fLRwK79N3n9nWZ{MS-Z#&or10PuwB!`+aEH(u9D-d%>5O^U zFWcW|1KkI0Dla5*NW+oRAxi*fbXR(lw+Y~8e_0Q81|@*}-6!HdKQ0!9E`wtg3S4&z@qj7-scy`hX}08I#uJ1=`isr_OO@ty z>zg>3Borz{zwPz?SUs<3jTofYQZUn3e-4Pv(>DG$8oryjMk>z+dL@Iw@1qGLERMq- zW}@#YC8Ry=p`|qgXY~~E8XH^f!9^l&6Lejc$SY)7hdF$)b;d;`J6i6Ah^N3?PuR%H zMF|G@96gn1CYKrfXLk5JqowA95+h0gDyZ2#ZV~=b_Y@ZC-p^|2!U8opiU5d7FIwl_ z(fHpdzo_edPyPsC zO{Su$D?Uo0aA>L-PU<0dqLGV+e1eSgxp+G{D>P z0~l=}Y9cn~H#V^p1&7$<^j6=>-LV1}?d0n+g&xb?45N$3(nWZ0dq(TZC($wsv;_U9 z`$MRZY^I}k3P-0}dGo&q_tvA*#gPBaJidbLSq%!q)kz1o#ZdWBDd|}pP&{0RIdPdv z>Na{b9!VYr7Ceod`w zW(}^LfrVQ}-*6$e@x7piGQ#}^G-gXK;9rP!c+0$qTr-v9!zN*1rGt4H@H6oat{g{D zhK;us`5)_nDSp0opx2?YATUoWTGt9gT=@$W7OG%}^Mg@hv0;HmuHvr2WLQBX3C3G~ zbDUAY?+@)$l;a`HgBT#JS>&i<2ljU-w`eM#o#)zWBiPLKXIq!d)03j10*i&d+nn_6B!XWCJ0m4oqj6AQ^+EwUc-XL$=bhp0Y-Sd>B^BUq-KQ5zPRy z0)1SrMvLpwOP1}71uigE0fH!yz>|kEmz<<1gcu+L5$7%+?##|^H+6{fS7g&ezM5$$ z@i*K{IQ!^bPKm5i0|N<=;jG*XKFH3nl*)D6F;26O@F?qP`8mf;6{P(He1*~o(gf0F zd9?g*Rhcs*u}b9g^SBPYFRn!CPL5~~W3XDbDRZ`=@6>L`==F6%;IgNiqrL%xyhW8+ z{_9CROWKQ_6N1N9ee*=U{Ne5f7q9JbX^FFR@F@O@k=kXCNI;FNN?}TfT%v*+`K*zM zrl{AGvQ<~2lo^YR=R^M)8CGfwQh4bq)9kGQDH7uQY>7P_1nBJ}v+U1^pYQg*70gcK zu)pCMySH%nj~kJ=7s&l9VshGnTAO=wcP$~+%trh-Y-wH zOgnVT-ddiP&fq{FC1Brz=HaU^KgksU!-g}uJa2FFvKAQv*T=t=k_=(1X{-M5_sCki zfGxY~)0VXbT?L1BY4YUEj#jaX;rl+s7Ie8`fr!4hkxWu9vBQTtn+3x;^-s!n@r#_$ zpfg6KSEB&oFQiO?go?tnhnXvId_vUM8KL0J1LpCeXJrX5T_6`m9~xsiVh1=WrYMn* zG{s^B4h4YD1zc>vik32C&uD8H)=sb~Ds-$fqa3;;to>YJFX}nZ*f!GD?b`<@d%X$q z5L)vN`^}w1L_|bj1w#(J6cFa>axkHFtM%5SFdg1MvEb4r!0D$*Z3-|*d_RH2-gz_N z9PGkgVL4XUtL{q0C1Ef#37Ik#IxQ#gQCm{rbMfwxO#?x%BSf8G6UHw>bzi!iQZ=Ed2^VS4%iIHsdGIK7W1sD)lgvJvZ0 z6Q!$ga?c%KQ81!>r^JPHH&8NqWfH%cdgg{%2FvA&iBT#;EghcXDC`3f^6TmoU z_7<9~xpL*D*>dH{w0n(1Yps(9-j_P^h)S3xhAv+Cb>Z$TJIH9dmjT{_^i)bQce=tkN z5=5y$!4nJGLIj{xh*gL~;{Hp)%%qXQkYy*YnyXN#KHOd58Q~6Ge^n)?3>7d+;||r z7yu)r(n*B{L96jIZXf+O;hBsBu68p^r zMM0U#S#nU3ifkQ)Zl7Blui}pE_3@@|#g3HyZ8nKo02!1-!l5A%0unRv*$ao!ZoU2; zth~yHE7Nfi9>@IF}{erKWH*So?HJ9yDFLA~sg&ax0NbF=nMW?%^N>)gY|X zlFCPQ2>{#H>=4F~Z#&wwT{nb!E%8p+!VDSAj~5EjYVw&3|49BmM*pOL%QTRTkHC<{ zefuNyw>3mUMEW93;bc3;^9(7Uhlwl}p$Y-$Q_^BgFi`qf8(c83X+aEb-WE8t(h}=( zjkTo$mMc#Slf;nyzza+#^M94tRXS`Z-#tz+qxd7{XuwsYC^LU|1F1+fY?+aW?%%Vv zDhHjmgGZ-$PXrE&4+BLlD2|RzY>|I&^BKJueLiSi2((J&^OkbCe|b{gCev-lLv#3= zv$4LZea?h;UxsgeiJNu0%_yuv;yv7{Q{j3551334|C!m${|33 z#eA+PqPAXKKTpxyQ)JAao&sBqt1M@Y*`Aw&=3I38`IDZA1Je(UY)|Ok$?qQe|8lEJ zX<3*(VTxZiSpwPUyyu923%#LWC>KwCZ2*dO^X*MvIC0EUq3#CsWQh;QbM=!a%uAV; zy8{0J&_I6-_){-7CzLmD$U7-;L6o9E?!`|vkT<=KT*06+GIT17gt^z+=q%uv1j7$R z5IM7~geW2^QYuvvrN0>UJnEms3?i3^XfL@>JZZCkd><^F+SH+k1Btpx!?0=n%wwwBT@7 zBWC0XEp>aG*YeP@G5W@BPXH<)RHUmiYM9S4ZizvUYLqg*n&rc@kGI>R1++-o0$~Aq z3RCO}Wl@xH@xl{b??G6+AM@Bl^VC&7WcRc@craVn(`E=y=8Q%rc2)lE&V9HT?SfC4#cE z0fu!>wl;PmR=9>oOUYjrKwoeVKQAOsTb41v8=A4N-t-<&a_8UEM znzubAx-2-Bco_tjA`BL{(@Vq5Yvtfv5=tyoa4k2Q`Cf&nv*4{Xd zQJ>1nk`v*HvjiK zN8YKzuCF$2m6lm^frO8X6(GmsIJ(VX)1QWZOme{eOEaQguirW6M*ULh=@7MQ(n5u? z`g8C{1zvqV@}>QP-@Vjbv7Eo7VS0)Hfb|tAI~KihrTK8>eZV!UYBirDkWmyUMo|a` zp4WX4McML=0c1v!9Y>C_gS@rQZnbpw^_C^2$ z6-5wT=dgzAiv`3GMMOkZC+;NYkn(7K`#KCjs3>p{R)V2R7)CHTNSsI&oDO;gYu7j& zF0(VBr|VqeST-tPlGF3#EGmI zpRUKTm!z=IrD?f%tyw&Oj&?eEhd37H2Mr3Ha7Pcp!c-Y z&2#qF0eDr2%ZtGLj{yEZxybuYkFbll{!Wv48p72cp*Z6RM}XnRjw^xA4YOH==?{dB za>NUymsyG@n23MWpC77jLqSYCu9gHRQi#4bL7O!|8C*q=(bsNWNCcqz$VY_3HEf>% zc_?9*D%IEBvg2k5bmP26D;7jJYx4fMN6Iof;Ik2kb_xC6EUrrViB7)X*iRQem}U_+ zt5J!Lr0M}pI zuF!8zgoeNssBd!9mXDH!dbAxt0|I1B9WyAkh(nZLLjlO;1k^<+8MC)DNs|EtNpN-9 zrXe~UYJzC5Clbr8Zyt!x`dYLs)$U8ZFGVHuHil1YG`bqhDcAZI6#`I;T=mDL*SNPr z;}3Y-X(THH$nY@FCVn4R$^*QU2soAtm#dpB!{OY9Nj+VdC?G^gwRqr76sexp(!*sX z(shqmJ0IKkni94Cyp769T5O9%xrmKl!*5&UBAdgKMGM1y-v(lh-KGFNdp&C^6vKuW z4u#0&2MP?XpP7wjw(R)oDW(kr5UD6*LX=e%LrkKos;H_0rBo_}DHtUc2jS_M;yOPQ zTagYP(h#P>h!R2FsWZnD?HGem6%VYa!FT90>!A6bQntlJAwjGGh$;+XC5;`w@oEwC zb`~min8602K_|0EYC)*&2-`V#@W?#p0eDF*$Il#{fyj^n^oBBlg3dK8R(TE%H28#i z)B_Xec^8apRS+tjG8@E17=dA9lv(0bS1F43Algjr^@Taiw@l`_4{E7AD z+2Trm-#kEv(SVBRM_LXF`sos;Ek`u8%^;53DNk3%!iDreLgYM*e{o@E_3C#39hX06 z&229A+~Y&FFJs%X>IJL(mYpzXFED#vy;GF~Ut!O`<%&M$%fv|9PO5(Zmh~@`Gp}#D zEJPp@3vt3S#!KvozS$UU~J?B?k~eTAqMK&cZZ6ZEhj{r&k@m!wrH+o;rX zCl>j%yC|qc5P>)8n)n-2U&Wo1wVzIO{4XEs>y_5*r;QULs;Z{f{bM%SzC_oil$C$M zE!3)quBI0jpRL*a{73G4MpvyuEI^V3)!u!S8%KnBcQaR* zw!N8M`kZO)|C0A#{kr2Bh5wiTyERCS6z`+S{$7VdZZK*-J$#_j1V(IO=34;C8ZY~3 zNEf*tRCV?ALdw_yJSf|@{ry|o5EcSA2ABRUdtw;3B|)XS_Wd1xO0pso#Id`J!unIX z33mzL4fwKQYgQuMjS@$ZwIbAIh;7_?j56zMIu9|tb;W@KGmZ}@Ppzjh9f*k2-yB{d z#;MVuawA#zuGkoHTFiW{jkF6#Q<_9V`vdJPdj*0E3lnvCoTK~)zjho(!h~mTTn1-n zhUI}ba=WKR5I65U+Vb&VHL}#6wcj||HMfr^7~9?8IY}@cM!xbuNo1ef{IPrUy~iQM z^fq$OZha6w&AOdYNOHc=P%%8^akJ0-7cTo-n^X|T-df=|cO_wDpU#|&d(R#P^oD`+ zu#2)2?851yrchlzw3*M(uIL0~M?|awWTTg`e0lw4CyTaeb!RYA@ zh2G?aKd*_35x$m+{NMgJlU)8(X^Tu0cVX5lsH%d-R03r2h#hWE`nOmVDen#cbh%^t zzMvq*SfRilC@phG;QoS8Cg&zO_XrvjaG z*6uy5{Qp!j&fqXINHgk1B7#h|)R{pptBb(NLznR+lw_@093BloeK^Onvv%R52qW;? z;mEQ+RwwiDQ*%jRZxGyKH+{WBBIGwp{aI2v(A{t2H|T^b8z!CA&!N4D>hE2qEna~N zW!Bd1R}9hU*~bZJM!^l4V~IhnixePX0NDYA1Yy`+i6HkX2T)?UY-qT{rwr>iglN5b zrhWZ`sU?hrmRMbLlRU${p50d^o$!8-OZoerkNPwRNorC3ld}$?3?YUMpu!GFVIwTe zFoLH?*gP=7U{`25+`=kKLmVnH9ib|&jZfc^KNItfaj(hUxpI1=Z+h!LMZUM8yLCpz zo;wybh%3vuP__xEutLFr+2TxO{jyoW5Il)O0{=7DWN}E*kc5TS*pZQqTM2&K3?9D0 z1i$XtKZY0)lZ356)gKGDx{~`UE?mj->>*ur;qZSI*xdb}t9s+D&hMP-lgq^fg9fe3 zu^2orDrdt1{XJA*VI6$0<)_|<=7JDM8!6~|_$yh>@14$HWP{$^^4lzyMkaZ>(8K^t zCr%xMn99PL-3EJq9=EJybZj{3W>#dy8GrSBpjXnQ#Chi#;oQ;?0IX9t1q|QW)S|;;Iw6 z#oncj-*(ln!1x@3)uRuPK~uS<aH@)Um?gZq@L;Ou)+^)B}ysBhjwrhAWhrPAzY3OthmuI;vYj8Y0 z+8ysOr9K(u?)wZu&gOG%yB1hE_*Lk=@wBHO1d@Pxkii&mu2NXiD-UJ`& zbi0GsVlhVX+e1Fga{gTrNRCBSnyhCnYoh6Oc(tXN8?*t57PMe__J1?mfbzBmeJEPp z4|lnJ1UOI#o|rn6B(29wr+jFIHG4%FqSap;zDn%&&m9vUqju0GQ3_#2L-d7=HSn># zW*Ph$n+6u&LgsJ)5Ys_`P-)WROI`38?|d1VePY;*bLB>`+374Xb0k)XjzEht1~XaI z7PDqXIYtyyAw)Qr(F5pl9#RT~aB>|aO+vEGnIV}Ec5(N}NHdp73mMpFVMz|7r`I}d zG2&cMZ7_gKE@kZoZ_vW5%~I=&lPrDa%Zua%1C<=n=d2M@{u_MHo=8Y!u{78$oqFrj z+J7n(%H$v0WN;!0GqtVLcO+n)ZZiq^e+oPmC@K`#!+E+R1Wog`Y7kozZN57YYPOe? zIhL^i8Xlj^O+Vu=CK_i;3rh`|!zH=P1>IimC9A?!%{`xbjPQRLxp~`dD=QRqwBaoG zk)P$BM`iK#UB0g#eKBxX2Ks9EB0ylP6AP79zu8BFeAdntFH1?1ch<&j=|&7uVEfZi ztg;Y5i}DeJQ^kz?gdOj@1~`V6M`N#ByPcoU-5cX4YyTgS*m>ykJ-#? z>hKqh{hz(U{rw=R|0okV0Rk!lWM&JBo%j5F$!s@bOSwU^G;W09R`6mOvD$GJoHZNH zYk_DQ$&4ywr;kOEf)M-gT+`jFhL~muDsW&_(u$r-wR{(J&6_rC*|TQK2@@xwm5mTT zNE!j88i49Spj4q0pg^Hgg-WWNWlG@vFn3p24f_rRFiADT>th|{o$Inlu=W4`hq{%+EWX-kC;=4uZ4?WjgCCGHbAbr9*ULGIW zVPgXtzO15k4Uao@5XA^Dg@V=G7lq>zuF5K|hQY0;Ct;_rvMD9Q12EN?QL<#r187Lr{&^f~7!B&24b1Kw>N+K>lw^sojwOrJ}5A3=;D2793 zIs{EF?LT#D?a@v5xqX`xgNk@Pj#lFR-}E~$y^i}a-^be(KTHanFZd5x*9pd>j};F{ zLD{$jiB*8X?mNBl_0TK z_N$K=E9g!o`B03@jYit&7I=|&{N?g}LAL~vjvQ6JUw9Hlqou-!!~}Xzq`PGPkt5(h z5fT!pQQ1B47hT|h;!Y{uRT?_h5iKhCDo0KrG*)G*OWwbS&GzV|)!%8r`2)jAOTDki zLPDSFPL)etu0KI$Oe7K+gp20`hD6;*rii~31SSpW#*c&sq;`&JJWbP;GbMK!G&E68Ay=o zbcdzup<_8pje;IDygFN>;$kS|xne=&G7f?dl@xaTase|OCu;l<1hECghi!>&fRsas zL}#8$5nrQL8e1+S)RC^%Lq zIUrx6&@j2^tO#aQL>(0zbWn(F*dxE0hEof0M|Sg_-1BVhULb05@DL))X6Xwr6cR_Y zf$JO)pVE`r{4P{MK!&v_i;!LNB`-~Nd-(o#8%~-7F4rg4X2pIn6fp2*CUh-e{1AzVNek`55oJ(GwCK2uyWlX!qA|!)3M;4#_Kih#aHfY z1zz=gRa%Z+wY%7V$WG5*Ajksc5fqD(7$UPTz3@kXjlm{@t>vM%K3#b;ONH13@KVx6 z|72d;=q$yjr^!DGe4d%t%`QE7DiNX=;A=IDZ4*d8WLJjnh0n9)7 zy9P=zMf>gE2njJB`Y0nQqlq6vAgsVT+=5OVIB?l!tNxJ&MH_}#vSoMpo+{r^;XEJ4 zDBNtY1nl{5&!aN{zBM`^{XtH-x3O;yR8vZEaOAA;DRF9jux18eZ8(m&ha$Q>Jt3?J zBYxma|K9A|@Oh(P+H6tLa|V~6Gjn?ag9qgo7%&WZ$AZAyS<`PbF;YJZLr`5>Y;TLsXVopD<(5!V4Q+P(`O9g_Ttp_u!v@ zB=Vux9#J(oZ-)=Ge7zsVcOlyWHHZV^D2gJ2qobiAKb!5kakyTe&3jnFaj6b)$_x<02)WFsEx+?8h9e5yV0!Wa-iA@kP zDPQ^mif-#7@f9`zkMeYOgnn5U7c8k2EPXO+6HuJpM;kpCi zIW}fZx?!8-5N7zt-Cn1>?SeMigJ)5ptmkYm&)K+}WZ4~HnIeiPAXx!~kHKx;fqM!5 zzNo27EF|mw*NX{1*>>u>t{)Km`yFRxglYD2(x7oKG1QQD(ieoP5gUgvjFI)+=m>u^ ze$a<;-ha$ni5z}bmQ!VaETkf@k`68T#`_Ta%6uh)x6Jlaah*vPRpo=}f$q!wp z5Wbp5(r?lnn(l03x%0V|IRl588}GQu&*5-qc-^k5ry^PT-H0C|%d8ZEgAZ?dg;o%; zfrCdg*1)*242lY%DWxDp2vC$nK!`|Zr2#WP>BMYTdSyv|Fwfwnv)k=^TbkH4kit}H zDpdl>QXq>O1gfPv7*`ZPd4^;RFev#L^Z&(?#HjUq%4+F0hFs==_F?fTwJl|EZ8{4s zTV2KW`xhLJkGKSG!ki}3om~3R4bw5YY8=ru(E;a{zH%YGhAiq@p{9hwGXCvudd0bZ zbCvkKXez;CjesrKE(nd7n9c&ql` zG#-yI9>`>kjrP}&-SPR|VQ(^K9tK;NMVfz1N!B52>@wQQ55nHRW*;xOL0gh>!LraMTiqfExrG?TRN&u)2Wpn*;lCxTIQ z3nK($0g5n^AYctk$9-$(FW|idYS!dlJg!?s^p(eDB-YT^3ib<3VQ3IzQR+M&Mu@%4 zZ0M6+Y}->KX}6|=Q4K)UuC%IJEH*6~YOSUOz3!AP?B<4Gil$~dx0(UHb%W`!^Uil2 zu;N)SaU4r?A{&Cya&$pr1j`A%66)*=rJ*GUtZ0z^2;u(APou9Mo)-Doq#^a-dbyfb z^k9(6`v0D{GHR>gr+o%km1ddrm4hu;aebQFVkyp{B^dJrT!Fd(_m*K{Ux$t3X@Qiv z@c#*eLz{KRmA|PH?*fw664o(f!CG}+oW(U%&o~$-g_4MY078kSN~!m3KR414%TpAs znE?JWS=D=$Om`A=WJ32*j3you&@PV)z?rlx7I{-?WABy6@rG zVam?qux14Xmpi-W#*kdY(ul4raOuQodt1!`B6g&a_a^>TCvCxBr1jd26mY|oa$w(I z?)9n@B}5()>RHlJV)E}8pO<@}zHg19Ux|1sq+gMF>(musmi!lP2OtCM061U|c=@K{JGr%W zaZ)oJ%^^Y^WN{8%QY^-X!4M(@M2feZNgr>oi`{Q;w4ZwXN2h!+?g9LUSinQY6($bm z1P@P*>-y)Z&nUQii7B0d6)=SX!RcZlh$011MT)USQAHF{VysbAQALU>#Zh94qKg$p ziZAT>lD%(&Y=+2ehR9|i466=D#>%*{P7^TzPfay(KU|6g!M$Q)`*T)=rNvD3vv}9Ay{Txq}dOx>WaZ^Ar*jJKT6_nGh zX;FOc8?OtK{Ounj+wF69(nJ52@vBww0+tTd1WK|%y6C}3r6ubLIqXvV*LMU}@p1h= z;=Y5$@GmdPW3lIO0>z`4U~7DB-5!@eA4Q9+7QvO2yL#ARG}^XL3>0CA7#sBla{J3Q z#P&0d2Mds0p2tijUiUIj{Pp!%hv&s)yU;$S7Ej(g>iXGz9xAuC7Za=0`*gA2uKb?Z zhlm8>C(9sN@AQ zHO3j8N9wVkl7iA#>!D_x!Lm6x=JNBI&huV}mfNVn#e5$((-v*15o=oQeyH5Ktacce zu2ew|2-~>C(EON7cF(}bWI(7Q(%L0AehW9!!%fef1LmO2>Ev{-qbX~QUsbC08(F+* z>t=tbE=!D33>pr+au;YYfrbz;(Z5_XhppZ^3yx3P%w`d3V8Z`2`!q><1Z}pc?tpGr z3olLKLrcHj?e^d-?NfJ7*TZx320e2k}mg;s9#g&jBUtF)JI zWVNMmwlei=HsZ=ls3M?!{n=tUbh{kBuRGY#&t%*L&$PZBnV4^61U;M3@6Bn*8+sk5{l2U?0#?*^KLw`xQs}-y_2-N z5vN!66}y=R=HHp2>Nd&kFEb!AdHwDM$nYa(GQ_SQKL!39;gzq`(ild_1pxdE1r|qE zqd5Rn0egc2>myd&cY-t4pk@)P8>-DS2nJ>o&NQuOZ%5;VHLpcgD~1YyBE9~{0U4{S zz5+0O%&dkA;KWqhb00`O$SEyVlt}>eV(ptv_Rk68m`vin`@{RZ?iK5gNbZNlZ==MW zA+OPK@;Lq)s)6R!{sy4m2AY)8l+2XjnX&M-(?GIXy)Dh{?|5oy2m1wfgHp%XFS?Cv zWfLY~W(zhkxf zW05J56C4Df=O+-Rj1)q9G??Uwmn(y-;&^ipw-Ke3nt9mN=?^%|0aI&!$A5@7nWAkr zZ)waLTR-#!JrAHjQpd3$$PwES4Ve-9*HKwg9Vn7BS^&`=Sbkt&aj;7~Y90XxByi0y zg{TtWPDJ_u-U=2!18SZY20U^9=?pmxFi2q5`2Aj!i({p_4q*YtA-QicE6C~E0lH5{ zLyKd6mBz>gt`FTiZn$PC-w3~gHSIK!?I{4(apSUds(>9XFLm~^85r1zN0a#`7`{qA z%e%z#8|ni>-*7daQxMk>cU>P*>`CDVPpC;Zo51|YFj%DOCL5n)?ERJLw`s<&n_xC!INe5+6hf5E%nuOl!BV4`kv| zF85V5ydYtI0fS_q4**oKctuqVibFt!^YW*f&$(E4q7ft&@c(!<7OX*+A-E`hxB`kG z=S4tNhJb><#uYn~xL2+P=&An7r9x69Ds9T8(20o%dV|%KipXgMAvYffVA_y|uF{oN zRaI40RYg@*RaI40SKJ*qgj$dywXMc3kivVHacQY?F1jRFD4Sf^bUOIUt0wptvLG;6 zFBv^zoEnV|XBbR6_*Avhy7i@dbegaP7b=3pwd-=iQ&_t#_g zGrl#CzVWTuRq>ybv(!xcE)lihsipprJE28yT=8Kb#J3GRV1KGbl zv=3bz#dD4u4zd&xV6%}A#F5Z|8^ay|wLqSSn%TOivj7}v)&DGtYUaJ6MQ@1x9*bX} z#O&-9_WWG&bCzL*xYzf7ac z-WT7Mm506LD_yM;f}i@bmr=^__nU~U#O`YL!+i=M(i$Wg^Tg4i`b}g@u=0&GQApzE z^wqm?H~Pa%w3rX{Jr_dvMbR@k??yfDdz|MxcCq8Fif$Z|_Abb=X? z)_roZKoS8MoJ@{#qYPPpM^Vt7Tb-tLSH1YUWZ)C2+k1^WcqhC)Q6xJY^aKxFbkRtN zC@6}o6bdAUOn?(U{E`<5`;*4@AXGJkh-n9i><%p4oriQtmCwK1<7qQbkLgIlAfxy$ zV_h_o&7LPA@p=$c%;wXTt||=%J=RYft_pqNbcXO(Y7GXm2_r&X1CIda_n<;lK4~xY z;3-6bB+gm_%QW2Do@&-goABhy^+Dgz3hgf>pG`tSN&rfW2 z48m^&&+GhBr%I-Yeh5OqrM9lPI%X?xS*Iso0rED+5Pi7YH;q7}=%zk^A0QxE4l=0gmIOoWJ$7?F%YJ?D#*Cxl3B zyXut{7teNh4ICs@bVQCmsI4Z64F+nO^-(?ZBN-YF7hG|dg4yMTD28Xj$kp5hY6ppJ zHHgfeJBsmT#FjjfQpE*!CRzvF$3s@(V{zZ-*9WJ5UT*N^s7WBBIpD%*TbC389w;Ir zBLkLkM;7#T!luG&eQvFd(!+S%gu>mlm@nj+V)A~GQ-?3<`XQ$}|7}mYtsabRogl}l z4Uj?j3it{}Uh;q~crpO3hY%>B3KGO%;GJ;9b+RIHdmUiNJ1t&NX2fuS2P`|go4i|) zdX-e(NLY$80-R03{qAg%dr`GZo@Ri9rQYgccD%kiNsJyB@c)lIokFO5b-o^BwndmuYK~Qx* z2h<4NFJ-%)N7;za3sD${TayX}*{v*K>AoizAliM1S!NzU7{YGaw>bP@wxsLjMHGx? zH{g?^ERy^17^s$|8K)@?uy@X*(8?hc`2p&fc)G zVcgX!F^ZY5&z%31sitELk!)eTs8H;r5@DW?5;m=f<8H&=sS-uP9DJRIj1pK-3Zal4 zPeIvKUEMn!%#MvLRiFaeot&{a>KzI>)O5xRiBA;4&%?Tow$XE<4;9h~vM7h8$DZO# z>POrWYPr(m<$Jq3W7EkY@g3LwIT+OTmX7fH_VxjlTatZm!|3=y_&wJ5x#~W0+SpLq_601W6j@m*cH+@;FN?%3z0piY zDG&gg9BCD>gMpc=gs|o9KwHJL)Qo8uLL%wrxcs)JrMe>+60XBxaABP5SG-DQUg@zn$G=`&EE2Geg=@h*_5> z0gm(G*0Opm8o~5bb)dURlhKv6Ilg`LY0+N|IoKvf{K(kN2~^$$cf?(yq|j${bR{BM z6*E^3Nc%7%LN6kG96bL;k$1ch>%>apv!EPhOR_}l%)BW{2%3}%v~)51_9Brt{$$Ye|KE}PEZJpCrY zzlBJk`Wi_c0wksRJ;*0<;o@&B1q&FP>wiKj?9>r zGd*zqbP|L-ZZWnP7t|GE1=>b%2A~3Hz!pi&4*-u$Sb>1Ysx0wAz{brY6hlD>7@^al zT5X36SAOhoBj-rAJ!%I8xQs+$@75vjk5rPQD0tG*jLxH&{i*WFDPrPhAA%49AX+)W@c4YRaI40RaI40RaI40RaI40 zRa>ZeT9Dw_mnfEuF$_Zx$0M@NU{wT0uwLtw=YC8tl0=6u+4S9C6XR%{kKE%qeD;DKYUA+t zQqIKEt7^Wd&#ex)0C2ogMe5aog;ni_7D_OyUjp@oUe~j0Uknksa|e%eT=%t# z=Q-|Iz3g+wvCnd`&mPvj`-I*blfgHB4i}Wl#AC|2cmACrO!3?azi0*?{J7?PioT=V z-C|^osNin7V?>Qut^UAEg~Aw(eVof$S?QALCuJyaD*Rc!awe4%a}q+33RF-f1Q-Ph zz?2X`DFqe~pn?HI6bYEnfjp59FA9fy(4OkQ1kc>lLsZj6QB>7c6;#zzRaI40D3wIC zTDW>?yi5)a%Uc6J3Sp(oKOorU*QYj zL|3;bY1eMP22d+D^dIjI_Gf#BW0${Y&7E zn>S(!FRj$L5*m4CL`q{Z(bK#&j#oNH{qMCTNZ}DIgi{dx)gn!!xfZ8Pv&j^tV;`~M z8ssuKcNQGz9tDR?WcOBSlwf8&E(S`|Jv2seoxO-dNskE~#Oocl1ic1(ZBQ=B6EKb; z>$`pqun~@;12R5}>sUacB)h`=;6y)$icO`Gwy0wz_$pHsN0T?wD zNi%~*0uHv0gLFE^`CZx{!ty!x#5!JFkgd6&drD{sanwXlMFkN3I99G`WuH=)o}I8D=Iae216h?p2SeOL#UJU4Rv z!R}S?0Ol7`y&~_E|FCyJ@oVRAce5ag1MXAwq%Bo9NZ$q`nu0F7QQyn5w?ZZP#F)T- zc?hWrP>RS^%82e6ud-Unc)?-TqVblDmgpJDk6I_?Mvta}+X4ymH4<*B=U8U`*EW8; zae9c5Ct#$Ml=0VY&ck+;jWM5~{M?OAn^Evak9K}?zvkCk?NrlU%BmS68uT!b0(t$H zb8l~dBW|a2Pc_PdN9uv(TQ{k^if?qM{<$;;?&Ew#`>Qd*=chHUZaHC7$EJU&@e~HKtmIa)G)?V2_f<3 zU(c$lTA`wfs!>I%p4Z|A+!LEPmX-pIFOwxCHy5|gi)Y!}bgvl60?O0474Zx-1Y#hF zd$mG2<~kFeVuGj$l23!>ZLU0l71eA2-|x*}wtns~gbdIiZS&-3oyc3RN6zx4zcvME zv2^F}z+v_g2bWMkG$ZU!TvA3CgdmI;lIS^+w%0SEnSdjxrd zh8r^VTnj=y_zVyLEPTk$v@j9<`i0&zgi!Pz=E|(*0N0@wj3p&woJYj{@_Fj~H+G2} zWVra9(Sa8bM`j}?24mWS98Ea)+UmXwBz|6(q~{Ecp_Zejm!Qf50QspcTKhdcZ=I~0 z=IQJVXb1p6fJ)6!)w3~-cUT!tlWl5bw!GhEh5h1aj_sFPeBUD`+5Rpu=kmd+$7Uh+ zJz56cF4l#Pzl_X4Zvza^nP9AAe-`8FPyVX9481SpZS}uk^m^`oFk5)~kmBr1E2$51&9IlVHdLjuhXvNda^e6p%P*u0M>$l9MeEq0)P|+06kB`?eYmH zh^*fuA0Z|zUR(#SudtxeV!BrIVqcrd6eKYt!a~G#h}JVPPwE&p!G(%IS2v`kxBR=D zyO4+60p8d-UTVGPqyN6Y-{HRS^iFn%QL42TqO7(`M!?l^)h>XFo?)$!hNm+D-FK=uBSITm5t8Y-;^7xrMWKSll)2(xR? z2e}CJ`Sp9=Tw22{6!YT3#F1?CEUB^UF(0o;QeN@x0n%-dp_1C>rTe~pm$jxHqf1efr87&|9DsV(dS|cSuDP$mA)<$3MiCfbgCVQK zTa}g8PZyOJ&n7$wc^I!im8qw!iv?fChWSl~q}N+j222S;yFlgx;SkY{Uras7XX zF|r{ZMG7eQDT*GgT+r2M;{@ZXA^0w;Y`;<(hoR?sV-RYAp{~<6^RpSdO1AK}7B4nw zo}DG_SaY}icnlx=+W$(PGxB$GNlwKLqGA$F2((ohoaT7SX`^=oQT-$)%&6QAPj%#S ze=pjsgZlv*e5m?yCu$?U3_i}(n0Axx;^OThGEIsarGg-LKXOG%#3Jn$=;;}_WP6r`8pGqIk z#Dt5K=R*doowUpvB#WB8!2v{woqQke^V2s;!_m;|^wz2gTgZ8md$jV$`@A0dt$YY` zs;g7}p!|bFD3fFFFVRpya)_`&dW+Dw;w~yI+&=RQK0Buib9R@UN?VO4U*oKl`F8LX z#f;h*T)=0RRv6d<^Z(2G)o-r>$vI%!mPG<<9*DpZ*SWz4nEp}7GnV%`;l;cWT7ZZs zyi5FubF|EC9{4O|m;p;m`eFu}wd)f@fV)6@TTNFprpA5l(T~e`ygIv`r00XxwVA?F zl^=(0MGiH+itU8q?e%0b1U4v8Ap}B!gf4Ny-n_d2ICvhdk+}PkH?7Djx4iv}n4O-- zH7*7TehOv9;>gIdc|vFAmykoaM4h}|;PBaom-krnR9~>%H?I5B#4BnXRlT803M z08Se=i{8#rxHA=0nm0LJGcAZMkY1Z^Ie5Zm8x_U)_B$N7VV8n90IB)GA(z^lK7s)y zVMlDeZu28$>TcmL#}F$;%+T5{(Ncbfz{sZfE-C0fi#N<~t;^sp@mH!@bA03?d)5z; z`XY*okSS}FXr`)UGv0?q=jxLiqd2iySi~pliVcJ7(X-}1v5Z<aE~~ zHcKH_M_$Y_h+xJcN{b!rg=W3}v>VK>#>bBuN~GUEig(X(BEVL#STP%#hMD;pQ};26 zJWRoBYQL-&Xf=G$86l(tzi=-^zb$|7Cr+2-L#^h*vu@$%*e>ODNS3<6U z8HO1!!o3ksY!2e8*!J=43OO8S-&gyQZdH( z4t)$nB3%DXu0t@)zCo8Cct;^a{g%__gFrzcZ+-IuM-BcFl1BDi#KwN!wqN$e=;&ou zL@+QgI8MlZ9}5i{M*HYfC94vIMncBt&Dj3@)7!d4x6Q}+DYC`Fr41AleWiGo;h1Fq z?HpT8Wj{RiAOsqE)@-8Fo3zP&sdxz4Tusmh<+l!CZ#i-r-Nf5x{i;wvG~5BM@j6gL z7U_L@&P)qdg1HfQsc&_tUhhM8I8}H5Z*yMdbC~Cf_dH|yobqqgU_;e#+-Bxjs4g^9rmCH?iI;_LMRPzJ3#fmgzGMyPBV;DzX{p(Ek}86T1*qloxw`k9Nqu;>SHCQi9AqZ! zQrFq>_@zj~3awz3RS9~}gURQrCU`O=U5&QZ7Q_}|EgynbiLDc4z-SLy14Eb9!_^Rn zWQl;6K)`h41Op*&Sr=%$vx@JUcUIGGggA4no{a;MH2-gny>dJ0bSh#1mgNyu;0e=GAnlg#t~H>$bL?fPlkOMxlc>A99Ez$>8CEqcgZLze^roP;Ve ziWCyigs51(NLq=EmL`>P;UOqXX^xXiw5w?@rj#aWElS>^4j`&B~`D-f#IXl*aUo@cfS!DVfeO)$?Pik znIoN-wl4SnFShE!K5Fxn|Bu~E)k~N?m~aG}#m|I4pRHz1%EROcR|Iq+nV1tGJry4X zO#TN%d{-JSg-KC{=SI1VB8LkT7}LEvIpD*86)i6y3|3~T6T$H(VIn6AuL2a83WezF zquk6D{0!C9k#1|2dn4muwnIwUo1TrYS79H2D3SGK{z{kkHU4hz#*5CAD^JY5aD$O3 z%2G6AA2s?O=8vwD_D5;1{+?z3(5+Xzt6Aa82$>M$8@?fwCay*^0!g=DAn#$X!$poI z8F1(XRA{@SSlgfu#V03`9gt_X&t>W_aI!uC-}KA4za;wtBUw^?I(P zhw{jsvVKBwCPb~S@c{OQg7e-A83cKhJJUcfF$^YPZMJea_^IuDjei59;8ND>w7p*o>9P0B%Lg5{oT`)qne9Xv}1lirSCs_=YX_Fp;@;M%m>hdBqLepY_`$9B@ z0XT3#x$Q07jcHiPuzv$e>Mq;@byGe6#+N>Ct%klEhIdvj)fY%S%LwNG7kKyfD^OxI z*vVlIA1UG9@=$4e>w549@^@CVbbr7aolc!CFSFZ0mp)g&+rLyfTR!YFDX6 ziq4~1$?aP|2R!@Oj%^bBE%B;xpY6FP-qn5TH$3!mRzFFsNRd*FQbbM$(^SmPygIE7 zhxYviSN=G`ws{-vqhL2+)R-J>Y##FawzR*G7MzWXsN2XR`jkY=4+%X{2dPjZBF_&I zlHT@s^K@pQG?Ha*12qDcdp?$2I#lYXWwUU6WASEtj#ZKV?#6lt5$Ar#?76WL`QBVc zP3@gf!bQ)_lfDi4gpO!xZ&V zOH8Ilj#&t=$-#x6jWYc|S|bm%sZIGk?Fnia?}NED7`gHRI(# zG)WbjJ4qBgTW(mv51)t?C^z!Q%!L@Sp@gDZZx+a^;MqohO<(BlZ)xzfeI~fB3^>FI z{(a*cW5tMXp_beYGF|e1_#%eb_q;4c&vF;5BYpbi#`HAd+J+-x`)wA)O=Cmnp-sO) z2v>BBksm$2rZ(K zqc)n#Y17J3F?utj|1Ap%jb_K1L?~P0p8Org6iGV*rq3ir#9}yZ8js9~koer?UY|9S zyKUyVh>w+(p9+z5jrcgm_3wLLwl(0+ zf}z?-&Y+B=R=O{vHRX@b$FC#5K_G;RfM>OMZzm3soUv1U#6xMeT+J$4AaamdFeKO1 zBx4C0t$s@%{)}C~?1w+;$qe4jW*6O7%M1ms5w^5eGho{gn@-=b>PNIkx;5mzi({57 zP0pjc3HF; zTj9}6)P}?Z@xs7D*WB4W_v)>^e=ECxk;9whWXQ%oP8u_0(55w)x86R!_bf~{Rap;# zE)>l0p@fiew|;<;@T$JlNCVu=K)y#`J2_~;pa(wXECmpR6wPTc5S(T!J;#0lv=n2I zcem`^96v%IAz3`#QIXx^|5LT%mB7>|rb zeGC?^a<;a@^=Ymioxt8cZi9Nq2r;ddXB>wq7=6XY#|c&;k3bOS$=>bx5cSeY2lhZj zH81k^@HZ7pLU$GB+?2&3V+Tq?_>qq;LU|WrkyhJ-}Y%wi0QE7qQl0TIud>+}g451NiT3sv0Sb=4DHRX0uxp%0p9UP?It< zdidK)UwsYUDL+S;;Cr9EhX=PrrNH)N?K$ZLWm-YX{^Fi)Px@yl(d3IV1*#~~Mk9Nc zwW$TjXA~`ztC4OihCn6GZ(%b3?7{A4cVF@&_QG#9p6A*ANIdWp&BB~~_x-)(AoAX& z7BIP)&CI2jJDloeKMc+9fR;}m#y0Z4Ogi;;%stlr00CcFoS@kQO?E#{mN*7kI2?kq z&CW6H#kf@wf4T>^ED;;&?#Ab*K5Winf)2ZQUPv8?h9kNN$VQFOyNO&5wlKOa^1n>& zX28O0+USF$>AryWVqUpho$O85?*MyU#}m=x?mc*NUII`eLWHR|(57<8awO6q2v1HR zAI=~e;#fk$7C%PmbhZEnei7sVdIp1jh%x{_$aMz(DbcjXTkhUNYyddXg3DQIm`MJ6 z)a_fIfb9Jl*!7uMD?$51&4|wSLgDOgWLii=z6UFKfx2yMui!9Ydl&swGizjq7-6}) zIVq7hG62a{Uk5K^C?d!3$8o+j^L^b>z}pj~S=0WouEX!RBJ-XWxDkYlUfbu?m4G8Y z0|>fZmh+ygTa%RSX%*SMcXP7e@H^378vApo%1hOpo|6j)Be&D1Za<*R;m#SEgv`ih zq@huaRwE8`ukQP~K+;3k7ZTzZGSMeA%fCqU zIHt~}bm5@c)X87aB(ep?@!{o77H}=dH_Nd&oW6U1s&mi%l{mZJ67M=IK3LJ8#i-(L z+~tXycDJ3$84yP35QHEhmgotjX+hQ}P$g9GQ(~8wT0rUJO|L#v%Z?-@4#@S&QAygZ< zeb>(3+P(%^B#f4g{H15D1>Miy{lB=VAEBF&YApO*PxtiD3?Dq7`F}UC3n%zz^?ocR z&ZGXmMXJ{?RMCMTsI1g_f@_tJEc-D#be`3mk7dwOqI{)FQ3xm(3Sd05an9GPAD`_% zM{?us=JAvp4V&W_rxp&8hf*`ofAwT9xafGTrm!AT*-r^2*ckKy;BW;Q)}WH8=F;AK zL55;xX@IYyq4(yKE~Xm^JFuebx^?>lapPQp8}v-LHt5Nt(L#S_2RogfJ)d!Yh$c3Y z+e1lVH<4!0>>x~GDp8dBLIu&$9B#$2BgeY_J|14LhtBd?H~c6e?*Dx!M&$d#R{;z% z0T=d&EG4$xO$n*_q58Tib7YxuR0n0tX@DC6fX<8nNdgZzrw{085%rft$hS`k;hRnc z6;x=Mc#XJzgph8)4Y3n=8|Gd2*U%Gz1$jW+Ap`cS^zcZ>$7e|X!HVHviODgHVnb3I z4I4^;HE=s?Z1YF&0Hw5QH}`6(dmV@M-r0fo1_1Z+-5wii{i`f@$J^$vtPy&T0T#j+ z{fp8?<;C5M)Lpnk;*5w8@*2ykMZy^ppGVIRIS+8fX1Z!hKSckh{zY{snC0G$4P zH$WS3*u-A-mO|Nf%Hhy#w;+Z2X;e5qH2~GggR^E^x<&-*K7TB7r;lc9!v=>l?mtBLp=c=J0Sl3%W5lHJEWBUe)WBgXZ4W|wWa{T^ zZKNXfC_P)OrKI#e&Rd0H_cQww(`OPxED-_=ZLBendzp5J^=E~^J&WCm0rMIZdf2`n zeQn?M()hDw{+qtyeUFQS+GGWg1z-yx3+SjuvhHng7~9wR61XUohD9XIM6gQJ4@HM> zqd(E#j%+hB_g8$Me4XPt4F zyU-!qIWhrXJqXEV!YuR zZ$)Kk*g@C~wRn;WpjD^@wkolHmuIAO%n0Yd}Tl(KqSLj_u#I)Rc zeJ>v|-vA5o>X5TIfZh#)DN0a)x;I#g6j)8_=}%?KLfA!7UV#m{3!RXntHM99BTAhP z|Lvoy`D{B_jm!FQRxh8uwOs8VNqlu@?UDBO=ZQh>caLM{950sL!Y{pH=UNNX|q3cTnkgzEZtqt@uPdk|vY_$;e9sBt`{e7`RO=Mo@oI{+An*On_8oSH+ zuFj$}&*aJDnmw5EMe*kV8sDoS18VKvV{;}v8wTL&u5DXe+qP|UYumPMw_Dq`?QU(` z?z?~Eoq6&D^5K|FCYdX_P8LM4c#jo(w5MB%OO8x=s{`@4kXd-8GR^ zO+K69CoClylqe?_0als8GZ~CeXfAAt!4D`+b=6IO)aCh*DabXB5@pO}j^TC4L`Ba! zIi+fO%%(mM<8{NaNYNvhz@$j)WK;K(eU^HK6Zo141<4Wa2JSoMVFD)7nXs>_L{zKT z!Ju1QV6NjjvT_KZ5|)2;56Aj!d3&PcYQ|pM)K)1tz&ul`Z~&W z<}2~Wo+LIvqxR)$&5lpJ>2CLz~z9Yx91v)*IB%#Dr>htIUi(Pe0K#f z1n*x97QAhnaLN53Z1!&X#NqiigSm)b8Ku@w_+Vnvs6Zx7^hW`FH7C{&H8om3Wt$so z2!-oi-^Bxc0pUwbUADZfl#c>PKmb;>SVB`r?*Z`!iB3MoO&!3j2me^>-rwUL+vZPV ze%o$}Cx|B}v-U%6TwDC1w$zMI$vu7}Rcu|-%BcqjJ^!~~X;+ie3iW;mpo>|6B3khbaK#AXo z8d_YGFv2Dws@9~*@mLnx3?`|Dzj0iJ6vhf!Ic(~%&j%Z)W1CT={V_&0ny=-IQP~9o zKP0Gti6!s;d{DY(^x<%RwOEMXRg@s$D0odPnh7D=6ApZrkL=VdrYMlnWPG{|J}Sz!mjH;XXAqw{jIrn4)o@jAT?8oHs#>%an#5%M`d99nL^&hbU=qT_ zKT+vtd{^&l!ehyGAPF|T8GqPflEzIG8kF1chAdZDBtL;O6<5ApBYgeF zdsBZsrFtmh_rOE4sSR0XGJ~k~OiVv??hH;m=x_@)k@6E|K`VfiATc8DpM+r-F4?0t zZjtjDJB!6`ifWI1Z{@TNtBhZ4kLedVgCEF-4NLTgZ+?=%<7j{jysm+6X&`ij@T8G* zV&P|iJH;U%FXOVxh1RiHq0wIAY4_d_$|V3BK^6|Tlv2YLf3VHiy}`oSIn10pcJb4f z>l|y>;ybEMwi_wpTbplR8idkRwfv%vD`uf6d|mTKrD>It)ozNypeLukF#1Nt`ZFG` zH%%RR_3|>n;^Cc$SKOR-6iT}VEUPl*6dM2n2CN!c<+c&yQ=j&7>6YVg{5}<9(YzrT zCj2jheZ=VUri-_U2*fh{>Cs$W0iPKz9=?R+MatClMa7P;k%a*!3W>q3=ak=C8U;p# z{-&{~nSaIS$J9HZE6?!NLY)jFP1x1E!Lf+xvwK8`b6nEpZoH;Ms=^ZN_)pa^9HE7x zt1EZx>eTm5?%U6J$NtZT$DQJV3pMs&%;BSsG(gjmNXs!{r5;VtjPTjSPx*s)n(hsD zb>Fa7dDSD=fMEH@IFyL9CHxJx2+v$FCYDCeq0;z{Af410oNT$PTVu{w5VFL6+jQpX z%l!9|U z=W1e-_TzCzedqOCP9iS&Lm~it=Xj(0;xPl52Y&7w!R=YEHi4N@yxQv|frfi*GvgLb>KqvJG_LI>Pwm`pH^5AQ4RDWje$+64NEADm%6_dS{{+s0 z9T<6{eV=#ax0R_xmORNP&$F8=W*0#wnbehQC-*E2Hdz0>PtiknXaLQ*0e^`-n6Uf< ziZ=SrJ5|l7X3p_Vkg@gL|CaT%vbA*VT|_Dq8h0Xw$6&7*0coozno4Cd=0tf*t=M|Q z-F?j#f%LCzJfIEMoT|$&o;IFyf`To%t;=!TYO~CfvIywP^I15_@mL#K=+D=w_oUxh zzI0RT!@>h9Y+M!Ez*4xECwJ7BTSUlEjl@ESI5)q@0SFglF5)h>F{j$1sk1$KxwF+x z!Hn5@*97-vaYzOJX3IpUe+We~(I2o_c4K~Lu~{Fdm)^#ccDm-E;X=X#@DVL_u#n3= z%EH5CNeii*R?8XU@5CuGu#|nHqK@jC(Xmy!f=Dl^mSuimKu|-6_AG=wUb!9$0`Pz~ zUo%98EQ}X9r-{CdeFC2g<<1pwqNEO)%l2O+3Qx{_(yeVseSuyJP2>WQ3+b51k6_IV zXsNq%6+L6i%ge`nMW4Q1<9n4V4V5yDN0xC%rEU3M*Hc_rd-uM%u{(>lgBbF-^YSvD zZd(V_t<;_F{32B1~F6@rA%qNHYvq(l0X?jE8o5co9X*g}sd=!=~|l2gw7G6E>S| z-+tT;9Ji(Ngpi2|!wCbruTxHylkSA?F#furXj^b#(ZmW5%f2uwm7_L{|GoPAFZn|J zQ*}GG;S3Pb1}t?vlO%3OEYBug>@{QN8j8T)R?yo2jwYD+HJ!t&5IFjzp?Sxx`3zIh z-!&1b?HOL$y4R)&K@oF*Sy|;!*-X2FI*zDr+)8xR%RVuJY_{8hW^fI3?#{qPw#TBt zu+WUov`KR&)I5VPa^MpDB>*(aA)a@S$9qN9bJPP>x>@HFA3+>YS|XFQ5Y;nVjOH)8 zv~q64u(F~`v&H!kzFNx*ddhkb*%qR|8k10}S$+6gf>or1Q~=#t{AEzqi7Ht)@+K8Z~zID6u&c~$kt z=8)U5miU-{Wei*dyP@Mnn#h$#z#owLB&)^6Po5nvPDOFm{(j97Sh1o;MO@7{Uv@gT zqP_Wu|Az1@U9+WJ>z9Fgie+GweJpv3bhE;6vtpzR+zJv2 zK{aA2jRhV%d@_<)1#2OaQi&K)MN&B*S(h|N52*J3Yx>%-6t%M2QoRFl6u}O9oiqRx zfag)%kBy9!_#0&)pdzrzgqvpA#;bm&?CGVCgG4B$q4F?C~zKm17;z4}MxncBge1v%3vvxNe`NgRZ0T_yB5#t^i zI)%Ef+fy;zg#-VnTY3>pS*_FJ-g|cDJVDpBO^*OwmC*`zjK!;;=#d7r=unyWtg{Kf76A{`FY0#n7 z5khn_%YwAHfdQ;dRnjpfVFweVVYC0zqm3XiHVSADnL#65yDeSPOq{bWsTnO&t6X7h zvZ%J|V}pTzHPX!FvkVd)Q`Rny#es?4i6_q2Ln%k-dJP1P^{okIyz+fgsGFD)p;Oii z>+CtOBQ9*6$@sx$``J@gMDk@x3y5{X>uu1uY8>jU8^8OsYB)(R(5alzb1s__b7@TH zH3K)~oIC40X@?5wbeGjm|DMZHjAJ?jtcjo!NfYW(FPH23DV;h0a7ZNJ^}O3iGbfS-)nQrNl?W79%DISj zOWV^;WLLffMu1?0$=0sn03CYNlJ2PXM1gW02MEhfbpqEd1c-_!B z?w^wYPr5gM6QpAZrMq6_pz#I!Do&+XRzy6pyqBqpNcbx8+uERZ;_jX9t_XJ3U+UwK zSJ|KV1Akh-P~2?_r6(A|CU0$Qn1@wH&-NaI;q6@n<~N6~KQU*@?$hvsnW$nZK*im@ zyKepQIl8JsE=Kl`-jSdD-AAvBi#ZPa066H1?ggJ}F<&$d5+ZE^Pvb<4c53aTaMS6* z67D|iihF6spOf(6Ewbm$3hqbCJ4_9UKD-tiTK$Q;wgbB;tv)MAYl_x-W@c;`4Frzb zF?%UK%?UhmDk|N7%AS# zll}S7LBMqcT@K9Gp`Y#BHO+;cMnFekUuKi(fJeuEU;H5FYB*P<2Lgni@vV(Fx{VDJ zLoJ~(Ifu~v@!>1zI#_C`^94Z16i5PvN&F-T2iS-0h`{@mG6kVeP+jljY?1Y!M%mqs ztGWj924T|67HlYqvekQ+#Jx5c-^};#hYS%LJnV82DEJ0!uyHt`*W7<;abJA;{*UWO zk{IrHc@aS)b!#(Wvse>s6QiW~Gcf1pnto_E90e?`T1coKIb@5YGk!r2Z#|En$ zh4r;ibgJB$J$avMgc?TM^5%e;3e#)^5qJ?L6wcPSG&S^*sGoZXEOT#fzbu$TfMgWJ&cDuv@hU)}*uh)<9xe%qew#2e zQ@JlW=a+>F7!`s>6vXD5Z#LjQ$lZ`=d@60)!}J*FN|7+C9UiNym9U`6{!&V@tSB=t zEYqscf>sm-h;XZ}1<%g_*8Z)w0oKD@@Z@-D;tRfVmA(ae-UK5ec3MGCm1RhYVhT20 z1mG2GFADp7VFBRe>7z8&rVsqNVYjQ7vM@_Tgoo7hNzSy>Q$2#I-GSwKoHI z{qS-x9ptXwsU+tH4_DmYoyD_5k^Fh}{r?_fjS{0EA^mO2y;7M|!PwrG20WL{Og~TNOtk(olF=KZ>XQ4}kqIy6YSCIN)6Z z;KY`VU%MefumLkBa=8 zUz@>KFmuqNQ_?(E)1#uY3<*}(%kNlKyBDP!P`2Z;-OF|8lX+gF!XIa{TgPYgFmrW4E=iZQ5h88kiOE^lo*;@U!b!(Xx$--H2!=J{>oT`MTOL&{5Id6?tustC)?@)u(sfgjl} z7bRSIY8yL&XSGN-PTxZU_pR~^zr_hiKWKNClRsvq7tLQAPxOuUd{p!5e}c}+ zk5VzJwVQMhs9X?sH=q&AXn==L!VW7U8CBBv4j$O~8DwE4iFHy!Qk?K7bW zB{+8Dyu(Drv(B8ttQ2YlMvJ;$u+H-)wr;#7o81V{r2@Mt0;fxCS+6^=ZoLc!2x;P< zn-htYlz*_$UzoJJN&a=7{nIIto7#<93mM`o#*(*BS(aD!_krU`WYeSUuAi$+{2<*% z901xsg7}o49P&xxZtphD=5N@^pb-~#JpKdh*l_gI5Sz{{USqxKnp0PCc6CX0S%VI5 zenjHLog{nqotP34Cu6Z;V)w-Fm%Aw=`bIR9(8-t6ZF#LPL1jBve|aVXkA+M)jts#- zh}-AyM`RDwy=Ns*_sYk>#}_C#ViSHZ(IY-;0mclMH1_?#)B*9$MYhgp5*mk_ux%*v zoc$L{XfU(N2p~}YP>$9RZg6mx87;qRz+JK#EFvPqi3S{>+hlW8_a&~@^m5|e&f1#9hcG)Mo1JD)l^l5(ibA{OV7#d?CpDY#`L9UwEp<~ zz*DC3HG8-nL;k83^54nEChD{vTd&`woz+D&wV?)UOo)66tKP?!OocCgS-U_<8;sVuc4|y* zCs7#*QQ+ggR}rE;BlSHvV*+F>l3BAKI28}uC4P+Rf^&7)=D%~1A>m{tm^vN6F+z&S zl|A&(w4%d)Fsk2TZN&HHGk#bMI7&qKw&90#Vrsq(&Ky1bh%oPCTBLd$@O2R;;L1m1 z%YDR8ei2_pG|D1jMRRH4ZmcADW08!w!IlvuikP5a%C6|t2KD!+a={&gTaT#Vl@W`} zMWgyRF=l~(mu<>rQ~YsJj2<3+($~{Og^|)vgV7MC@;FnT?uHBtb3`IfZ*n6utS-@~ zc9e%e3kAX>W8lceebkTwt5g&LujCJ_+FggaI@Sf-mv@?R`bF$-0kLxg$YygR%mnZ| zt~@-Zsfy_lfv+(5 zUX7~X;0zIvmXu6*0Zp~6I<}*$?#(ApB%-AUnhozPHc?4LZ7|6NK5f622cA+k#%xo{ccWpNPO}-}O>NLvam_Da2~;Od!hwssk|^+}{4Yj)c`KpMy@Y z38M+lLlYAFk69WDW7heb-&ZjhCAuz4)z5f>nPNtE(tnv}!*VuWDVO+VuZ?;czwChS zfgfD;sOvXI&G5R&pCLPurkweW?3 z{}y(p34F|RH)!A5Ns#B=yKh7F1`D+b*a=uts&ZRZqOJy6AmlEYnu%}uPfptxntjG~ zLeX0YM&-PD4Z_@}e(lf8ycX`~jb(inml(sItJbc6|wM@_&N=zPZID`pt0ItR8x-Jq8 zM$qfSY0qPuq@n9vyftp=sL%Ffx1lbZNWc^2Ehk|c8Au&)B9%oF@`0gJ?p&sD%Y~(@ zX0@Q-c*I7mqOc|BUWxa4*RBuM0DwEeRNu_+;&|S{3qv&{D-%;rmy{s4>yZ-qi;k|c z*vP2dMiS$&3&EK`IVQ43Hm|@C_g4jD5n;8P?~94!koCS-CZYrZg8IzCE2Yyf=!B)b zn?Aml3>rwex%(b^aIEwxP7yK<=k)tQLj}4ft~fDV&x_^&3^RHeaqn_(!Q5B6`$@|# z&Q9K}FTHJHW$wJCUc|~&&@LcBcAPpz(eWaFBnxMqGs!|NFHinXLJ;F90TkX4P~c18 zkeG%*{6#283?L3!oEMc;~qOg zmOgdL%Ty#*O1HI)*@kmMBIJ8`vxMW^E4DB%4nC}|!PexVZZVdrc}={~0JNAxTc^WjC;-;FXUKzgr*u_))b~)%{q0`3#sb zXHr*Q_yrU!ftbSi#REB@>-w5yF12rO?7Z1a-_+K8qqDUq)ydPJp;ZC>0jG(n$>X;7ftgzTrr*V^p38)$7|enRB0G)wP+0q%g0p9 zs@cI6fy2Aoc#i7D?QgvRsic2DeYett1#|Yz85^YQoe?&lI-xDGQ_kGOgsDYQU@TwP zW&icZ8sMQVE_o(C0mX=a+m=YE_Z#1Vrw>1)i?5$~P2^)&{cURfwd&34cKZ->?TS~E zM*Yoohn~`J*ddNDdGEt59{rbHcDCti_zW%6JRMATg5>YWliij#w(U>tb4VL|AB24} z#OZiV0yPO&IP#|=bbzOub5JIb=t`6;QZKYJ31^B0MHT)&stB6#mc1%S97JvY@$IGB zi|##2AWFr9XZws1x;GeQqOxK0#@;rGiVJEz=DUV2r0m{ZY<;uc;A6&K`rvhlEB^wf90a^1;@8><^d+*mRB+_=z z)&5Ga4aP|+7~nn84st9d)D^}XTdC_#s=um-xVQE6v=4S(V!86vaUte1FnmL-H(+x( zozSs(T<2E@;kK1=f0fAP0#x%EBvn*hf-#lNBULb% z&$4e%IA`3fa*_ThbDr*HZY=*Eo)X3bkF@|c`hy+r``KI1;c)x3L$XmA8c{k-s`XY@ zPDyUzf`uU_I_J52Niv*kJ3)QbimU<0RizhoG+EI~>Ual1>MZEDaP9ku_l=wV5dS0a zIN7Si$W4_eXf_M>@lG}7f}J~RY`b0cy#C1)Jy5_})q$>OnLRQxnWn00xksdtK_Xr5 z!Z>ZcIV_|rR8s31@(M>UVuijw|GPz~Utueoa3_RSua?^?w+qv7=%O07AXSYi#AK_Y z2)eJ2-aS+E>L)*?^NI~lAh-N$&DH+oqcGpR$cUq7G6>JhW|Ds{5MNyOp5W%AF(&RM z^Oa&x@9>jwBFWpm-vaPiWVw1)xTXA=&-xDO#nLbEF8M0Y%(>2cNGjF&SG&QMfKP}I zcsZeaZL2E|I5&ZTlqQYQZ)!$YHQCQZ3r5~rD9QcS#?A?cd*_y*Ksa7Z7LN>io$8hJ zUew-t-pfxCv+4@8&khiYtFepklkKnX(#rI!s2tY!a=X}RjFe;#iR)jo2pm(%M+sK$d1kx#*Ip>s9 zdY~~eVE!AioZg_F%-V7=)uHG_%&dGoCbw8%JLqH{1%jbSEr>vqDeyuTuzTQkqA9Ol z8-8x&iL-OZF%vzPsmA%C-1FXC^AM?nu%tB;0|>5cm&aSQa*!(Ml1V%2NlgX3O|Yj! z0D^`I2&U4)+;pgH4H^&-5OhR|XZ?O%VBujwRTzpBElEj>MGEGkh$!*AfBX5`6J#slT)sYmY`V0%$x8#eC0vu zeM(++PdsEv%f-dl*SZHnWFB{?&OisQ(xU;EHVx_P0!I3z*ce`%Rf*))dD znR+5bfuaFZLxO%}<@aNeTdP|D!VdN9YF_~vt)OuWk8eUnC*Qn+K~I=V^?W?`rWX`5 z=w00h_%6mmbY1?e3Vx~xuq3x@){buC9HhUOS%T=CtumrI=luKRQL?K2XhW=$ov z(ZbUxK(zJQ9;-L-h%sW(k+49hUQx!(x7D|f+v1HQcb#cj(|Q`syk&y%!$Qw+LkRCc z=_{XOs&dQ=ljnC$c99LUHG`k1Ac3n7N1QV6vd%J!EM6myZ^Pr^xuo>^XW5=yj&d4o2OM3th ztJ!!GeP6%Cu^NdA>zA3@c;)#-%}1w0B)Ag$7y!8SI$6*UIENZB36)8N(ul2-XYujZMcdvtAWLKv1}{u-xBqT87j2S3Yatw$HNS+}TJUPOD&8>-TGq*|LkvgiSGADxwxiUiBr{_HhcancQxNL6)3}R&Z$1EkRgv z-pZvTQ@H?5L;mPMx!xfw;)ZMkknK2+o$6kGBvoM-lP%<8Iox9KbY(19jy1OMehRU`B*9p^Jp<>dgGU~=-72T3tSQ{*?ku(ja75R#UU)Q`EL($dwQlEY zP0jc82Ap~CC0FjhJPh9M^=ChY?)M+t!98|+Qd3n}$fQ0178~Y9O{hrk@#ToqDm7Sp z=9ns7e%&n_mtJCejq5^+uQi#qI2cSw?e>EmP@il8hN2EM;!gDFUtBhEZD4pCj$kUH zd0eI`c?8FvfYLx#C#J1*l*217Dh1QAFRozyNelrnr)&E2BoVDo!jJJ zM3NxW18@k9d+djoP(4n*1jvHc!0kX!(vfKf%5BjqTp|o%USNWAps}{=H!^m-hkXPD z?YavOr<~XmzVA;1skJV5NB9gEwCZWub zZf^kKwSG`S1_hM(Dq`orYr;{V`~DoH+ipKwSp3zPx# literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso b/PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso new file mode 100644 index 0000000000000000000000000000000000000000..a273453711a1ff371d28c63853d25a37cf730b4b GIT binary patch literal 32052 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 RThr+be$1tLa(IxE{|koF?S}vW literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso.pdb new file mode 100644 index 00000000..2d6fe1ea --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/BlurCubemap.comp.3C55D2DBBDE67D3B05E91E33AA424D4A.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e2f823fb690699c9c128d3d43cbbfe7a5cf4f500f1386fd39cf07baf83fc292 +size 26112 diff --git a/PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.3777E0C4C3850AF4730B699288C64A32.cso b/PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.3777E0C4C3850AF4730B699288C64A32.cso new file mode 100644 index 0000000000000000000000000000000000000000..c30dd756d7bcfb3e99ac71fc2cc0d48a9fa3bd0d GIT binary patch literal 20372 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.3777E0C4C3850AF4730B699288C64A32.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.3777E0C4C3850AF4730B699288C64A32.cso.pdb new file mode 100644 index 00000000..d780c8f8 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.3777E0C4C3850AF4730B699288C64A32.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83f9dc7487514046dcc0dce3c71c45f9d621e390855b36b0c46ca1d8c2accb8b +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.DBCFC7E098405CD8ABAFBFE666F38717.metallib b/PopcornFX/PopcornFXInternals/Shaders/BrushBackdrop.frag.DBCFC7E098405CD8ABAFBFE666F38717.metallib new file mode 100644 index 0000000000000000000000000000000000000000..2ef3345a2ca089ed788e6dc7fc03a4b79aa0b741 GIT binary patch literal 68478 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso b/PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso new file mode 100644 index 0000000000000000000000000000000000000000..887c8976792d13cf4f3b739c4840f112d275865c GIT binary patch literal 24300 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 S92%Y*8AxYhD+_aU`Tqd+T4QAZ literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso.pdb new file mode 100644 index 00000000..976e0cb5 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.1CFFFE56845EBA06EDCF9E5C8278FEE3.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d90249848177dadb54044b861b9e3bb130449e36c84983a12e55750e5a7d840a +size 22016 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.C5813AF3B0DA61049FC61318A52A0039.metallib b/PopcornFX/PopcornFXInternals/Shaders/ColorRemap.frag.C5813AF3B0DA61049FC61318A52A0039.metallib new file mode 100644 index 0000000000000000000000000000000000000000..fcacd773a33233c1fce052b95fa20369eb3f67ef GIT binary patch literal 67730 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 O{uB8B5D=FaQ~4kL^c|=G literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.08B780C3B4A4A9B95239BE4725C155E3.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.08B780C3B4A4A9B95239BE4725C155E3.metallib new file mode 100644 index 0000000000000000000000000000000000000000..9cd22cf2671c0d259b27a3b4daf5b196cad7ee50 GIT binary patch literal 68274 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�lY$2778myW6 z)VIYtU(8*0^kQ6Du4Wu2>pJ4PmoIXIoB*aYVyjni-Xl zu2UXaWW_LpY1OsXfjOPZ+zB6|Ph%? zBSVKW#r#wuohc5vpXiH2>a~v5u{0KKvA&*UPj_E$cX!v;&bHp(#MZvfuAZ)VPiJ5E zoxa<~69?knTb|M0dq@B7A||HSv}zSNPQ-v;&$k z$kg2v4R)WwMiR@$ky%zvAD;;D5J9hOYiuwNFpTF^FF)_K@OlsE@EhUwMjtzNUoLg5 zDDmm8cvn205Rwk33db@fNf(cH9*rByo{3UnMmR1q68J9INO;klXb@?_IUXj$Wq6;M z#=TF@8upm%Xyh@8khlY-VO-*}Mg|%kvy)k)dYXdgvBzoYH8M+o*+UO{=-*fR2I#5x z(9e444IcVA5537le^Ke5h8`X_a_iL;Jnf;c_t2m7&>au`dC;%OfyR@l_kS>Eh)11- z{E>aN!GJ`buB{1lMQ*M22g>K_f{_5wZFLg4tF|d{q9f8;+Yl(1BU@2?;NOl`)49g z2G)ieB2S^TF0uxSTIzzKaK!H#53P-S+L#Zmh-?USgjPn@!i|1ln*%3up~lFakk}a6 z68QY((DKM?AnQY+NE)yy6pTaxJ79dP>sf@pZ9+TXah0G<9be+{n<74IcQ?C64x^p> zbZc{$k;K~Tx@@v) zHS*6;>XVlPO~BZvcNtl;Ml^RzU0fesJs0u8+$YpxIo0DDNt+ zP%bO3P@2#;=$}G~Dz4D<1(vf<(EkxFS18kpE0nW}E0i}CS17+!T%pvX%~HQYi7T#9 z1{7B)ImH#qX~h-FdBqi)K0*EL8}$FOmMfI?SVys3p(GVoD32+wP@Ym;p`2A*pMg6&U9-rY7V#az8TXrWcW~H!c5R!q-J+=xsti zg*hRNQveuxaK!+KG@u#HS62xltK|08Q^3hlFZ?RgE`KP2Rgu-8K#$1WZA1Cb_b%D8 zdYQ9TESA1jbZ1!JyM(niHHjYCrb7HaW6qZ$_~}~(cZKf*VOi_)BVH>c*ns2Tax3lw zfNS9EF7hD<#r-rxe=OatgQ2&RzDm}t=Gtuo_yJ@{zI-0M51|0I{Z+0p;3D79&Lz#Lb zj6ijlySmG5KhVXdKayQ;tg<+iUb8*;6YY^4TC3@I6anx2&$*Usiskd>e?9o^W?a#rjKz1R>>cjZ*M2zqffuct&@X|{F%7h(l|m~y~^WOtcJI&2I~YSp0#4x zCdlz8aCL_6{+3{oLmt@kKiJp^-dfc`?j??!8oRfE{|@EnuN3UxJD}}q`pqJMkS?0| zY&kb9%1|x1;Ulor`Twt?cCGzm6OZqo$mXSWA~l{VN^7x@ZXLxr>P%rcmrp=?vrA44OUB+25|QPTW7W)_$MI+U$8cQx97iR+dh= zsorzXl8-cT{CAN58~FnKeFk{|_e_6{=T!zggTC`){B5NpxaT@Aiadmvvu#{J=KeYU z9svI859ep@yK@i0?RtD~V4I;FyJiTP-I9MJ34f15RwB~}cG*?P?6&-#!L=mY8Gh$4 z__=}DE{@x3`Vb><=ZC1Ps;U}+Y6Pkgs7Bz%iNOB;gsIkO1E#xbd9v7 b+Tz(Q+0NAPa94Nx2u{{_w#Oz%hRON=m-%g{ literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.FADA9FB998752BB17F58A80A5F9E1569.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.FADA9FB998752BB17F58A80A5F9E1569.cso.pdb new file mode 100644 index 00000000..29cc26ed --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeCubemap.comp.FADA9FB998752BB17F58A80A5F9E1569.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90ce77c1e37622e785dca2c3fc0968f3a6da237a738ca5c2e8c01c8d5cc452b1 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.12DC1B81F40BCA0B86B8977219474DA2.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.12DC1B81F40BCA0B86B8977219474DA2.metallib new file mode 100644 index 0000000000000000000000000000000000000000..8e01aeffe0939e7b894653f906165bfb8b269f41 GIT binary patch literal 67818 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%0A-(#7Y>LDhEw#zRsySrd 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.4FB8AAE1AE744B6A08826A79EB921BC5.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.4FB8AAE1AE744B6A08826A79EB921BC5.metallib new file mode 100644 index 0000000000000000000000000000000000000000..ee2b66c97e782c0e0ca1599d2df876b5c4ea1bd0 GIT binary patch literal 68134 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%0A-(#7Y>LDhEw#zR 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 Ia-u5#13JkJ*#H0l literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.B71DE41E8684A6AE211AB8D5CC66868D.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.B71DE41E8684A6AE211AB8D5CC66868D.cso new file mode 100644 index 0000000000000000000000000000000000000000..f6d56f4006603513097d5669088eb75dd0312ee3 GIT binary patch literal 22496 zcmeHPdu*H6bw4B}N~HBUk`gsCK0a>vpkQGLkwcAi&K#^s|Py`v^KfI;(imup- zdcWU&h#w_dwcWspV_y4w=iYP9J@=e*AK&9%Dt>5S=ds5M7oYvJfBBF4i|_o;kam?5fO>3Vp0K+D-|~n@D)7;)s!M*V0zcs4AFaTz@$kP`fnV$4 ze+7K{eKq@E1iw-unUE;t(#e^FIbW&^{>84TiE97xHNiymo12hVUlq9%I!y%%FG{}vYu|J#m(6D<3vOhj&D}GU7;+O+$%%B% z-I<-4o6aB;i+03hZ({d;#*&Hnz@lOInIBJ1l16DeqHIe@I?g`q2K9lG$ej zo7OMlEsJzCgU?u5+bo8T(6_*&9j^qnjs+anzS0lYH+sw3Vf`-{p7mp~E%bphY#(-& z>9IWHxAK{Bpzrk0wp&5BiV^D}ss3S|-aE8@i=m@&+_e38osKJg_4nhVQ$G+v{QbD7 zRD4u~plzV-j6dvBZL+?v9~acqxcI2;YufWT#t74ASL%9}M;)&qrc8qY9gkj-+5zJ) zePoQRJpK74{9zjO>zKS;VVz;Tm^d%l2IsNF0TvbBM>R?TCu`Hq;c{h#if z`U){;;)~$@a%WCKYY$MZ=X|bnfRxVb&*_6w|E4m^M!OSQs``ZBs_4U zklrydkxS?E1M`!U_=1-3ej#+XxViLGM!u_}e1&g_Wwp91*0P@z&3DPN8a=2n^2w!^ z9VmT?^vcgiAswuL_z4$V)`7F^GF$4A0Xqf$8h+3fU$`g%BDNbgHd z&qmzoSvSGYi6HEq#np9F1}jA=d`vC4O5I#CSC~#^(tG3XHY3!rJChwxW=5y*F?M2a zyyG|;33;ldvh%QGo9mW7*SZ};+2lmTjYOht?nbw}&24iZ35TX9-H4}w?P!5@+rptx zE?t<<%`VbBQTnDz{T^4Lt;~kG?Bt*LWz*mK<+;DdJ2pNz4u8=nNx)Bn0U5dwkbm9i zmmfSK^3R(^{w?O0zgriO9e)WqJRE!_7Lcdk@=53t-VpUG@GU+YZa?$$h1`6qP(IA< zBHJ)>keads8v~S6pvxV~V!5zXExS9Hou9L$1wlo{Oi}7gK~KV^ z6Wud8yz39=`BLH1Zijc;7h)BK7w?CZRjICrx9NIVwnxU*bICASSff45tar86OT0Uo z$tE!=+_`L?YLaAD6tikIrG`nPXkquRPUbvp{cDwG;Wex6*RA_jK*|^W@o2`nk4e&w_=AvxF z^k>A4xevLWs1P~YaRP|f2XQ^A@+aHcaaY!>oXY2vuCgSEA$QWG9?jfu(t0`bLsBLBDG7# ze5@Cp)D1W6lV&@XC>j)*iMFYy&fiIE%uK10*4TTXwR4Hq&i6p8U0zGJb}6k-hr>_K z&d(Io1AIOb>+C}h;(yzx^{c`R-w~F)BIq{+^?qPp9n`yoA>%P8{DFGN{LQ<+d6zHp zhiKN0En}1Onao4E^!WUAW@2nKo6Y3MhO=|&iLsG%K0BYoVURI><f%-Am`E?2zq9 z;ccm7U~??Kt2?%WE^4u$TAWiY z;ziW7m{%t|@?+GFcd;3?Xvep1aeQ-ZBHbNJv&Cd@GL06K<9!o7sg!DQqSRvbdDou! z(a*d0z8&=y(e>Z^;hUd$>Djk@*ZWb2^4uS^7+J{!A^__CTw>21d7SMcKWBJA)${?0 z0QZ6iWNT9+JIEJCKQ+jI4Oo1wr>uAmV_TDtb9yk7d@3)|<9*S-Xf!4yjV5zXr3;eE zAMQCERg_(`h1?0@0?II8|6Co4axqSr&YO(~Vjg`s4Vq8RDDe*2-h`tI5)!?lstU_o zR?Bdct9CMKjGptg-^Ct>rPttOh}M6;_B9W^-b4QjLthU)4IcU#51pqete&$T`duFS zw+($A^sMpFPkZPs9{Tehy6d6;Dd^w#?Q41lez!1Yh)11-{7(0ZBTgh(A82*<2WxOW z9P|g`&K~6B&hH`L>Wr%V!C(jSM}iLpTI>AI1HoXR-)Tj?QRG8`7L|`X9|I+hdSqdM&N$%bPPVu7{JY4%0|DFfDA1))IcBnP9QQZs9_@GFg79_ z%Qzy1q`v1dvuxs+)hlU@yaq|1Iswb`ELP8=SIK3yiFoz3VE+4rqm1)$dlQb8;fxCO zU6T$@*cv&abo{)AE@|DhpqA)7_hRXsUsiq%=$#8bcwaHWSSESxf5u}!HXLgg{TRkg*(ZIzD0r4mKQw*J-|eB(4@>8H04vY6&d`0_A1;lH9MvwHtPZw$ zR@u_(A4LsIXPY(HeDukA-yzUFx_Mk`*<^Ll&pk>0?iqICRN`ccKwsoT=y9y)EYZBBt+>d%>Ljv?DTr`kNbq(3cv zaerDm`_t3rb;b4#)#fSRu*VTx@BU9tU@YV(k~HepB*ZUJS_7a&qi>)s^P?w!{nA_8W`FeZ z_rCGx|1NSF^zXuMCZ1d8d2*(4z**2w1Me0o8m!iCmS59!`A5SySl%>cgXLGIY_M>x zW_^Rz?;Tj)s_AN7W%-CHb8TeVU^#2b2CFrUe6D4{!u5w`gQXGkmt}*c-INVhYXtdR zD_B2c_y)@61V-(b05$_A@-g7RE1DBrGe(O|U(kk7S%{EXonET>G_ zU^!>X2Fn|!Y_Pmz$_7gV`jGk!R`Z;u>4aa zZ?JGolW(vZlPq&=Qoc{)qQNp`$_C4nDH|+jOxa-h8&ft|er(DH%SBT*SRDpp`#coH z_FFVA8Z1#$HduyC*jGH)(5re?W! z)jTjI8boaX%f}_q?5qMsjivIvWBKpPmn^SA%C?Hd($|RD43^86@UBfw;#0biL28w< z(-^SR*UVwa?*U<1qvbKKS4w>&UqbFi9zTmvJle`JzZ!P;Bd_h&n>w_O_4%^`uMA_* zC`zW=%HStFN@k_pt^8kudljAlRQ(l(M_u^I59GveAy@aitNY#6{qF0DfL*n2+J1MPxwUftkBQ%u-vRL1jfu}$ z)%5;E!2A5qXKlX!tyuK@&;B9s`M&|cv|4|1|j?gYg@8#XD&5KN$R? z!9Yc|U?6j&$-U8v%hsbuH#c$a+(^2i*Ya!ldT@>QyeEO;{lb1zj3Uo{M2qIwe9V)}y18Q(a0pqV@-Y-nPIurs^* z>t)77C(iL>p_n@N>qz*^E9JGX-+?#4A+TLQJD>=#i7$Qk*n+|KL4oHU+(ox_KTc}4 znsc2$M|W9St3n;>oXyUrL3rq|Ixbm$WnF&rca-!!hdL-%Z=QMR3u(mM$FZ&5{A2AR z_FTR4$2w(=qk&hhG%VbPwAtj|^u+bw1^h4IdD!{KfMMjBPGJfafq8y=>q<@M^IQZ_ zM9euh+9A)qv<-l}0j+?K02}~kAIHjCz`cML0Mw}aD~AMU=n4RJ-T|O3oW0F}I|1B( z=6eRm9A`A2Bk^~@A3XVw{ry4;}&cfB*mh literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.B71DE41E8684A6AE211AB8D5CC66868D.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.B71DE41E8684A6AE211AB8D5CC66868D.cso.pdb new file mode 100644 index 00000000..0127bb18 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshMatrices.comp.B71DE41E8684A6AE211AB8D5CC66868D.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a934c4a1853badd792b789ca1b2365dbf6c4f3efbb93fc83ff9bf65a2f4aa964 +size 19968 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.77033778233ABE1F8DF4DC10896A9D54.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.77033778233ABE1F8DF4DC10896A9D54.cso new file mode 100644 index 0000000000000000000000000000000000000000..6a9ccfd34fea507963265720e30233bb4cb321cc GIT binary patch literal 16960 zcmeHOYit}>6+W};INr54vE4Xv+YoM}fYwR6-t{AXG;tGqW}`Ygis|=f1pYr+JsUe5!HO( z%pH5yv5iolPUa+M&%NiIIrpA(A9Ek$`0>G^z2|>Cc;)7|e=}YGs+?H&=o^NJ>>m_a z54solCK!JQUIkA3MQUn98X!L!KRA3AJp7k`1HrcRWnE&(`1YI>AUGP2#b~1ysDNSM z4qyY2@M|DUUIVmAd>!Zmt^?BkJOIR!g+Si|lE0GtUC5RL$9^I?Q^=adQzN-Tr95uV zmMcY5K&u(|RLU-KJXuc4g$oyGn|2!U)95OsmrOt%kaZu`d8h6UMKNYJk@1;k( z?x0Nr(J-v1XyIBIgssDwR54%5r^_mQv`rlvO^m9_*EEf?~b=3)CD_z?3l>&%>Sjy z(q;Y>-0eW!r$OoRbFigAiOk=Je20$Iul-T?T4bsof@r7FRH&(Z+K2wGX8u{ zBzQ^Nt*xoDqjlzBZ|+X?!}Wt&uV2%hntmRBI_X0qPhG+TL&sX=ik1&M^jo%lCnm;z zyNL55wO4d3hS&LIc!RCi0@nwCiSYyDXP_DcG8P0N19bY}Kv#7fRG54hDP-tTn~fs34&Jh)*a zfO+=a8`gQx@p-PH6p-sR0z*Pt3#810>pKF@TIBln((`Vm2%L$;jNPx@l;)c7Z_mE} z+@A-Y9sKDJPyZ{q=e0+iXDB1O;mvzHm$KYqFTF-0u&@DE{iZA&X<^Kdeg3#&{{CAd!o!`gH!mD02= z_|0Iz-U=&Kb~eXqpHd4uWpziD#!x0YbnjO90ek0SfhZ!AR$)}YHXoT)1N&4g5><~pLM_dGSaaJDE1VkS z;ICczE_jsB>S|Y=BdCad+%RgMHnU;1+}VTLy;ub5)<%b`qI_Z{-%g@LmU~C=QN;a3 zt};`$9501CJ9aB#tnH-T9y4r+YuX`|e#$59ulVHY--&Fy}$YgVSXNG=NNTwdjr_&{~98N_evzUQk2MRpX>xgp_sUD3> zX1OxwEIlR@)7w_(hq)Pe7bheZgNiHd?Y?W28$|^3D zRkF^wOB1w?#luXdFtbcq$w@Po?wv|^O{J`|l6_O|vb;HN=*CA2ykkqtz`LhzFmM2yoaB%HAg4XNeI+J2l8Z z1|7P1JFxn#lSsepYce>phqK8COA?*!jrK;PF(GR_S$xneOR99L`&8889L$xA4-1#1 z3B`Y_@unE=vtSXbh13H3T>sYhg>$p>CQ?0J}atHEX&Yf}2A(6)0`Ucwod z!>_@0mcxJ9#jkVmf1&x?VW+{xKj-2%y7=c^{7o+YPc;8F*x@yrQ|>b^{#Fa z{IlTa3P5ZVv4;rfUO! z3ABdB{f&Xmp`%L$+G#4xhFiK5aXE zwyVRhbMe`(4xjhbJ~`6l!zt){Nb??>!=usI^40gY{pjlbKRtah*7JIX(= zTy|s)QnghShu;g*)z(KJ+#q$0{3Kut z(tgm*sOx^}0qdOaE>ItbPhT5tei!RWTb%3IpP8<+(&F17TUt0j`F$^8_}Y3wmtMU~ z4<;q((hIrt_?ZCeyE2ix=Y8g471PtszDJau}8#4m`dymU6!nmSe`bOr+`y-H} z$Ah&R0r&jRxwaLK)GwL;*}_E5|6CgpHjA;Dl(N>u-*o*z0w*%=R(UT=8G+xhZU@?P8UC)x`)-Y4SpbgluLoiV z;~0|Q_czGP&u_#Ia1?n3+zp%sI>1fe%}z#BXSKnzZ-u>rTkOM4jp9Kb;1J}FuFb*8 z0ymAhe9i>p_FqLVJM!gi`KKOb(BfXLn9%pX9Z+bDwVc;W)#JvQjoQ zxYCq-s=)bQ0pA1i@A@7Cjv-AL#vq#m<^Am((&Tf!$GyTBV$QztGa#FnYru^__Kjws zGX^;(>wz490U)2}-|%e!a;&oan}EC*;ND^j&^lNE_2A==z%3tt5nc&i1iT1%5%415 zMZk-|XDk9EqwynL$MFQOGuqp=CmJ(TeS0R&j%Y_J+11(Cmoz(iV#&Ua?pUNSHA&6? E0?82U-v9sr literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.77033778233ABE1F8DF4DC10896A9D54.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.77033778233ABE1F8DF4DC10896A9D54.cso.pdb new file mode 100644 index 00000000..b0a6ac81 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.77033778233ABE1F8DF4DC10896A9D54.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e28756a8a3750f767837ae44234f7988e3e96ef73334ca2e2114fd691cb32ec +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.C9C782D1BBE13E453755EC081421DED8.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeMipMap.comp.C9C782D1BBE13E453755EC081421DED8.metallib new file mode 100644 index 0000000000000000000000000000000000000000..e44f670cf4f17ebec8272c664226c9bd7dabf1b7 GIT binary patch literal 66942 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.369D88A577A88042FF66C8A4DB9A4FFF.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.369D88A577A88042FF66C8A4DB9A4FFF.cso.pdb new file mode 100644 index 00000000..95c2dbfb --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.369D88A577A88042FF66C8A4DB9A4FFF.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cda6be4813b284dff09e1653d36ff117bda74744a83be6d0893e4466c51fc084 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.392E08DB2C8E05308B151D1DA50C5FD0.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.392E08DB2C8E05308B151D1DA50C5FD0.cso new file mode 100644 index 0000000000000000000000000000000000000000..e93a0b891bb16ba2361c87dcc2d92f8942ecef49 GIT binary patch literal 20016 zcmeHPe{9>u6@PZpG)78=kHilC z0qvlZw{;Roz$#QW7))XsOi0}%CRGDXFm)4S+B78om?p-UhWG>Zk7-cG&@`cDpU-{o z?5`cCT{lK)>nkts?!9;K-o3l;eee73Ok{U&-_Xgg9)9hXci*!<`0Ih!ZoT#qkBEeJ zh|C4v2sl|I@+#o>fZZT|1o&h~WLKnr%M@r{$UKco^;%x$jP!ZFmY1#I?TUoM)X@U4 z06{=2paHy z;Lc)xXD&OCj3?4|EGwY*rIML!G>JM&=Lyp)5%SEg z(dB6*iW$6{bm*wn`VY<`H*BY2747d!<&s&6-?G--h@8@ml&13G2SC$|Z59RKslMbgpxcG>sj>`WHYPT!EJm}qCw zBWlp-nxRB2oyw%fvsQ3do3(9lWY8Kp7>(O$t1mS)a0Byug_PIQT744;DUb2>~pGr{D^GkN;bn-rSg}TeJB$+xZHGhf5mGl}O z^|Ft&)6go(yX~O={@3CanqhZx_{Zd0$k-Rni>n=xAA>N9kxF`ypgxooT67@h9E z7&{FQI(?=+!=r7@&_PV&ehiz;TzAWG+!sNNun90Sx_R_CXiEX)F&XSfzDAch4`)k! zFIGxMPbJ>DXr|uCaHLnZU=1oPIDM=8R;{vzMz&b%IzpjJ)W7iEzMsGNi+7&;&f{jgr}nI7-)KDb_HA9|B*UuWOUMI-_>#5W zO51lOGFdwv%yzbI@b9{#_i)zU9FM2%Or|$CK91OfE70VY&xIgAQ@S)_<*tzJs#pPG z5EI`jkzNDo*qCF23YF;imRo2n)aJk6@5?2US*tAIv?siFA4I33vAa_$m==tMIu1dn zBV8I|+7n(^E*xH~q>pUy7p!1lt)%sEv2|A%$TU%i^caE(_-yb~tKWZbDiK#9o?O-* ziYAglE0MHD81n&PAc?=071LO?6l09fQoWsurn8CIggp?kZq`B_TPIRu(TUN62rR}2 zA{~d&uB%3jVK@j|BiZpsyt4WguRQu|eB&c1GyF}DL;-)OtC2s2z4FJEURm@W;z-yG z3^aS>$yaLR^`DCT4Nhh%v?i?v2pj~maV+t z6r<-Q!r_XGO<8=sq(*i9b1#;c^ZI8_UaXG6R5Tt8wON?YiE%6FT2(h;S>=k^=J)y1 zb~cwzV$F81r}1LopR20t1psX&l9T2TgmQ(qLb;S(a`Z#d^2zF0YXyU@rrWHQ)|xg; z^}w~*Yh~2pdOjQlWeu%@!eYPO`sk5@qMI$eYiDuAe)DEydxd=I>jz~0n%6>wm;MEG z3rbLXlCR1c-EuWBOPAWMqM?<4GOm3`X ze9N{WrjEO%gg&-&_E#f`uh?j-yG$>Y7Ebb{uyPK`WXWpGZZKnc>FL zb}M@l^R3+~>A2%gy|;?zCMOSL*N6=aJLTR#b_^u3*PKYj?zZFDWd{1vlCPMFug@ndp1p`+Dm3zarXVQ@AE@$kcWty*Y6$AO-$UFw#Rab ziTK{pRB9r#cQ`d=$M^2CGpSrUW@q*~2a=h+y6eMw`>BQqQ+^1;)e*zawWI5%&i+tO zq_?xLr$5x)73%2?cZVb4$mZ@)U-yx}i-s^u}X91q8%-Jw|bc-+{_kowD$$XxDCA)C%TUQ)83OVI<86-=r3vdbipPHQ)cxK6{N&V2fyZ8aYCGgV1pOIc zCf+yWy(p%&fa9R^`QI#(*I3OFmN{2|teU!ulFZk1lI0qq?lI zaO^3su^iQ9jfLY$zQ*#ZE^92Oby;JnN1rIKv2ZL|)>t?eENhH7o>SIX9@J%xXr{$*KX3F)%NGOEiO3-6CoUSrAXvc_@<GEy^O4PX>-2=D~pWdP?Ps!J;%0*C|t(=_k5VNVZ*(Qp%hbJCAf zV6Gk0({Mb}HVynl7$yO!NtQ0k0aKzu_N%$X(--^Sk8cX}Km@yom3j>!1yYYmw3!n1x^Karjqh zKHFq{^h32ot3J!LsTHl!@M^juJy4B*7Vp?2XjF}V^89p0T+NB)GO|;Re>z94COBS= zf2vU2jQFRyx6GIi-id|8_ch}~++S4F#rJ@F|Hr*n3rw03zCPEs{pLLP{8MMkzob``#fE17PI9H@?eCC^;?G=vhTm-tqnIe@P4cYZfuf#w>` zg8+q@2i&gllN#Ha->u92y8MbRFVgtW8XwjeC=a->WR;4S6-$|)uM%B1Gvz@7htCv} zrT)(RGwWB`tc;mDJ_`yzzb`oPJ;HZQDp(S9$+lQ&G#yPf60}WjMCA7HkK={ z(~j$QK$(sjCB^TL!aaygxgE7irWi5LC>`_B2KOyaFQ%uO>qh=r6;s*Y(kcVbi#ame8$P6MM>c!>j^T#wG88 zbKU>{A$qrZFp<1l{ci+TC!>>gMpkFivDF80t=LYF@$!yC7{^c3GpjG!Ee^g(`HLk! zpX&ikT-Nv%%DXt^G4U5ojMO?S0wU*E{I3}JjNj)At9u^-@jpCYPCk7Vz5oZ|B@56F zco1L`Kl-jQ1&!%-CZ4NV&g)y1`NxZs`d2wTNbg{OX=ELWIB%R}Drtjo1(QvEWWqv15tNe!+%IiG3b`fmZeuM zw*bT1f(P)JS_Sx_|!E6_$|PB69DkZ z^8xr&&I8N`Tm_&V=80X1Jokp2XG;Lf0Q?PoHGTRXSn=trtZJ-!pz49D2dW;p1UxV> w7}>%1I3qE!czDcS7w(DLYi?Q>i+7HNZ(7&W9STR+bar-!yP_Ra@i9vN8|HDpH~;_u literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.392E08DB2C8E05308B151D1DA50C5FD0.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.392E08DB2C8E05308B151D1DA50C5FD0.cso.pdb new file mode 100644 index 00000000..a4ff5854 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.392E08DB2C8E05308B151D1DA50C5FD0.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0c8e011a2314ebb5e52da77eb0e6a7164a0a79f195f30cf423070356b4a5fd4 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.5105918DD8BE389C150428D89E1DC2A5.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.5105918DD8BE389C150428D89E1DC2A5.metallib new file mode 100644 index 0000000000000000000000000000000000000000..24999faaa7c2b5c3061f5a27df609e7f1ad34f04 GIT binary patch literal 67702 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 P3H&GU{~;i$Affs{THn`n literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso new file mode 100644 index 0000000000000000000000000000000000000000..c60d34fc3aade3be251be8697028344e8c57fbef GIT binary patch literal 17568 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso.pdb new file mode 100644 index 00000000..a9bc18cb --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.51CA73B06455A1B1FE3E7645C1E97A2C.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0aedbd1da3cbf1944d66796e3a47f687d3965cc976216f4aaee5b604fe7aecf +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.87A39CD991750E4B6AA82597D1D6999F.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.87A39CD991750E4B6AA82597D1D6999F.metallib new file mode 100644 index 0000000000000000000000000000000000000000..b931ace977e45034d715b59212cdecfdc0f4603c GIT binary patch literal 66742 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 Zz(0Y10{;a53H%fIC-DCvAf+U!{y!!ZevSYD literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.AE073ACCCC101E16160223DC2E63E101.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.AE073ACCCC101E16160223DC2E63E101.metallib new file mode 100644 index 0000000000000000000000000000000000000000..15357cc16dc098380ce96fbf42b934a162486495 GIT binary patch literal 67942 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.C8248FD11EC1733B4966D0AD2A176353.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeParticleCountPerMesh.comp.C8248FD11EC1733B4966D0AD2A176353.cso new file mode 100644 index 0000000000000000000000000000000000000000..f5a26ae7f5e32262bc634c36a0c07f21059111ab GIT binary patch literal 19880 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 a_)p+Jf&T>l6ZlWyKY{-b0Z9c3)&BtwmotL^ literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeRibbonSortKeys.comp.2616FB8E13640920939266A5AB69B20D.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeRibbonSortKeys.comp.2616FB8E13640920939266A5AB69B20D.metallib new file mode 100644 index 0000000000000000000000000000000000000000..c798fee40be43a941cb64d9e17a1495208d5976e GIT binary patch literal 66830 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 H1U3H$Rf8v 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.3048D89D90DE3FE53B72E0B170415B00.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.3048D89D90DE3FE53B72E0B170415B00.cso.pdb new file mode 100644 index 00000000..33555ef9 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.3048D89D90DE3FE53B72E0B170415B00.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7c9c8c0b65d2cb2819c816d011c4ebda71eff16cc479f163fff9d474778af4a +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.52AF64226113D111C7C55923680D03E7.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.52AF64226113D111C7C55923680D03E7.metallib new file mode 100644 index 0000000000000000000000000000000000000000..6379c213034953422008ea7b7308e1f76669a190 GIT binary patch literal 66662 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.6D4F2B8F547360DC2A71F660E3706939.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.6D4F2B8F547360DC2A71F660E3706939.metallib new file mode 100644 index 0000000000000000000000000000000000000000..fa0677e06a4bb1fff9bdad20cf1fa865acc826bc GIT binary patch literal 67494 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.82765548E48F470AE2C324FD1DD1DF19.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.82765548E48F470AE2C324FD1DD1DF19.cso new file mode 100644 index 0000000000000000000000000000000000000000..c9b5575949dc36cd010b739af73a6ad42340531d GIT binary patch literal 17248 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.82765548E48F470AE2C324FD1DD1DF19.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.82765548E48F470AE2C324FD1DD1DF19.cso.pdb new file mode 100644 index 00000000..a09dcf47 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.82765548E48F470AE2C324FD1DD1DF19.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e74d4bb271ea553db5cbfa07e6fb0765e508aab535a4937b0ee0c95c1de2772 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.BF85DD78B470A799944AD5A0F0323B0C.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeSortKeys.comp.BF85DD78B470A799944AD5A0F0323B0C.cso new file mode 100644 index 0000000000000000000000000000000000000000..e796dc91fb6f5e0c73a2da9b8ccbfc451348227d GIT binary patch literal 19584 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 ta39ALx*$)Nsh5R9o<5p* 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.002AC7D0B7F236B81143408D73D581F8.cso b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.002AC7D0B7F236B81143408D73D581F8.cso new file mode 100644 index 0000000000000000000000000000000000000000..e39953d2541cbdc3fe314c54369274e6c194e52e GIT binary patch literal 14900 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 Lflwixq~HGpBb<}M literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.002AC7D0B7F236B81143408D73D581F8.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.002AC7D0B7F236B81143408D73D581F8.cso.pdb new file mode 100644 index 00000000..b7adb09e --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.002AC7D0B7F236B81143408D73D581F8.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46282d3ba8876687e281a7da097f78f9637dc46f4a738cac76240878d707466c +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.008D18448C772DC164148A23DB8594EA.cso b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.008D18448C772DC164148A23DB8594EA.cso new file mode 100644 index 0000000000000000000000000000000000000000..4d912257801380119bef4b21312d9084b56aeaf6 GIT binary patch literal 14940 zcmeHOZ){sv6+ez!H+JLH>DD%+W4nsF$!Su@cG4#Ov#}(OX{EGH;}nG{qV=DbCe*bp z+u7QpLJ*x00u6-vVbX?##6XDl1C>A^;6pXBf{>Vy_`o#n6CV%)#FUIp`+ydHzx&=z z-`u1fRa-TwPkVCiJ?GqW?mh3``|cmV#KhoG=Y^)NfBE&nx2|1z;y3dnA8hi7$mBke z4WI{rZ-EhQ5Xk{AdPUSakucT-0}Q$BbflIfM5U(FIjgLOif2kQXs3!rBQZ4R@}bmckBq_? z>)Z(JcNsSE_98Lh@cp2yg~9RRiJ_xM#}bnI+=)Y#WVu+VCev92x2qer_6Xu#Or z1O|$Yr^~0TDk_sYI6Tn`!>msd_{B!?d>)}nzNC<|eLlxPoU|i9(TXsZ?DX;DBAJkQ z;~_h5L2p6X>1i~N^&J-Z=IbJJL&vwsX6NZ89sT5&ZCzs<>VbAgCorex23P?H+UAr= zlKNkF^n5P9@8S)eIBXez0SPVHYIDl%b7(V$lBx5L0(O0Tj_esUKQ%ruehChJK(>d# z=f=Kd!0=7pO>ZT0>)lB@HJTWdJ>u$mL)}B2o$7EZsrn+(XfV*0NYOAV%sOuevMq!* zo7DfVfe2jVL|2E0HUfBmeE85dzTWUfuD=wJYdHc#Ldtg*Wp!BF5io1JwcW~k>sE@u zrAW-P>yM92ajp5{pBH}m^|NmzUiN8n2VfbA!))a>)>X{T&t3O=xdA1W5hx&2znE){{vp<=#RhN^OH@m0j$|A$r0 zIe_Yd-3~7dM}i_l=B~&7Xo(Z&oJaSN8AJ)!MQ2kjt>UgZ=REW za;A_`pckA3&3?@z|NVzY2Cp~Bb!^sK&WY?C_Q9Netlb0aP2q%14}YE-q5(^GGf_Q~ zTytZ6wscL2dg??Uu;a7VXUnxXX?*nVNAGeWx4@0Sz`n_;*?fLi*~-k$B{6#v2;$qxp7?BpNRGM_Vy3;^~DoIu|2)9-u{7jPhzlt z_uk&&fk?Jej7;Y%d69IDi>h`}(k{wNE-L!;yE2(|yU1x5S-8k$Z5QcyPcB0jR{DmE z+Iglvqupvo+y2+6XAY14E8CtN`N22d_WZw#dg}9hnADWbAPoJtt^lX2$KN^h*ScczMq#SO!2zrn)L%lYLzaco_YxYWTuP@Xz_nodr@ox=&#xvn-@ru7QxW^ar zcKNpj+r8mnpLd7f7wm6(EPO}pGPkz$?-Aa0at=6x_WI;MNVfvnokE_gi`nf(^^@QI z@cn64)l*8S_~{ZO)-WAIv*c-y1W3#pcVO9Jxc~LnrT0 zc@*}$pzl!B^9kVNx23Eb|9t>^2(JxJVk>fwIxNy&AnSY9;jJdJ@eeUiKP!y3wE#~d zUICl}uLEmw(LNnaAWdX{903xx%JwbKg0lNH+IQY@d2eApF5b<-EhwjB<=!^PJoy=| z@7gZN!u(URehck*ocJP%{;+hCpkLs$ZG5tBA=_uK&9{Aeb$PRm5N(&;Yn{t(=!RWq z952i_i)Sx7u|G5K{^9T7A++nfhOx+3Z zZUyL0eBUU;>H3}n-v_P09l+>4_f~gswl1b~zg_|wI9pm_(@f3C!+ECU?lFZg5n-X|!5Z#B!$ zUfqNpAkX;}unSlM8sMhyQzqk3v)tiXuEJiyEpEU`{ir?z6Zty?M%U=*L;XUrV1cpg zSCM%mU*1-Oe$ceSdea8=8XfzFN6Paw+s6a6ZbjQF|@O0ci#!?QaBfAo5!z zmgo0f9I*VJXfyB;AkWd+xAdVYXdUiP1Zv0f{qb7&@}NZE&`3gm_s1PvtjDr?_hx$g ftXMQ^Wv2S#*=#!6lgaGP?%vban~s!n8P@xM*mj_Y literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.008D18448C772DC164148A23DB8594EA.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.008D18448C772DC164148A23DB8594EA.cso.pdb new file mode 100644 index 00000000..19eb0b99 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.008D18448C772DC164148A23DB8594EA.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:beb3336642f9c05bbe4854e55134a4cc50a076b979fb4e6bd25f590e13232434 +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.0AD45649F32641AAA69A3A9C079BDDBC.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.0AD45649F32641AAA69A3A9C079BDDBC.metallib new file mode 100644 index 0000000000000000000000000000000000000000..85fa3ff581938c98fbc0504d12bc50202460066b GIT binary patch literal 69306 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 E1GHE_tN;K2 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.18BB2ED0068256FAC47DC4810295F65B.cso b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.18BB2ED0068256FAC47DC4810295F65B.cso new file mode 100644 index 0000000000000000000000000000000000000000..0f1486258d089f549e9a19d52084b91cc0fb19a6 GIT binary patch literal 14620 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.18BB2ED0068256FAC47DC4810295F65B.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.18BB2ED0068256FAC47DC4810295F65B.cso.pdb new file mode 100644 index 00000000..59c617a7 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.18BB2ED0068256FAC47DC4810295F65B.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2582076d1a2d3c74a7fe501aeea48f24754a596caa2f459475926f60341e5c7 +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.3AEC42EAC916E5302A5879B5E0480E46.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.3AEC42EAC916E5302A5879B5E0480E46.metallib new file mode 100644 index 0000000000000000000000000000000000000000..bf2a18a6f0eeb2fc16ce90ef07931f43cf0f6da6 GIT binary patch literal 66298 zcmeFZWmH_v(l9!}zzpsLXK;eM1PLw)1oz-NI0FPHxCGbW4nYDTXmAe_NO1Sy!9oZS zB-~A&=bZOB_uh5ade{B){W!g5cUN~;S5;S6S6A<~*QjVIOCtp$gHS+!r7L8lKY-rf z_1M2lvcH-^(7)@nf7dVmu9G7F1xVujRo-{sk9{VkB8LI8Mwr={IGVwoKwA20a!4Q~ zMJY{17zjVF8oLdLYCT` zl<4S`M8i>;Z*A#4{{2Mn%liq+%1J8~g6IH|)`JaI*IL7sO%i0e7%8 zcXsFUbVk@)A^uhTX|{wTxU4-K95@hGf9hOX&dv^QTx!lPR+d~ER&LH72n#DWE=^lA z%X{K7&Mw}Z_Zs8mlaiC+=arL^5#bS(6X4_Kl@bsZ5|I{=w@%xL%k6{G1*B5VP~*G7<5#v=(x-7%QU7wnidQi-I$kr?HLwPiHzy@9cG$}?HFYo0*(nFC% zW;Lf=k)qx#p!^s_Jx5EkAW6MaK)n=1IUGc}5J)-EO+5j?1=!oP)SE%n3tg0J1=tI; zl)Fe&AU7!FMS27R1Vt!DctatsrV$8R6d!1WyJ>_VX@rX@&*%Nl_1*QBIgq12jjFr~y)gNZbH&gf|N$&?Umt7R4mJ1>$WR zf-sG6w}k`(a#9Z?kuI%M0g`OeQZ5uwE`X?4XsMQhsE4Jf7xF3RXsH$oumOan0_?d0 z%ARgYP!H8g0ro^U)ri@D%I}j90TBO-sYhAFi@*rM{0J93$P1PTZ_o%WVFg?Ou7~;tS0c7?Er1gsM24(?JvyE`chq!}w zrKtA-4g3)UfP0Xr*8qXnDHr~eRHQe+oixG&n0P{jXMO~N6yoCr%pJwG4C2Nefk^nn zXbfO_0)p)W^3YO_0Mq~Hiu^sJGC-O4$e!E~A3ze*2u~=)=if7$tATnxqxa(awKKYOzcsPe3+ygb7)4*W&6n?oB?qBRX z{1ae)!l%jt1aaiDdZ8MT_|PIj1-udbz;5nfP%1+@zp)=Ei4v-aB&-0!2!Td%N18(E zfqhr&q6qP>L3v~w;t~k)y0`0)7tjb-U}3u=gac88B2gZ>pa{>oP;8B%o#aDaNJ4x} zA?|+w#{?YLe25qD8$;U*g!ugV-8Y&-d;rtRhX4Rjb%Q~CxFLvq2mk=p|Da&{pS`C4 zw_e=;AZ3b+ko*TJQ{4ZcY>Mj+2=H&&OmY8{5w7tde_rm{AK8ALV z2l0kMd|(g{0QpZ2pdr-m=kh-}fTngo%I6>XJv9&nA$d>S1$M8Wzp9RFIQJ|7YWEtz z?@3U?NBZ~$q{zpBoP-7n1Pn|PctGK@Lrh3WFaWwgLIV5Hf(jJ?=co?@p#ybZ>U2CZ zeC31~bS8z5V3}Y!HK>&uGCc@Y1J6|3X_CPEUAlo1Z? zjgbxnb}7Uy-4$yagnNjGa~6ohhb2u7Z1T?ql-As+f6ziGM*d}^BVI9pC-Q|tycHu{ z0GH%~^1>^^1r|Xzf{$~MfV0kx>%@)w^#tcc4Tle}k7@<*9kf(EX4KZ)QKD@jqJUY~ zqlmSIhyhkUazgaN6yj?O5xVzr5TU>b7r@^EzLEv<;t~}g>lqkf0@xa91R_1cJ3WZ~ z=mh6z4d-VU&H*=y`CtJh;HiOa59CW`l*6=?eL;X@MVm>G5gC*bN&l07=oLT8H5P zn}`p_LbcRQ-6KUkK}!kv)}=Md&2_4MBx-9?b>SMBN7*5wBWetPPXzEUUJ$Qzb>*`J z+X|O)D%!c%)afMn)V^$W4#fri^GLQ0_33sObwAhlqU$5}67S1>8q* zujq$fuIv!8HW~4*UNMk23^;3npoupVN`xF1!z?d9h|g;|H4}(+h4GaBp{tt1b28b) zZWuwa7+S9)jx75mJuOkARy0EFsk;Dh{%XoTh3Np%1Kin3*3%4O{qG78a@fF>oUEPy z)#7PkYlbj!gZo%Xxwtr3!T!V$uor)gh4JxlbMtTt@bbb~{&ZMdas0dKp~`)@0YnI# z7S4_?a0e?+ODiX5grl2@CEU%-+`;OfUDjr9?m)=rZfj!Y^#ABXm^lJ+SzB8nOsuWk zEo}cu0Ab|>L@p-oW(XUA9l#6#Ox(R)tW2DMQPvL5X72p|YQArA_HdVRc5p`Ax7|lg zj#f_YCU7Sg4|fkBR%0=9cSpd@J>0FhAN~;!=(YNT>jKQ!#md4R{^Bp9y!V5(th{8L zoe`Gzs4mWKaCbnT_pp<*$v^M`MY~&hsr{qh8sQ9ZwKlVWJK2~6(Vdc;{C$hOnZ+Na zz@2~?5a4C<*QD<${yqKsb-1rOI9r(AGXo^IwDP)dL0Fmn5yQ(ELLJ@z3#p z_uQlYdjb9>?7th#9N;!ie{4xp#@Wfu-OR~d)5@LapD^IZ7;JzHNWkHRP7h7x4F+M; zL-BZmLB#aX1fJkE5IuAZsL}FaIpEcIW1&z$ow$3u(0VCGxVwL9!_Z2&L(b4B zgdkLuT|pNa$mAnZ;O)VuYGo(R!%@c+Abh}h zn(RjAYajB|g6-NTr0A)yTNZ`Y9E!wlh(*uD=JS!wp3e(^XsRKB%7L@wK9I-6K(GKl z8sekpk}e|-xY`;Sk+I(3ZOV@Y*!RKReOyNMm+u3O1D7N;U<_nLtT;q88*s=d;`u;u zBO{#9dw;JpgMmOYKuHLeV!yvnL4fDX&J-ND0R_zyz_{f>!LZ1e^dJUnknIT2_njNC z0idK)7)($n2;~AmkgcRRu8Dz`<}-mmZbszaR;^^M{7lnC(98n361mB7%e|13Gcoyt zWAZnS39qGzyR)Mc+y&SRPVTUKf2Ik)-vcliHa3`+w3O7nY;5y*^*!N1#Kzskf>@Ox z%<395wJ<%GFzgWazF@X{8GP}h=;eqQc*EBu-LPaOV`(L$7^N=1@L(Y|K0wkYl@Fq& zM~lS^HeIKgcmR_*lZ+8u>;g-oA@KlX@8e5DG=>D!dqO~Rh5dCe;>E$E3k3z=tM5;; z0(>(Nnt=#VQegMGyMOL=aUToF{#{oC%KLO*-qQ^Pp8LcBJY;{MzwqV%hVP4eynm&8 zTKDO`ypN0T8QjAZf4AM2_wCSo#y~OxWFiJiK&I0B`oC}I|Kk__p=-_;z{QdG--iHz zBgoHTc7JqmIGR~FyLs_&bMo+W0&D!wbT1#*{Q(32%dfd{=~*~iT5$pcf%_)lgPq*n zxMZzfSUCW!wtdp#}K&w@Z~axJ8=Qh za5y+v!Z^$j7PhcIvcdiq%jEAP&BPJz1p8Y?7>Ap;8^YPy9rnMFP0hi~-TMBR<5DrR zP}S7qbosmCAMyjo@4vcvcscnv-7M{49L})+Lthub{{OxrfN@wknp;_#{Qc_Uf1}O& zcOU=Tl?L8$a9KE*IoWXi+YGtx+bqoxo`4Ym;9m{`;cf!hBc~Y%2M>sdq%>rZfsz{} zZD1?HBc;!zssCh}V;_VIsvQAb38Ikt2PK$sm=7k*c5}@spz|XYyKd2lmK;N+r{I-xU8;oqnud{1YukRXG$} ztVjg}DIcN!xeB`IY8U-Dw+mIp@jtH$3e+Ofdj-OhWJO8d!4bmpB-X~Gs{m_Z#o$zQ z6d1hc3-n?k#xXo-mfN18!9>@rdyuA`M-uJkw?8*Pxn9#Zjcos{Jrg_X#-R<0SL`T4 z{N$3Jdeq&FXGKG+!AKL)H!h8Z<7gX9l%i*rw%M)Yl4ACWc@jg-RUSM?Z-H8`H5G+d z22GXrnrlV##{1#ly>-zqCqg|lTlZ9Lv58!CJ}!m46s*3S zdyEuK@*|YQ3G4(=%`Gnj zJBwhfEM-t{+o&tz!*S2_+hSB%GUFyQD^m(7{qhre5{+z|nrgyVc;xnzE}u}IjE11Z zzhjw~J)MlKIQ^WCrQRbr?P>I^(dj|9bnVCSP_JA&e6Wly42Q71Qg}DZI+-VvkCPEa zEAGYA?ecssBGhM43tmp2QOU%&Wv#nKHY*D1eVaH)2j)*u6XFjDbVZ4es-tJyoe*o% zG>PLz4^Xga^)!EX^o}?^T4nIZDBPT^YXKi`UFJ>wQ#n+!4Di_C4Xs%INg!>nmTB>z z9vL&QPK)jbFglZ#pHpmbPh#j{DKipLH-XT;5;1cjoo=%AwPRwQTqRvwwp^8H2PY=S z1}E+MxWr;IvbAZt@^7n!k@Xw)4sLRi9Lx_BeK#xZ6kfUVZ81H2c}~cvqUAOAC34SQ zCXsHMLT9A3O3|Q>dkkBPkIbKy2+9wlbGR?)E_Nri-;iYG5tpGt8l*n+F}c@?APX3h zx$wB(@`{17O?xd0%MYX8IU)IUJx^0><*X>FqrbAw#!HZKzGCJ(g1`cXGaDVM(cN_ z2a?i$4DnQNFw8J(`!>2P$=F1FTYzAEFGW%GR-A-4avydV-AtFwqR42M_Vb^o+JE8y zYT&;b_^$^3tAYP&;J+I9uLl0Bf&XgYzZ&>IT?6-@ap0`|{YC&NdH(T6Knu?(4wSZh z|9b5IJFT@EeX7^{e&J_u>i@&(>?$8g!gFQg#W0BQGhxe)#I`4=e@BNl#8B6_@R-IT zbES7D-H`IfsK~V2*OjxgE6-N9js@StrE}51rab@iRZsurmH5_p$BV``|M_=rk1~!u z)VwcR+r|A4TT#B1EN)+~Ye-xlw-1b@PPVOdOp0Bz;Y#|iTn}{bN?iN=Y+7vje7$Hi zPs5k9oO@V(Wb$Gqx3=VG?&lw0+I}>x98IoVU9Vg%k2rm{ZryI~`10Y}>DhJ1;d0Vi zc4J+R(W;90_QfjV+TUi?sqV-*cll!F$XCXGM*xxA{;q2IFnZ_3v*$JvlV7|l7gar1 zuE{ByRW6n;7Qf{R9PN~}xA%IqIDP3@I&3~_!(4V~pI&L*YhAhMm_GaVB@oi_==!+1 zzu|oIm?P)7eRjqFi?grq{tx>03-9R0ow4hVvv$$NW?zSu>*}_iPsi;!9W6fIpSYYh z8tT3snHV^}_WyRQkTgHpO5^#_fBB2iXlj#l+rW&{&juFbgY%uIM>LLajF_#OoN_}J zmaFT&wx3_T4)_0Xba1%$^P;M_^6f?4oIQMb$>734@wy=Qo!`aeH^1#8omqe8I36pdza^C||?OM<{%nWpmik+x&} zXn|PB@Wg_Ae%nDb$@?#2l+(dOrRd3o^dR&|b8xS+(k=*QnFze8243rCA{Cl~%}r(G z2~|K$@*yg`@Y3+~@R($#NzEy9M<#g!Z$4>Wb9gdS2Gh7ITrhlEEE!%}YQ;ab5L@1^ z!XKC-8N?3)kAcm|u|d4(LEPa?DkxF~#b^9u=_=glr5V)8Dr72rnp!vGV(Q7NG6b=z zr^>m>#Nwq&dj-_Wneh)B1eJNUZZ#*T@CfW==|GZGllbMe<|^f-+y}R|F6$?Ue{s_^LOEYYvqkKD;XWDL_-c4^v`*f&xK=$lPG8 zKwA)6DR^uW43COREU)FaBt!P5hjWi}6EYFX3-Is{m8NHq!$T*T9=?eZlgH;lnNTUe z`?~93yDz=eXw*cgv0yl2XT;)2UaoCV(z@&7qPp1CJ2ku;clHs*9E zvR_-M&Esu9X}2D0WCaH56Hh|U!xiNyPkr)zHcb0iep~)ynvVLm&Pny`{k>kBiwC-2 zT%5BfoaqR61m8~Ai9hlo*`KO(YG|4HHdW;mi@vu|-q2gF@o}LC zs4p7}$F)7=hbd2Xr9R@`Ug0@V&oLW#VhKeXOClXp<9aktbcQt;3^k&Keny6I?|4YMzyarGh88km;MVJ^i4-tsj@w zSNoO)|>0dlBvxe}{KC{EER8EQ1fXUKlC6Ps8>YQW=>>Y-g z;Rm_;NSb6MjhLSeX3)(_Yh>p;sL)8dw-6p`(}*WywKgm=R_erl+_cuK5GcL%?D^3$ z!yghM1a=GW^+&bDlhZ38DsXFgTl1k8CL7i+^9AbTfU4OV3{f@L=Bn%|l>b z6ce+7L{+Y+vU+Gs!1(iVMDFyyKu-0Sm+=?g%@R9ovnq;EW|W|U{5;I%;6TYF4ei%H znvzhFnaXoT7*O;4-9B6B)o;7Iw+x@$?B8)wE6rtAHmGU~EwP@a$*RH+P8xQ$+( zzU3f(lK);QAJk*;OQ zrIo_NX3Ke^LXac-Ws*t>LcQy)m>6S0W?VBq?8z4X3VIQZ)}YQwgGo1vl?)DM>aZ+* zDl@75h9fxZ?a;TT0<2JfY+Z|Pb!5s@G-1HCF#MS$`YH7hx#S5CPlB*^tH>gCe7!p4Tcks*LxhwB9mFg;V+4rO5%{nDDcr( zX=i0Geokss@ib|dPzDYeMES(cBwX(4kDrEbydq7S61d8RB#YXIVkv%9Hb`XDd1{)PL8K_lVnjtYGCVT-$T5$m zwCeNK(u-E#su|lAYyZGYlq+O`?%*IP0y#$*nY<1 z-Xj8O?82mg8#&alrmpAL%U=vUB`;ATXvajUNrsCMOH7}>o(8PuHJymHCBS;4k0LN_ zgy*?_L>UREyki)pnyDA~ILug`vc@PP>qeL?`y@Z8P)}ht5c6_=b<%0xGb3IfxxG4# z@20J$uu$(8A0$wJWDTJTA|etd&3Z>d6o+=HFd8@hi{=y6GYfS;x1><{`QK2ej_SBC zg{ZDuZl2&PvWiqe$#u~|e<|`5%NOD_%XnFj7v6|Mq$Rh!Lh@B)^yU>8S&Qqz)`0mG`bUt_+cDpe=KV zg-o@87hyIvWWK%cCYi?^ze|+9d5Q;)prbG%&p*gyok_D|S(-N^p%T@p^vcU} zAd~Puv?I^fSMw!R-!!lFAxd{`b5{Cd)>y%G@WoXw7_NiAu+ zRfS8eTu}1+Z)tL&q&`xMHLCmGQVl27)k-^0)g7J=*OJirW!+Qrn`Hiby7BCQfDTcq$SJpj zMXJI3+E2!ZR3)d5;lk_oBraqjzJ^$Q+V33v<+a0Ap1gHiWw$$e7*_F<+qF5Ibfv~^ z%ly*JUfc3x#ihDsX^o>!rttQAU-MLb6Bz-c&)Wm+Tz*w5i<()WN*zD$25c!gniD+SnG9zAnOyjd={&DkSjySMsRPi>Fu}Ay+dAmj|{V1u>~KJ5OtA2 zV5Ip#nym~o(0hdOu5xKWts-aqOr{k}#>Il+T@0F#k~j`krbeK*f9{hdT_jEvb>}sS zDXYg5j!fZ{oK8C&-gKH)T&xan=wwluB;{9`WJJFBD$w}9&(YW@l*Dn%QYke#NY28^ z=as~R!7U+nO1?slB}_IRZ0oLqUp&w+US?c?o_yjxw{+6Y9lR5I>*6QmnW@_OrETJq zSqn*gjEk_O57%$JTIW0e0nGXye|$|t)jQ|3WKRjBcQohJ`Z*KsA{e=)CbzONuZ}#7 zi+Z^!IdmJs^Q1AsLfe-9b9HJrAz&K9GgbNz%G7RVZ+Uu2X)a&9jp#6W{VQOCcL-Sl z%an8{P7-(H(F6ETs7uqbi?Cx_uf^5*s^R?QM7-0QV#4?Bk%O>0;!EzvO{S?N;fHAA zRjWgDM~P_u(gHnedOdRa49Aaod3|3m=VhXP*l~2ns(CWu!B!BFR#MZYSN$q7B9i7h zLe$zW3?CVT`9Sye&eh(T^35Cx$7`=4(TIaL@>GX3Xp^|8Xsc*n`B5Uq2i4U!#48yoQru=I6FsscSjCa6WJGiiF8i-{2+U(aqAt%DVqShCa6Ac|Dyy&wqWxU|e7VK{ z%lP&5cVE%%-xV_>qG=*zXk$AHN82=mB?Z!2fp#Q@a>s3>oy~#D zX2e9=vZ}Y&swg!_{4Y@iZM`~2(XS2e+D`(E(exA5wRbDKuWky?ATx&DXKxlx?))Nn zd#h->AJWlch$IMoNzz1_(^)OJsy@aRid+bl?OeQ&!0aaR)N4_4OJZzH2pTP)Q|jed>_1lTZCs(Va&IeXI>N{E|T(A|Tm8OxXwO~S- z($Zb;JUu7mM*!tr6={!y@zVN(lJTm&7v4w;Say%x^?BLrtV?8#GLr`nHb@bVaR*=@ zF;P)}{~jF8L{kt|+khh85Is4B#_iW8K8hb)oSPRBa!EU1BA38h-j~^up8pW^GXZYJ z=FRv3f`9kz(A|iE@6fsTnTq`{aSC3CHmCZ6dWqkYVbqnce{=BfQSClJ7e-@c9sZvuH)P5J{r=kKkZ9+OD?t{df-MoW7hYCgWoh};$4(~69nehUN14{aEIcJyTKi7yx2 z`4+!4W{FrPWKD52NfuDOCFlc#?Q$Z84Z0Ap4J9VOe58OWnRp7qSHkbZnstatIvG4Z z&aE<6l~jy2wcO!hNIie5Ea&!?Zkx7E=&Q8$CAWF7eEITEo&@Rau=w$g!X}dncOs4j zqpiN?I&Y}!jFIt-r7 zXqiHI4q-2Fe#GWJv}tHXZOE7@^18O%uQpTMD314y_PF5+9kkv;r) zYA9*E@uVM{OD9L>vDXwqPtLuCzUoq@BoyV;!}mBI(pRZ!6RC%x33y;~-Ok(lFm?xH z%L*&Dn^V0(KQ_56jL89ueu&`dJi1~I7>JwNTqk+3GG=jNzut)-S?T5GImeEN&-1QY zkYbgMn&*m1%)XY1VX0%oxaWXou>E=L-MWd8>-AlOXTLyDV3^Y)bu{Iv#%|diy8T)YruqCIy{S{$y|rPmDU1 zbw^R*GIX2q<(t)j(@=aO2QOw^+UP#))is^#xP=8w&Qq~l)uv9N>kl@Klq^(KkUN}; zxQ5KVKI`6`>=2#FCVb(=)0QAD42_wuC=re2Qw7C)*2oFejUnzNc0`&(Qo$4wh!yN_ z8kq&|ue><}o*ot08t&$hN1ckYOfLCGIG@y-q^BZ@znU5}LGsv!7)NfLeymS|oIAGHh)5GQo~# zFD@SNuJ`uF=o3@o2jUbC3g~=~-*xnRR5jE?%1~@LYO+3Hi4ZASpb4cOSChHMNvBVT zCek-^hhL`W5YW-lF}@7(W$Yet%CLiTr2NoR>3ujC1Rr&`b#rhJvttr3sPQauy>%<@v=ZTy*iI}nc^fGuQccTz(c?z{SuZ1Jf$!YB z4{XF^-1CO3o;R5gov-!7D-6;or(YrVL>~-8b_QQ|hwyx6s0!wM&{Ir2J5Uy>F4Gp*_@=Qdf2N@X9G}_qJ{7+8=JAjkui8wS47&6=ZqYpURy7^Hz4xlUAAX=| zgTdxd=;;X$(tK9?4*`vSo|9A(f!x;Y{Tz~a-*U%~h@M2*6wMm{>gSm5^Pp1YdaBEI zgPG99+GtoiS!gcKgTcEt_xAf_n`@Lto1u1&vtQ4v^!Sl3p2o1JHFN|=sQz|b7pXsM zEDKX!Eg0$qj9C+faK=7d!!K$JTk4CwK~MM^)oS1>Osl=iN|qB~C5{Kz%6okIyt*#` zr#5l9r9!Mu9G}M{&ZD?VUx|psZ`f`f5rrvyT7q;?+GW%yXv#PU7iI!NOn!p2Xo!)` z+lG;Y7uPL4edhc6+5)WnYDKFrY^P~XkX}+=CRo=6TGZ}WD_+sbfF$}pUF3A*>9rY3 z;dNd~i?rZusRwfmvqtC&>^Os+b9gIkYG*5+IuWLK8hj0>1N-bb5UJ8&34hO4i zNk1cgMWg70jvA4Ve{dV{a@!PxLU;8?+iSzDS}=)h(ED)`r@s1TsrXKHEcQ=WzQ*9g z&^4V9&J`mYIB(-!OPYwdd~0mXoh|f~!G>2)s{e3^4T)~60H+6;5bFkm2GiEXheIE| zqWAM=Xw+M3SE%vt(JU+_?a>L>W=sV|9j*+3zMx9$7dBKPdcgI?L|tj z7>tro_Rob&W6``yeGPo5-Gmi3Csy#n5^@1CBgt+B7Rai)%dLH2I!w+~)rFEWG7QieC=7|nLL9kq>KvF{+pb3?)>6MMdetq_j?=N_r0HO7lrvwpIf&oM)%7o(#+CK95Hp&yp_&W2fnCzSK^O_JZic(~!OyL!W*?;UgcN zifCx48qYK$0f$;x3X`=S@I5F=WhF@C-$@f(;acG!`)VgUuU{v@B8@%rI#*b4Oafia^3>aFTGdb_%_IZwY$@c#wX_}+omn(LX3hJa67%)I6f2rGm``U}=A%}KnzoS)-Ln+-lzS5A@TF`;ivSj`AQYRq|pO6w3Sz}<<_M}=JlO!Y4ts4Wfb5}vE<*I0fmSk z?wS>xw}Ps}Ou2z@M%YC#9#-g?&uG|l-;ogaOlJQZio+Ja6ksN;{3y0j4>YIT;;x$kP{$i}PkXNQfv!jBg2eeO>58vl)Zf_~p+2v_aLr>6T?EFK zdlSR%D3TnOFAWb+>TLV0uyEdoQyG3MEu@T5_HjZ9h#3i|MiBUisaQk0Bii>)=z z7srf7S$+@_-bLCuD6rxno|fmI1`huE?5{jS8k9`)iQnh72!86kTCWYi5abMxN}Rl` zvYgUUvxL@^J_N;7&rrNd{(|XN4%#I1iv1Vj%(>*9Hz&&La@=#OaeZ`PC zHmh(7iOU~(T`*~7&@kO^_@NY|wQTN34SNXcFsLcV1zfWfEkAKGo6dj~P51R<&1li1 zKo@&wqD734;CZ?LpIzHZlE+ORH=~PvPsO=6%#2Hl_8Y}*!$ zASIYc)P1IlpW2n8+#2o9Tk6WnqxR#(Vl*R^u}3XQS&Eichrn|5Fxaf71^ttbkO&rE zdS&YA`_YwZoA!&G@Kk1<{(e|f(^ukB!u%3E4ReIF2eYS?9EPGD5tCY)l;Qv*ou)O2 zL<{9fOUtGCjogQ1rUcBP@D#fbttdF84Kbq3oc&s|IIrH@p|;;;Kecp-FSM!Un}}qb zvv{o(XK6#}XW7LPn(-1AWD7MCg-Vgl$!91&nOIx->D3Y!9yQ*%S#>(MV|@1eD7tV1 zoIyk>_WQv%@71Yc6Km52mZ&aS2DbG4L^CcvqP>0+ukqK zN#@Ybu~!3M%r8b7AY(njZ4p`bQJdCNav`GQx_A&zO#rDbLXzNrGB2wDR@q-$6fz&( zvmj!Fo5fdYR&_^8DI>8Tvos5VqbJn9*Tn})6Rck9`byw94$)7Z@mbBhTF&v)?N(N2 zWk@ntRzl|w%~WAXvy{pjW74oNdac9*Q`7}HsA;5zmOPnG8D(V2nxn?OS{3r>=3q=J zBd-O0ixp~|@JnfVij8P29DXjt4jASJZqA(o6$fr|FNp3>+;9**q+ zB(5MfM)!7t6GcT8s)vp|6BULvsRR{9r7Ig6ulHAa44$I~<}~Fs}zjx8i%#g7FI<<~aX=KvL^QyhpqAQ-sn6qmEY=UARsiQCE|HUDY9r$awp`=vI~5&z;7zlajf4rv+BQ@3R*q z1>(t*E|q$5_bgWV7s;DiQtTW}QF?36R|qdh=^~R)`{O70g<>rAk{feHsdLZRb6Ib8 zUXK?tNBGoYODD{Rwk3RLFM1Prlpg6@_#NJCD2876xudH`24`xid-PnQkwy1iA5@?f zB;H>&n`mQm6#Q${h|?+YLb5c069rFlNhmnKa{YqKKx62L>@7ijo3iflIG>_f&$0SI z>sraG$eLw@FjNUwBFSb&pAK<3EpeyyNOnQ<+Tsc)jy*V?rGUY7&dx7(@+xP=iCHF% zKMj2Neu^j z()x63*^Wwl)vr9o(9s#fQu9jlYOi|6&@~X}3`;rOLD4JowYP4pSy-seN~buqy+tYB zIV)ILFrZqmAKO%V)x%@yeH^*@Srgw@K}H9YguLY)VQ%N45E5ma|LRjA)HAl-c(W=G z2TW}3^knptC1_RCu8aeLteuM0bDxhNBP)~RynhtgTjxmJ38c|~b@8=b3yA-MxX4h| zs+DLyL=M|GdM`6e&k0woHo_FM6fBv1+#rvpJeI)G$`L_%>zSUX|7+BsP{6#B>|Icm z=JRW;LQjTxs2N{$ZvQoYZc!2D+Zn<@cY>;AqhMT0zC|UWEw>1 z(v+l_HhEsY2M^@c@W=L~BW`4NrROQzo)=81hl=}f+SClf^n)h|F-dp^eU&IrC zC<773-qb^Urcb+(Po=v89xR@<5BzdpR!+QiX8V4eO^Sou?9NVant)Do=Rlni!#CQ3Ey8uy!`5|Pj}vBNg)=)?J#QILLXPhr>hzI z?8{4rm1t`VorsN=yK7B_?MP>)a*$?!-v=XSPv1Pv@;+ko#*wW;CqP z-tx|Im8b)h8**Gn{Jqnq>)KIPo3*Xug_PoFHX>i2$55Se{wnqqWRxG-S-g3#B>$zS zb(h<;(uJPKMqkjX65JE>(Ox7ty~=jGKgu9xUGn6v?R2-+!xfn@_^D#hd%9TVkn&;nvuRdK&K+cP=7-E(_7NOt9XD#-Eg|bZuL zFGO_^6U)-A4Ae3m-dqL52W|W!r_zf3UDXyeZgEk)=(`gV{#i5OCT4OtldSW5cfK~6 zmU>UYLmBk#x1C8MYOnVY-V#PwcIG_LaRY?Z95gw5zqH)33L)l=;&x_N`l!9 zxRu-Jsw%|7^!5sr8(h46cZld7^<~*_E*ZR@;XcZ=H`(-+QwgVXgbym4(PXx}8q&y}P%tLsXUbAHM=20OW(F>?lY2qGX!5XcIq@7-t%03 zRf9Y8LgOcwx^+eCPeZH=vpqb$divi6ERc1u-g}x~cUkXGp+Dc`nn&Q&4U|BCpJoN7puWIssYU6d;c33}!(Gv@lltCyDC>fp7MRx-b&cT?9c7$5PPPhob-Xg` z1dGh^*G(`b|A3yAH=OSFSQH)*=0JH2IHJUc*)dRFd2%+AE@} z|J&nitJXHxx2_{ZtF)sAk32@ddv4dD$YIzVn-=4rD3E{tzCdQ#exj%%Rs3O6Q@4UP z2{hZNrMbn29R6N9b@dRx-max9bvGyh0W-W@5eCDmt3LdB>QG&P}(xBCl||tOjsXA6VdVUSU=nRl-4VZUf@hN zL}zH38p1LNbx&@yT_O|{3z)DI*L~6^%yRCAJl#Ar{Ik;6Wz?M`h?}Wovzj|XF z2Md*m)sll`6iW?bL#wyAHia?ugVnVUK}v1Lwf^jpw@3H^EEtvT6^n(CL+LyFo}wW4 zT(;KiGSBAAN#PGKl@Cuc0_nUR-jn>CGAMthY{`t@oGtMK41G|`Fwk9YPk|gWTLxjC zph;vuEO2x?EG~F6WoAlBIV0Udl0c^Suuw~eu2@l$4^!0@Nje6ffhnD}Z<9sXO{NAD`ql!p$FN)jp=V#ZYn+aBirljFb3|iY*x2HEgzEU{V`Jo?j&tKju329SuBPq zOcF^mUU79EX)}5fl&?`C_!t{U??BwNkwy&}Wp+>nmB*P@UoR*lR&YFbuR3nOc$Xu` zZ+4$^6>OuRP<6b9Q1lDA;kdu-Ju6puqFeI#drV$YvOM_}d+uL75vt z#tx4IK~$}%)YCzu&6C35WvPxykpRq?yD7q|bc?v$eUiaPJWyNrr{_mz1LsArC=?VL zmf#n9O(WnBj9(buVIfzgx~ccDVxvH70^_uZ)G_zN+WQrT+9X@UowjJ6(K|)?+CE-s zS(z98ojC$h;AtEm!9l(q)ge){&u7rq1ThNT{(w3vCe<{dCTYEAc=I%g`1#lt9=BL~ z#r*qxr?(t_=#p28@Uj+!7Hv}SHi+L3MUaK=(KUmM+?XCYacGNU-HEV0Z4u1VM0fL6 zywoZAOfZ{H2^+La`rcBnuv`)u_=7JJxsU;$j_9weyFCmUNr4;jcVf;B-@H4|??1lC z9};_Zv(Du5+otcf;YCH;hP341^HXJX3fSX0jP&i4g&hBMldy<&F`R}mwH2@AcE?P) z3S_ZOZoTld*_lL6Gr}XA9^zXhKSSUSu?uW7!1#(G#t$f<;KLnbNb zl^&_@+#PP(RJv8D!0uy`{w)lL>-+6)5d7@n%GcFi{kKf?4epInvh9I_E0>aiFv*)Q z+ap`(F3?5`G=!?O7PfA{qv1BqD(6i3yTb z*U_!)2fSpMt=MNS3QVjZD1LMt*{#4g2moS zaxmZD$R(adie~Zoin}x<9iM5a1L{45Ab0Zdh^>tONGr4+&hy_;yXE}#l#*Ev)}U%1 zVxE-1RzkFiCS5vLld$hh{%r+5R;>4_>4~H-v=h6)so)781ao29*Y< zgbSM~vDbb%s9x7e#aRgmOXt6gx})?UvBTBG2C@$|YQ;tHs8jk(;J!m)4(%A9x$kXO z*Arg9ck}%>B~L4DT06=Jrz4s3S}o_^{z$z^f^y{|(3MaG0nP4Pvc4N=$Z01BC2=~|V$?yj_uiXF zvv~PZZzvDLaDpcMEdSmk7n!Ia=$Q<*b<8$gA`S=wjvER9oZC$Qpz6r9r2Qt?d46_G z?LrEV+H&7c2{9NuQ@s+6_Fe;`u8WrqEUH+6RUGVA-2O;8FsDHZd^i-jLIJF|a+qj~4C3PVD1jA)U_@f& zrz@*8MEIX%7|^Bc_+6F5_=6vRE>O9~c5M@+w}NBJO+wg|BtcZdqXSK^dzD3}Xh6ij zgu#qP3nRyWEG=OLI7bini(gTr?Ck0C_!uNfWBGPrI7VBnx&wX96x3Fw32tlHX8Rv~ zsr|pn3MRxoHz^3&B&*y!RfUZO{~mYK?D@auIB`5ZA)C(gSFPrGS7tM*x0aD4m~<<} zWCqx%>;ZQE?364IB9%j%IOO-uwYR5rn+l>r_OKiaZ3kaT=JqqX*3#0i%y+IUc(-(# zAb4hBGa;DGE=zslY0Ck)9F@@1f?pC$E$g_N+%8Ohz!R&l+Ktk2e_ zTk1rRH|yN|3T#FFoFp9^0m-~WbJ@cBAN{a6qz4Rr?{Q%JQxdaiqA|43xBp+R_ZK8w zL+;3f^AI&J8-Otj%{AAf8^V-EFDj*^(frNHP~bfjh~423kTK@GBbiJ^Bg$=4@#SyG z)OXCRv+7YG4bizA4DPS&46lT#gN}(fbN?MEW^FDWOOxrGEmtQ&6O^=F2&EE8i*iXQ z+ODd-5XqujZhZz`F1kaLN$vt$I zE!S#1fpXn78yl_qn&(BMid3aL-^A!@s@F+6igH<=D1AjLwH%hXylyk1A{G--dxGgo z+e}cW40XTNvjV8fSTqoJ0O}HvM%YuGm!S96Yg5-&&#HYInjzJx1`#ZDbmo}|L?52Z z({!k{ICe7gKY#tNxH@7@LfWCc3dIT<7L3aVL6B1*%MmorG=yYhBO}V-ca_b_wdASu zrJ*@MX_~a2IB7sVc0J@o4lddlT3z&eZyt;M_{2+@%tYCDeeSNH@^u(&*fmSeDvFo~eo=?fa}rcQ~Ck4xYJQRiuztoT#9|z+K5lES-_Zx4cfF z+=tpEGDBX0)9NtSpEI!ZwtiQ|07tv$VoSQFA?;(d&edy8DuK0nloDzp>#sR%l-T{J zz=IYxMIIaVR4?Sm3UTnHbJCLzd%b2>UPL7~6X8E|x$GCM?0q@z-3ztL4q9(TybVFf z^+D_fR(%t<7dnkfwRD#6<>J00g-Yf_%f=*aBH}X{%9N(}e&g=8WHz2VC3K#hH)(dp z>!RD8CRaZ-zV}_9v^0)p0m4jo;nEHoXpT-XQ@H68~oZjD*U} z2mxZ&VMeq5=NDS7gR?}Suk;?dRK&s8!Yp^BMZiOl{xk!V@Gu4d0hdN_mQApx?{WQ7 z1C`Fq^>aDl^K-cr5u0k)^>JM@DeH#S`8K*zP9%(-b7;fYtA-F+e zwU`l{-tIH+_v`9e71h^~9Plkb%*bJeU@N}WkG*N!(7cN*tGFMEYr=H9A9ewGM#1{^ds-yXtIyN8nd3w)P2WR+JU{>a7phEyMV_royGE)!SK#E~|i*NSu38B)C~iB{G{L%DEzuWiP-gAU>^?%1Z|DNZ~fTtrf4;ac|W#;HR)=rS$)X!>$rea0i!4fd#dEV#YQNktV zWl$J!yqUyZ`fO6kF2*)Fktt>pO^XNQg&33|S0k*8^LY1Rc6!d|Bk`;E>ov?=z-rTm zv>QH7xH%gC`q$6+unSWaMj83Lx3j<4xNA0D@Ay3!eU@6hGG=ciaWdS8ghKhoVJC+E za@@IXmWh%%j|oTFnVhxe@-6xdGK(yKAO>vOIASP(w}nD^e|+rR!2`wZ{acM*a ze=a%V+_)tR4U1Mwvto|^PzTyzQW=>ksa&?~zNQ<_3#faaosmLrQw zHSuBlQz>a9WNdioe4&%4_$jV6)>DW4K#xifVdTD)6zOAz^MaoYm)rQ9YJZljr(ZG0 zq%c>q&Y_kob+osj)nWxV!41U~6Xcd91?G+24v6rMqwzGjN26bc0S$lV(|Ph$lEt*) zAz-Nqnbr~^2=oL|iiyTU zJWcinFTMHhR#|19UdX6x!MZl8L8M`arHu%R-QZssuqG9E-z$!03E1Cu6<*>nzoxQwuo1?cqF9GVXjrhYP?qBRa_g}Pw15IjGv~b3n;l>h z_g8w&SZ_f+YU(Zne~>&YR2dIc{){7U-caQrM~I}GY5eL^(=elQ^x_QucD4*Fz9q$< zNV2_gbHp-vByc!pTO(p`S^=dL4dL;-J@#(tl0p39vI`FE1*32s3Gd!gvkC)iTgG(y_WTmH{=K(fcC|^Hyv~r*#L_ziydA_ zuP@dS@D`SQhA}WN__3OHx&F5Ugc#JJiV6yIZ)xsp)*u^{yCgOkP>_jWR7Zw_Z<&y4 z<BAuhbc9G@6kf);{S>@Fh=n*U>=}LEd0xWG zl80o7rvebo`DQ<7mFw&sGz?+swHx~0jMj@Q-L1$A<{|oLCw_UuT$Pw2CMx2bmNF4Z z(k%=iSo6?JMN{?&^15mQCU!(EPEa$d64b zUQDkMNNiIj#6v z1R@mtSc(977k6o%{$r_<`y_O0KMZ)#qDaQ>RVpPn8WV+n)}<&*B=oYcy-O8sO4Vez zFpgT2i=n$nNQ9wz7D*(vFK*~Oy2YTdjYJGWC6E+DPz&jJZwP2YQ6hg|S>#UcqvC&U zK_ivz)TBmID#iDn=Oa)`6T5+33XI}y5^_A_>&fI~j5bX<0Qd%j( zf1fpd=9h^Z7{=(}=WQO`WE>K*UXt6yq$kN&+gBjd^99C8uO({WF_GAjnZ~C32g#xM zHHd7qn%>o%U!EmOH7Tr$C8wauB5^u~2)Sn>awL>6sE(EdYWdp~Jc)#-FtaS-G}Gfr zCs36V+LaSS^y*BdB?32kz8%UbQ;UUix=Q4Tn(&W@iS2yvo&7Zc*Kipu@^vpl&CC`c zS`jgGM$-qhtzb>LaR|rP{#W)TTt^b0Glz*h&tcffeu@rOtDJ*VwhGS06v&*8-x;Ds zosFYbUs&f0I3<1n4vu&9=8^l8*6QNCqofO9lHL?5#p>|u z^SED|#G8Di!l6WPEJ~#_OxVIy9aVI%m8GWXElDe-Kjmv|og!zNv~aR;Hr_sWF%-dK zIepX7s^!zv(gTluO`+iDp@P_3j#E)-}Y9_3A4uS+-g4vY%OTL>Y5O%y>2 z=G`a;blh}4S9$!K{nBZ|a)_}=D60-nrjkkKkojmRNgzgA@Y*J|i52CDh&FNRzg;@uroOqmlz;CH0jn#XUIZl zN)P}*P=UWESt%9gt#KbYsORwC*p5igQ@VSD5#wQh(%|1|Z`5b?Op)tNi~Z=4mY?=L z&#E`o|9-F^mucXeeYp&{&JDQ{uMlJb8QZbcS$!;BwYDlkKFjwLO`v0+@%JHPd}AM| zO$uyTPJEm;856QimX&{>hM{G^JqVR1e^MBIWMsNx%VJOWCX4kqj+O5lu$K`KPEN}m z68JLJ@;||kQP_bzh=5OaP3#gr8dLUYl%*TbQQpBt3L+zcfN61@xkXNqO6`cy&%M;) zOB?O>9EHa(bOwjmcpwXlVmbvWSX-Qh*z0Sv02XB?b$agN-+TM&5$V@tj?08mtB~+f zV=txf)Yd|>pM8X1MtquiL*JdioncRjNQTGGDK1b>kLT0>n7Qv1h*Uc_EG^U!_C`5? z*du4a)UA?-iHS!&7m_0AR*DWk(2zIK0Z<&XQj@`S7ZLx z9U#4}+pVb%gVYhu>y^Bins$JDXZ@pL87JAEL(ks=M7tCsa? zRLD;2c*vS4j(may(D(@>g=lY1B=MF_P=SJ-}H>x!R^qt2Bk?FX#&R%+3K{Ll8x((e< z%K*3xZnh?2-;aPU(DMEeV;oJc^0eU~znlN7W*aK+N%moz z1=NtO#)5+zL@u!+U+(XUV%7i;2M@)|*>ZPlHK6085Q2Dwt7!JEN~AP+^XqBO*OS<7Qk)${LsR zT;+~ewa3Hh+TqOmo=cmuK`I^g|9`=i3q3FoXm%&&*KE*VfCw}o?D+wNQ|mz}J9o|{ zg+-O)?t~_<plr$GQN>!>;liNerw3Fd9L@|1~qLgTC6&OHf7=#&%hB`MKHPv|MsaAUO<$c2&s zga#hGOzhv?YEJ@(lOoTjkX}&b519J|Cit1;c(j!`L7cAX-7MI#rQU$@)HE};jtm)E zc7Q?u8gihu#kKVpN!Hk)7PkPSXaj45Qiu+M%o75TN6w?)M=nRooV-HZ?%cJX3)UMW@Z8? zgPS`QQ{-wRA2h+w3G=`yKu3y+>oP8Nb^JOlSInAaL5M~nQ;!{t9|S<@@B!&T_qF>9 zisKDZg84lu)Nb%F0muZYj>Y8Uc)}M1gK0FoEVjsAG>v$V9&32g9^M!xH@cjJv&K*}E;=__j8BaqGEjhzuNUGSX#DQ zro{2)FU9~^f=0NW9ux>co%#0hzd&x6e>i&?e+awJ+Eku7^K%yFw<9m4v5XuHvTsnzMHs4D$fRbC4<55qX{D{ zj>8^iqVFjsq&@ASr8NU*^%U_M8(ZzcMIvq!bX}InD`Z)RIef8o#ziDMTJD92r@&iJ z*vQI72?qEaJ(XuBml^zLcKAG_rRIYYBT4`&sM$Sk5&lv46c*{;&uZwx0yQ~`0EkI1 zTIb#5@GQu5OKe%E?yNpGcY)@gXRvrs;7jsnH+O7NQ~p0)A<@{E5qeKU_~3IZ$f5%Z*t{=tEg&0VojB_}?eLsOx=C z{s>@ArlP4UK1%9l9xQSlZ_#EcG7{)d7BqR%t~L_sUfX;_^8ye7b2zwT2ydcTuBetY zz}xZz7;PYGA~xnXHn9{1huGuvR^Q6qu>u$EEr;pavfwCeZkw}iookoq798p(0QEkqKUpG&3{mEHjxQ7*f zO|5HY4X&Mmgi`3n>ls$hrngHd9!VSz@j;;zADSV1ER z##?@KoKe8<5A9Qw;~~t07$B@!H}`u?ZU%wn198T01CT^JyY49OqP&vVK426um9;j3`(takCu z6{Zu>b2_k3f**h8>RphEc3jeO#_ai|f%#mhFrME-+OAf+&!{lZP^woTMm(7$5@?=Pn=a%+78%b%^ssqvvZtG)z5#-~ zMU`3p>q$II+KZhNg2z^U^F+P;;qC?(ukCPYiL-R@DE^9(+GUSOK#i+PVM>TxqJkRv ztdWSOsMnLSRac^v8H4Tx`IKmNH|{XloeOPOvE|bgVO@9J(W{{aj%$>N(HYHqzDY+Xp9m zy$SIUTJsM3&7DL>9o|2&;L;_)>8D6-3NT1~KY_&F zc{AV~?807QIab%J?n=caVK6fZnKBhREhq3%TT5|8Tt4)6QXh2lvc(rI z>Bqc7>=>ZlzW$Gz`&@U-mYkjo@h~R`pfGEVpA(fKI}K*)sq!{Bp{-Mm92|&?Xd-2Q zFiXY~M5#c*6ARix1fW!iRft34{!78kq>;gpWhbxXX{rZ1QItP(H#T6x|7>JTkZ-q= znH`)P>6c~iKyi<|=JY2u$^=vquJ6dpo*3Lq$GH4dDHH&xFP z`^^MJL7B-}a!`?qY#oJepIaNR;*RX~@uqIYj+FgvHi=pQ8I(lAp&=0h5;O7H3y0Be zz5X4nyvm0w({T|V$NbjhtnRSZmf7~Y*YD07;DEvhGzcJw0unwaP(>6BTD~OC#WTVO zEZDFnd{_!oU}(aN#bviG#~KBy%nnVZrf@S@`*cbkG+nwPHdg3zE0IevW~Dgp;UERo zAgt4p%13nx0Nd8=5XO*iJKD5eH-vgE@lM#n3>nOi7Yfm8@|g_(Nd7)X|D=D*G?0vs zz>vj#`y=$XHAF&0`XWr>WIM+53@M+7i7XbO3IXU-(qc?7Q2JOKTrjX{K@4u*7C5xh z66NK4@JCv`XdkmU6j&c~agc({0B? zbNHIGvA(H&&V+YghHrg|n{~R)D6zriloVAITV&y!*C0-`0`6h`0-X>Ky^m23bK)S% zAwYq}e6A>>wq9I6Ptn^`WXzwQ0$Yu%EN6|`o|}W_Ty*;Rlb(nJ(+`boPw3vs?;iU9 za;r*dS(rUxieENa0@>)i=ZJp`y`f+z7f*d{0E%_~ z!w*CdIkT*UC?YCSDpeAtzZmsA>Yv06BA1A0FS$=VX|sQPA1s{O)S;rLoOGZQsoeQZ z_psgem_RdVCdS1`S&Fd=66e^U?OK3~08J#)z(0wgIn!Q_Ea$J!VjAb%_PkKvZ#?K5 znfI+nWuzva&5vi->bU;=&kf%!uX>v^f($X4`+b>oae5?FYF0H9Fj4I)9{$iq_WunZ z?RA7i%rLMTj877#*orY;5v;8unh09e0DoHmNDl3x`#fHgwB+yplzbvMIPV2H+NWLf z7_tZda$5bR8r}6;}4>(1pz=+r#vXCQCO?!5X5}6 z;BZzWX58uWjOyJp|cB}GlMp(LQ**4zC;pkQEbThtIGJQY0mB7%4iVn!wP@~ z48~nV50~Q?jWqa3i(p{v_rAqj$wYn+3BT#5RPHfTD}A?8p2d1M4c`b3-6DGpyF3zMFB!QKn0@nTQFL<4g`YdZRNr# zN>Y^c>S$I0!4!KXBL5;QLsLtGGnNDT>x_Yz|!_AWV`b#|!51{QCPP zg0iy#hILN1Hg+ObxQ0hd$zLj(1FXV_SIwtrnHwE-)Wd47PCh@k`gEY=2?!|IMw<-v zYO1@j1~e!z*|Fgb&?|ZD!+7;PsoZzI-K`Ih5_40wPYtV4MdqJ#MA&!coQXQE!T1sO z8$EHFw>>4gEI5{U83dOi3>LT3OT)}-<=|WrN-R`xEjOC^Vf-{{K&jXsWm7Wh;%flb z-Z+j?pUTRT6XA)o2T-2eEtZ3=nBX!dB@#D4mkdG9dGrHdRDlX;-~_-5#lXoQTg=j{ z%ZXlGm_*J4Co3wI@JpR4u?T6|V=A-eBmApD{rqm_yuf8 z)FF`qSt7FqWH;s~IM0Hwa4gcNJf;}sXK>dP7&W6CTj~Vg-Dj}h>ZHjY;HhUO$5$X7 zc5}B!-l@W_uQqL!mRWOwgpZ3AAjji4y3JtIpN4)+a=`sdGooIv-#O<-{Zi@a5VdO3 zLWQyVbMQw6UVT3DrTv26z0_T?oWG-CdWrym^%W^Q7QJz$`EccZz%{CBHJ>ApQ4}af zQ3wW}*L@I0+47A6Y$yctr0i+3$s_z^uzITc6al`*b-NeAQKk?ysGb1J%z+zwgx{GM z!=*A9=7}DrznHQhffs;bkHY$*5IoWFkPCExWnefPJ4-SJ|)HkqxV4tGe4e}JerL{3ngDYCZ ziL4i&uE(+D^G^MmCtX2fKwhywrHUB-iNculq^J`op58jV&Vmk$G|xw32ht9pJGP|C zKi%@KfRfd)$Ro{@xDD^9cgTt$!3*KS=%1fcrJM})&Q zY@YymC}Ec>)z{s!<7NnSH%YGK6LFVPykB-I>b;4ASi=7TdQ;3Xm{AaN@CtUHXQ|aD|yqebCp@$ zYV_2u&~HwJhQJl5Z*tR?kCKIYv>iYL0%S}bGbpu)LzG`b0m$V9)I}&6v$r!zlK})t zaCOPy>h>c&vZ(HOdo5PYt3&VZi24aofrT{&AJ!>iy z!-f|Qg~;Ux3Jk8FnT=+)?D*;_rVRrSsVHMYlvNc&Orol)sHy^`R4Rli7$p@4;pv#- zIzJOzkq#cx5T?P15<%UmGshF{7=uw253H!ccjzjYzDT?Mp}AdcH9Pglmmh4er|URJg zmp^CCZ7%iP<3qJCW81Ro1*`m)oiJxFFneCTQVb8ziiazGc#7Npss(%2M^)Hk& zuW!06L?99ial&70?zI`iHPT``vUB&LMg)|Qe_8_;IPwRE_|3cpZYB~P7xDcE`6`V$ zRUXGHFB#bQE8c7_0nk+0alVN_Ru~w_J+`at=IKFwg{T!ksS_p>^spcO{rOjyq*W^0 zsMK;N7WuThD5yjbfj8-z_#0DS#hsJ2pH6iAFCXgbmDcR1jT0iOs;1ZdV>a2oMAxR2 zm4Cr4)T)QBrWY2Ut=atiNA7z@SFKYt@m&@vBkvJx};4h)$1MR5Knk4%FE68a6bpHGL$UikKK#~O2-hGrCM}&EI zGgp|ly_sG5oN4Xi`TL8%# zFZ*an7r7o(b@lW@%Gd!sDBHLF{ae})76La0m;Nk!Vi>n2L8ZF({T+TvvLX}2vAc`H z`ct|IcM0GP__ASZRwCSu5=W7>BGhGwZQOZ`GV5zP4>7!T#eo7djt?hKt*0>^h=|kQ z99|;EsnMWvBU$*a*cfqI%zUklv!^6_6avecfn-#FPdw~r?n+uh(fNiZHpzVbjxWS`sov3v8q z$05Y@HgeByeGop)x}8x-a=y?|F+AmQv(Nk&F8f=XR1nABTH!Z$C1GTr&YX;U&mINz zhJo|2lXl6iy4;2gM_f+nbsf(c6EK5!)8_{Z-ltJG#yQ>Zd)M4sPlWgZzSGUS!r#Wh z=;;oH-sFWpuZfBgzLtvo-~Km~T>eyPi%b-EVb&_Bs)EK;0%Y-s9d1whw^$S@?+yQS zxnugipdiIr&6rc0MQe_QW(|t~%x?HVi`)y(cjJkl)c*=qqk<=(Lp-FMnKEq8n3K<^ z0-bZ#?mevh|5P!~;4m^sGwMYmf=ss5nL#eAi@?c4m+>T&WUW~o9t}W!ILEWIcHyH4 zBk#|dag!3~*Xi9xN46d+*$*#U$EVc1=XAonTn6AzgIg@P8H9-2I=cdgHCm@0{zC%f$qP z2Cd7n7(6d3XTt&gJyc*}9el6lr{0I=f)Ga=Dd>9mD_PC&oz7omgWlZo+botwCV9Hh z!~jeuP91}o%EFo7mm6p@xX?w!X9ercaQ)NKwOTGOGA?Bpl*};MF7W=Y@X|HJR93We zN(+gI&egBcg^geNQs4AGTSoDz>QRJbWZVu=hcrwqMjeMMChRY(@CtgxA{ma|lL|*(*rad5y0z>c7W|_T)2!JkR|&I+~4X`d)EY z)zL_*W>S7E_6-%4mDP7}2qvL~%MU+i6sRS8!Ui_#F8Sn?;GAd@NeBc+A6VC~$2 zw*{u#q)%Fy68aCf{tmP^z2;Qz1mwy?{7qrpuD80ps$^ldYj`k+y|wIV=yVU4XSpkD za6CQQ9q%xuJ{jfi`wT(O=5uYk7Ghq+1Ac`{Q+?jodALKg-wX?UESZ*yigp4A6hg1w z1Rv^jyMxzaF-Gy*Lq5!M{#_ABjzv|PtY2;F^0o$j zC|cbQce#B8I8X?lm^zdst;b8Jd}xI=dqo+d)n6OFO6>N}9TOg-cF-kJ3SmV<^o5Ky z@UgsR8T=WW1{U8!=5PQI(?NhxY0~3MUGN$2d>NU2V%Usx?V zwwIGRmazaD9-qriKjSYZ8fQxjOAVRBCArH5-Cph`tHM>yJ)e4v@P8P&dE0F(D-?9J z;Vk!&pXHuMW%2c0zONpAF>qG~`fB$gKwzsA3zb#B*++waBbMUY=%`M>4I({33p_#K zS$1uCh?+yz)pdOG%P<*2Zn=MhsD4 z`_oaZvJgOv@)3hm#fm8M9{1Nwa3nNwa3;Lit+0ufL|&N5M$h$vUe!y1lgb%6MA;c-sQzjk~@^nv?iJ zXQ5Z>@E48!pS{BU{UE9TC=)pW0xAMzW($g)_xyaxY&T*{xk0itZiL}h@M0OU+Hn<} zH5<-rfoK}Zj4EWOk42G!5c}|4)7`6vm}Uqna9~u@ik?fgd>3@hn>K9Ovu4T(6DOgS zjSxRb8Udslfa*b@RG}20K%r8FN~)Y?O5pu4cUM>q`wj#!Nj1akV;$t4L!Q~>=&{p5 z>S*$~-U2d&Q7rgKPBIF4x)-?{n~{!_U4mu!M9^zjWX%Z@@=I>+tG1N8`1L<4me$t& zM4t+W2X}OW^6?BCC0&qrBp-|pdjf2mjAMR)0lr1h>5zlhXYnQF7F@tSud!_phmSl7 z#l=BK{GrV7)7M*vs(u6@M^li;&rhc3YQ$-z$v(DZ&9%_-NbYH39>tSI)tii{!2Y*2|hdJW* z0DdmB>oEL_?;5_#+~yyFuyYkoJ6{Gi4j|US?hG+Zu&k<-v&i}#)c-TscCbFbwAyo% zD0%+K3HtM%-oAhE+pWP&ot)t1sq)YtX43lnT3djjy(73IzFB*IKKpa2mbk_QCOJ98 zJudoh+9fUN)wqZTzTC}33HQ4hC?J~9Il|<@R(@@BD%68YA}&9-R{!iU5JdQYUgWd4yO;6M=) z5~xwxJ@6M@;DF*zDcw~XI@S>_D)=f#P9QW^WvWZwzlY8C=%m%(X~6jd!%0iMugF3| zpXyGPOI@x%L1s)O5*dVx=L3dB-AAT~zZ3*31HyVzS{4tB(*5j`^B9Lm29%7;JxdG< zHib(7hgU@%q&vF(?a#KDml9|3luJe)Jmt-c+=~{q4+GqM&Cw1%*+Vd9XkuSViz4pN z>-KOgkG6;k?O)qas+fL1?l8PKeIGg@8Y18bqInLn+b3}IxeFEgntHB91Y)8r!1ciT z2d0`+dAZtl#K+sF*Yd)DuGT|FNyR6PAo0HPAVkGt2GozMouWs>7bIqIFvXB2r5f2pC9*jn zU!u@3x#+A2W>iES6&!R>h-}y+znO+p3vfqv^PSxDZ0%kkYH{!oBFkp!3ojHBN3?FA^>TekG}-?0tm#oYPcsNjjh5$Yk-pW+Vu_#8qF^pOF~Kl!@` zN-;(I?cN9pF&_FTBPpYaA3`9kz&hN5P8>LJ*=DQ$kp@K@hFG#?cle$v-%#N^AI2!$ zY_J6E`ESpoGXTCdIw1W)PPwQPFb-m!C6pdjf+8at^=LMLQr4V(lH(A z$1B)qj4T;*8h11l*^Jdx@w<*`M6m$GB18!@0J@OQds0afEWBm8ALGyZUME_;x1l?p zWU8vEV?JlqEu!U?P*M$TcKrFvY06wgB(Y`1ge*{{3Hh~1c2V(X5tg@{FGSVc4%G{t zDk35$5b{ADS?%qXC`MT9_91boWbhqHyMwnveI`L<7?Bbp9pK44#-Dgh!K*rGA2Vnh zqNN7-B~QWWgi){}V)H!8OIpNGs%*d+{|xW=jPI}Z{+o#&i% zZhDWwbPqlrGxjx9dsuJ;o^P1@-eNUkvG3D`$>-!9cxk(p6fNkak=0-0bC4S ziSDHK;n9F)QJ)q+yNO;EdJ=7lD9t4&@R%q@a9MPl9Tkya)$k2sXE`s=;A{8bpMNCs zq1PT!H8^jF543!}AH{be+W|F*1L7!(B7&o%p&>t;?YeQeUZ2f-VC8Ha*bH&bVt%>4 zr>G1tQn!#Ec21o+NQqwvW!{RS|DlS4tPVgk4LXuF?a|}I_@-w|l@K+|CZFJo=I-t< z|DbsqMv7W>ype{FFTCTOv{e|3+)j)?x4ifL-+|P?)%Ut8?N}XnAZY?fkim&f5HcxW z`T~k>>mu9sa%2(P$MJ0A?9q_MttuW3>X5Lw(9|NJ;(6|$|$=~ zL>;)!YtsfXf#W8`j};Sq5UvqJHVA0xmxg*FkD1N>SXI#iFtkqq?s7KsyxHNp1K~L~ zW=*;2b@2|w9(>bkBU5d8ZcXJv$G_HxpoaW65{kap4+gsKr6hcJwh_1x$Pe=~m2 zhjHG2%v*^ZepZ%Kb6S>~IxE~3CQ*Dk93sL;!*!O+__6nTPFG0+DQPjaU_l2Xl&+nG=F|2O3$&@0_MduMB|O) z-(YF6Yg^u)4O&%N#hIpV4aHEp;muBS=U0*He)H${VLVcOqroAXZ?d~)+xzwp68(f6 zsB4E2%=Byy=I_ZDjTjTG*IlNj4!>Ej$_^y-+~brUggo|$b+}wj@wh!W!Pv;IGh8@xnbFOZ9#c&Iuw9B&7T&W25{)y+IdcxGaFD_}A5W z6rFj2kTDm#v=;YpMguD~165n@wS)O0oQC_+0UZ>)v|tlrVoZovFtwnIJ-^8hU8fMf znnu!Z(j1!ZY+||dxs^EshnXAixXI7qaA$bkuBxXZS^3?FA0o@F6oG>eZ+eAR5V3)S zM>E#IxUme13ZN;aAVdgIlte&?NN1%1Ge7CXY*%_^Nq#WT;H9(M?R#6A*fo&CRB0+z z0?AS!iy8!~r8*c_6hL`~WDGDU`55#6#gfFR^?S-{={AO3=79EL@hG(|WpHge3oct- z#rFFb9FC8;1a88dCeoc;`p^y2F}i9T(KXQl=a#;5A-#qy>RO?ugu*iZ?QVL-xqfq% z_`GN;!D5YoE!ZvyjhL9u0^f#+HPw_iii!XRFNAM|#u7DFmZpxkI(DLb`vDuMz;-kq zk1!s{WQ~pX*O1-u`Q2e}GG-pKSlrQ61+YA^07*dKp$LJ^0_-Aa-{Q4wlcbp!#qH+R zHr6a`S;a=T0EqyGTUR79szl;2-nfKG5CCLAo4+@vJ4mdfOvckRleF*8Zh2^+fld@B zf>Cq}BLrgsiZGHOU=2&heQW10;JpND*5qD1u3JU)mB(cy*3j1q_6tm5Xb@vj>O3Dt zh`r2g=#yP++fyTHx2A$o4M5bcw5nPxHZ2-zt)>LM?vyR;=7wO3re->~ngP9agXysI z&UYQK;#n_o97}T|8-metbU|VS%L%;_>g)@pp(O{bXpsE~;r`1{qpu#G7WvquA@$&T zxtdn=V35lC|DLxpYOCR=eFj*SW|{PrgDqEaeVW>0DbArK81n>Nfw}Fn9Kqp)-2u##Fm4drVhqp_#0`IW(fG-w1x1x z@8Q^C%Fg4kW(5V8JGBMMzTg?F?cBGN_CjM0?ZNXop_1cUSaKn^x zVBcTv^{NvkL>?0AS<+Er^6wa*mwTYTZ;hhk`<=X*TM`re?G$(3fe6uw7j-D3=d0_N zrtF5zn-0p8@u6&syg$XqMYHk9R%bd%N_qrYj?*0}}o;XoZv3CW_9YGTXWj$KW zOejwUV61az8Ui%~1pWs{128FoglZ>0%*>A_Y-Jim^peMHEqDtWi`^MT#oLQDTas zixowRFYNh}y>EhShRAG&$Yvo7vT_i#`6L-7GJ-NrmpEq(;hZz(&TYd77GyGIdK#kF zrqm^_Rm(P}sG+rl&olxuO!V~hUbY`ZIY9VyVHMI4Lsw$|qNvVBI_nDBz zmQ3hfGv%CWimEM=Uo6(nhGt^m!#j3mpE*@URT*AiJ!a2SGcje*&fS@3&Q(!WMU0a( zpB(m?nTuu_+p|77%Bm`;wn?8g7-y`^F=h#!F3%gl^k1{oKb6<gG_9N%sApjmBs7AL=3iq*5uN z7x)MFFq-7D++4UZGTpD@RB;CQSCNTxSbPEjctv>P0UECNqZ6e>Nt~W6j>!#ZXW0!I z3ID%V%MCBD5UyRzge|A%{0L?kM33X~{yuCEPmB9m`MbZ%B{j+!|J7Z+oPyc!(1r;K zh3g>cN8N@>QYA!$^+d4Nh>lk1F`iTlaup#V%?L9rKiFnh6huvY)Wg?8^Y-|M;%qZk zhd?y9$j)5X!LhpM9SWlIWjBlNOzuQMhzM2!HfiR1~;+YK!lAzeOsXU&54h} zUT#>Q#T~Yo(Ad6dq(y8v-`;5r)s7q&NOWRrf98Z*bKet(NQ$R4-SCU#4 zl+&$gQGD(juM3m>?H?oC?Q?e0L;sfXt5xv=mJZbfO0qz@=)p*(CF=<}>{9#JcLY`O zas58xzJtZ^FE7bsvFC6C#iN*DYkY0p9+y8KMT@Hz!IhM|de~t!+O|&&6k&)M8}$Zq z`^z=N_A`wK3y@u&$4n(&_cBlX_4QbX=fz~Z&_1RXPu@G~`q_ORDz~;56RXtwbg|#A z{GQl{hy>v$%OF|gyg)o#{S)KId7(z`-58~9Zg;xe7k_?${a$Z1-@|)762946WhVg^ zC}emUlw^%->3PwAVU#`VB*>FeEa@~(cg6Z55>2Q zx+MP`(75Sb>yNzcIzk^5<2c{f9~tSlGA#TQ9qm#gQwC4I50qG1z9iH9zrOD=am}ag3?#(p=O-HvN<^B^7EO_^InIR+o-_Bd>=Q{7Hz2!Yg+AosNA}& zb{LngR6!01+qlHg{FqC2&%nrJK&T?p+9fxB3pdikP0yVJ=Ag{!hRjTzH zS-ffMW`C$ION>$s8V8dj!)XmW)W#%!v8e;G)Z~{ZMLZH zfNoa{FHPY?OTXUj_TVh#Sx5j*O$0%zg(8Yngf6;(L@0%C4_YUDjHiEvR&Ml#9XIZ) zw3lyWwWV;jGWBaV;>t^?BA|W!*JiqEm^esC1?ZalHLj7Yh? zleD`Lr&skAyO{>&-?VC;Z&k5p~Oya)#!~4AM73+^k?uW&1 zqr{yduhDVxIQ|-{f#%iz2B6;tnv~L%%#`7ovGBFiK(boBEzRxkcxq_}`vrD`QpeaY zx{YjQ6DDA041xPZl3&2pfV0zYjPo7Y!%2PBKney-T`;PpW9gJcmX4RVo4mGy_C-h8 zFuas8=CrvAyLHN%N?bu3ws4FEat9ACM`7m6iEV~j7CsWSNO(#H4<+hMbHnM#-R#;- zm@L10-xyARcShQiHfW^xeO>-b26dYJ7;5w*i4OVVl_?P%6i*Csx13Uc1KOoJct!oc zW3~EYktvZA90Z`}ClIEL6heD6nB<6;D}$@zcykZ85v7!xdDztH4>-#KQ)_<5e~34k zqHQ*BY0Mg1KlB7W51>F&$FU#C5!(?BnGyTfQCU(QD3UW;0MQ;;eqdm6uuD8@9svg= zaLq4;s1n~!MEU^U3Kl;DYMvGbJaPZ&3^@!iNMP3Z{a%xcW2L$dVFAV=xofS(58XR%xMnHe2)}|g?KF|?DFD`SH|XGa5bJ&5Z4fQT^~{GN#O@is7W`Q!2HNCSfuJE8=qtB{gvsrYuLC` zhBdBxoaZ}tUO5pGKnr*~BrWwBS)0_>e6|Ne$xn-wH}?PUkHdYxv-**2<5GM?!bS3C zGXW$Z2gciv6mxgJCmeC;7D8YRRW1^pkiYQLkC>0;k z(v?+JRaI40MO9T*RaI42+#NWCT96{Ot;Q~p!h4r-X{mB9x+GU9n_Sp*I{3@0CioY! zATU@j89id08jTKT7)(0&RJGE&^`s5ka}Fvp6a~Oru{YXubia0|LFsLuebw}xC5=Go zCzz^B5+VXxr3ix%s_C9N@c3FvdiL0pe%oU@EoWqaaE5 z*JJiGzBP}&@vYfa@t>3AW(rSgGIc=^QALu{!bOPHP?XS$%4n)9qV-wki<6E!JHn6y z*}pxs4_zF^bB-GhvJ??uvyl(Pk#L=PpO=L^3@{Kf6 zNaE)7)w^&v`ol}Km=E+l7ee<%(K9*kMm_F(oaZ~_L`jD=E5Zdd6Y|)x-+0?U-rDd` z-SN=<PTpG3(eXXs0typAZMn%I6Z;OTP za@A`M%nVy(RxLEuvMqFKo8@acI5@blCJq?Uh8S96HH8K(RTpt_TC5ygTwEMnKqk0m z)DlUq?1=2-s|00{q1NX)_=WwyPupz8z#|Xvs@|k_IjYX9YRev?;G#cR{=XWBc|s5H zz@cH24H^+Vzo@G4a`UsCmX2I-I6^2&1|0kjXqjd1wzSqTbX=RRd;_79&&1+}lDG(! zXfZ`5AZCVS3G&8l0SYjLE@`3?Km_JdiZX#rLXHcjuE%N^Q!@0w;f>w=F$D5}N@c63 z7~dgyEIUgV_dO&@U&0rWVmi*(7shc^>CnDo4JShcRe@j`grFp*a_b79;g)6CV|+{` zw~_qWJkGX^3c9#Aa*9OJg{qPTsc5Fk&nrJ`v--U34lLZAhjd7l&%fK_X){lc=}5vL zqxddkT{M!-o+lykdJt61=F^p~Dh&ob)=wL*3Vq;ohVWNv4F<9aBSKvRj{xTPph8qW zX)pEQDMW!J&RPP?G~C*rYSv1d@Z`$%LEq5hoy}}Ct%dF5-gbk7^%Bg7SbEqrybi+8 zPi%G!!fyo6>-Xj82&vtkX93)kAM2L25Or1Q9bh`85#~3Tyd9z+2w^OhG)UZ)!YSY z2Z?Pph|HZkit%N{mOPPC#RYaIS_j<6LssEqao^|H2d92sZt&%(Ng$&+;KFEImlOdW zC?X;w1D0_|7W8$(rowA|Zmo^d!+6|;!rio(FXWkG@_vz1hcD^+A*VY3ZBM$b9*k|B zAjhcaz9$$U+I@&wW*$Ho!fx8PIQ(F?r0eBH z6pUs!KM&Ko?|5AAQ{@x#x~zuEB7EBNVpvLPI~I|LH#3&b z-mtM@+|?>EikYv^od1-mreh3|Y+=2qQ0$}P(Q~2?719W@D2JuT zp5jaDN8Ax=xzgk1d%HVh)5#(69oPLi7}WNbj_~^S_5qdTZIQMGyhWs7DEwq*Hqck2 zn4Dymo7vZTTJB5@kIUj)l6`N(==eeSJ=XWR>OOMX*ihQ`1uUWzSy?G|;?Z(1i^MLy z(M(1u5CEGTX%(=8ftjm>u;uMQTg9`~jAcTw5YODW##>wX|4W{;aq`s=+ZX}$cvo!w;nRe&%vL)uY@ zS(hgPj`QKxvU)5U!Sqyhpu0(v(UrA1zJ2s*(O(TY*d|8&$k@#ZRNe%4#9gAK&}VdX zB_diCGgl5s`!FIxFCu&#JpV5&dA33A-hyk4I&Qn#G(d?ckcLA@2a$GL zn4^Le1B;R2^3;e(|54Szfh((^)qKwDo3MqF5f|xpLME(Kyb&|y$|e>fNaPhzjyO_| z%$SxlJ#hVW5`;W%F}4^N)D>a{+D32&paN*X7D>zx0FO*qfq=)VEb&3W#?2xWLqP}_ zq0^ySZHEk3e(Y}}=Sa3aY6k?kj6`AbLUwKh(1=l)F}RDK5|)Vj5OvW>r;HRaI40RaI40RaI40 zRaI40Tc~+jkl@&tD3**d3_}pdBeKq5RRl(`Uh9NxCW}P0B)K zalobBatq!;Xt{*;DTl-`$t24d7r3U==%P4Zf!F(-e#66q^ch>IZcC%*p zamu^80TUk10JZ{1(eRG5MVHO#%bYDm>eYdTRqcirN-(Qm0`-Mn*RyM13=z3=2aj`H z_qB@WIqp}z>~qGk&vLQP9@f44gx(vI!8d*m7nI7xW6HUA{+%IA@!Sc&Xa*kqxaNF{ zzN6gTVq}e|;BL8NM2%Rj{=iFx!WfNxoXc8S>5}OuWhied{8_znCY2L&5<-v)R8S=Z z7zGNzln_8E1r`vXf&oJm37F74Ob!jpTLV4{VWrDIAlT*Cr#6#GJkR2hUF=d3HEl{*P#Q+fDvFF9suJa4 zaE6^kSGOl=*KWQD=&9X%AHH57qeMc9;5UXP`lN2Hjp5CE|0x=xsH#ZH3Z7VPM)Q=% zmDc|ct*fgJt`(zqMRbKWrTR%OCU|P}QlU2xm6U|s;dQqz{+XdQp4R6NMGq(7U)v+x z5&CV;506N9(mJY-f|pclt~v6{pqc?!Fu}MavDQHJo!w*4Z$AFoPQcQPw7S>CZ$lpa zOW=;1H)07dt<<;@8hK_!N@Fq6)4Vl~S2{-h@3kaI;Snr^QxN^tB2A;Y7N<m9ZPy#{-2P%g<6 zFpeSXyM7L^5ssn*GCqpySU{m9yTbh7L_da#Qv>*ByDj2yi|op64z9;dwDD?Cn#(z= z4z(z{?P#(m=Tq4GQ3OE|Em&=fNs;2{EKnr4(+!A*W=#9Mt(TkXM4fHAwUYM90S83^ z7&R10GlN9}4z`YibUMcQUD_YQ@;UazI$m6mt+}6jN@xgi)I?831rYr>R<3AepHe&n zkbw~j1OWt2Yj@7yK#x_0S5li$;H_cqM35TEedA7NTm>4*HSO=Co zH*)>K?p5#r<`+`EBJY#`uy;W5Yv*rwvml8B?o;%nEmb#2-v%O@f-bvJ-^;SMLM8dc zn81E{2&oECipW*Ui0&D$vRcV_!C}^-@s^C1=o!h6S|{a3kEVg!0txdq5^k#JSZ4m$ zHh#NtdWeuGV5F3k@z-w7!*-O7F`uCP+>K3}QSe5Oc7Afd=GR*7RMTC`su?00^e~VD zdHt7jZ*PAiZl`lkHOhiV>Vf22H>tdeZ*-^rxikjlU6{gYmsQA%Pu?L)ZDR%f7~IN= z^?OGRSu7e1Yeq7l!|ioO*r@3>b?skeqNWP=M0UZmZPSZpvnRO`Kc{h`#n8x zovfSY>Ff+>2mnBUO3hH!voVZ!SQ$=}ZE9q;yx(Po{o-hj?U!17-y0WhynFs7qbDc)2`%tvNrdj5@I3%)`EZ>(?D4QfD{D)Jx{~! z@(Cx1tluLaAto$dTnDeOu%OXmx>oaIUz^DkBrzkxLd125)-y3r>KHb`g^EB|H>9Pv z{JWgHkcZp>-q<-_YQ5*9|GvN9;lA+nPIiY;sRg3D_5P7L7Gc{ODy;_>_F%C;MgA5D zvun=>xd`<6^?TmsJWDfNTEi?9^Wwt9k!Nv^h zyC)koL@DdzPWCLrA3!2#!1)M3pF1_%e};+Ut}EdtfIPUDN5JE!h;O142ry%i5M(eT zT*v6F^5C0!7izdUaMrWa1wYqPkt;<1kI6<`?@xmXX5naech`gXxOZ|4DpVgoZ-4@& zh*iz7Ini41-#d}2&2zos`1N7kI;a5j&IlOWzlptvJXxkA=Y!!9wn?FWRhw`vDq!sQPgyY9qc3LH@pccyOy&`uL11$V=IP`)f(>F=O(a`Jk)~X3x$a#``wDQOMydL_k zd(( zfQTr(OZk~tOyFhzeO;&(fO6 zsRw@!h+itK$wT0wLr_|9@aMclEEw-pKkZ1uL10Jyg+BSM+9}V<T=UynK|PMury>l6?>-O#R~_%uy>osRJPt0(uD{<@X7?3|mbtA(6&du}pAb-u<+Z8EV zh5(8HP8&9h-p*0DGZj>tH#uE1Er>0UUYl+?c*15I6~*}WI~=%Smx4F|srkVnm)e^? zf&nFAM{K=r^CM;IZs9M-5GzH@(AqB1QhtWO$fo!%Dd;|nH_UIX%iu2YSE^ZaeB>f~ z)(?^TB8rNTDQlEyrmAE!-iJl!>XRFzII&q+#3$;C4TI~^v*tgsj9Oc`2&os<+L5g4 zt>A?=OCeWBUd%FxV8$UziyiERX1)Hj8_cf8$B!CHq~AY^ch7Mmz*ewWF&mnOnfV!0 z_c4h)Ou=hvzpNH$HGI$+A*2Jpa0@{}E(Lw;7(P#RfAw~!cfF0qV`L2$Gdt3jddV9#? zBrnD=7~hJGKa7ycB{v&lgH0KeDS+GYm?~qlGW2ZU=z^iWyTY$)xh|0m&!41$Aluf#se0i8O_8hYD1~6vHT5JK#YKz#P3qQ_uEHrQ-Ik)wG^$e(+F9irUM8p)2IMq6<3+uyxoo8mv6!4RqoYlZ5AQD@QW2;$!oPIa3Lh%=J|>GzBL^(G?eSC!|zr z%IQ@zXdfRRA0H{nH=M+DF%ifEnisr`s=w3TWvu%`6A?#4tf0FYoF*6wU#%o7ks|-* zepfPRflmt2|JIZ=EAMy7=8E+<#&~cxTR3lFuC8-Xih@)7Dda|9%GB#E< z;u%$AQ2}NWvqeV3F0zbp4r zF~;}~eGEh*T>nk3Lom#~L6;wRMA3k@1Z`{+|8s}h7pLdNIK*#7*}+qy)z&BypDvc)$IdU4^#M@{6s!%{Q+ySof zI#5Fv>3w?6Obb?mxe<4%Z*{0%??ZMtRd@eyb6(|hnCFW3JY)Hs@^AE=X8}}U9)7$~ z)r}4vIGDoRyJXM`>gk|hL)CEHX69I^E;Li7s<1n)(+IU24t>=st_GR|t1BH9jtqUZ ztGV}JX!Na{D`rGye`Z_D8|Up~Bsw+EsC(9Lyc|L&LIT2ceeOj0A>(^~v)>_*)*R#r zhoVo)hm;VBmxXRcb3hsksDGipWDV#eWG3Wkso8dtDuRdwsO9syy7!z(eR#H4zbum+ zWG3uV*V*y-rAWdGtzeZ^33|_i$>*vjcrqkijkeYn#1>&KAA(kitrKLxXb)KfLzmUV z)ewhdiGY_tz;xpT10io&7ihe*itn0tR?}{TICHC>jRTQ4l&M9m_pH;{>Y?tXf~+&V z2JsenaVB)-+W?pdH4}l=K{Qc>f2PqpA@!$& zx*w?qzib73oZ2%_Un5dhpHJTt_uagMnIWltMM^uQ4?teH9lf(6;tvX0z5f3NFjE0K zM8gviI!>x3LU2+^$ZyksEAu^*%=7;@s=3bX`f1xsfhpSQxt1xwE1=XZddOWvmjnTv zgeo$M6cW&cs93#7T8WI7CY5pFAt*~}j+0BYt7$H#lqP8{O5Ng8CDKVLOVqnbrGRTC zWUQBoR+JuqEJ7P3B0~M`Pm?`$n#U)?3CdWg!9UMsE$M9bx2+cE|Byj}+Pqq*hNkqT zA>LUPsX-!y57`F|FYV}&Vi5#r1=zV9>3wqY+WL7VRj?-$}Bb}GFF8BT~w(7z@YV(x;kKIevOPD>Fa0Hvh&xAjpt!7Qi!{i881au*pm=hp9 z6(0pm{s%;SR~jybNl}L9M!Ae4hYJ%J)4e)5;KP3vEiWJpR%WRa!SN?yA}0#30u+}D zh3M;}+{_jH4As<;Zfll%BjaGULrU43o{g_pVIO}ek@aN$N|*OF{%-Hai_ViPPt3h= zgOMo8QZ!>9HToXrkFJvTM`^D9o@M{gtyjFOS>ekFnGoX}z9Ez*u0}HgNw;4h?_saQ zMUEvIaOeb7XuG3W+n^4`Cnu2|kY~2fW$G_*vOWOh9aztRKplg(JkI+cNpNqrdbOza zdak60^2nXCenN33M6Isz0QQE0^WF*>1bLJ@(?BmV3?^W0wsJW5sqK7?e*>f7Qr7FV zzqm`6LP~1^kh`RK3Z?^U!cGbGT?c|A%^#+*%T{gs5r#fDxyR#kS;GyzVHl{zMs(rw z7(Qq>FBUKBKy_3c>hnfI;T@Y@FhaI`%*d7m+1<4#SqznFlOBTdIUbPe@**@s(_(@9 zLNtW|IB-C@?JeAmX;{gye*;SDF5CijQ$7F2mp*T;hQ1qycUCUd7f3wI2f51Ois^>5<+Wh>fu$`m)ovV#c5gVcA#6h^O z%F5N`Q2P@!ehefV8mltl()u0hvCI;|T1KpF>wp%8AO~o?GKm{%SE)tgsRpQKYiMh^ zS=jDff<62pRSQVV>h667P)lc4(yFbxrB+h2n)i;wrMN~$ri<8qefMr&%aWipt$ZIz zp4>I=<0jsjBc#a1^9E(XEMf>^utx9)CdSsC8T3=Cw2eq!4UNdbwvHc%7*Z_$*%70v zpqRXh&ZAk$?OQ(wJp0&=Z4&$~@v3p3?YSr3)qUzWJoIu_KS``eky4FPL{0|NRLsu2 zI;{g_u9`gIPw7-uQoQ;d9+sGsOltjx92|ZB)Y z-dsja?VV8L(g5tXARIA&T?oM0myo->55Uy_XS;9X<#}q9^6O;Tb#+zNe8xzL5d49| z6!lR{Or}PTS;d*cB&#qHb+|HDd&H`(-58s<&(9!vKTFG(zxxz3f4{zpK%`PE3G@Ip zcGPwOIO;hvqAiysNZL2VR}4%V;q8$&%~1xZ#IHN0gc&I4Efd zEuxX5Hk!(5)5=gWdNZT{Eei>aX2+UDC|ly5{2j&=Njn0j&m={}VmNLZkIaaW_}t}Q zpEZ-aZRWX%e#aY6k9L_DozDVrCMA!z4S37k2!kSb&0Ir568_54OQNn)W;g2f?|WXh zHQ>&Iq1s5!pp2tdx-X+O<&V$DuOq)fAcTs5XSH~5Ck~OEu~U4+Lus~L%_>?Ta*$at zB-hj=V+k6qeoG(zj9tL&hd=4b4BpLV7u{CN3=&6+JTCzrwP17H8(d(cO2StAw|HdGoE)a>3KAN?~lqfy_6 zz@NEW;n7UghQtH$!oWh;+}S+$>aD$hE4zP@!<*z}$i_ZS8Z%_jrZtzh-afwfEKD|4 zSr36O6wL6UgphH!et?nis=m}n1Ki9&zDHj>IcUJ32R`L21rUT3&1oL0(wzk6cX|5ifz}`M?gL=mZF|Czn9ET|weZ|Jd305JGKoI81-tGAi_0mZP z_CQ26FY@;CL#9vhZFBnY(WVR<;{$7Fl<@fAv_N>pnW4qUUHYfe3k&{x5 zIi!UDU|?objUr!mD8{&~RTrfN?WCf33^NE}f#``GPhye~!c4lfRTV`PSfZ$^D$7FP zfOfbBuIC&g3cYxAT(q4Rr{wW6H!u^;dDN?F#aZ+OhBh`0s408YztCWlMu*vs)9&LsMr^ zlQJ`U_}fZfeGT3zKS!A0d!M|A2e(9}!1iSAIq3vtT0zSG;+}3#`e!K7h!R}^vU-BdN!f!R6=h^;9Jn$3E!km2f{k`NM z^4_HuFu9q{%%zt*oa$vi49)L=mQNqXHuAnqI`wwUJ=XpJ0bg01pxFaWc0W#*I0jib z9D=gV&N1!9xK$BNF9iVBf1F4Mvc(BiChl0FuE=B zzfA3Bz`|?V=!2u_zJT^(Ub$PH>`mA20DE1>6Vc=DJ$Q0n0#G7CgsC^srgF$~B+?)V zPfj2o&LA4%SVF=UKSt?vwg3ix5##`R27`WxG5|lwbq4+^(X_@}?%qRe065Wt%UNoe zNd9}&?OUFJ?EM+o^_f^JLHk3^h|cyx;p}c?T1Z2_2P=4ix@~N);4oo(7yVQ-Yh;EP zVY$0GDUmla0LfKf2QOnNBFFH@alSS4ece&O+Y_W&)Bdoo!|%8v^PU#C5rm6g+vn7k zfFnKw2)bRC^Pa0)la%dg71_OabF$y?JJDVm`*WzuOVym7lM4qUx6`L?KcLLv&Ka46 z%*bY>p;3%hBMx(~?)$mq2ptcD6O;{phN1V9aqZ7wUF`%3UahN*lfGGjo32Hc1Vkag zTjV65tl77$2#bqg5ocdoI<5d-kw@Ms=^?oBbwWugN>YNvh0I1i4fe;1lc}@BLd(SD zw*A*U0ri6;Op|~low$&m9Ee;?iE#^OyL7?;as0Pq1N5MLbPx4F(nHr565n$zRYUvIWKQ;pI&ha4pC;%dt3|zI%VFbI<*iIJ@2w?>Z|!Ska%w zsN!zi<%ybhx1Gru5Ju<_gdic7=n150LDnZwB~$hK*i;upw z-%g&?dX^U+y5VB~-_L$$$H`Dyn=EMJXu;LGgqPqk11og#y02R%zGDM#wm*VA3UG=e>boTC-`Ue zek>)WzbThe5FcJ2q+f{U_7&N&ey9S zpY1rW*-6u%hd_b^8Nx<6MCo^h~%m=*gqeLVsolJDr|ApK*SO zCN`4WLrGybk!H~BAWUH@QIz^Z1<}zQZpE=9$GZML9$v49&hl6{{3s#r|9vM$40Qd6U9vf=?t1NfN+vcvU5qggS z7Qz?(i_%5q#odh5UARNyjEE5O8q2Ch!Wj~uN6!yA56p|&8_(r$FXila@0pQo#;n!= zoc?_`KpSw_#9sB5LfLl8;m~ZiAcgs9R5(600M*HZvu0bmMg;0Ue=KsRmnykFncz+ozF4?=rn z>gR0a>mJ@e6_z3PzRyuKCzJU0C`S_Kh+YI!6i;VKHbmJi{4aE>ozf*t4z%=Nu;f$F z$XO+T*rvz?X&pGFr1U<{TZLiwGy4LLxG0o{MI_8buu9Vp zMTc*rKhfWgY%?IXYPbOf{zr7tnkhE2i1T6~#26D4euL>bBij2-9i~Ol zgX9$Z8_+{hr&-3ZOjL`D7G67#b2;BB89KoZ~AZ+#l5ocZcZ9G=}^yqO=r&`IP3Tqn?<8!?C0q<)S zPiaSi4VvN!lo2W4UtBa4Hkg8RWI9Yu28${Rswr`%EgW{M)=QZ`y5Z9emTwyzLU+%tq9|1v(h1gG!`Icm^=GE1hc`~_M`rlJm=v_s` zwA^}qFCQ`A01NTzkh3^|-VK5&N>G5hH&}`kSWW8bPi4wN*hNuZfepC}osgod!auMh zN}Ue>?W3ysY&%$u%ldFuFQ2`&T9x(LeT?qfVu1e z3|3tMt*N09>h9F$XGOo^!Yz08b3AbTTHmQdpSqPdotCRip;S<+C{!E(G05c{*8qnrm!Z^bwGj0k`}sZneX&DLWM1c-L!6D8{;{qa zyUY2m&Z0BV<->V@5YBUf8ka^Z{74`5)>^PcFYvV_c#=E>)@?J{{ zvZQsor%rgT*-b=wz~5}C#S+0GW<351%GTf1Q`AVPoc$J>1WF{ZO_t)6ebm20kv_B_K_(CJ!t%RM3xUd* zG8*lyL{+Re1PY!58a2r?mcmCV1UuvAIaVu(=Pap7K_=lT)@Kz50S|io_Z%waLS(Ib`1D8de4`cJ>y05q-dA zur&Am{pFr?KBasb%OYSEF8se0ahUt)4FFf?$@z#{@{gl2lLLbYk65ROG60?ok&h7> zM%V4@sc&(YsB7mHh%cXc4vRyd9sYaO$m(Zpnu`<^ccV9`gR2{gyQZ&q50lqI!^x&+`rv@j~#xs1a(L4VwSPWeHa)lR0xyG!HWfcS<2ev zSy;CGO|`SGAVaZs`bUC(1&Gu#yly?WDD*%P00lJ_jv!@ne8NYvNV`5U+*}3Ec|XXv z;o0WjZngX(KW@Dz^#}EHXSw8C9Bv-OxR#mxN#Q?YRT^C+=Iy1R8W!80@dznXjmYQ! zDsq{QdDvFp+&_a@T88%9hZxS)dNeVq(_C7Qw6ABCg$9s;(LNJkK$j zX-G3lf=Ff%SXw$L3qxduRcs`bkQr%PFl3ftW*c@wP{^V+IBl>R>cg|mjUj9NBn$~YWkZ8k0 z%48j7puLdH&c0vI5P_lh&Y_SlZBn?pdgA&stoZ-zJX$*r3ZUcgS{5P7(?SEUqxO2P zC-JVAYnB1STE~5o;1LgyNZi!Z#kQCxq}X#j1q^8X4TAdaH@73`-?{FPjC@aTn7v&~|H_(N*`DPG7ia1Z$#v9Caya0o1O|~Erd8`6=UojCb zl{deed&t61cYjKsx!!My(zEw-Pyg}=fv~-gRQx=b=SRcfPYqOJ`(oSs+y$JgB_vK` zhudrYZbP?g%p3o8@qr2)p4!%K#NsVYl57xebp4%cAkTMm3J~iI8A@EfO$%*C{3}oG z@FhEx#4(DbK+qsqCv*n!mPJx9K^H%M;miCV7wW$WGXhq=%FXk;-^0rDTsuOvBtIdW3Qz*25it#R`3wzj zan9;;ygx6gT;^M^9&%R8xnfZsY-rx>V1_KLwka!*q%r6AMHy@3X$OKh}N!Wqg6WpJDiES0xvhLw0Dga-%Z*y~bQQ$w_tb$*!eJs%ix0 zrmV#cAZbx{b~}#O%>M75`Txnf;{V%u@loS-D;mR%-V zH(k(=P3r}}!R!mpTJR2JPM_=_cLQ;lFTGyFSxta!SYRiJD&xK3zP>pT-?MYCwC<^Y ztqt{@bI^aQzUox}hGY3YS79&X2djkfJ;&pF50%ZOHl($WV3)LM8`W8_(&sAW+NKH% zDN;Sx=$L`Uy6}er3!E5>#AYT;e0cukXF?%;0A@DF*pxJ4KVb!pM4KufHaiyWY8A7?BKtc#d@RSYQW|M&rz! z_^&4X0hoLl|P0f-l5E)XuXv8Op; zX>mPxdveuHB8)ot)P(e9@q7>Z!Ig>4d>4jhZq#qRzNO~ zzjQwo1rUL4K4(Y_TAMBKPLX|>`35}}DxND7M1MbIFWY~TDLgszO}DeB^aFb?G*=8n zFJxk)K0>rKW~A@VRq=`|FE1bUlYIDePv}*xG*Qho8(tzDk#i7wUQc!7?A`n1$L}oK z4ra;Y&&$hr0JRRJ+iJPo_(!TIC`!}4biN&BXC^Jl!(=RgT%?5XR1W_f+#eGa=!>5S- z2B?G36E~Y3UcNkye{O%z6GJB_jUWx|zDhk+OTH1m!C7;|(6i>jV~7(UQg~ujEyrva zTf1EQFZn|HU1K}0;S3Pj2LAncI$7G0T!~Ar*n8U2Jq(4rt)Lb7iY1!#F_j~z95nKv zt#iY#^N3IZ>>7{K^NJ{K-D}f97EMIYb87CSIB*O35CI$Ek`$_rN2@jb zpjHZG9v1pi5UOD(x5_}FM4IDzAhT@OhZ9>^>4X`bO2t}kbW8Qq6KT~doAVLUn!qO& zojLK-xvctQf5`u{mi(A`c@$a#zoFwvj?A4wBmj{4prFeqOr0GeO-FOt{(8j|RI#i{ zM_w&7S9UtPthaej{DSf=U8kj7_nWa+s!dR|Qyg`wT(j~}vrQx#1~j~mX+?7=mac-B z1oO0n;xZZqNi}LIgEbL1atfMM1!p0eYKatBMRK_iRhJx352W7ybNcGgcX~C=#d>G* zXp$Z5IynF&faq5-5FZ^a=?6xCU`0@qIlsUz0k`v$%WAV*g}Xm*<&nAKN}?-V%#}XE z`)KqtAGH#$;;|*qzK!c>#kYHP;cc$0BwMe$@%4g00beTaiwe%R>^QJ84N)MOQi_D~ zPyt4QK)8uP=jyv~a-vLUEa2TD7>w0M-n)LfZ0++FLJ65#rq1D3#?&sqGDPzaIR4HR z7$X`P2E;WEMO1tl3_zSyjfV*BSa6Zko`;8ZU*4r&A4L2CvwGZ{z&0c+5wO!=qnbc31 zd6z86`Lw6K}$orvdZpEVoQc%$(jt-qQ^6>XP zG=)uF6R@wji@!FQv))?>e1%3EpRUfuu!|-mmn(LCl}?|(IVX__dfjaNwjxu2)aO{; zl?jqo&G{SW@q5o8iCgUg8k5{FDgUIdB$SP5%U9`xN^0|*c-GR+0wF%WBBP`51XZx~ z1kF}8VzfNQ+lV-;2vNvQZE^_psnqexQYeE@y!|F)=L*5OmLhri(R@@EdkI=Y$#f=| zVr&dAq)|aq7n?|@NDqqiSla{wcHpd#gM#IWYZDd!albzPX{;MLZTjw%Aj&zQ7(XMX zo&d6JzHdlgnnap_iA`>-O2g+R?Pu zv$Ny7X`}Gejyio8Lf_=6?2PN0_mCsUCL&gdN-=KmYvQ+*PBlaJ{b~Pcobaccb)CGd zqVftF9VgW%WdfKF9}Hec(&fy4753h~UDI6HX$p1(^|TNoHDV1TZF#d`Y=yt=MNtG%Wt7j>w{*0P(C8m~NNjRJ zAVo%tk+$jQC9+K*u*S*qs=27@Mk*2GN}M{y=)BoC?!%fr6ii-O>ipwuh^PV*jvKnw z|L%g6?1wo!JDumEYkpanh-o2YWIR~mnqDOu z(h?V=IBbf)pzZy-Dp61n<*a@>s%{WWd&Z5XMP(?qG;^2l^r0mcDc2(K*Std++a3XR z^!%#FNyW(AWTvyFPSK#CIG?xD+l+ao^q%Y+pZQ;!ORbu2(&!ec5T}STufJUg61_;< zx8$`gOtshjH$Y^?rw(d&pEQbdMo#`a_fiKDf8aNB3Uqzx3UrHLz%~tc>Zk3;!(X}%VZ_s|1I|j$s z{v{yC9ylpl?lvg4*+&ijXaH%MscP|9?~!3^U1=ZW0U6vo#8$;os2m(o)|bjD@D8y5 z!E|+v9S^=s0-n^e@ohI$3^8!poI1bTk!`?w8I)1Zp8l1l1Ov<%9@^f%>x4%hus!UU z(BOw4JF-6-{MZb+M3{w_oRkx=of?r;U`e#ST6)E++WlL)0p~EL(7jZLJ(1@c6bJX^Hq}8f;E)e*8@a6!nCPEfw+p^&cmrSTf$co0**mV!)H8E|&T5fsoVtYt?^_WTe~A~7yVL6~r@qfhFPghD8}A$G zd8-yQdWW1*8lhv=Y&Y*9QU6QY-GD_duMHhBfjFdsW?ISIJ8PtS z-6^?Su+N+(jO5sZ_XZb}$S!jdw^FPT94q>2-Y(CF+^!KsHM0?sO9ypb1kIGxvR-#! z*Lo2G5Yr((w<41$DSzW&{%hXuA-m=}^QTiLH?1497BLpL5SPv_U1PWDo>NzG zc6mW}QG<JoS#55Osg8jkpR*GHFzEEO~ym8gLPDpEmASQ{4X`!J`>j#tfVd!Fc_VPJ1 zZSmAIQh$7Y;3Z%AoITWzqjXsd``^vRKKisCU$mAT-xTHT7uZP;!l@-Q2>~(&dqq(? z`|d^1sr6m5|KHyXUjLo+O3PqIIr!p64X1e7yST(6QW7PQM(btr*t$z)kc16HSLebLZC`^>kx6sB&F%s;L6h@jEe9&s!M6e zgIpJB4y|@Hy3|Mh;2-%x#-Jt2+>YhV2FRQVz^%i$Vddkr_1xmx4D9~k<*hl9a+pr9*tiuoW<3hjsv;enC&~! z71pXVgnqb5X%h(8m_t&}ZZ47JN{l2Yve#*UYjF01rir8UYjqND(1U48v$z zw)QzFSsG=$+?!xjhzEqo$5g9587u^$zVb126ImcDD(YNpH=7-2$~AGRP5RGOs?wGk zr=S84$#}xF<1e0L@I$>Z_%|QC(8w0=7&d&exFls!^`KMHq--Ax5ano_$LvsqJw;2W+GtRl|AD6K>B?fMb)sIA?nNp^Xa%=1};W-=6w2Q(D zSEjwJAC6$R;CJqZ^z|FVSfn~W2vUzZ1|#-C^HgQeDOzvhBnJz>j2#7-^`9a1uw+I* zQ9WLXhQFh1dxmpJNTvh;CCq96J_DSB-)0bHWoBP@>iTuv)?L1LUD~?%boUmg){YYX zjP;l)@n^{d$BldQ>k`I>iJw5s)0Vf-DNAa(jJQiN@3oVK^!$MTvd3z6D=B5D;SeFz z8N3#!>#9gH1jVqApgoUkf`O@X0c6(FQJ?L_ZBJh|o=7AqSWdw;+@IF(LaBfz=8Hh5 z*11IEk&DPw&1ucNagUE$MdLutzntLvs#hPT4S;q*sJ@=tCGfgI7Kdv_S0ksLDk(v4 zH>4yBkQ`azu$NZ{MUfM5iy>J({7mAEYFRyl?Mq1$Q1!l6CSe2vg8QtX zE9KJvGKqipX?puuG;W~e=kL4gA+R-~IYr4dnKc4JhKY2IU-II(pBK#nSf&j#;$IbC zLijHY_LG;~TwQ!PpL*NE%RB{3y~)++;N2jC9eMSOViF|$Ddx{Qr&GjQo*n{R#9+oS z0%?3;;Gh?wVR22sgo`lHsL2J|OH)wB)MVzn39EjgJ}POA*!XNZToW*(+cgQS``g&o zS<3w_pvtB8;l&b@x-R(>xxqexHU{dNVlAT}*^^qXYa5Uchb;Tcg0kD^Vn_`S&z`ZQ z(MpPM$-V4lduii>N2~sV_c#ria%^(1VhQfcJ(622Mp{G{HR32 zWzZYhH3ZikR|r0m+f~w!4!pF_Ni20h2w|@T?NU+HI;w_A<2bS;x~X9E+0d}z;ZMWQ zh|m%H|7oJej;LY#G0fAeN2|h}LKQGBxmy4}o7nFK>)+vvNz+dkyx4f}vA(}E4ZLTI z#=kwf;U7IhmpgUI%Tys(O?R+~-9~ajBNe)Pu|eY9E4H>O4mqr@!PgOB zE|BhdVPcWy7d6PrzT?#RCOqhyo?M|pctxpL{~n|uBTG%`?byGl?46H|yjvf0|5mkF z)qP)n@d%i3sfFWJrodPkOD6SP4cRoW(7 zExLo^O0m@nnvO_C(8!+lUL%I_`&&<7>gk^kpREkxA-sLFX2$7;XQa)iE?A4)w9~f; z;hNDjI7?S`*=qrK{Q``|C6DAMkT?l1+cJsu{$o4H%n@fy3H8&@NkZHjKP>D%R(v=; zKzFfM?nE`e=|A~yuv3919n!?Ix4!(+F>BlkGfkI6XIPn5=}-pa6l=o|j$1zX4qvs8 zp>5oKFit5jr(-pV^b~v%=gIkOsjEXz2_GwdWA1K-+HIwFzy=@A0H_Uq6S8W5>EiQ^sEUrJew2dq@ zmSb%2dF+bm?fv;K=;HrD{_?3SD0;VrLDVYe5)Sh-!?SVJJ@-OARPSo$$EDNY0(XAN%p2S38^y|$Q79F_h~tPJh{ou8qW3Wf*-lQPE2I^9F{}Rn&j}%I}`& zlQ8=(;Y;LxqE(fZpDs_-at7+{m2T7xKX=5;VY}*a{hckQzksu<1KZFhdw6)_w}ytz z9+`Fqgy+K*keGp3Nv&7tGZM3eE%y4{j}|eY@>VwKPAI2gEx&DU7p}?R-)h8y zG)=Zp^R0>^_`W`7&rF@mul&@`OD-gl-13iAcc+uL!hEYDQ=XoQU?Ok(3E|lwVrhk2 zlIyp|*!ZW+XPQ03!*|m0WFJqUHQ>F-X63AKOYJ?M^A*;c11Rz;`>e#yyDoT0`Mq;Z zufc&tNK6QPDY1KXt1BKnH<5*s;Ww-Q0~$O?JtX4bqU$$2#6xo-X-?U4lr_SW&2iCk86kBeNcaQzZ&bHbylpJ z7^L#w-h>?8_gR(~KEt988DNvJD%2A1+ZTrGQW-MmLdUiU>X0V3qyk`&H;l>K=(t}b za;Z8w=d_cCkg>5)0UL3=K9HU4dWs0uVc2BsoI(QTAUvoYY^q-cqG4z)s9+PR$YR!r zd(e)Osn6aU{vOmxGqcCB<2@H?X8B?Kb3S}?Flhsblr`i1DDGSr$6Jhwud$vaxf zO$CBYh^K=9l7?{@w$j4fbhvD71_%fUY*d*?BcK7e_>iaug2da^FKh0b^myWL;~bR+ zoVa(@q#R;^B*DW5L|j_;l^#Lcb=6ZATkDM3Dl)168vEW2Ia+dF*KWT*t;h`MfBqRZ z+uZCv^*mzruJtn9lKn_urj$od6=GgV*dCC1>k}sibCCWBMEA!Ga6=X!sk6-NKQ8Ti z;}>w)&Rd!o!%JovU>6rQCBC-F&n|bB5dXWar4IiGozIaE=Ha`AaO6v8O6sNQA{?ib zRTFWCpAsaqZ^^U4$u9-Ua%t)H)$aaK1sO?gkD&3N6a-D>_UJui#frTP@5?VlT-W0h zSuRECXP&d5QDt-(Ldj*L=VDEwK|vaH=dGET#QRM%S>BAn;&`g7=RPcoZb5i&9$84w zZ@QLr_Ko4Q7G5aPkXYdKu#j(A`9M5sJ1uKK_@SX=?K2>w6*7MQ{za_lI_yKpZ zUP!>n;xElKc31ZSv74C~Q&#||vcCojA_ZvG?x%+|4`s8JmZQ4~UqZLT#bPIk`~Iv` z`?QRtWm8FQjQA7=7-N0*ua#?L)L5yQC`2$!?`Si2P&Mf1wshn0P3P~dDMRgM!7|Z= zA+blKL6ldp^yT+a4Mq0(iSwH#$EXIM_NLUr>@QqrVJZ=fP6${3002NV{0{nP7jKg} zs{c#f`}kZxu5gIBf;byG6J+E9&;5&8uPy>GjEl+gxm~{jAqsrsJ!okFY$mwwIP$BO zv+~Q$FdiTy>NK9j+}1DhtVCfV`e&v!UV1&y3o+@Fi7v<82LeFeC-X)@{QX{j_gr_2 ze85oCor~-N^Z23D*7StbQ9MeR5W~P9_)Nm`>s7HNB!$cKOTdoPGJ?J}rI6L!jg9R$ zbB0W~mY99(K{EE`f=8+z!Wz|co@c)-RaH5JQCaA8#9Nmqn9h-Bq5QqGEyrUmQO%P< z5IB%)1QLO~)jl-v>=2J;MG=khkl)Zxu^_H-+WUQ+oD|Mx6pRi`i6sp>B{E>uqls%X zw@KulIU8gfKK~#NuTb9U=;GD!Ir6$!NM03-77(uRMIm6<$dN3#9km8GLQ<$gU;Bh!`vd zt_HJegU;ugn$M{XB&*&FzTE%vFa*2TAN`fPU%wm%_PCuWEi@2elluU8T(}!GVG_N^ z7sDyoraKztaH>+hiRq zs+WKDK`GzJWFe;dkx&}qJA5zwZ*9ONw9=_Ly68p#yPBC z%R34l_K}dZ8_eHPUxXY&$|onu;xz`58iy3-vJk__dCSHY3+2nn3acY>OdqSEr+xi? znVQ!pb~5jYSg%bv2}IF$H2_xgxjXR+>*Vm;R2c0qtstKnEA zWD(WP!`NXxUI5^$KuA&+W!3v8tzGRZUE?;<7#U+|vq(Lps<)IA&UjAnHxMCW6FjLd zDTD{0sSN^M1bSU$T?S22{ud7cDiaC&o=nAvBX z=0SCh$a-KCii2N#x$n|1?SX;u{3*fqAZRPd`32^Tu>Zz(nv7ZlW3lRZ2?7|wx{MjY zg`632n@p$f;lTY!yF`6BT6Fe*2;EU4*)ShXxPq{@w$C{gm{5%|U<3L{BM4#}+how6 zdwPP|5J$0{8UtuNql1>5baf(GXmLJJNL%z6v*vn8ThzfSn7@WL6BRKjv7m6w0>J*Q pe**sm{t5gO_$TmB;Ge)hfqw%31pW#96Zj|aPvHMUKvGdc{ePSN9}NHi literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.42142CB169269EB33A0A31A418C939A6.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.42142CB169269EB33A0A31A418C939A6.metallib new file mode 100644 index 0000000000000000000000000000000000000000..4be020f0246d89f564359ccdf6123fd3e0f6031e GIT binary patch literal 66314 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.48B033222FD1BD594675302F045A38A7.cso b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.48B033222FD1BD594675302F045A38A7.cso new file mode 100644 index 0000000000000000000000000000000000000000..77123c78faad274fe590fdc6b05fc0ca477af7f8 GIT binary patch literal 20092 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.48B033222FD1BD594675302F045A38A7.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.48B033222FD1BD594675302F045A38A7.cso.pdb new file mode 100644 index 00000000..a1f07dc8 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.48B033222FD1BD594675302F045A38A7.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c05e9ec8e24414257108071155b539787454e8baf6ee5e82171b1a270e0d7c1 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.4B0896B385CFE32F521EF3625ECD7CE6.cso b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.4B0896B385CFE32F521EF3625ECD7CE6.cso new file mode 100644 index 0000000000000000000000000000000000000000..95a4cb48591ea8ddcf65658fb3bb978bc6116889 GIT binary patch literal 14588 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.5BCF450E7AAEB04EFE81950BC64E3F24.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.5BCF450E7AAEB04EFE81950BC64E3F24.metallib new file mode 100644 index 0000000000000000000000000000000000000000..7cba31ee46ae9e1e5be38f8f6c57979bb33e18c8 GIT binary patch literal 66266 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%0A-(#7 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 O@K50XLqJkdLj8YQcot*; literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.6B6958101DFBCC2D44E480C8108B4531.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.6B6958101DFBCC2D44E480C8108B4531.metallib new file mode 100644 index 0000000000000000000000000000000000000000..b86450d0c392800e68d93819f691eb77e22d64fe GIT binary patch literal 66314 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 We**sm{t5gO_$ToHAt0#;RR154F*H*E literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.724B5E7F9D5F2C642BBADBF98BCE6122.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.724B5E7F9D5F2C642BBADBF98BCE6122.metallib new file mode 100644 index 0000000000000000000000000000000000000000..138353e581c3bbf7277eaf0911ef82601cc13b78 GIT binary patch literal 66666 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 JAf+U!{y!w60Sy2E literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.7D3D408F4D90CC373A284D34F9B71F98.cso b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.7D3D408F4D90CC373A284D34F9B71F98.cso new file mode 100644 index 0000000000000000000000000000000000000000..ae854662aed7455fc83754811fe3d62ccb360e02 GIT binary patch literal 14708 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.87D14E5B2AF4072ABF40B5A743B01133.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.87D14E5B2AF4072ABF40B5A743B01133.cso.pdb new file mode 100644 index 00000000..f518fad9 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.87D14E5B2AF4072ABF40B5A743B01133.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e392b5b8655e9499fe52f6dbdaae4f89c7b0dd4b6d12c4189e66f062962d64e +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.8EB0F8ED9C71D976C3914CE541D3AFC7.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.8EB0F8ED9C71D976C3914CE541D3AFC7.metallib new file mode 100644 index 0000000000000000000000000000000000000000..6454fb9a785ac64b672408c548d553e40b9fc487 GIT binary patch literal 67418 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.9868960EE5BAA4542CE68A32E3F82EAB.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.9868960EE5BAA4542CE68A32E3F82EAB.metallib new file mode 100644 index 0000000000000000000000000000000000000000..5cf7f500b9aa01c6dd1e4ec4512ff2e99bda5dc4 GIT binary patch literal 66618 zcmeFYXH-`G@40*^5AW4uMl$^6<34#Ox36hZ@D3WuM zEI|=L3G(gndCv2mbMIYut#{o&_s8iqySuu&x~jUmy1I9-J(~I&3K$`nAS}>d=?)m< z4`BRvJ^t^K`Y$vH`gfh_@A~=Qbt=rifDq!pN^~>2?*n;FWjv5Q3gKYsia@%7^i8yt zF+dn<@_K48(9Fk^<#{Qcc*eYv2&-_dI^O53X`FiA19kPmd(#vCx3yGM^r`;h_y3R^ zD(mV&L6{(nKaZx8o+%XcFY$UnS12g#Z>5wUDCw)|=_-HV!ySIR^JIdJ(^{?U&+7^itu=jCs;X~Q|sSD`4ySsP^XuEsZ*$U{|dAa+bZ0x)Q z^c)ekXy%IU9{&7ji}6cJh)GC_!IhOo73AebL`8%YmBl3Fg@u%bRV0Lz#5U^oGsTsh}tV1Z2F%?qq6-r5jC?ud% z_wj^uW7Lu;V2Ua+Wgu!H1+Y3%QZjSDw!BVg+oYI03IoS0S^RfJJY03|vGsRO=)_E+*KIVyGnB?JJ1 zVqqZAU7!?VR>OtaMuJnBOCx~nb3{=R1)0XvIQ)oG4H7?LP#+X*6%LPsfxN&&IujH+ zy_+}Wo|^hfS7%?fY{1%ynH441uw>#y~O;pcC#|nbSj6(-VSV*>a z$4J3mU@JglH8x!KcnOvyB?zXj+y~N-UYG(i0W(!E3=>AcLNWowHu44!HHd#5)*Z)i zj}V9-dJTj>f<}7+PS71K5rQQigLTIPOJdH0c558xYa!&393;RB;{6A3O(OCvg!lo! zah$ynNWh;T8fgUy0Nk(;0suhO3kC^*Lr{ef00650!NKZ3Tdn>tt;GMq%8D2z_iwDM zi2sAL6|pybgdR76EWWTY$7TNu3nq-A9m`Fe_#X z1QY@|pB(UjqLhYJFfd>Mgx+pK`f);wGXZZkfr0RVx)4Ja2{oxkQXDS3>N~Jvin2D; zP8*X2gsn>wp$ftaJu=1=2FO75fR6_Pr7$#vu791*o&rNAMo}W7FHRu@Sk(}(EKh=M z5b+@i(P;>gFo6OC5EMQX(b>bX|B!{#j{eJsNB!b}$Q1~M_^U;G03pl+>ycly2P~R; zl$7WoiD(^8>;@}O9QK5^ee?9 zD@dRtL>wIxA>tv?9zc8qVk;-)(NAoEt#3%QCE#yV(WtCw|Ey5nqpw6qYeYY~i4Ndc z)fKx7BP1duNw=th|6`a^+0j5Cv@C^@7kne``s(mwLMMtc}XqddZa$O|~OH&wKEVKnszJ>nw}u;7R`lZb#dw+PCQ&B1gsP@GT-~l6z_676-;u;WkvqB$! zCLucLCfd>_`VMF5nE>{)_1kmn^ecb@+9ndE;nHtHC8xrrfbdeJT#97uOJC0_)}{+|kPOmTpzyV<+{3*&3!h(K9- zAp`8>Jv?0OV1LdXut$IOg$WD7;e!04LP9XkKMnSFeE*=hG|@*C;8ekHH#bg|>N zwR3Yvxq4aJBE1mSE_VOkWRLLj29Al|j+SaFk zX~)tVfpP%E0m1;l(%av|&e9F&W$)sS@D}+O8jW%H@m6$qaYvzX=#!SKotw8M(#^xi z+Xpz`aU#6EQAleaZ#y{GAN7D%yFauZz=%EUY`l?={$eVG?yPU;r|9mEvPF}6xO*YJ z0ehlhH+Rc_qX!J_ZRe-`Z|(LdcR;E=!UpN)U=5rI)xA{E7!`!gAEO}MfO8`t%kr;5 zqdERPeDpk^t1j*~2(&Ojb6Yz*U<-aaThAzSG`w%~<% zAzXoZlm%3`1Riu7y8AyO0rUBwZGuMr-4_l1)$6YurT2#g>fihS-GV0lX9E7E>^}&E z3(~>uk1y#dy1RLKBiy|8?7Rj49sZ-FlAVXQ;{!XyAH)Bnna$r_{~77H{*Fbssj0-XSAOu_^xlF=T5a5|_ryblIZ zq#uRPVaP*-!21@Wze#|tZJ;|a6+ew9mptwAV? zWeqW~<V`)cFZ!*HtM;rbBTOh`WcTbu4oN$ z8=nuQ=XDwH=ppz(Ki)%MCr=v_$}^5Zzl1^C5lYq3OF%~NlE>f;XuSf#cPxY;oVWjh5WOI9BWl05BZoRxtL^89!MeL18bHgif ziMH3`Ev-6H+9Z)W670O19|kn|4_?-wdCF0u=dlvl-_S23_;@HzVBdfQ7<*(X$^hZN zPEm5aFKnCcT@fMrfQmj_(*G5YL7zxKARM3%WK_B|Tq+OPB(P)(fdiSML{cC6T!?@H z?=V0~4wmNyNdNGsaJB-6Y(qioWH4DwIjcAjSf1oY1@sOoM*^0I7s9dRtZ_o#0WUj1 z`UVGq1c8!Sbtp-PGDaGWbCi=I1_Py~slMI=(LbS3@}HHbZm;n`&r%Fw1H9^aDZ`Z? zDJxrA{-Lq_o5oVe*3#SE)eY$ZtXDU07&_+aA<^p;rpUts(+A!G(VPY0|Ksy${du!t zRwGeslwt(Ub@;7yhze|rp-4h3zEcH$7pliaw^4|`Zk&!Jd|JGRpy-Dni1{2m0!w1E zH;Rd_TmCj$??BQqZxaeup(vPv7lBezJd<`DpZw2{f&}s{x8;%Ms-a9QIPoN5R_lxu z)ZigG_0;e2OyFg=zO6_MY^wt?TPryniV#E}>u+|FHFrhQ-;}TocSVxlhTzS+gCW?? z@F5c0Wfw(C5H+|Tgtm_v4(r!QJ}mNxzKkB+e)MdBK%TI_&gnu#B+L<@M)cJENp^s_ zSpbL(D-DLGL_e&+g9|)Lf7i8v5}nW``u#Hmc+iOtc&PtCf6=S_4WkP*-MCc=k6 zZ=-y!2pe}VKS4OZpa?(UPye3K`U#*nTjXCc-b=vP#@*JAALt0YuLJv$o41#MlHDUa z7vL5F_2)(b@E4@p-*ifL_6Q#rZ+<@;Z(wKn(<0#Gg%bGVZ~}ki3RolE1ORRLTwH8n zdo-x12 z--v(HA2^Eqt65NpUzp#^))~g<4*UPlF)(&(77_&ernptDpakHPLrR|J#`c zZiobITo7&!0{^(702*hDK=}er0Dyl5B9yl!;E((W5D^J*I+WK{!~{w>NWs)mQc&K6 zUC$(X_IL_}mH*_;RUHVb{^aKPF3;*cU}ao@(F+?4f@*_TzS!iL*T$okCPil>Ql8$` zQ{R^%*C6Dmd{HV`Ssp@z6EY4W1f}TVR=$oG%GGmnk|9*B7;+pJ0e+AQj6!fslG1`6 zJXc3VT2B*L?}Z>o$4NQQRQ7m`5)BoVD5g*mWQ-sU0Swf`Ts{S!)SISdw#TIj$Z`B3 z0vZ~k!AKIJ@%~KYBhoV_M)6+nK`4`W%X6`NPB<8H+;i!5Fc(d}sQdR-7e1Im_^*Vh z7HvFoA;P$l_yI0?7u&B34L7j7sVL|I_g%jGoW8@H2wD_vLU^VO7_TGp6I*z{4^5oy z-Bq0k&9*Q3rb5L)^Ho(TEU@Q!^7Q=Tp-pM(U5%u4H*>g*|09&X4I}*g~00f($0ONOg;v+!%h(9PNa7HaSX2{qp5X zfO9xY4vR?kQ5=IEzkO?c6{~UmzVy?`hSo2s4LfDUPXY*&iK1|Y-s&GPG`8VK*>2Q1 zhRmsdghV{2!VdMb#*wQvjg8qZBqHHA3MYYctuNoN&BMrA^Mmu|NV+PvT7S_a+t^;& zF75w#t!~ZN(4kK)(UY;z7w$AR>{VgyvLDhwV4f^n7?B|}6LZEd#(@oh&vuM@A^*M@3qhPRJztO-)COZj}~g55K7hV z#V^d(5^{-jNtTy)H&0MrrmerYHI*I88 zeL(*F&6Zuyc-_Nt_@Ej*vZ;83WLa;M zFfWms_tf0Zb!%`U%PTHw!}%RPV}ZA9O73EV6GN=B6|%sV(1I0-#f;#J^o|^D<=3bA z#5%M&PVy?Yq%@S>LogmruXk7nETWrwUIBY{Xa&0qp%|B<)~?iR>#AfhC4Wzc zk0f7{_VRi{+s@5f&W_IzZUqf1^#P+|61U`7Wl6P{%e8%THt?U0rY1uL~DQF z2mqzvzugGvlb9!fGM3TTWB>1It=;_nYvXU{k4;a4zPp`X6k^Ewu53IS0g--i>@a(a5<+wRr55O}zBCKb~1Jm_rIH)we! zu|3iCytyN2{*~9A>|-Bo|MT{@GC_y!SYOH(w=dUqWiOB44vwZzcC2(xN?-C2%LT1m z4)*NIUIzSVS#0}oxoAGmD4f4sa9Dd}`Dmq}q3lP&hwmRdzPGF#O|D#Au3RjSx_z*3 z-)`;v_~z2>!DZ*+a>`m>b7Q{ws;12L`6}u%$YIs3@yNYk`F!OlP|ZJ$q@+sDqO!`7n?{AHK7(<|+J z?JMV<)2ClPhCn*+TpqU$G@Wf8^W`7Eom~m~=pGoj|DEOSx&O1~o$<@g)3;KKt${8p zm$erAA5EMV z2WLC?j~HEFm~+^*xD|viEY~)EetUMF85Q*A=-_bg$9YX@^~>|dIcMbZlIgjN+GSC} ztH1iyR2tonxg!8Ux$~;e-%iB9n^>MI484eutm(Iu%)7ZYMIe5MTLLQzRr!E>r{r9tR_62th))q3|enO)UAM(o>P~EKN9Wc{W3; zCbg!pp8nM*X`NIpMY4FU6ODq@TQcS9dqoTyIf-0NVj4pF*LssvBxFuX%pkd`Nz%#& zYt71X8W6ZgwOkWCT8;%(Ezco{*C@!=EaZsQny}Hy(I73KvPID3s>BOvCjHMz(o)e;gC)na$lQr{CxyQU%5sR|}n-zyWZ3e;(m(HpKj=9;{tGf0LKi8p~qF)HA4~+H^o+aKtRaV?9@!%{%37-Pm7fD=@Od zU^m_+AI>eqMimC1jXT+i888s<@Oe2v)nm*ZQ-z0p&zGG4a7825*Mw%D2j4kf#8Kp! zvGa9D*Q8F~{$8KM`E8?*9`1P)?#$#nVlSr~W$pw}?oU;_HMPxrnW}M%$K6|~Z0f7j zeYa31xmBbv*1@%B{9M3UcL%>32j7ij6w*ma9z-PWKG8g3L6vio1&L z^rl@TvM9wf-xq(i@uvLO_n{OPjhKy6B)LgrJektDXsrvoc(Rbxcl}rHG@bPO%?@Q+ zco~{)mo>EzBN!D_K7c<9rIOdah7uU?`|#%^j0S6jnm@be@}& zvq~_mnEi{pGs}?Z^MCET)IU?5vA%t2E#rp^p7FCfOz4F zI5MSMT|asD;q2~2VTlfu!XPvhihr1EW5au9leX2CN;Q*n&GP6r!X6^X^uUR@S|cq+ z7pBCLn?fCnZ}>G=bnh?{K^p2AAZMAKGHQJ~l+8S=pqp3dqRA-d-9~Iq)wRQ0q81;HqYI|@Me}PvK1n?HZ(KW~n(38`5-6}#+;IDAFO;*{On>0cbYF`sj)pg_u?V{M@n$1zW zGBAhavp>FP!}s83I8!ea6}#*+8nAT{H(0YyiJbB4?>t12KdiVp}&t~jId{^T~<{N z^?6U>>P7aFM+nn|H%_5}vw%sSgpeoyo+eqo(#J`9bqK?*zglvf4Yftxrx9PCsHf2L zXE;qd{EYa_V+5(-F!oN{^81RD1~2%+a$gRAX(=Lz2qHAH>CwTYJHe3vLJRBnIvPo~ zj3eE_Qk~h}TPit-%4~QQ_2BD)ffggmn){sbStQsWW9rh3%dIj!9<=B^Zs}SoVCOmMB z_N@wnswyVklBT0MAuNK8y3;_Z_~v5}7Vp!ro_qI{Be4ml&F=7x1$tAY)h>-TzU8)$ z_!L{h)Q6j@TTa4l4+SNuseNj6)HT@ciC`@(FDH9Sl`B599QgvLVjXhV2bvHh02pLD^Uy0OilHY zA;8Qj9ITu3VP)(0pu&MQ<<-c?-4erlU#TniM@DWNX_Js?!=P{|ONQZDnX=98!A}qE zysE?^$htUw$lUdf1&!j)4kX{J{AA+D`)kC9xA}JJJ<_B%E6?6jx>FhVyu^tHzsVxP zA&VpbHr`xDH8QgVg+3=Y za%W=mD&IdgIqk0Hitq1P=hG+Qt2ZyIe%<-52{KmI%(e|+z?}V>etuevI)UFAwm(w1`Nj=)9bfUlG#lA>~WmY`$gr{92-Y8H12i{*ccpR zY9OtuVc-i|5Yl-{CiU%Gb?N!D;OU|=k%E<+^2hzvI`3r7@OY=aWHEB&Oz}uCVdOE; zk?UcW&fi@hXGn7w$Y{Sr?q@IV-62yTEKUi&QpS#K>3(>*{L$1`?k83>)3_7^0V)I zv9aoG2>#Fc)k(K`-|R#a%(t}}!dD%2#l^G0s8T6Z%jLaW}b5&X22A|Mp@V= zbpOPKRn8EWlrD7Bmr#K!Ff~v-B*3I!Ac;my4V&{~jMuTnP|H2%NZh5!+B_ivM>Er! z(-a=$aL;7eaW2gxDCwmPtNotmx=_pdA3D+GnP>-6>1zN;r!JT?-U4vA3!mZ@GpMT&>84 zr$E0XffqtfLq>;;#+P?~;amnK<|~RY`BRsS{JOZ7;W04lY0-+JGSbgDOE(&sj?$Mk z{AJ%;_nUJ5Tb9M_pr|25x#S7l#U|afzTv&aA${42Ym~&gGo=T0c%T`9u)!;rAQgis z&3iAsR(YL{xFV~5z&%@|s8;H{wyb|5oDFQ>RsGblEw6Jm%#qlx5427HGYH;7cvOzXxyBh^>d z{1xLFgGv5`w+)*-4kb-FMnsKjkA?xv7A)&y`<>xurZ+2Y0 z3F_`m`0x}(XOz`-8`nOKiH>2sjFz%@iX_Fv<2W$N+_~60)wr6Yy81s5-(@WIv&aH^)Upt2ylVJ6a|qSn2m&C@_D?G*1Mkx7$`YczAd;x?snHx%O{M{tGx#{VNg%!=Bq{-Hx+9S%SYnQTU1PYHrZ;cD23z2m zBpY%!DVIB>pi)4{OeFwdkVum{2@sAwsEZ z@mv@aJfu!Vu&LtJ4BUuQL3s;wqaP^g@9B9(G9B)9($cWG-viI{2XJ zmm%ekY3?TW3lRT)Cv_S+uy~#>^C&~BD6F=@sIgujx__n7R>CNxXWRX@yLGVthblXK zbSxv7)6P>Jd3PP^Ul*?O_*((L+HinzYN6u2qmGDimNkr+p4SFCFbv-KH~C7BcM?fy zw5u5kf!U7zhSP-0n$V!L^)^1s$`Ah@Om|a5)$3xhw0^tnQ_bEZe+*Ru zr#s#zLcERkWlH8bsY3@FRH(begRpn_*x0{+4~^yEs7h&XKv6F!?j1rC_8XG#Bn~ak z%}a`VWSlM0$dWAYD{d*wzX|=3gtX)FXS)p{z4>zJZO$ru=-&50)A^SSt&mHH+v}p& zvcD%I8LBgX^NH-y@7~6hz~SZ*@ky|qeY1G#4IP+Y)p$hjRz{vJDixKamPQsi`&iL; zHJ^0n^Q~M{cDXMS!E2?Qit=ouBGTDjV2Tv5&6m`rOamff*O!-j{Cngv8yWgUnC8l@ zJfBH-4|vDLZ>~PGeit2V@sXxX47*GHIv6!|b;-}r-sRft`$|fe{awZ~j1p7H_*jDG znTS=(8(K1!8k6;rX%nU64FSb<8pIdQK$~MoO{dc1Ab*3bxa3=}da!=!w!M9hT}Y}q zs(e9mzbgA`z{XVWO$T1T6AQI>@{5xstX?xl?>Caz*qn$@;-yr~DWR({2=O zL!JF`Ax7|&Vj?a1Q;GV>R>NDAU93Lu=2kgs%Bsd%+HOejX)V3I;!Wa6jJ;ugy)ZwkHz%w;HH8VlP@*rw^K7Y%e*BHj(}2G>BZ-_Ora z8wBwNGq?ozXc)tCSh%61Q@R|C`V6r6whMFc9ekdL6W6X9he3K8x4Oh_Ml9aChzm4H zMRmK`-asR62Tz9_CR+%7ad=xk(P?^bM&Ak|cnEt$^gX_S%b}?qyD597#P8B}zZRjk zQJNT-An5xm5jk8jG5lSux`$oUs86a@2UL2(y+~?@#PoSASVza`Poi+wS|K&&Id5GF^y`_w_-7-!w4{>! z*T_9SE|wZC0}7o;98n*9f$Mqa0JfemLL~{cx7PG8aE~p27RTj-rQSpfb{$=C1P>-m zZLU+^UKzLf>b%}X8dL4(-U!6y-<6fS-o#7xin30Kz) zFB29P@cB=queDmb#4q1CG}Cd?(?f2EsuG%V_WJGn^7FzCCtFA*7Ejtj_3?CPK4V2U zS56g`?%87|F*JvJQ#w)T4aBAGAeDmMt(wFnrQhyd=tE$$}=cw8Eo)X62JHGc&V22@hoJ8FkBcLh_}3 zH`eUqnhQmac{_T!Jw-Nt^?NfO$8n!Mh=m2gsx z3P^r?OL6i#MqaX(iQ~N2i{*oHcK(9!nRP$dT+pKTg}`f}RB~M5_BT)QsAAoIg*#Kc zF$>=rdeRdv_<^-1jQ@6T>8;t}65fp{NqM>=zlC+hj)dkH&E17FO=aN3oZk9$j_hKDNW-WdV@J;vo&}#|YH{!X%PwM7wHfxwHww4jZ6Iz>l`E9bpGgi05 z%pl+WaqrWt#L;fS=E(bX%w$K{K~4ha=|Adhi_@Mim>C9-+f#(|$8)WbmUKie^~Yb~ zCVh@=H}#ZYGT7y&&JVVeAwlXtzx(rHZDZjNgIkrhs_}*i!ajHSj}j&WWuue75PEe+ z7pDp9i!no)ma*^QXb_=1ILOHHMaVLqLChUqHjN%Ux@_z1x864~5akxpE?Ir#IL-JK z;|bl*B>Tn?n}+>bwF_oNkZk|^^ZXtX;|?=P~i0S z{Nd@K-idhTx`7*SI6v8>`~tz^Pf;qdkuV*7g$K8uGO7jOVn-K}9$W`M*|x%?HCp}N zk!hCO0H#z5t^Y*n*8jRyKCw%OfcHH?pau9aV$Cp|f5qGZDb#$^mLVyl(jFgo;|M)r zbr3R^A2=N5!C>AhBI?B?C%D36#CP-v;4{Ik>ie)65&M$C6Ke5$ESDhQF+6lD?WMcP zpx<}Y50YkcsATr+>y(7`F9(kF4sq}WTkHM&piH8@|FkN z2e!P6n_K6k-(p_bSZ$sx>2tFHIshI*27d*d99`Jv@_WV>kzcHCRb_ zbNTjMjRN^JA_ZR*LxoHsmMUBPn_YQtP#!a5k?Rlgn%384Qz~$BC`Heg7+VEDo*P(P zCf2*g^8`JcDUw>NwmbJYPB4G=D82GWS3_CYo-4~HX19Cp>hAYR{oLK#S`E&2pPeGOH=<3i9yCQKZpr31LKPY^!^(xVVbe2=%%KcPdVn4;0POA3F`I(;oD{D++-Od zI~igt0xQDh15hOmpZL~ZCI2Uv-3%&m+d2*?)R^^if>B&XEPSmGl43fxYw!i0o+@Z@ z-WMu7Zj?zOW6S(qD_?(*M=#bkwk{PM zzS7cLM!Dmihuo`rk+9m_FCsRbZuOR%CuhW|U}2yyI_X39)v2|@zA>FfMy|rZORQM! z*65@iFSRM#X4CvARfCEzvMUc;wjbAY9iOWXPHLU%@=%ge#a@r*T!#|pc=oSFzavem zJY20^!SGh3z6h}2$-GG6^{?D+?GpYH89++@A%-6AfZx+9IaGG*}F7nTVc0#+Ys+-ukSV9F@yfkf(Q96|S* zgQk7+q+~;)G8b-EoXECFKl+6KRyas~$CGw3ihSVtg||*{OEo{Ct^Jtd)TZ?=_w#RQ zai0&Y2%a&82^%gezS9raHZWIYzVz2l;C$$<(^ag8LxX!D`>%8(y6~UgNsq$z4fa2uf?=R*b73CY_Rh%5`u`+fU(Gj zfurHxIUGS(w1=^3ubtjCi#ulBO-LxmfHoA)zN@h*rLn$`3sxE33&1zM5Eo~hJ%$In z9Se{}ZEEIBZ|W>w-1}-{5cDLUsOIi^OZCBEl1NT2N8b9zo8+Syof~CPfx_~*#Jr;~ z6(vm|>07+f_htoxl!e5$gkzSkY6PFK&4+rnPl~Ym7RK_7`QW$}ly+YYf;wO5_&N)$ z4|di-=D+#C^2Yg`Tn|kI$-}KoSZ^Gm9qeOq-?$%-)pawO7o2 zuj38J9s#xFdw}bfo~cZHoy}s!c*gwsUENs8oe&RacZx;4ci?&E;DBAnYRbDUK38Ll z{r6?y8wiWCQsoK6XQkzmD`AH1i)Wj9TpinD(Nts;$wm*1NYlI1G}@ne3zd6v3u=G= zYBQD{!Pcvtq9M=3WJqQ^b{K}JYr}nSC@x7LoK>BEQa`p*>+tqGKPsKWa9{w|((?IM zIeB3jiLNzD!H2_FUKvl#iGp1_Ltbr=jakngM5&K;udVH;^_B9QRQ4qN;ixpHH|fVov`2D*#zuW!}kF_Q!jXXB9UFsh*pz5 z-#Z;6>&aT^Zy<(SukqILmli#Dwq}Pti?;nA=}^w$oDr^uJepsOF~uafN8Bd49-uvK ztnNXNBDbbv7qxRjYgfS@_uDGpR*tdoE84D+B{?4xn9UJu0 zxkz!gA2D*_z+M^;*fBI7G2DG7d+95d?f$EKP%r<30)pN0dZ&i|oOt_5%j|Xo>xhsK zUXNP6Rne#O0FH#9;1DW>o%d@xLBEZpdOq0d%5DcsL?*Sb5Y$wdcb#^;`{q)WL z^FKxTxhj-czTf}!m9$uz^R?W@TuJ)e1KtAetDVeG#T?NA4TK6wvk@Ih-*`)2gdAnX z1Qvfowwg)f7JumM?o}k3TIv})lWpcSdesjVZ3oE=)XXM3I2?uj8Z+m2OFow?PvXZS zky{cEE395W7ckWwKB9g}me`?Tbo@zJ4bgk7GuXaXwko-18!Z7({)!uiVg{M^fwsLgrKP5X0<@S6SM1XsbxHPE z9xCCn?;i1}cR+yzd95*dfwA_vGv*PLK^jMXB*d2~phw?vO!l)$^$DJ#;V^-=Uxwe? zng^`ig9+}iw8I@NUnN zkvgg>8sbyZw7nuP=sFa~pi2l^y)TY^%Cnn@sPS>ZCp5@P#r?Vjt!dd+bRko6(zJUR z@a|nqb!vkD_Y!COeAye(43^IxfsSjzi62qt*;@JyvaN@hk^AQLinA>INVQsXd}&*; zvdOzmDmWVBNqp^m(RA0oS75*pAkXZ_8u! z4*KS2Z$8++_S#po#d=PCVx!W%i4;FjUgTBIJR}u3zN0EPuBg+PJaMrT{{4Bw$oYv& zvm`Bt?wy)ymsc6TOFw<{9nX_MN%G#iq>@sEEMvOQTKwNtQ2^AQ(UC%?{{PFD|83nUOas} z_{)1)Bl+5$=i6}}6%l5uH!q7-5-#Ia5XUwUePjGZ&bpO(l3CggJ<`;(w_T)1zy{x& zB&10FvDZd#znVXKp#ch`&xjT*T5`b&7@-dg*!72SO|ZZB^3 z{Fd93_WD)*@tgtXujUdz^2`$jyROYby)(%u#vWi@(Ga_m?wu@MHjHsQ ztZf}Hq?JB!ko^2Gj{b!ISE;WUo66|U;#Ix6%E#XJUAR@X2aBMCiI`nAxHs;dvt(FS zjpOz}tZCf3+}E3qlida%PfYT#`)Z-}%<&qdU6HhxTMVX%X>MEo9ZYKuE{<;JXg-|I zEA5`P@O5gXFg?TC<+!RM?rI;u2edHZ8Abp4qpmM&NDSY-Pk38ECu=S$l(>)4dO z!b-Q&r!6m!=)_AnS;C`<5{7u=bk%Oz&z0_lh){Jp2N8D46f` z=Q?jLnP$$wk8+$XHv^S5qv&0cLmJl1smC-l%g{siug=W3SeFvyV|{$B5&tarcwVfS?S==% z4&T>sgDPnnT%{(?m1VW+7|GM{zt27h9yl-Kz!P`)d@`v`)lWkQdB$8Cly3Y}?1Twx z9$vXvpcQbBlzCT(rDM}NV6^aR7`bZU)@3%b=ezv0j(Fyg?hgSS`>OUIW(4PmJrd*B zEWb@TA?sk{dd6Qjx%DT|A1?~5qlp>^D{4!GKL?0gkg`%K*^nkEA5VA_`;$}Vkmx|6 zq2$r=UBBAzTABuyEPZu5n7*|5{mT7?Ntg&i_?I?~%~7(Q75qDHj;bV$LW=8TiyVoUEim<<;NF!N{NBzqpoAux zAQh5K9ZVn7@kMTVFQtY4hH9o**4^^{Vg`YF>7s!_XX60lm_4pg=6QHL?KDZEaaKV` zQ*$DnHBYkx3-R;HYk|+-*40XtsP~DnQmY=XP?33@4tGdmtWy+n2r&@7*g;9JM)_}< z2hU>{v1Bf|?M64TSB_mTgw$v3DW#9TAn@1Gw^`q(=>M)P)fAkiI)dHJfhAs&C*p^Z z9Vki2eCJ6D)}2q48w$k-bdmP(L{6;$7M;e5>Xr zj>YO~mRZ@Y;*LsXqc0dSLQ${qWr!OIv`k{0i(f8~?e66svMfKN`MxS-_LRG*Ltkt4 zx4jhRY3=?kk)3Wihw_L4@f#9@w(**eY9F^|rq5nKcI`R}<=rF^cum{RM%62%uO5=Vc53TR zdp~dz+YmWyt4#Bn(kb?V4?Qw|wnZvy@J`_2*l~^(_hBsir&G3gtnw0zF)Q%78rB|i zMG_>-7rP6pV|XE%2wB;j*?(4HK9~c&BzaE|E)12TwT3 z7~SiXWy_b0y>&^;g(SnLVZE_AL%ukB1@)4!P<1HR%05P6O33Q-?*uZxEnQ<1%RQ%R ztZ`vg!u0qO{_>R>?=za$Yd+I+M^aCEL4#(N{rg4lk9AC`Mn>9c_m`sj4Z4BvfE5}Q z*Qg_JhyMzWIuGg^@(-Q5RI(H=iM|t;?!&Cj9?f&8wL2cKFGw&d&0{`s_s6OE13QbB z*@?o%)%_jgo{s8qDgnythv0VQU`HzX=U@38O=>qj5fNZhaNF`xjuB|%ZRq!vHl(qo zzp=XvAWLh=zBHLV^7n~4fQ4c6Jms_zcPW46+*=arUBJ_xSK-_Gb5i2X6OF^K*&)pS zF7=c@rc5gzXxMU)w&uxx2SaZ+unzWAI@4mt%~n7-CK!`>4~tyA4oiz(Od+hO=w=k! zD3hp-xr+4_nM>8=gz>dJF%;rRS=qC=`!_iyycD#v5?>r_a^t7s7W+^iTv`2w6{NF( z-|=MTMY6)j^SHf+^aCiT_s6YN;VA~feBp#vN(8L2_>^)8AsHP(1q2Hv*5}x8QoN0$ zS0Ff3jCoUbg%ea&^KOpa=X1K~6(Zl=i_Yth{*{=Cn>}X&McY_d^qrXy+JVD58)8na z{fqj8q8(Qon_b8R7V>#Ur`CZD^$eS!$XnM|P|ilEh0EO#5Pdr~!*u9a>!bvDS-x{p zG8jMZW{SKf%O;^?@T}x1t*UC%67t-*Wfc5|?IY_e0?e9pFP&a) zLM&)qNP<3v4*q`R+X2<#4!QOyw=Kp8EN-!Zj(1nuR_3LC=Zu0>1)D#O5@BAC8B%IH z7qS}Yf!M^aze8QsQtDc;Q}pXuU))c*^>BQP1TOuyYQDbE?Iqu1T)7K1WJMcFpD875 z8zk}=ON^8G&Lyjd^0+b0t%x?)#;+32OeHX1OQX$enezVwGCvj_43O$e5Hfb zGWg{7e6oE)ZK_UBt9b{Xy5g$TLLK;xm5v>Mzk6`OS5rySz0%;rz9%t^zHocYU@=Qw zSo91f)(XtXB>Ce8j!_sQ+!jST$|p+|2zId)*J`G--V zvV8ScHV!TzjT#bu9p&v=7|9|U25BTBfa!?|l2zBx{{H{-$N$|=_ou=5em<=e+zpB9 z&Omhqb@b0v>wj$-%z{d{PmQQSq|2qY9C^y2m^J+UvK8e`@i%1U8h3TNh3{4 zN`q<8@O%hG1}g>~DHDc<5F3UpJN#;X7a>$tBhlN)G?%9=bUZ6&Y*FKqv};rJIKF=j zbTYMbVosd5IGNYNN|h>LMCSx^!TBtn&S$AJdKt66dX4t@f$d?ppQ_yTI(9Hga~QHC zkc5Y3KV8}WH9Zerq(V1@gz6P8SN;|fz@7$`2B(Azn<=r^emSUK*Ga`$2?$H)zl^%0 z^dPar)x-v}4>fAVMewLo`b^-yLtzf>7@xWCZC2M4UcYzq{Wm2~D{WdsC|VtOC$2rC z0+m*>0)rm-fkU9!E#1$5 zVmS5@Khq;DKf65@J5%KKduOtr$P-}0S=idHEy-9*{a_MGgNSS+BFHky)o#9P5Tj`=;!z%0QLG8RFIS;!a71ztq9ToFPwV4xd#&hD0Te$U z0#D@;kwd??`sn{T+Uouzqvq*#;$>pgLA3YYn@6*F`BHBv55sVRCj2b_-Xj;8s37Q> z47PR5He4bO2m+293ILqjO#h(j$h4&WCfIp?c1-O;3Xj@y-%bfJ7&}wF5{>p=1EQ{r zmklhcSb>{i_VNI5X4K?;006uCkNqQEB&fKExX(+wk%Fdn$Taz!bVFfrx5BG~-QKRha z>GJp(BuQiWc40V1TdcYRea#fqR;3AUYuIM{AAPC)zsU+F#634D2-zg7+&ooSt}A%AbebS|W??fSnFcP8Edcn79$W&zm+!yI z-Rvg}$rAEqps1fE^@W9$u*(_A-O^TZy^gHU)}~wPM36V@-24h`Mg5#49UB43yhC%@ z!ulWmusEa#41Mo$VEa=NvuL6*w9mKyU#|BTBwR!8$b<6`H7^^0F$>K#*P|Q4ltwQq zrKHjP&B;*UJrs!D;Si89=DZ`BOhqHgZBy~(Z^+bl%&fEOQ6LS`xf~4cuj~x3gsFp$ zi8yor9VljPE*?vh>6|TBCqWaGv|R|L5=e`3NhsQ`s=W}&qFZi#23{_@Lz7AF0%V<0 z4Q{axsg|CZkN`*pN5~x>d1&lf}aG+xy+bzmygL|hKEb2e?elGu!@Nov#tdXUC)Ar+yGmz zq~ikF0Qmrkwm-l5#0txVDkD)LrIp~af`RxNjpbpW%9GuRt*{Szc_MuO;vo&0$wWj_ zHXjJqx-!6(#RlZ2cZUEPv0t2aRSrYoyZ6vWhsLEJ05Ox6S5|KvO zQ=ONf_tk4t*H+J}eHxk})u{#%EOd0{nFvH5p3Bp8sI@qDGV?!w{jaz>VogHYp}Y#k z3K|xS%LYM^Qy|L`G|n`HWMd;E%HVgE&B?Xosq>|wIY4Qew4OL=Ks|On*>`>JuAuUD7;M-zOU^4IG;)j#?FHj{uSDW`j1e4W^h#Esepm(e zj0P}?px5aO8t&u5(b#QzJ(Kr+)Z3TyJG?W@djK~gf$vM@s;5~(om<6=c4Vvm`5Tcg z0v3fsZCwLkU(SmbSkTxBuCzZhd#PCDW4wn^exLT9EBT6c!3I+=8Jh8#KAB{vh{KXbY47p?4lIquyHwaX4#Z$-QfLCEz%>;+bR6So&SjY_q2mha`_z9WT7 z=0nTIByA$%Ga1U1ruTm1?zUt$o;xLUo}D*ocE;V%A|sv;OB7TCIb#M4+$q9=TM+ z!PmkpccewYLy-P71C#JD1^@wE{Za#!&dl|5IpOnjxfBtbYS;B~T{9`` zhSm8tx>8OgjGcANj&UYZQqQiI)-M=tRA=l*O46XEkMl3 zVTNEUzSWPtY247fi!7_SABt z)vM&R=&9Sxvjd$k9teOrt1N`-dMJV+2!tfL8+_kC)aL8@+#WhMANF~A&s7I!_*P(6 z=4qfq05W4O)<6D6z7INGa7Wtwih@K;&MQ<510kFv&Si$A# zzY9p5dr~C0SxY4{nxR^R`g=gokpBQp;e z%3x*Y=sVUKgxowt-k~xnFN7ffIpW;7B?}FUR!g&Dj{Z;w+F(){ znJKAUw(R8#F&cty^EVhV6c1CHLS%sEqJfqpi%K=|Vf#}lX(ME8c<6kglc)G8t~J(E zhx|Z~N)KV=zLXT{V}|pBpA47V_?&8gmaL~=F~_7ZSF+BbmMe9%x1iNx1vkMB#T66e zmL&z|jol82@Q$PLG`L5jUxonP<>wBaFOF#|FlL{rITDzgKVJfK4`HDhz>o-79^7A_|K>E;z);xNCavUac$ z#+{;Ahev2wu&_{;;`?&zu?e(*0!uUJyw#f>U=sINdd*mGK|N~fE(3p%JS$Wg4^;k) zBX8bN8{>Qd7%qjL1(4E}bu3@g4R#h*yBy>WBIGI=C$IA&WTVsBajr4$X} z@w+|tZt0Ri{Nl0;4(tV^a2*Nn-csYH{&aqwNu(W-3=)o;8*WGsDF!-F<1KG#{QhI+ ze-_8Z?|m0G2bMgb#Af&zQQe`ej@fA$^vn!1EW04PARUik1yUml-|ODsE>i;BhuQ0P z86JuIHZr}I^^iB@2p@p<#k)5hbQjqGi!F;CUP!Mm))DX)mVAaWFfaJAns&MVw*!P2 z)S-$B3UhC1?rYW{8Xk0C4C?Q^i6%4+V}B72l|)G)kspGoLNHn~|%l;f?2pC|mO zDFx}nAqRAXNMRIS#<~3zyg-PBI4$fMecyRr!pf3|WQeB%5Y72!KWCNe>>V@=Vd=FS z`reGzi!0r&$P4Bn`e!G8dBa?lm?9=B;+&Q;5lPZ53?NwZ&`U*A_6YL2Y62(+JD-SC zjsj#qPquk)&2`{r=X3wt^LKM8c%fO_ zmiwI)?sA`aR5|{2)ve7*2WM<2*Vfg|%Mv-Q_*n!Z6#Q6<0C^X8X`cRLsgnC7bZb8h zc+jFq#_m-rB{v!qg?`qhC`%;tvah{M6>Un@WVkSnT9b>RyGTfcp?MZbB(*PY=sdc` zpsN46hlx8>3DAlXhKmUe_vVTPVS@Pe{De{mF?7|PQl?4(o9KF7=DYY?vll# zcfU*pW2Rbhn?`3}0q6CV?a|KMfvOPg3rtd4DZ+oBHGSrni5nQk=-}sV9^7Oc60%;B z+r*?N$yeJ~Ak*^&#z?OvYTz-E*pZpWruzrUq4+h3Y_yu*)tq0RB}z3ZtcoS4pvod~ zI)(_jXCiVWlrX4{mIP|~+Y~&Bgr_jGEa5cM<4Gq_l@i*O6GQasOr<3PH+sGu$|+Ne zg>t$|^-K2ehqVO}TLh$JhQ>_9a|L z5}z}Ni9F9?*vWp14pyt2gHyH&&czhSoQ~faqD7sJqgG#7=LYiyk&XPUHdvT!!uK6fz`!D2am)6uHs)6~)fk9|#{;OC);8$p@s z66J%cyRH7F3k<-qMIyj|r;zn59l|{(@H*gb{0wDn+yDl?MELV+Vu4n zI(q+he%Ag`YiYg4u}rCZjJ>V77@aF!hYb}p%uvXZ2^Rgx__qJCd}T0Fga3jP**b}& zgG5lRq(?3kXd)ivO&GCCGXedfT6v-e`5-fnSP?8&Ng-$LRAJ`JYeewyab`CD+eAe0-}0Ru zNY7KcdxH_rIRO=#iG6_C3$4H`V`supgIc;G2E947kn>xe>1r zWC0o5vD8_8EM2v>DndTX_Y+N^W1sQ&A!B@FAE-?VY*|ixoHiK~vQ3tif1ie-WxzcM zl_q~u7=2`9x?;;>PxmH^^*4@{?;Eg}5fDyJ%N-Kmdk`(!|kdN=6fqm)L894>>S7m|W~T*#!1c*=>KKt_Ih8`SJ4@aQd?^il{%}0B+bXk!=rs?Xe74smj%w za>l%O?_DSY1eRd*zDn5bwvxobFEuI*YhPA7QoAoyQJLV66LvQdh}5_kZ|<(Kz1!HV z*s&0OZLDf)Ab4n8uI`Fh2MEZZuVRIx5t6m?5mqtL=j#6xK4z zQjh1zGfVhbQA=}h`55tZCD1#4Ait3!4V$Z$^=VeLtnE7tV#6T1Ugn@#}zw5+ufs(hsKl0z}NNtP0nU^gSR zjo66KAHd8!+3*pTGq1!v1OU#hXtS*Wq}zV{VwfCtGYIsiIal^*jjeUCK% zdM#8{am7C7YWPw_3P4vt?4Y7hd~K9g7-C3ERCxnH=KI*l{x{M*lJ+X^D>~=;h@a;U zMKk9{?Kd~7H3amX#|DwB@xD0N#CSl*2{i#{*BJo&po_sld zdtU4TlJd~<{t#mvO|J5^;UK@8|Ep#jD(^}5VVecikgdjogBwIHu_9mY?}}p901pQb z#mm`pcWX7EeC>C>&;-IiYUzlBhlk#Tu90qm-AfZj#stE!|B@L%=?~8o3cSF9rpi! z!IcX=Fb`;UC+62|&|iQEG$8Ex0fbZQK`1+S&LxFKmE-P&Ca=HP~{Jp z`vfNVndEr1l{i71uIb$@*s-PFfb!HdGq#Ql8CrILLH`QbF1{Vy?4%m-B%Ixyr z1PzWYW|$Ihc0H2`;=8u;wr3?$j4LFKRwKCu$pYq4Msjx&LtWUDWNH!`wgkWaSz{qB10w{x~@Gt?$1gVb2ujuhsPyIKW)0ChqXGglfroDBvZ} z{@*0Wm3@a>jQ7CfGG+x(UZ;DRV{*?kZ(Fc;8qY=V=%8u_{Ro-6pJ~^UkcSe9xAgj- z6GJzt{omQUE!_CFHn@Yu&S9creEz@M^(t6ewp*se@#Zha09b-XxSk#q2tl3s_VK`a z16T^=QHRIN^G=QUn$4))M`g>}$3z6CQ>7Odsj}>-k|tux8vKP;Lce+Bn)D0+^j0Ic zEl06(#bn`y`rbFsp``HO7qsLQ?QngwIsp&>sUL|b29C6|0{=#wtraV#X7MLHdi$`b(AObnBZqm?RV`M8ECz{a8J(XpI=8 z*HSRkSAPzO&C@piHyXa1xJD|^26`of!SAC9BP@=?9%iENDJ7&m?V+VL184OV@fsUj z?ZHJNZWDA}mdGn)S%*1%v315pBs*H}g@~uXTTj@?%0&qV_#8czXC{{!{AYIfJfo%N zgAyZ304k{2J#G>HQTG%U>E6$3=)wXuIf?*?NiSOG-Q@5r$aG6=S*Px-J~nrO=AUP< zcu?R=@@F@9Y*ADGKV2cw*q0G{Peb_Nb1TTHa!P3{h^ct)uqyVrpsk-BG?O8nIRZAY zDf)f{6j9;Vz>3R_SxM+aS!V$#5YhPGC%>rceNX-fU`?i?sVhE8>Si7+avg8cW+^ff z=uZ|jdD5;n66s#sd_(gB5CL;IxMK)!qFAn|mNdZI@&g!cAZj8u<~KI66a|Oa3$z6Nr~5;wkZh)-cM3>{$&8!_`R#w#88SP$}tI98f%5hdFVXO5>AUc-ofQg=Rm@qY0;v*42Ts zA|jDUj>(-yjg=fxS36N{&W2w%PjdaqSz)+`6@E>vYi13uoq>g0M&EEDw(-57hBCta z1~g_%F5q8?b$H9Xh+H$3k@y!*c6VY=zuup;?f9C34kc#9yAY=m} zrw&YKnIIX1rnQrJ3PZNiv!1d>gnSrQ%3nsWZxPJ^vI2cvu11UN(My)?j0G+*RRMx1 zkie6NGMAjBD1;aw0}4^Yge4yf3aq z=}wMl4`Z-ewkdPAq3_gg$LRHSLg2Eeo1?w~g1kkQS^n!uJWJY(ofCq`R(eH6B1ziP)c4_kD%#K#E zisAb{#1?e9VS$Lgw~1bKW6x-7 z7}id(DJpcVGou{3Bdq;gVK3@A&)7E7)$Q8{CwsjK@eo?`4*SiWL_|bHUT)olb*uH(qc9!bKe6D_CBW&YNNox*NPItm#NK%`;2iA2UST;_*Q@SI#U)`dGYOe8 z6*?^^@KIY*;B)crk>mBYv}tcx(NW9G%#$6-kJjbkPDflm^mbAobn~*s7cJ?>yhH35px(azkDB{jcg&WYo(u6X zCkLP~YmJ{1l_5I~X6mW(HaMZJQ;i%Ph>K_Ii)8?WMy z?Dg@cZpDt2{cSdhS^yc8M8csV5dso3@!1Q9(Qdu|9jv^{hbz-@5gy0<*5s`2u-2B@ z_PW>a&Kux>!Ur@6Acz7IJ||E`6bxFvB+kV%!UrtauqJ$13R7Tc!i&Xaw=KsS1**&r zO{J!AGg$j{N***_x*|4K=yEHOOEG4pIPT#f1=S#|(~`}K1Tnff6FwGjE}&O#eMrD^tUxcLPYu^OyOiZ#`6p* zpNEMo7NH6O=u^^SOfXRTSQ}h0uxUXIZr&C+w9*pma*eg60+uUJ3zNi<{lE)MC-Z-m z*i|}gC*M6zFr)Y*=4ilGqbM_fcLS+NG;EoXi0B{WZ}S+)eQf}Wb@S~_UpR5hQlah!^kj(-$8+_QC(KKkmb(J~0MI~x4ER$oHYb!fZ^%0- za6y!!K<>p)HIO&Gj$FZ@GBR{3i-ft?+UP9cm;}QQL=ZW%tb`~cDpD#{5~aTw^*rjI z#0(;rh-fdlPdsU}e|#S-oZ8f(qNbd5pcARw`Azq*-S(J3GiWBp#YkC-u?iCB*r4rN zfQtZ4B+|e?iJ&>tUXCp1ug_u{=iK(ZP~UGn=o^{$tw&{~CZ5fYXV>bu{`}7k-z=|s zn=^t8F`4^)nRIb_BvfivH4`vV?J6Gr&_?$E4Ik}wghb3Ruo{d{5~kRSFO%<-PalO z;RkxKpjlK>>2>1|qOAo1KvkzaD5_CdtLPBKe6-+jRwHKQ2rYGcoY(Tuu`&9_ZBGCy zAXKEQGHRI5F>Z-Lk7|@MzMAF3vyZpiq6M@_+5%w#dJ0qQ31v}~aPh(uUGG6yydU$} zT|5_ceC9|MG*rZ12jAev4RZxBDGAfVAPS_Nzm+E|W=rgTbB>w&PX0zOLm8DigF;gpjw^E+PdN&Q<2oB$tE!izrv{y|k?!GPEJ=?R*rqL(R()^BVMT_PY%k|xIs{jG7W)&e62q<+sn8-)mN*a&it5I!Wp8tWVJ z6V0Dt_IVM3!eU0cRp@xd^2{=cW|GFhYOYQ`KezgHpyUY%DA-1u4E1WNyRil|C@|Tv;SJC$dF;b@^*pKE zcfQ@N50DabQ?^eHt5HSfpL0amcjlalI<3L@5%wEBahkV1CAus)mUtNimm&-nx6@0* z%xmS~ToOtwRB$afn)zY;G-*Jo*dAq5GV0=M0M_0(j!~b=%90b|iL(b#p4=^#gRPk0 zGA1PwH$ayRLC$&f17K8v3TWU2zzW5{$sb$H(yPmfUR;<&&I2baDwXg{ohq>iY1v~c zv*siGt3mzzZr?v=tuz5v(WKI@XslxzjZ*mq5|$bFWZEF7wdeLI83wZTjh0$m9k?H0 zND={%Kh_M4YyUux7i}T(m@F2imoO*w$YuBiY)I50kpfvFvjt=~<|jDMg0FBa(x*J8 z80BYh*Ay5vqZ?c51mE3fu;1#W$sXXTXC}v2ARTsdw@2Qo!mh72ZIzZ;bAg19ixnWp z<2bs_VAG$5eoS(}{Yx{VUa#Ld=SKZf>FE%)YSKc5vHElHM+IJeKJumgg5SN=U9p_M zqhWfA0D$!sDLWRuai#fi<$b_4s%kZ#Bal%PC`M5T2AWc-$5Jf~pRVVHw z=aBMfefv5LK&U8i5LSYrOBhBlIY^vH6`T%w1#8zh94@mnpr`9x;#f8+kZC#DYXwd_ z2RfPX$Z8J`gIv@%uzp~lqS_7e6uzakF;9alTEvO07oV=jvE=hk{hB9TL1RE(u|K7X z82*XEnDnHm6DOYDI=s$;4vRF;M`8!k4xl@>q{=_t@~(iA)v(AT&6Btd@92^lYXH79 z@!AFypS6k$yebXu+%e!pUp=ec@)FX``8&0W)60S;Kt9PWfaFcR<#pS@sxaw0Kut}k zQtKm@q&f40&CEx}yi8euS1l%iGBo-O9X2-i7ohjF)Xj7D)&Y1`h|7z>{EqJ zPLHsQxc*L)cpAdh9-%nn2uFb7#*Qn2&JD9!h3OB3jdH{bq?cKWCzyzT)Sn-!ZbLy# zJFb=lCsK&MHbI*;Kp9*`kI~m|T}T9=`p8Fw!!>N50C^~3mnzlQ-Lm6m2z2ATMk^LX zIBW9$xJSw|I^eSrh;|A6-7Kz3`H4=x-`GzVKA2_^HmgyIj-=`VV{1Ni?I} zPzoR@gF9QRbKPin*uY9+-aR%Q1$HZW)30-tS>0;%)UMEPPK1WQ6{v4=)0U5tg?h9d zKm!6~OdT^QwTMHMUqb=NgW2Gf9&H1W9mp*`^^n9BP7SuO|}At#2NP&-z-l zEYEUM5oT z0}!bwV?vZw6+=v-s;a1}0;NI2OL?J<}0f;ILVkM0ozwv4j^L7?0b(p~hp+P6JM`}T+?FidB zckswO=K*+0EyvFsoq@=Z0rZA4fr8F8ELM3A4m9|Ldej3G=Xn>5YgG^`oiZE5L>Pf# zW0YCqR97jA_aNF#?e&E@%(qPDxeswH9s}ZzP=PV&9Rq&)`UZ$u-$sqmgHRo5rS~>s zM_B(Q#^eaEwV%4apBzV#&HkGH+sc+Bb4N!Y*XiEbzuDqSe&0MmhtYtF=to)(3i|01 zrY%P_w9O!n+bK_1#=?d4Ktkj^jDK-qX7%cK03DY5({y{Uu^ER8N)TwVmq>P z_n}4vl#qW~0~R>)2Zs2~yajG15*-)u{RjCfjX6~w$15)x*!U~nY%T%NRM~O9i9l8u z7|1=gtL*0KL4Ad&6+o#ICKL3qAN~FLSC^z!D%+^kawit~w7V#%L=b^D>6-W(Q(wiM zleM2tbo?(L>g$!(?5B+rBC4vU*ZpHQ*}g>Arj(U`!7bFPhpwg<7N4!z{QO7mdq!8S zQ#A5MPPY)v>oIj|27m)J1qULKQDjllsqSvKSCb-})q2mMX zsLz@t`u{7)X#RBm`})W~H7r1q1l8Vslp9Bcd3Q5cn6|x{UHY79?f;VZU;Vn{8HN9s z|GPCvjTG;r$^Kr4LT)f>K0SP((ga3qVdh%^$r>;FXh;{i9#nPp^g_zm0X!(%xBdNF z+7K23HwKsfEPG-YwH`Pk+mY! zWr%Iud5kjaYdQ}xymiHa0yB;eCr_=XF&&7A)88CkBF3rFpmHNw_^#L(aazoLt&Ow` zM^llEPDll3kwrcv z<#Dsm{1-0!Tboo6$KG1uH+LmrWS`EQjC;=>1@wl2^RSb4$*sEFh73nsPU&?W&lwXi zgLl*C2MgY(Q8>mq-S2zX+*?nC_yNAt&AYKz%sJv$J;LqX;AL+TqBuK2|65@KbY1U~drIVmE!g zLn7oiO8r?OVF1|ygal#OU5Oy~DhE(vxol{-!>0`EH-u=tdZvB-gQ+EqgqB!cbCW#7y`J4y zC7tkok4yRco{#!82T5vC{gbl}p$s904WPmfNMR!^%rJtdN7y_t!C+TtI^4o4N<$nf zG995Ru8mLMkv|jjjd8EZ-MMmlqi=faKSjQ`p}TcP#hyDBHHa(AxKOqUsIWr8fZ5_q zWc{*Pzz{r%LIVFY*JN=>(U63N*4UAejavzR+YBDQ!34kV**}ID5tD?iK-C`$x4M%1 zDlS~f^6Vj9bm8!S71-SUpR0P~tyyjH1cL^x%dr?dFDhrl0sTExU|}76ujQxS zhvtG1M;j^VdiX0@&F`JgUu1*c-16HjmPRIdy3oV`OeanqgP6*~nctTiXfn9aMZ{+X z>&EJfj?PDr1qRegv1&Ob^BVqHIM%@S)U7O;q2u5pcGhw z&CXjmyWUE6(C=@x-e=@*n^#6_zPn!~y}D>qXB#Zh+h(r|+f&NrmB(LGc+xcnu# z4ttAT&{vB^_?d73A&WgLd*aQ8KOO`;^HLb#T;i$|y2ak5jo)_FufX^mg4LrBkU>+q zrR3=?i%e-5UKNYd5Sdu=C!HXZDfJ_zg|}es+<~_RrrV@XT9^|054Zjfv^TxxRPF@i z%0v83Vcf2_y1c4nVYX{{Fo(Uh>}lw950_`TD{F8(J=z`bFr_{j`_g-TO>-q(4!L$u!v3w$h@mWqmY0tXaAuigY7>U6t<*J3e7@!LZ_%yRx+5lD_j zRhq14Eo-9bb$GRaYKi59eAdG>!Z+ko=627M@6-4A!UeFQjA2%eZalq9XkOQ(Ej zg*AIc8KTu+8@@{H_Rk#?9;0^9B~c1tMMLz3j5YAFyk;5v8Jh+c-$Lea01(qbfKX}D z<4axe8Si`F>@qVh>k#uG6pkQ)E2X5Mma_lQz1k+m(c_0aUN0% zgm7{lBuzrH&6y#Y4|Z|)$VfAnNeda+XJJVWqo>z8Z873pP;D@POD<*Y25->9tj$vE zi<2yU=F5xZ1p}2F(dVoYQvMr!&z?v~WU(~ZES-Am)7pP36w2fu+hlMe2{W~=(|06b zoo+J;_ARlnIsgMTBI;@aq_PQVQ!JwXdRLEu?_U2e;k#{XM94$hz>MPVCpu+hxE zT!7t>yi~7{kuR>YQ0ct#NH0rCl6Tg|ZRth~QDFPiQLM5MK#TGbgHy$f`-C0uy9PLh zmPcc+Tf3c~&)pm2Cu{#7k=S|Y@;$ycRTX9)7&&g8tjrm+X3a^nX3a^nX5>QoTE4Hp zrq)NnNZH9ct2w&8wD-z*TK{<40_KgozDAmp_(5l(SL*N=js2g!!u|aqssAVwIROGH z0%T?jik*4ZtknLl)L!#KP#5j*8N1E3Wo=Gbb|8n3>zg~kar{>j1GGO zY@3W@et-eKMbPPxgV$&ACFK@ez&@|BZ4ZZ!JPF0cK}Yd8=?^{ETP4VJ!XSOZI$jc$3wQ;K~`KHOupKEJfubCW1}{>TaX^Pb+mfAHI_!AzZ;;N_|E z&>v>f`utj3fT6u3xFfzcZF4HrgGwSUKetx_9kpE4!4K@ZJSc`kW;z5-F6}>cYVFZY_qlzW6N8F) zJ&so5{onLEFujiZG2h4A6+cW0n=kkeS=R~1qmLC2NI}`S1c_DvNry(~5kfB4yk(bK znKh=&mSWg9XXwWCnc($&D=>*8X?mNBl_0TK_N$K=E9g!o`B03@jYit&7I=|&{N?g} zLAL~vjvQ6JUw9Hlqou-!!~}Xzq`PGPkt5(h5fT!pQQ1B47hT|h;!Y{uRT?_h5iKhC zDo0KrG*)G*OWwbS&GzV|)!%8r`2)jAOTDkiLPDSFPL)etu0KI$Oe7K+gp20`hD6;* zrii~31SSpW#*c&sq;`&JJWbP;GbMK!G&E68Ay=obcdzup<_8pje;IDygFN>;$kS|xne=& zG7f?dl@xaTase|OCu;l<1hECghi!>&fRsasL}#8$5nrQL8e1+S)RC^%LqIUrx6&@j2^tO#aQL>(0zbWn(F*dxE0 zhEof0M|Sg_-1BVhULb05@DL))X6Xwr6cR_Yf$JO)pVE`r{4P{MK!&v_i;!LNB`-~N zd-(o#8%~-7F4rg4X2pIn6fp2*CUh-e{1AzVNek` z55oJ(GwCK2uyWlX!qA|!)3M;4#_Kih#aHfY1zz=gRa%Z+wY%7V$WG5*Ajksc5fqD( z7$UPTz3@kXjlm{@t>vM%K3#b;ONH13@KVx6|72d;=q$yjr^!DGe z4d%t%`QE7DiNX=;A=IDZ4*d8WLJjnh0n9)7y9P=zMf>gE2njJB`Y0nQqlq6vAgsVT z+=5OVIB?l!tNxJ&MH_}#vSoMpo+{r^;XEJ4DBNtY1nl{5&!aN{zBM`^{XtH-x3O;y zR8vZEaOAA;DRF9jux18eZ8(m&ha$Q>Jt3?JBYxma|K9A|@Oh(P+H6tLa|V~6Gjn?a zg9qgo7%&WZ$AZAyS<`PbF;YJZLr`5>Y;TLsXVopD<(5!V4Q+P(`O9g_ zTtp_u!v@B=Vux9#J(oZ-)=Ge7zsVcOlyWHHZV^ zD2gJ2qobiAKb!5kakyTe&3jnFa zj6b)$_x<02)WFsEx+?8h9e5yV0!Wa-iA@kPDPQ^mif-#7@f9`zkMeYOgnn5U7c8k< zf)G$6BfcT#Y}!VA?-&di0-3h!0dqaa@dnB$yHG?OxXx?S1~Gx-Cd7{w6MPV^5kocz zXz7=RdLfUQ&Hh+b(E>2EPXO+6HuJpM;kpCiIW}fZx?!8-5N7zt-Cn1>?SeMigJ)5p ztmkYm&)K+}WZ4~HnIeiPAXx!~kHKx;fqM!5zNo27EF|mw*NX{1*>>u>t{)Km`yFRx zglYD2(x7oKG1QQD(ieoP5gUgvjFI)+=m>u^e$a<;-ha$ni5z}bmQ!rx3oHM$&K69GdQIV!89Vl{o{4 znH%r8$d&+9*Hilg0fc9bWD77tRaBVsZE?Zs2_WKtcj*qwmZo-@<(w$uT z&<)cux@sKJHPHd*mcDW!y@o96TA`+d!ZQBtZhFPJesh)hyl5)HVvT?;*e(c-n3&E2 z--d`a)s#1iiU0;Lgl~k#5;azqrjEBdcA|Xy0UM~mb~GN3FdoQcjg9u#klpe5-C=Js zW*)Lw+|g78uspE>_C2;NvCtfNfE(=?N`@6T>|XrO^k6eogFbPFQ{V*!dVk|1CWOUHd{=P%&B z1ZvjgUOcW_Mf8=&WhB8}X)ULFu zS}Zm#8fvYk1ikK*E$rroV2Y+@I=7kuy>)}>u=CD$9kAkAFL4}8b0Qmp(QU!27?RL?jVCxw!TfdE2@rAn#yY(F>B5X(~(t>lW62v|~=Zz4{c>{;TzraVmL zp6Hm&0wLBc-U!5&gPo=h#$xyzX_RIN_}{dJ@Vf8e*kQ`fr(TNvzD5K}A>zAhNhRvG}%G5Aydy1}nnIeS=H2rFB z0+q|0%Z>NC9tZCJ7EhiyQBbjW1i{@l4|w^e;ybyub#YQN9L*s@9b|D1T~aK@hQSab z1VoCroJk*VuZ!JpZ?vC!{70vJFzx~ThFHKu#T6zF<^&H~1!v_{*GG%%iqSvO>C9YM=Hm0bdwS>%=RTW|o!_3V+FZ0Im(sDdfNHatuB(TgTu^*3O1zV&KC& zc4ePARYg@9USBroWzf#unP<*bQB_5ZlQW+j_L-TBW*OVFJ~_&&DyX(epEVd~ ztjsZH37sy_8^H8mv(!J8*YSK#4>oc?XUk3UEX+6uOu20`)GBDDmBFZ$fe8i^EUV9} z-xY@h7C6+#V-V`*P?1UY{hy7-XZ0WIA^@aPDWMnm2lp_V%w+3(PX2?>SkAn8ZlhDuT;M1=K3u-1r*wMO?=eD*Fy95_=nw`eI6>ewigqt)cbU?->&?g*oTM&;U~)=S>(JxJX`$}v+w~e|a{~XY`>0IlNyzM$d9~9#_-`5`* z>9;a0{1hGSQX*3ZPreV7SX#a$)BL}_?=j_M^z@Ar|4UEZa8UJ7o#%dkIWS$TDq==V z%qC%(nEI_H<9HB;9fCN$vCo)Xk)lYiEFbNoiCqF%4K>CYok!}ipOS*oSL>l>oWZg= zIOg*6na=ZGhnCx@z{PwYH`5kvsS#^h?S81-x~z5>m#$Pn4hY-0#L)bhOLot|$YemM zBGTF=H+~B@(!)*9odf2e%<1HGuA?byj9*o%^&45dY3pWxs4h#4QVbdnymA+4FoA{; zFwwtUGl#9-Itz|Z+RSDVX<)+tH2XA3dIW8@sP2GnR|_vq;X_Nm-tG3_Eah2908UK= zL8^r!id2Lyx`0F|g>Mg9Cwz>je}z_V^o1Qa?yIzyZ)CNlaJDk_Yc}G_OQ<5Cef`;D zIdr=mzOOsj(9dMt1kbd-TfUFCyf->{-zE%3zUP6i8^K5f4_H9d%6bq^_ygN?q9h1Q zffBdjzYHhHiq`^!&k~ByvFv_u6!UI8vAB##xxJILyAh{X^%c9B2Ik+Hq3Slt?JqMR zGI{;(1<3FtW-`RCA3p{D8{w6&)6y75$OQoW3?T;+Rb0zWc-byzUk2k4Wx^#c!j;oguH$aq>9+8mfWj)&2&c-v*kL z(v-}U;hC}UwbMYdTD>jJ?eBPMX$SiSc7syK*e|+`Y-JNBU}g+~`$Upoz}0}W({GIP z9ofT4ebqn;225Qrs-P&OP>B!ye+Dw=%zkA;pPJees+LJbDr1yPY{!0dR zn*11Q^dpH5`Qnu+5gZgx3~{%dQhx*5r8;;;{l8Iqdo-Bj zh?gsatKxWb54RDel$v?i)aeg6%K=kse#d`^H<_YsHg9Rn8e2c~1U(O+KvKuCAIK5g z5e=CU``1xfQXMFgGg<)A9$0>0U~#ZZJZc^R2PAOKFNLTQ-%dpO0Nx4~KLcu>76v?V z|LF`l3@}Jw*7*HilZ#`ex(;Ch#v!?HF)PUF+5x&xMnj8ZewD_^1+EX>J8rmUDc=ac zf;H_lk?kn})^X#qbgF#To>LIl5O-Z4 zQS3?K2T!O;H=Drx$S_!>>LweXW99=dxxKoBTu6vy4J9l0=5fVTPcsnF5^%+^4 z)Yg2q2SdqEi2(eZRB%k!<5qd_=-U@@6vuBp?UI+m94;cfKbaap)F8U=39+ z5}lC0@Y9c&kL8ij@+X}+e-a-=2@n|rVN7ecuMcG6Q7-pYG`t{TegT7Ipbr34uy{pP z42nZQh4b>Kn$NjdccKv_74ZLfH5RNvmm#<)ez*dPAm>FuREB_pzs40ilDJo{1?Z{% z%B4b5Br0vnrO=6q2zrCnm5Rt|1R*yc2VmNehOW|;RaI40RaHe*RaI40Rae{{ID}e| zBDJl?E|9`|mvL#SaxS_gS16lY*mOGh%c~~%7qTEQST7kpVw@U{4rdrlI`~wz(z^Ae z4cl`LDl!xWz+165+H`ckcBet8W!wN!-jy&-ayfjpFx}GS>w60aARJDiGGwxxWcf+4=kN9%RLj+N7>f3_=-0XL zbDZZq0S!T5+w$r<@a!}tAjypTTkOSGjJ+u#99K~~v8xFD*5n!{C55$qs zfE&Xe0JT7#hnm^Cr?UVYY1RKMifZP)p+#?q{T_>7pTz9!754mG@pG18gt|b3<0N8; zQp6(CdCJ0QHQE5BbU9tQpSv>~*>2nMr||BTXw>~k!{gS}{F^c~Yt*-xiZX8TgRQcs z#)8}t66O8gotSer8}$On69&ENL1y8OvAc6?JsCZvu_6jzcY}BT56pKSXJJF)h;@ST{_Ha zmiE2NTCj0&aB*B3wibP@t$eLmWMf7}!wheWh3#_HYYof{TVz%(G}W>#bZVRBYdJVL zxUeP;7}16pT4FVY1}#+=adBF#99&#n99%#qxMtK6Nv`aO?BuHiWs#xQ=Q;R={l8D! zY{kGM5Adqqq;@%~&Z}z69-`o)KUn_18i#p85AeXDVUrCS5j?-Bs_=62vz(TWTyQu- zC`tw#{0?ZDW$w1L)-ZHjo34BVp_0$U;)asA2$g6tMJ6C-hGYry#%uu!FoZ5?q7py^ z=240=flNY<3#P8eY8X>8^uOVa-TW~G@_A$Tl1OBeS&BuQVw7m;E*&es>l zaa8HhzGDq1Lj+ZUU>Ss|ky6D4b|zW} z+{Z&!;bU>%=hp|PeqL_y<)}#@qdDNhXj_*Q0UjtKA|nHqaYq*Pb;72?Ykh95jncz- z+=Rm2w3sjCnPT#OkyD2+>G~n3I{$4?x~(3JZJi*;sSS`p_zL(6MqcuOEqF2jt%ndO zpb8SiVBno_#C5VFaeEzL$U7}wP-et%fCnr)yPLdQkb0F=-bh%AG6I}U!Ts)Rl6z6L zOP*$cgQec;VRpQ}I!TNkRchd#uWd|pL@u($8REF=V9V|yipfI3n#-{Tn`e%Do8Pzl z8j>}cLTdgRI%o6#@_4=--H)#h*WShSpqc17W|XW;f&Ye?|n~N`}|ZRQ*{no$m{U ztw&c(h*JG#bkE4}rYcCAD?%`1KBWj)Uvb&1yXc(+PMju2@dN!XSY!rkmwmp$2yH(P z)4K0?T<=rm6Y{#OhRPy*+VWypN@+V5k%u=kmd@U=v0>cRDlv+gug{$Sl&Pj;43TVM zy{J&^q!MACj}kVmh~sX<-l-Br!W?{^hKv$ePzs@t9Zx~oR9)RW9n6l6ELETa+MS%S zIO-h=In;E<3yDt@!Oz3Gj<(Trq7N0)2(l=LrN^G)OX^455o)>8)awgtRJq+lrgWM($dSEHDmWR{!R*Lqs+Obw6A;#-n^Z^P*L zLHIq^_qpmma@yEX+V%x3q7+$KDR$z~axaU-F1^uAMkx>gn;dBsu!Dh_tAw!S?Lb?_ zv($`f7(ycH=D7a8ZS9R_h!GR*!O(MRz+g5+KE&VN3#b6ic;UaBH-mw*>Ia~QMQ%14 zaN}TvJiYy%xwqWi=mk{;5PV;2?tj;fr230?CE|DqB)cL$hTv5ExGCD`^FDV`+0;uZ z-s|grAS7mwn@#%by(wwE{J)*uWcyWsFf&8iQHWWWCjpN0;nuQxEE>V|RCS=cNt4l) zwK=|h^l8yw4LR5*M*PUw%?VWA1b4(;qNLDgbaW*mS`{-_4oLejB0?`Bd>lOgMUi*B z5bMNB;?ouT*$a8LLG9jxYm7Q>yV^8Bi71eULr4dac3YUEf)oRbk>T>xh)DlY)xd!(tDx0< z&g+}7g_02$>2^XUtW>-aGv&%A79vRG6;O^iQjW}+mNPwY{d5w9JZ>?z7#GwPVg=ep za0Z|PXuuXp%ntyMOjv<{$EqyxLBPh%A{0YG2pFN$p;~Q+3|D^aZzJbOwmoVG1h|Yu zVe&$DZUoSXQJFEltH`S93$os;99S151dKvvupaB>yR@hh9v(Q#A zbT24ttA;5q&>UhKR%T{ZRaI40RaI40RaI40RaI40RaIN4d0LR**q11lj4=#D5XU33 z&R|spMzCJ%l<4s>1sgolShQLYq>)LwDkV+ILS%8krQLF|m@2(~(J~VldS3T+4cj88 zkmZ$vs_L51;F3g#FWL0nUlZeKoR8e&Iehkl9%|$8_fpQp(yMB|r_ZepxB{*pK2}@% zWG|~Ty}zXf{PxQza>BuUEoa0%oCSB*?&Wr~X7_Q*ySf1r9?k%^0!Y#Djcd%6LS(mkP1{#B?K4+3c!>QKq&Zmo^s&3peT8ltGGNXiPHSZzl0l*g6U{|~LJs}8OeqjyDgg*K)7NiHUM zYV=Z}HxQMSgxukEw=Vvfp*5b?=MO~>C*WV(Bis@CZO#vmNO#gYs*i$~RBNs|^2?x_ z0aq}=xFoUGK=hs6W6y6s{@PB!(u}ma*Tio_9{o$;j+-}P2`{bGxDpz9W<*M3G11e! zHI7$0M*Z)#BuL>AEQC`K{na8(qq!EROtZ-prDGql;Tq&JICmBt=pF@!Ol0>~X_R1Q zJT3-G(>*jsaGkw~LrISb9mMM$wgkNfdu>oI$rCV+A?v$-4zLl9q60EMitAWFp(MM) z{NO}ChKf@I_-4B;;&6-X%54s=$4#{HYEYWXIjRn|D7x)vvM1+L*!xigK@lxjZHq~f z;^-_;B)HQJh=yiN`@F4}o9aZJZMwCR_Q?SUMFAK!6iG9KMFI}Cj)QbM#`#^^AHwoE z_QX0~T#&7~pL$_Za7WTV{v)5xrmq;IDJ?LmOM9d{lV^4@Bro)QoSPYlmD=HK=Etm zZ+EjGi39Fa^rS6SH%Q+GBAS9OyHVfEvbRDd`NWvOet8I~3Q&s3RmzC&8LzTh$#}tG z)}ry2jF#vb$&Xqm9y zIF^NK zlbZd5`>=<6d7Vlj$e+_}asWuu5t87pK^~7+yFYOch%JxL$TH|LryP2tN8J^Xd&zlA zUtZO{OIfKWqiXN2PsW@8o5`^>Xt8wX@4#X95eJu0KQtrkPh3() z7la^;7n0~Xk+$DEH#7$w#r`J;{`<|8LIDT;YkLHFgN7S2^;`==J@^a|04#jS&a^NQ z{rZL8GlWp|9_Grd<^b2B7K|k&W1L6C{qlM0{5N)q9Avoooza085JzSsCI(~Lf*ega z_uA^d3nYGCm!#(mjiHvKrk9|~0s#4`En53MJ#U??o95~43}^@dK!8fkP}Q?BjCWWW zPLpkFWVXEDWrh9XXpZfdT72IlCfWWjG3WBZsmEp^_B~n#-7eOJj=zk|KyL#K&zWGX zV}BOo>QDZvx(vN9(&b%@q8F;D6kHo=98Kvy@UrMLXMoV$>R+yUO$IbLeL=cE6=zu)1$ z@bpf0hf%7v7NV@SN=Crdan&w>isSq4nl&0Lh2u?T$PbQMJ*JZDN6tyc>oFg%NK#($?E%tlkmW^)6R+wx$>_T$8#F{I>*G%LEW;l_B51(*2tc1Z zHQRrNiQ}#-;U<7QxR*!3$i@!XcuEVnz`dV1ps6!&{Y=)=w9e7tba<2zeN&M%d~yAMhcU7t9z_Z$_bG}Vtz6L6XyXLq zsv-C;s%*bf8i%3hdSei3fuXL`H}kU@yGpk3wiYioX`Y=W?O1cS{df!?``Z6Xo-^`y za!F3b4WeQaO$fAA8Jy;L%4wr_15y1XCd{bZ4NrCCa(^${tb_Xj8hohwaVKgcz6?SB zzI=Fat62K@j4Q}X$rc%w5#BiSwfk>-f%y8SsfuU|yzNTC#ERhZ3iPeY8S4OTf&gSn zMDvuC@+>{>hcj8Y&S#I>Z3+z*9pbS?MotGIJfBJ*&%}g_l;=YRtDUsW8YGLFy}-5&D30uf{l6$oB$NRh<`mKBjbE>OT{-FGWLnxDD?=R6%Kyrw% zL3)eOxZ*A6~&C&7+k<-mR1+KkjKS*^W!vD_A^Y9a(W$JF>FUJroMa`JVF7a2YS#x~kB74>kk@_NvijXO5lxU`^WHa7}Md#|1 z8>2X}Sy;p;>WU46>(R63Ke3EjTet|R7uDL4tm>`cg*HneS4UpVGKgTtAxeuK?1g5% z{1151HW(! zK|wABee4)MPj!FwcBgl}jmG3?da)I_8-F%5*H=QWfEk7vFv7hNPi%YQ7*qMKj)Qy( zF}m^`b|$KtY{d6bhoy7$$kI3`vMB3bsEK-e$l@d~#xNM)ij6;vkjW)C8)Ab^8Ivi1 z+wqtxW3w{!Y~SdDp}o7puWPzN$DoIWUbg1GqH4sQUxRbq7%e8pSeS#*&*n~Hq=CnB0=>rX!0XQ(+JrWwgdeceWg&v#;4 zCnhus#%K!Hv0ORdS(BtqS|$BD%%{7NHr< z#42h-sjjj74Oc*nk}SRpLFdrGBIowB=)D}Vxquujh_m~ukF!nc)|IZpDJtETqRlj_ zQxV!(9)81vQ`$7{DM?@)8?MK(LidN?2P z_dywNCXmo^pO91|PaGww4y1^qScrPEoy#&dRyE=oRbx>BW)ibSM#C{&@bK{Q@FZu~ z+0PTU+QVFYx`}%OY+2+fYa4Nw&R)V<^cd2i6s9x_w zb~sgc|8H|%<#U+liuXKY`JD1^^qpq`RAC-|yinDR4jnj{!rZ%L&Lo0JFU|QwHpq7)hezAnggpV9TkoYeYLB(_h4xBt(z-mL}q_xTgw~g?PDZ5 zHP5Jf)^EHVLMK83!gPJ^MEN1(dw#RuA&}M_{8d+@%W`k!V0Zml~oCP&x6V5 zswQ|cBwdZR))vGTVJ#nmR*9_>WWZ<-Sp!3t)x*^ghh&L>mq5UD;{*dCZ&?>;yt9h$ zns-*yZiF~;^Gf!V5QdXZ&-xK%U zyn~q`seMICJERXlUbr2-vm)XT3R%7W{{=8p0Xjs(6A?O2swF~jQc1{f(|;@TJ(JAy z|2L|+&h7eX+e?8d+UdELDZneB)Gd0*T|<`y0i1*?GKv%u(1fU1y+~S#jFu*qap55- zOKFaiOSG$LE~bd+2 zOVvx5J(zF=o5jzBKcB5;P0GXM2v-DjA(@yHAUzcy1x)@2M0{5oE`>=^hUZ4Pj3S2% z6ByIIIyvCOe-$k+APiP!sT0BRCt)Hd3a!aMv75og<)RAs$mU|=PV75a_ z*_)n?uUBCoe<+dlWd2H*_ci`*@5YPHlPgcmy>Nq(D9TbaV;?p89_Ej(lJ-YwuKu27 z|In>hysKH^%Lthe;~TyqlqRl5GXhDsUm)*cufs)-B^hw&1XO6dqgdOZ4#g)YksXj{ zw$EkiFL1Ix0OTE5&wxN3gSR}+`yWYgZ?<~1sP%fTq=)jzow9yHaVA8quJHi&hJy3n z3K;}>lsnTvFEI=zU~RT?IQXgUe2sqtqu^53>$JbPOP4}QYXOkEq<9LZ18Txf3H4nE zf+Nizrm@RbZTk_1J~z3?<8xWV4ZUF)sKrKf;qn+hXg4nwFY7>cR2=H_Mnd5on_VzM zwtURUmIT?|wI^8&m1&b6g7P^Ykm~XxG(yv2f%`%L2i$*_L|O6o4$ z0(Db8|HhX-Z>@&D8-{mQF4Y%EJj)2?{}*`o_A5|gG}y^u4j(Du-ttgsd+U1e2l97T zvvhyJKUb>fFfrQv{Hd^=qx_w#jZYC9q2|OvxUR~|)#On76EuDdBpVv5GU3wt9qO^n z62V$VtZeIm7KI=OXuL9s8){dnMdPUksAg+uYq?q2?p=aC{2^5fNXzQ(eFacUXI9dx zt-7UFQnQ-(j>Dz6MnwI$NL~$%$icRbABPxHEdJRMqpF~oyo%1FS;_5NKLNh;}a#lY{tVoekjZ#ET2Gdl`&b&IU4Ttvq1y}w!!M1rD?W15fVAPl# zY-}F#`?j>dj~1Mbi>TYkBl?s?%MS@XQ3t6|A|lTZ5t82ac=L2-pfr+YZUZ#}mU}*y zTsly9!4IE^6(~3I z$IOKov7v;bT5lG}s^Hm1e@$QL?r&-Ew0$PHt_(QD3I2WK8)Lh)90Z+A9`jm&} zE0Vmcv`q(IovX`eF!;%m>$te#heSt|njttSX$UQ%k)t-6%4yTeP%(NlqyH@n35{mQ znnWmD;-35+#uQ0A0;bO-MZ{t_ZW@owh>-Z)h)qgJ{vqc!D^&&RJL zzd;~`ihyUecyA{Tk({wpe8fX(wp`6BS|DB$V< z&1M(fR?7?pt`WAhRx@DR5SvcluDHwgl#>WX(A&)>1=E>ge`4IKeNeA{oL^Ut+_VPofPw{PY`tZ@F3>xDD zYiE@3`5!{iI#w1R(sfwC--xXTt7$h`dMm#AMjdddpooD%PYHN+pD)~g?H)!M7`%@b z3q(UseZDN=PF$@0RFC$o&%I;2*L*f7{il(WQjIyJg#Tb*W>bwKUv?5*Qdr4aNSpIZkV7v;28GV(kqe z-D!G?)3eMY2JvRohl>jhtYE?K>2R~RK2C-wZcqAWDADALG6kwA(MBVCmbIw`$Y&HSl&g_$D~3QN&TnBd z|Lno;W_MrmBlf~?HJ<0${zyFV6V1Y$eE0pmF&no zr#@`XVuB94cwR^yh=wD&2*^f_(7TCT4z@75E%Lui?PkEjYuf08qv^hY_F`VSTb=Ap z*Y5y(UB?sAk8sb<&!WKV9>2$UL27VFb z0D1<4euy#vKge|k{wdM4##`>*Lu>#z(SplaYM4m=d(`b)o`CHA8QAriSSvyML(PcJ z_Cn$8Ze&_WL%s(qc!9cYY_H%jVS5+-R5NR2h8SVFyE!S5H!=XpRbK}$V<;lW@W*k! zHS>MlQNY_1q*>Gcu&%@JxFYkO7Pt|Fi(cF3)RllEJ_884U6%8nt6P(l?P(R+y?1l6 z-|#!pUK;yzsLD&#oSu^l2P3!Br*1!>%;C-%nS{*9W~8A}j8-EKbFc3Ex#S2P4}%kw z4St59_mgq$&tP5c1PNZPtBsSsS%I6bMV16aA;4SYB%rL>x2y<@i(nCFUs^h@0A7(t z-YMxJxbbyDNhwNFg2aW)Mm`Pp$BL7wv&2Hn#N@X9*E|9BgCk6nfFzx`ke(cfTuX^@ z3un7@!T@pnw_^kJpnP->^+3`?*B27v7c$W&G|Rt8^f;!@rF7w-+0@Bj&?K@2#qr_g zO%`x1$T!QeIGnzFf2woO{gpVo-V*ORD?V7!pT(%+ZrtUGns&FH$r%tv=n#Y;A(rR~ zq-jCcCr~9+@Ka)!ms&vS<4vzVQ_SnPUzdxIzO~;@p457l7aqFdV*lUIerLzYP+FTT zXyRzW)w+b2;4uR$bn&{cTPD6^18=rJ^Tyd>7$H;}xP8~o-rBwfStN{>jr^r&tp(lB z-u=J0s2`!5kZLUaTu=A(&K$-LO199VAfgAKpxHjm?qtQZtW(PZ+o;{y&euySElG{T`VKgVJcCS`a%WK z(Hw5Yu_MR2{yrXFuZPa^SU3DAA@2WuCr0G^!dC$dG65I%h%6^4%UAYW=G$cgNf2uB;Jyj{z3K7yXOUMdiiajMQDYL*k5x5b_$! zszt&X5}!xU4>=Fai`pB{+L?04^(k!;4S)&QLTeK$ZGaM;9N^_D`}cFN(OOxga;KOIJc$vCV^IFHk0XVl(N+Jk*_lscgW6;T zkOg21APeZIMzZd0a2VUy`4YG&l!iql%tWwC(+@?5Z=*la-;QiEGWdHAqMA>o%3*4_ z0R{d?bkUkAHnNEGVj#pA6BK@f={Y0X`%N9DMbLxf6#E;{Ls6$$#;{COi8_V)NC1j+ zuQHW4JcqvZShbW{uWqZ~)zWiqZjWeRC>uUn`e&VSn7hy++c`1;Up)xi_ADI1qtYO3 z_5l%RUHWZ2R{iwoaZsmP$)XBt8xiAky!Qd`YZXsvM}ZBR;t7-yDc@gQG!!JXIDp;_f+gi8q%0k#hQC@)!xeJ|;qN~C`up>&H4*%_=s`+d?SdGj2a8@s$y|rBJ zA4z<5XYG;p_UDN~?Rf1c%DMF%?nUL#%KlXkTkx(rO1uZEts3{7M)edGkOZjWI<-Q; z;4u~PUAL^!#Y-rNkh7i6&=Euy!_Pv|19E`5>;Vi`T>-7Bp%Cis)aGYJzv03yclC2T zaQs@|sY9Q-l{cN1t7)@8bX*Hl*DT##&+(&s$K%Tg;dPRb_P;GN2MRu#@U^6};zO^U zLRL1`s70+IpSeJ*0>t=(<`_8Vsf(Nbz6VfRtBeO5Co8U)^HW|@JQ@9non!vM~}w4yjt>JOA4~2b-Jfcc&^z^M0vp9Y^lW(!69Zm z{tC+0-_%poNT{6sC}8srq>a0=4-`R^z04O^dSg2h2ng6eC{nk10#m87Wp!h4n?YxP~v|k%Q!AN{fuRLeW{N#{bh#4dn zi82IAB(P1E;*@>VzeABev>-ty5AnkCyH5*&%9t`5?W{yqtTzM-o&y>+&%a$E+@M4N zW3c8KhGW^j)@-xq40_sOMQM~*T$qfL_w_X$2M32uOAj#d`jMUzTqLPyI_@WAagdZ5 zYp5KQT5?Oa@2|S>H}2Q$!4l7JX17&F%>cNdf72ma@tjG&UX}*sPV4zQ|2wOIvV2d= zA;I*lhVT54?y0|DN#Apk(QnwmpqZOzMS>hh0!pk*DdUjIkjxF}Mb=BC?msuLocC9A zR6|(i9=&&ow*~F&^}WB=w~_8Wac*FM(c2%*`R=1N= zwjsUxf^3S!8ZEWS!>T!C-sKur1}}E@7JLzXz-6#B_x=6lo^(E?d>YFlU==R>zZG$q z`{)e-SLez3h+6WGqcM{Mg9wjUr-(8Do(z$X5gA6;?dz#;ahIrT=M{)ApLq_8L!TY~ zd)3J5XKk8`6cps(JwO~d3@>mx#E@Lm?kcFcaOdj7G1K~X1u%r-?m?mX-efvX{}0^1 z-F=T8ezgR3N9|&kvC4fI7%Wr>lgh!11%6q|+T>YSw){=Cv#uaRv3B}Lf_?>v)H1wo zJ+~b&rlnonfyuNKVnrHT_oo1rJx!X+n(_VDN~Ke=l?2lnT~nbR^Qw|gIHRI_S=UT&eh}= zKzP@%V~#_dI#7B+BWN)il0Az8B(?=zE!^RI-vgeadN^8okieLe0(qZ>Ys~e0C7V=l z6{M>liJE*HTHs=0*2NaVtJ@;3-CC-y8TmZVF`8*eGfIL;W)N6fIw%W6WQA31B$SXD zX$5^%QPGb}|K!W>7Dgh!%@uvGIcA3B% zIsKr5Tl^%sFCU1rROgbj+}hJjG`Wgk@igx>z?tZag_COoGhFX{dLiv#=s*74m9@R~ z#1+0)D>2U04cIsnKFVSCHWFU`LKd3VZ$FS|!$Zns9c7@skj&1$U(XPMq4&~g;l1JP}pXbJIhqF~H29y7jWOVct+ zqMX3&hh&HDumjJKgVTU(1dwkx0tKL5j;qWhmCWJT8 zg}3=;5J8GKPuRvA%yql~gKJH;AQ5@20(W0A5iXTCzngo=!cTX9N}svjZ;8^g_j6DG z@(6*jy^mDq+oogV^cXJ95>kJu6T)s^UZASbnPwns}JCwvRilji$AXq1K2Jx0fQZPXm zKYroM{2v$ZHmi&4vCYQlYbAet4Zzm{$RfDKwo)P>QUuF2D8lu#26tmqXK4Wx7j@(6C#{S)% zxW!b->)yy;qjU!2O^3xu!HC@aBMuu_20-}O1Kn5;x`jNKCOH`%nFe!@66Vz$HBN@G zG;0+t>>XRb^21J%0b&TE#kQv_4W#=v&Tsh)4R3MI>T^g& zi1qYnS5O`^4Ui6{Blk*WW%pEXF0(W+3yTpjcfRO9Y)cahL@)2NzO_Hreg9>AfxMq# z_-R)q7nehJXtHvnGW@;9Tsg@}b@9orrAn%51m>o!#SI{7QFeAaj@Qio@1FVp$-3hI z+j;R(<8><$e!0zmU4^)=TB^wPyq@?;R#O(G!a$>8{FVseF<7o&k1ZTFiE39S$o z9kD35Os86J<>1>wtlxcgDlz_Z|JvUlimBadw*0KWN58j(>;LV_%Psr#&R5^~{!U1b zg!@Q=2H)n}z3cRu0Xz=S{ttKdUayfeF-NU?=aDQs!`?=yJ|U3*l#}3of|q5qr}zw3 zJ0z7uBn-i$dC~A`xHNT|pY=z33;{krx6v3@lN~o*(2q^)1;4@U3(i{b4rETB?Csri za~)0>2k@lHjcr?vZ99!^Cymvxv28VW8r!yQ+rCL|tmpSOo|*0o*grmVW@l&4?)ehC zLpY@|br}q3%lq4E8BvGR9(3(>ck`g`G&t8ZUYGe*AwFa|&-zt#pR0X^n!X5X8Z#Y0 zR|MY*j2w6&r%V-d7B$5g{b{tqU(&9bKcPKZ{|g8IT}5E!G%aAL9T@fvJ_{#m@F$g= zx5wufb2Q*>x9(R-aSOM5TJXY~A5q!E`*#u|<-gP$6<^L|Q|LRLS<4;>5DRo_yb({% zy|bvRVpc?;oFGBJ1Jg(H$&1(LVN+)u;kG*bNjrNa28-1NGLyag3&cODle-q&-=SVC z_#~1#`bRxYYkH_sJGR@5a1sy#JYroyT1L=`k_VGn&oxx<;F$>h!w(FvbH8}6P;fa9 zyM3y;7fF7!sW^bPKFg1oCx>&8Q?<)i-`*_68EEv}U8uG(bA#mK(mVYt9JN|Jug=x{yt& z`a)8F#g-8Fh~3Bd{)Rzx>& zmF^U&ei> z;*^=$OFuC%M)WNhIV;@0$u6pwX1rlT)4_#y&xe7o+zv$mgkYP`>EeS{rVBh%q#vd} zfsX|W=SuidKMvVS_n)K-PR@MNZ0#s~!JZ4u6avr+7+I-~5G;%s=(=*0J!8wt%0_)9 z9zNaTdsHfnRWeM6mk35=?FFCLQ(QTE_CERWItsUgm~;7ZbJHJyEdyybn$EX=5o+-Y z;xuPEmC5_eDt)ej6Gms#1@HPXLX?@J_w`;k6Q7O482FAu3mlouGd!yk*JJrMX`{R4 z?V2z|qEP4*>Bh@xml^Y>gFD>d?EF&z8zbC28d_{|8YE> zB;`P+$SGUoHErP*ipY#d9CN zQX>Fy%5f0c8e+H`lanPmmVOlo0b5hipJ+ReT4V4*r5M08EchiaSj|RenT||>ILG-w zYSE?#E4r}K0X;gEg1Ow_n&PV~+@e`J=Pjr?fkz@TbKwzWO1dTeDrw!Fk}6W)pwz!1nG_#z`J=6 z7>l)>SKV~!+UMOjMIl-a1oA8*Q?dbMi?a-NNNa|o zS@35Fxr51u+}>;x3cA%0Loxc2IR;L+2dxxhlPI7>}VEI3W%5WS4jARRt%07qk` zY)o<3!T3nn%zx?8CeYX$`3#3_5D{)&)~YE9)ff!AlByXZaWhKlNS zmDWuCoXu8_V?6_`ier$w8B1uSP3Y}ji)8}taiNpe)w;O*fN#!B**jIO@1Eo~5FJj&Q?CB?Rsa`^1kohL& zozxbGurhA>D1J~%Zk`j(TG*Py$HkSWw-=nC2$Yq1JMzCXo}bn-94OOLL@hbW!z9g>qGmcnO0dT_2k$wE7o z!&uX9Qmqcxq~vaOW~#h|Vd2l2p0-Yc(acU0JRWBmdXn z$WQV1t;f~X5}&Id3SwFRLQuU(Fq$3}g&~2zVLV1RwFV^CczUo%u#d3pQIh`mBz$O# z@^Q1A4`h9dqb1!-*lfpOIDXrD;1H$LYXf6T-BQQKhUcn<%w03;_(KqFle?lLwsYQH zmJExKNIo*zsNT1c&q6B26v^k8-KSCf-!7JQveNR3YbZ4A6z}ATzC5@f@LJ+dC${U* z_qOforh*O=up`J1i-|M<=vSXFQIJa&q8sWxF>?3V*2W9t#)g@(j_9a@Q)u4U&=p)Q z0v+u6JfMB@TLQIN{KPkI$T$08;nyowY7(EI+MbD-LfgL$^1B;Xwe?cEd>TcxB?SNcDJ-V~AkSIsc`_eFz%*gVs@Husv>bBZ7u&SF5-B z73TZyH=*_rQTS01IPh*T`LSS>>5@sC(tj|olCVnsN}3ILpvX8w z3mtYBY6LnAWioHaFXfA4;Mhf2vZ@7`v8ATuEHUQ&ff8ToipuqoaHJ(Bhih-?!cy*1 zmaMAEAkEXMEz>|t9Z1RlQP8S-D=<#O(Pw%Y@D~GCcu4y8-L)(_&Aq9;zgcOQj!q#5 zHk2pLQfb2h!Wh}kYTb45rN%vD(qn6QB|uJHpD0xwwZ`UrbfEH=n4u23UZn?{r@%wC zX#GfQ?kpHl`3Zfx&#Fb^3XUbhEFo+R@^=sj%`^ zG6DTsj4IjiyvZl_!-_2gOioGi{Nrqhup9!G3#!HM{*r|Brx_a?t;eEEUTLVXNdZJe zer%5AW<9~Z!VS6ByUL~`e7BMQ4{{cb!((-gVs=dV?VMVN&vBRol^icib|F}%);q5#kYGZ}#USFTwge+xM9ry>48CmZMeUd;CJdfD zb@WHQ@r~$u{!9-4o?N0|jpfVGpzzr3ufuzFk0Lcmv9n<;7WoBmd%w0)1Q5p-A|bqPkO)<$RZG#ivG8&CJ6al<(D!{_%}pG0>qKR+5IR6_R!KQJpUeKvHU= zQZ&|cWYAJu(hG4w3j6+TtNbWL7M3vcOZl|#99>)eilw*QkLIl zYD7YwIl<<7=@qwf_o8G2)_zRBYpE7%BG+p~?Cnf`>lkzVYXyiiusct|_W7Iu{|aQe zY=j;<_kQ1h)}psffNmD$?CiWZWXKYtnBae_D4#j?_jq=BrgcBFuh^6?3hK>itc9e< zCL7*1bX~(Y);qgt6L?qm>U**4YvWGI+HrX%%N%0;tf@xD6MS>%2oL;j)CeM2+S>d@ zU=QPsbjewC69x{E>$gpKt)%n{qbQ5}+Y*0QO-x}%s0il>>d1bnFyYE8XG51j*VGv* zvst!b>JA3HcST6-B~DoOUbm}^3Y3{vICpJ2-aFF$RwZEg4l$!RLd&AjX4X!uc0tlr zk4Yw{1rLOPw$A(-7|eQhXBYd>3ec_xm8i$*er2F*-D(ChC<>Il}gXCqwu zEXXV<7$`Dq7k($*Ej3~V$%dFT`gzaV4*khXxz1u18b^?@Z7lwnwFWCXkWpy@5H7nf z!>kWCIylRSR$MXSE8Ywi7nkF~1dq>Yv^%Q(kkV*;I`Md09?0IrFcW=(`APp)f|cL4 zP;7;?aow{{Kw}LrDuIDvuC7Mo3!VF6;B0aB@;NhY{?t8EcYJ=}DOd5FHPnW!cvS=Q z-_6D@>a-3|q=pU81o`bZ*hx41sRa`;J`y@xd0`sc?q%Sq)qRrR#UFal|4w?vWiZ2R zJTb%iQ{1dw9HXBE`~={R;L1z>oA8Hfj^<0d!xBHO(kq1Q^>!8C(kH(QQYT=m-iqQ; zI2fXGzj;M#Yy)} zH1`lqiP3P$XDq%D)qdMA3Sn2}pKBsCt<6S;gi{vd=(U5#h$^F1bTh#*NDTSGtA9$i zlHFNO`{6RaCZx#z`u^_P#AC{)kc^>sUD3k^^!gKMSPIbtBQve z&i)B^=O8B>jbtGRwvHfI#({uTb;F`Fs=GT?2yP$P0%1T^L@X>7ju_s=SOl&u*_Fws z_!FR;+=G15*8fO|p{AV%V>>Oc6!W*`?dQR2%&j( zxF2~pS1>oSyHlqlig?MQ@T!C|IlI!ZA(k7md?q?WTeOGJ4mT;R0{|Oyh-z6)#S)we z5oCmR+HH?bE}r`GxWROg3-&_;tr`3t7)yvZHsd9e9vkz4nS0hUqULWAt({|6sZ3D%B_b zg+P>7UivOVb0h@??aS>Z)8h=;Mo!g9zqtw(ni8XAl)gh!?oh3`%jamk5HEDT%?D3Z z(#3oF4ev}&2^kb!NSS#-UBBk!#7B6Qs$kir$ZVN0A{!r#+0bbI_od}Mg6<evf(g zMwszeL|~QgdI^fLl$O>cN|kp8m~}qwfh0XaPhW0(!pfD;K?mfx$vDrU8M))z3_Z0e z$K1`&s~GHJeb>dRM?#SdNfQUzHMW_s?2TudMIrfXlOC222e3Qvdp85Rx{YB>5^ZmI z$;WK{5xc;7%F^d#%{MXPgN5Hl4*X1d&);-0rAI$e++PWYe;{vrgt3cDB>VS?pM_GC zK5hHN#7%$%g5EF^<+KL>E(}QcxDXfLwJ5tqdPKu0sb-H4j{cU6Gk%PBPpczp=JU7V zV4IY+p)CNss-JrCfyXzrGF_H#Xld1Y3FZGlPRfH09g%0!Arb>$E9m$m{5Ho|uM2dL zrpmqZ*oN&17Ht)F5VodK=d-E6SP8O1&RI0KklON}m~t$zc#rGMGh!9^1%k18*90q@ z>6?PvrWavhVq16Y{C(5fRkn9i(z5t;{}!v-h8*^c`IsU8cgYyrm230s3fh{H4`0;7 zhNsstQ*ybKs8b>LwS$@D{DAMO+j4d*F?p!|5I)2Syav1Tx={R7o)WqP>}jdjI6NR$*BP&$?&;E5iK8n zC2~YIEyI)bRR-gd;eJ@`9|LXV*bP)26pg&Rv_Zg>yGRifa{FQ2OY`oD(XcAT-jwO zl-R=uvsD0hDamUbR6?b&9hehbm9coOsabLHrr~CUX^H&)Hd0}QSF`>c=I+s@QRYgf z^dFbl%?F=N==X&2YxlvR?xzh}Yyi2h@9#|afmoyP?v8HxMvu^BPn~l!l*v@m?5$(A z5uH&<1n*z05qb8CtSpOy538#2wD}o$O$({NN)n**rMh1jnWgwd^fR;WIn=)k4f>=d zm8%n6Qz+EE2g*y!P*Hd}^e-xTp6eV$ntBv7O=fi%Xq6j_LP?epQYg+45pr+3!WD9zxEr0LWdbCHW?`VKx!BZ?Y(>AE&+%^$a)pP{Juk?aHl zJN{)`I-$;QYzK)c{ERWaZu&V0yVSakv&Id3@HyE0sW zr@Ko~2AIThlpAUfoGLj_iWPMw(LRParsL zIAdX&hFaB%g8x3aY=I^N=%-}r6A=KJa}TfQ-D7*N*UjXz4v$s-D$n(%Nh#P+-O)}8 z?8S8DrW;$S>(1)ms|NYD4GeS-cAjE+b2SN|XVbBLLu@w?vU!}baQWTlRt6Bgx^?Z! zy))A%={T9SUYwdFFjN8|g@eBrE93yw^O$AS)LnydR4pUbu-VSCfG0fD?lw87e^q%- z_cAt?ehy8F5kkdUft&or3-^8RspED6KJ1Wh6of{U3{mL3l$Oy@S-Ik3OG?ao?p~4) z<=BtYUA3TTA@WulL>*0(w^01Lg{E*3@teQ)1rdG{WZlPq34Am3hT zM_uu9MojIuD<9Y2S)=>&IV#(+46L(;hbR81t6T4pYNeCQmbtP_*=`Pr>WdcFc!oS9 zGKt$@t?w$xD^s<`}nhhk9lD{Lqd25J?d&+pG-ZMCSCmB!j_UN+$ zycb%poE2=TzUOhg!g#Uw3BSrbE3)yd3mj7X=vdROwO=vv+Cj04X}V5Xq| z!{RqNt*@T!XQl(MXe*lJ0km^)#^>7s66cG>OUe^c!mZOjQ`|{7+Rl0T$>3C8LG(HR zA_=s1iF~sB4P9GUzZcfw*kW}Z)ZK$tW9&80ic}H;mH*qDfV~TpX>sX2EMlJyHVLCl zCH}sBX|OJtE`2U|Yy+HM(#(8=pVPIQLZ~?4p1~fx~(P92&QkZULKh zl~ZOLtMu7QQpx`s`(E|gnzEiZu75r)N%iS|{T(*l-0V8_IAZat@if?y`AA!)kV8um zWLk;e9*}%a^B@WWgv;-w=w<;r9cmP69Ak*M8Q5rWC5_*wttw>(9el+^la zSAU4Sw1k#>;P@|c{Khgnv~JQOg`S1?kVQ8Iaxr5jPKd5iLCV6c7n|z*(#l^dNFH5Fy-^yg6W zQ%6Q12d>)wa+l(!XtLCFa5LtO@3OyK>>zgApLJ}TmX@$+EUt+bn?eU;sLT4ja)X2t zBN-iu0EXceWy%Ju0{+^TY8bxl_>(zhpw%Q$DiS{=`iMA){0f$~{64C#z&1Z|e%t5} zS?}G}m{O4Sh2tbdDU9Cn&Bf0j01yeghdSED-DHaF|5EchKG%ya7$Pbs%7V%O8al&q z{btgw4F?S4U@(7f*KK?g>3icjXs!or#=Gn|@Trus@X5|F93UZRH=IP@)h%+bL}DQL zWu!J-c|OnyGU}0vEXRTZ06?#kdBZ@yeotQz=lvpYUx>-hW!8XM+|X%DT71eVE(LV3 zLBLNuMj^TN${1qeg5~+8zV_2n{N6Ri;MJUsjqNux`V83S=zXg}Qnuy%N6K!3YL#>D zXWvW}6Qmaxp)pMJQDKei0`{Icv|2Qol6Gc(U|g_^`=$&9naO(pHmx%mOYoeIsfHh z2z0GK`YCn2e%TM~aXC_$t0TZ9^#X7?aW<+$#e0q~hn-jGAlouV)fw|@ftT&Fc|4nstY-*Cd|=AZxkk_f_$_ zIr0c;XY*N?8}2WyBAzQW0ZBnsu*~8z2x?}bY%uOG0Pxj52oh!`6;Pw* zu2!XvQL9L_v=NkPgf3#`Tk;7<90&LtkN}|(jzov#n>(Pf^&6Tn)VlDxG^&E!Z*F`P zP7=6J5+bJa2SuC+v;?Yzs9E1IYW35gw5Ci^)6ZCqgQ{xb^?*iXd*8S+pQYbg0|VoE zQvz*)P?iw$3ry*u|BdZ59<}O=!K~%M_h$g>G-3c3bYj41G?@ayg8Pzmig>d(Yw!OQ zyr)34W;&X10b*`#pL57Fq8OpW`1g{8eGP3UC}2=vLSmcxgZ*3o1pW#96Zj|aPvD=xKY@P&{{;RC V{1f;m@K4~M!2gGUgo3!*{{WIo?x6qx literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.BD068B89B4F2CBB0E292F53BC3714F9D.metallib b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.BD068B89B4F2CBB0E292F53BC3714F9D.metallib new file mode 100644 index 0000000000000000000000000000000000000000..d567aa5ee1be7cb51f045f698a77050bc1e5f261 GIT binary patch literal 66314 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 Xfqw%31pW#96Zj|a{~;i$2vq+c%sewv literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.CBB6451884404E44D465B01DF5A806BE.cso b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.CBB6451884404E44D465B01DF5A806BE.cso new file mode 100644 index 0000000000000000000000000000000000000000..a2362a53a5739b837eb3c75b6fee693f901c2eb0 GIT binary patch literal 27776 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.F0E2F0F689387705D12CB9970013F51D.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.F0E2F0F689387705D12CB9970013F51D.cso.pdb new file mode 100644 index 00000000..c7942220 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/Copy.frag.F0E2F0F689387705D12CB9970013F51D.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:591e0a27b12fb41c81b2102adc0b417dc7070e4ba6bb32a5749b8d6c60dc6c1c +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.01D890EA6B89BCCBE76EB1FEC30F851E.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.01D890EA6B89BCCBE76EB1FEC30F851E.cso new file mode 100644 index 0000000000000000000000000000000000000000..896a233edc90c725abeb83a40fb1ed7ccfe5d240 GIT binary patch literal 14600 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 CyE1S9 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.140F4C3CE57F202DE2DE8B945704F1F0.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.140F4C3CE57F202DE2DE8B945704F1F0.cso new file mode 100644 index 0000000000000000000000000000000000000000..5659b9642991bf1b4aa5248ade10edad518cce6c GIT binary patch literal 18096 zcmeHPZ)_aJ6`!?nIsmK+PbANk96;U&{;?|0+m7M>hMQ}w^X_xc_u$l`9%b>=(x3B zh<@Zr3@h<%1z#EE{UC;w_;!Hr9LoDa3@h>73O;tGpG*iV@r9}18un3G2IjL_$4%sBb0yE0)4e1I9a$l~4mnh7uIQGMxyKzb zoGN6TOu_M#6bKPg7Yx1?LNiQwIG1*dUNKv;JI40d!--_VPR^toas$iFo^5k5NBHBx;|r)#`O~>#ro#2fc6{N z24x>#r|K#D5QF@XF4uMgjOV`8#!7tb!;7Ki`6xrnqs|{~s^)`UA#Fpgb6r0eMfqOP zYbw6?9+)^ee&6^rDA@pFn+zOBO)};Gp^jG)u9SZz*~!uPfPj)q^M9~w@Qyp|!^t6g zUpNwJ3GIj{Ss98`_b-E9U>;$&AJzU|2NpQTjkXqUSPNi1E8no4uXTKpX9OE0-x(3p zB#7ksiDk8LeOrKMoLabXE$~b@YIXkM<}A;Z_rKRV*D&i1|Lm8$;%_Ft|3hsRmIcq9 z=a2OSA-N-*mHM)Ex-~Buq-2`FTkSQH331})>5`pPKCr^ve5o?$ zd+gDomn-Fp1&kE!%!-&({jlTBjJv6VmxZ6yV2W0l;6}_BU8ATMMf15r$<{4qoCOpc zZaB?Qam8i)@=88_cjy~;heDxh-H*r>q}gsC~Mi}f__w4>q39@?}?$qxI=jb>0%myR@@Y>O2%|I)H?PmiE9hcFhiaX}kJ+~$wC_aEsKaWD`W2LYeBt8@Jjj2SA58As zKbf7+=kIhetaACx?nrn15dP~MxGUDXFA^Jy4n@LguNa=mdwC&Jfp$u=ojKW#TWQCW-=Vz8 z3OS`pMU#nIFeY7?@h7{Q7wEyEWmGV1L8niD<6;*!gFdC z{}|Bm($}HYzYYtrUmR?+IJ<}PscBC{7WyK6kw{b!8c(^?PDz~dPV}CLNaRqVKfiHi8R}zHA8x6eCz?%)6uR@xiUoEwqEe5{Dz_%Otb^~uW@OA^Y4cs>H+YJ0R z1Me{K4g>Er@J<7d7lUv%g>g}jiRZoWyC6<*$`=JZ|PDf*guV}c(a4HdKqhgC3h3Q zFT`mpjq5o}oVL=qp0mVhD~+=+x8vE>p%0A$XFlXt3$!0)(5~%LmuDrr#%WiLo4U}h z8aH*JT{TW!>ckO@iw5x_(tN&L`dY2A=YM|T;=fvV{Ne}cBNs}?-WK9AaGQk)7XH1f z(%X>Vg7j&`ynvu$aR&K=$g5bqqVg&h=T%T@d5ks)Z#BZ1{cD z>SGqRY6g|@oI>~t$g#Y*=zkrGAWh;pmb{3!iJe>f5tF0Yzqi&S{(1S*ZqY7r)+a%v z5dA&_Z|~`PewqLJ#(D)&zqy5%K4k^{nkFt0vw$^=s@G0IoO3uK@m2rF&3sQ^P4 ze-P3jvlebl3)FmDHQyE-ec>;bZ;Q8d-vG@7CMDJ?=|SM`Q43eY0_OhDeP%m^ZV2rE zdN1ex&oe8-HevDTDc{eRoSEVhv0AuxED-OBCx_!>mG_C|G`Del;uxqs|K+T6ZDYLe zx1*`+5|4n*I8}0mC2dtPqW?MAYmrbpgRaF&pBs-}_dhoUY7PHiEU;O8)%U$ax}`kw zyT!4#4VaHy@BJIWi;Md1mxOA6t{V%iw(RP?;kxN;ts|eXz-sq@p8nw9w?^KJU>O7bd$)r8 zbqqe}+MQ*Zr7CcaKiU+P-~C%e=&6n3Z6blZ3J6{c7(&fv`f=^Udv?{+-Az!2NhO#d#W=wyn zZtb(W)}rsy$Uf+fXoaZM;$pK@&QG)Ca}QkqZO}!~E717~&?wRjuVNyV5%d1Whe*@+ z&vRf0s1r8l*ocAXyWR=n9Bc>i-GRS(3K+CJM-Ey560&7dAWA z>^PX0E&twq?l13L`06XKKJxnS3=#QY zL}VlA{lFdTMNR|%3cM4{bHHDt{AhY)^zC&b5y+edl2TsQUtBgmza-yB+0k?|sdRvC z0%O2CfvrHovmUwRFKr;ccu9%J*X5adztpFLGCr$2RZ$WUZ;M5eh!+x z5B^JQkoy2~XCT+?sgbRC{sgT@(|+(@S%cgN5~*^my`{lv{a+z^Euwgqiv*9Bgcm)CXS{hbL_-1%WNpGoG>$ngY(CLuWvxyPHufc@)6 zzhWZijb)vuF5(HOcG|sJh(0x4Fun9F#F^G|b1;|bJt7;l4E2&nKp&bf__O)gHcy9c zmohyfQC+V2thd2$dvvo`r;!}}^zu$$r!NOqwLM)|>!q(?PgL8l%Ois*kfjHKKlAB> z55NtXsi7(EZ+P6*{!qtypa$Jfo&PX;rShxk%S@&Z2#j1A*~8t#_ugwB&WxIS^l9K3AmKKTgnzFC51iu$7Qzkd0jy`?5V&EV{_-;SA`__Izd-2<5Opr8 z-KWS4;rjD{J{MkpJqvrZ77v_`CylN*ZZ7a#`Kz}cbvOMqJ#i+{J8wQ8yH(d`S@7KX z`-f9OmKG1`HRJ&|mP^DJJMW9O=s<(X*K2d1$+v#HP^efC=?#c5m=F-@4~Y0-hk#VF zr?FTAg~>eu(Q5D_ptC2~fog0cC>ZQUF!T|W5B6!YE)WusP6fLb44eez>-uM|L{$QE zy>;C)Yl0|2!DNlYdd#{AOHj0G>-e9W=z;u!3*AP3lW)o!H~JT z4VnFxA#dF7nYl3=tp=X^j@2xmFE}S=rjIekTNIj zO3^LaWegu397Xe#fOSM%xnqR-tIjYjL+o>*}G#!JPr zm32&SK{5+Y)(g)EjPQ#+GinTlB|3QJwUe7sp+>VB@`obFnk`mb%Zbe-I;;IflvOQ$ z4Hl!iIp~W)O}Iw(+yHAN0`NU*VCbN8@X7bYpRVqp=1M?1D3(&|Gl#w&k}G#lbz?GF zGbRyX#?_QRW2$?!dC+nXTa~%PS=T8p#>`^5ZVH>`sWDDv(^Q%q%Uy8Frs+D_a%JAG zSTTQcVI=FM8B2DV3GctoE%Z zc!1ZS2ju>ac0M2@is#fSe>$BK$^H(5vwO6Zovlb>u|LtDNF;@ zIoK|f9frDbTj%TXv}-=^(>?ufBPF8w%{6@9rD}d_4WF+-n%`c-H^HZ!>peTYJq*0d z0rf;+XRRKspZu*g`nN)nmfums-%-QgRm0y^!{=?S?l0}pdK&qG?KbiQ`L%xFH#v99 z;g092kk1f?ZZ;MQ9XemVcouXVhav-*DUCy@)_p92yM z{NsH%VKeYmAbmP0vgA{7k;nDwl26rlPRyV7`0^9K+^2#jl)O)sjf0Sg?>{Y4o&yC=LO}|MRxC2y!f}cRlW1K~C z3&gp!j93qWZ7_8~Fo z8;P&EShodooSRHXRazoSXAQsA=cD#jfj|5f4;*cTaASHPjBPOHaY-11F^@}_VQfPO zWIn3c2EU9W@Xe5bwMe}ozNK>B%IPOVa#cJ~yZ>{qF_s4Xv%d@Ed-P}IEyIjQh zHp%;PmJ#^<`W--T9TN$^S*2I%fph%HmZZA(ZIkGiHp{Euya{iB;}A1}T|gJ8fiHcZ z(ixv}7a;IX#KgM-(;6bUscU8+mw<9D>oLUJamset0%P}&)Wwg+d55$K$a%O0cr%doI1gKZoTF_(-ktGx zr<}K(zkKK5___tiF&3UP;e@LUyRNeSP<`lu&;y@b4~&hck8mC5|6L{9-=FKZdK1}! e0eoK9Gtif^QZqCCy{WxD0|^U1-I&kMQ1U-kZx{1RQ&9VsH|ZHBkz#!v4(K3!5Ex zW*h>P%9W^8C@nnj(1%Jy>W?a=4}Cx?s#G-+5)b{Mk*Z2|_%g9zkjPjdF$d+xdCo_ps0%sqFUJ3ct{n_vIzwd$L{Pi(#S?27}>#(!am$ajZD z)`8v){J{+(*)<|B0ne=!nM6SuCbEy=0+khr8 z4!jlE0VGTY*oqlgczDfN6{Twv?3HUFqLhd!loq=3iphnIwqwhWNf4mAg1LN|i zkOT2yvr1^YG(A?eo)~xR$D~rT3tr}Q24k>QT2W8eR0=}mZRlk^@hgtjPx%=|ecnT^ zp*Et5b)@V>eLDpeSB44*iKGQd1!T5?2#?s~U*fW+rqxjUxysk4be0=E0k)t`u zA3Jf(ay;wwsGlCKyI!GQvXDD_1U8MM4t2497N|kn#I@>xVutmTA8up(NPcu;^vGfQ zK7VldcpSpxu;_lsJ=P}1m(cZ*@0h+O`rrgibvlFD#q>p_so!GS4ER&1!!-Fs_@;&Q zF09U4W@J}T4%^!P9+Ccqdi?$ z>!t5tPfXjc%UcFeAanNuf2rub_n>R}i31Zaql9}EZ6(l0*s2q=MnqJ^A)+XiURrDkg{iwDqK&vkL}xnMfks#(Dj4lX zH0lwRkM?PNQ4Ay^-52dzG-eW&U(`QyA)peG%Pi`i8H%4o1ydo1rOi-qW$f>*^2Wm= zV>=A_)BA>0zHCSf4tU=#l*2~7#87eF%w?T)BeEF@#aeM&?H>>qU^VBp?jdH%4raw*{%bRuTrs+9_x;taL zR$NUJ3|*Zx}pv}`a^|keOXI; zOw)$FYOx7sHF}{F?1m5R?TVL(OyT|J$=OV5r}FT|pOzY*^f##FOUj`^`IHC~a72mA-ss zAH4g)yL^#4JviJyoV}~BKb7r2Fw~bBO76*~4kSvhotUnhR==g%DU|v$CAL#oXlL;z;?I@Fg5KQQ z0$1$#Thf^0qaS$Zf$u-}XXB$D>L}0q0ZoyVDliVD?!S0v9(^8xB$nfz$1ekE!WH5H z-bW3}-Cdo0Kt>GDsYBiw)O6u?Xysc_k-f6N%i!!DsTHPNNuJIov&m#i$eJiPQ1E4r<65UpyiAbhU!lF2OQOxs_n6 zjCUD+B=ZKPC(y3>ye|**pZD+PG`}sx=N+o%cZB#bqrvYC@i&L~n?w9$>$BH_9yMp z?JnhK$}i<-^22`S_c*u7p{{2^ALST<;p?Qmb;AQ|J38iG+T14XJ2%{K)R6vIeqp4W zet93N4S(ed>?WUn(R|Jo_J@4>Mf3IeAfJBGeA?Y2hvE0N@*dLkAE#NT@zsAl|G!7x zi~se(*I$3J_=o-f5V;8cIUvEH6%+()1ilKSPxp(=DJs}SWgqg2$_py5s9%TWtP3h{ zsd7bq8>x@Bg37IEk9kFX8)!!hZhKqMtK}$V!vFpYT^v_Fs6+x8`iQ`>)r2d@1M7d4 zGO{!W&#D7Bjd2jeEfB~0{Cuz=Cy^%d8TzuITV=YGi2oAaC;z#4LGxL^GvH^) zKPIi4Ht^#$w1LQyiYv$k@(l1g#D5tV=4T7Fn}} zZMFD%kpSE(;c$jrNUOHlj!5Gi;I~Cyr)sNVmD0=inj1oTO|4h0xEsaTL>cZ!T#I9} zjXm_|!$#~}>%hAiGiNR6F4^h(i?#;7L1I8T2w!ipZad^Smza+EX;i+<@b>TUz|mF{ zu1^m%V;hYKf{KeYV;hVq>EH!ViJw4hLw^D{9hqf3DxL>&No>Mr;DPY|&%JOPY*-)J z|Mi~5{l7!mxK)g;O!9oTFh1mhDsGai!~?m$T>fD0Xyd%Gl-VYZT^s|==f9M9u5KQ` z_uAgxdx5Wj9eCTs+n|qI6#XQ6XRbyG4QRp@>jAy)U$F)@4f|Lg*d$-{W3SJmwxJ@j zyX3*H^_Y)b?}INw=jZhYLO!ecbIo{QrDa#|4cAO(n;p5t11o+1`7)$?$Ex+m{l9VT ztrt#OuJpQ2sdw7qpTZSucIokeQNdrtxxJs#y)NHH_20|wQa$1##zW>UK(1T7PNxh( zf5+bZW;O6f_?L71iT0F#@4G=_FKm=ozjq@}fMXCcfjvMEsDX#R&*_Y!d}k!^&cei5 zfoTmbxT%|FP?UgjEgLW-*m3H1-2&szpC>Np@}+gP_|KSHXg76Gu1!TrHII~WRNdOA z^;v`dmcs9Y?g)*fK>>7x(k%JRf$P5s{5S9nYb20OZ{k|K61Imh+cq4vsH=c+N4# zSVR*puLpKsUiD4wO%F6Za0Po{bS!t6>o{*sOV*xrf3cV;m3Q~0GnrCpceYSTXOrpT P?*2?6T};fBiU)8N!_m4BhGt%AL-P6<4)AR5ssw+sq`N0Da0Dl!LIJiF@?Z3y-f478x zfdMpsk463-|4j}Mh5rlT2mY&lLO=cXjkuyTD&U=&lZ&A(1ZoFR*HM;+;pD{C0lUv%gvm4S6Xnz#N8tYus;Mi^c#Z zm0k$*{S*DuL^Z|L)zM-6mF=COE>L?r0Kg9h(m{ZM5T9tCCNCu|AzuQJfl;$-IGZ^+ zvpd*3nAkhnnY;hfV>Nb#+L#*KyRf_2J6W4K{nPvbn?jw~&0TG5Se?xNjM>%g?QNXd zmF*qOOxabVPt2uYR2EWB5I43bld^Gh^9aar$nbJYNpp$w3W#&d zh)W6ZNb>Os3Q7y`b4s$=nz=x1Y@o(}bzsUW%g6xO-$7tP?QQ;Wv~p)R6m&B+=eITG zG3VxZXK89}>tf>U>BuR-0V@`E?CSp`l~sU?--M5s4FYunJQ-lE>p9w!A@N|34Q%Bf zVMRi+YmFBMc=9M?Fb9nv7UIwoo)U)NhAjvhJSA+w003OrgX~WoFFpj6N5bL~On?gl z(;|Wh$$*i@epu4*5(#J$L0DXP0w99ds9X|Za&dSRk}_dM075Papgcw#HdUXpxQc(& zX5dZ)kWvOo1?DM%FrLJtv^P(B!1*DF!7~|?tcjCt=aCHflPyq^FNu+@<&mxUlZ^P2 zEcua4b(2lO`g!QPlw{lfWJ_Hn8+qtUlqCCbqyT3S^1HN9CjiJvF4O~r>}V9~WQpJj z3Ux6GU5VGAo^bK*c5eUf?gbc=W6pjqWY6y-4MjYzF zfb8cG>Sl@H92e?f`NYcIJ=Dbk*^>d;!!ppxDAdIg*$<{C*$5oL$|fmHlWj_pr96@) z0NENP>54zuh&b6&F3AEV=~5m#j9?`XeIbver<(-OL%NoSKGjV+3i(g{J>x=Q%>NSV zS{nM!FO)Ag)By|m9Yd%GV3d+%0j4Az#UELuJ>9Tb{82cUw8x)p0xlQXqx5O+ZtkIc zX`wCx$ZibCFr9s1+Pa5&z-9sCW*O>`i|hi}7biP}S>TTvuzn95*#=DEO_HVmWEJKC zlTHxo3Y&Obs9SER69KZPJ8bR06whGMFm2k zFbxLcQWXZls&7GgadI>HRr z6)NC|z#oS2!T~{G!GU;Z0_jIC@;fnPPa|ZPKONgR498q#ci7(q(t#hc=byhPpb@es zY{_zwVIA1enF8691KBAT8P!9s@Bwnmta6i>?kPd$Njg@x=vf$T|v>n*Iuq13<}qDuy5~27hcncuF!j3ewj`NHCfj zn4fsTT5gaZN#7=kIUbxyn4~~ZZXGKpa`FS?WCP=}3*(3b!FVW-1QzvRTL@OK zKuAU?N&5U@K?-RuPEv44QZVgL{kc~lNm3vTK`5!09VYZXKxhU*sJa(C2n}`64s~(} zgheHoBfAiUy5xouj;mpw05H##F}C9{zKLOOQeYgxWM30AQI-C+8__B<>krTM@8hJ|s|g|VZI zan3>AJq3&Po6i?EN!MTsDC-Cm1`2=n7n}(cf-Oy9uh8dS_N+kRHc64LUSWU-1psjW z{6zVD(lMM_2 zfSS~63QgE~49f|m+#pWo{~A0U&lK`@=Jx+U+)OMXPKM4p}CohiRHgDcuFJ8+zstrT^w9pTww_e1H{F} z32N->V#dMvBmv@NVd&!FU}k6s<6>@O4{_o72mA-(1hJ5`x3PD60y_MiC&5euWBO0l z^o03a4Ac%L#y@)v7)sVBBjJ7*V&or#$t)byY3KL}W&WoF`H_?I1?X#cjz)6zT*oy;Jn zPpz|ylPiqw&y=CCh5Xm#V4D8L0%j3cTQj>q^Y|Cg#Qu-yKfr&P>>u9$0zhn_7IuHU zLG4c__lNoa^Z?tsFo%Q{jsP(rH3*d}Knz3;>Vu82s6kSk0e%2#P!MOY0}>q3C`Xom z91=I!f}^w>+)IQ7<&ac{!Mcg6yTL(@NY-6Q+`vIF9G7I=s1XC&w7^#|Vjs^Np1?R* z{0!_tn(9Nc7UN7d88iCW-EZ`UFVGQ*C{S=2j6xjN4MTPDU=WNtRQnTGiz6UGejszp zS#`PEaa48_xsx+Q`4h+a6LXktq;-RV0j_ z(4As7=}(;N&%WXB5C@Y*J_K4E3U}FkyD)G(i)}Bo1~6P94LC@6o+l8K$@xz|+k&dI0?cJ%h6&aNM zjpAw^!PJ^2zRx_3wV(I}TI%_mnpHwxR0j$P(6T6w_g5*zRDtc2#GcYnKp8C7KP9bb zs7?&97>ewv?T{uZ0tksBmGRP!=p; zB8cP$3d4eDT<_C41EBx_=wU4`P@Dxu`iEAE8&L0zg^0}qGyzh80&Zlv5X87)N%2n( z000|CLnS*Dr-B*;(*^+e3WM9*+Cd%cU0{wy@f0)Epteu(LXw%8LR~^!{E7GO0#;H_ zh(F$&ZahA4sUK=FAP_7sHp&SE)?15Zga$Cwq00b9`G8V!;$q-GIksL1r5NIq09bLP z_$w#p!oZ>m0<`}F2AIL}a#9!`2O(+yiSD0s^XcrA`g^SWgn*T&_6cwKG=LQx*hBcI z_t#m={CEGUd7}HLJn?!ePwi7~{?9d1A13?hMh25@{e*wo%YW{P|B8aJEy>5j3VDj1 zthNvnduMk}4mM66Hkc7%<>?;5{uEfDe}xlgc5M@TQ!_RgJ-ej6-IFn&?o98@Y+&~( zr$2Wqm~CO9;V(KVGjoWmjSHK*i3{x3^#{Z5>g>e+Cl<5+5yx%}wPS}V!D?e;O2G?Sr4I}7%I`62rg%oO6}26G2k_m77d!kiW6kZceD1{N$Q5LcCihqW9430+G; zPH`PNH60`%9~J;1X#MkAwY>e~DSP?)Ynb=n0s%nSs{{Z@8JO1Cl-?v}H5#;;kYOgG zwnQy=F)dS4I9VJkMFiVs6GTLo2#kf@yqrpS&|FI*uz#^14*-A;kc-PGzEmvYD<1Kn zqc7$1loXo)0L*hSl}SvYiMZm4bhrxsaT7!c3K;}&JV-bUlJbRT3Pe_BJSM81(Ph!- z)Se+3xHDiy;bJSV#$MG&&$s?-*~if@a$kF|xXggzjWt@Za^VTKKm?GW6xNTO3PdL| z9iU(^1U|1%oArLbyObHpWkEn_vF^h8NJ_C%7A467wK6_|=_KyiBz5lKoq-K_`W!(nK} zyh_<+YrC!LFptc}IBHv?xgoHOZot9{-+FA>`0*+??{!>+CS&EtL}IICDgOXCo>0bN zM~At%M)s9nYQU%;FE|8I;aBo&VhjvOZ4?FVc~pS7pqiL2kwmp6ei&=x8Mb1hFdJ$R znhU}L_!;HT)ssn%TxLI4)_1FlAMJnEwYOsP$~}IhyK=?)91zKyJ-CA^vKG9Pm{aR# z*%r!>f24thKi@U#LW>cYY}w30Fq6yY8U?1yakk>+J3fyyGBOhw*Wq_md>wE9a>i0o zqd+FZ5Ke3#{JI3H88vWliXTdf;(4V8O4)5}&=X{x6Y`OI@5&Dz8S zLE%?r?J1M5TUp}4HZ6d z@E{#~Plo2Lq|=6`5#npv1wO4Y8E#Um;M$A>8br^42I4m#mk_@8LKv;1Raje87-V;^ ze<^2hmtZ_|8B2X#1@$+QqY12s`+8%}v2~>P5RFC|Z!)wbJ_%lQ=Q$_6;Jpl4k!69# zS>ttW+6L$wp!^^V`l*Mc9H^T`d7Df8EC!gJ+L2AVSD$IB5e6FOV>cifk(k zIYkP+@l3Zg)y5U6DlW`87!?_1j2CeLy-PAL${w8XBm|zh=@L3GIEuW*od;%%1NXTel#NUU zr%-gh8oHDhNc)UzuI&5rC;=n0V8pJ740{Br$U|x}r*~*r5N;MoVi%<~8z1nTn$R~( zbTgY$+a;`y`*KO3hcPNg!xza_=A89#f0P^zP}MUk^a)c%jOzOwDeg0PONz(HW~wX( zIRtoO(4WKcztw*&@Lvo3*8=~wz<(|9Ukm)#0{^wZe=YD|3;cgzfv5kBV{H8WMgZ1w z{@WV?bu9fDK+5XVOR)dvveBylrC$5zwYTn>&$->jZ7!Us+uGK<5diKuZp)tNt{a
kvwTp{ew^rwlC9mU^Dxc9~@1dZd>b^7QSP~6!TfT8|>Z} zz4N?mT5cJ?Th?DB=gwZuIj%Y}e7BZUTXdN-e*U%XylL%ZdhPaZ?RIt4Zrr?ex4Gl% z=R3PMcOA#82^(3Bb=mssiXyw$>rQt*7VCC(C-yn3*J~$UlGb~?PC4zLDp!vq_ujpE zYau%Q)xBa_$!+b9h`3qtdgXfgdk*i(UQv5{uWO6l*N&Cr=94zGRh#zNwbp~ywd;=A zi|=3kkUL)7oi_J3Ty3ASW}mjtulann_wqVCr*6OYh-}=Oxa+uR7g}!ivRS*UYU}xO z+MeCf;_2~)-EOO)?)!b|vKU8jcld_FlkKDfNDEUfr=UAJHjU0u<=wvoHb%lYJeJ^kH# z_e68vhko@`M3wVvW%KpAm;T9*FN-cdZo20k=k{*R*V)&^9dEAgv_7~Y-F-h1e0S

h#A&EVGTcMB!94S73B8;6sGa8_sB8; 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

+KkjKS*^W!vD_A^Y9a(W$JF> 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 Zsbv3P|KNaGcp{!GnDJt4u~b0G{{n4}5?KHM literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.58AAEEAE9F43BBE34D312BD53914D01A.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.58AAEEAE9F43BBE34D312BD53914D01A.cso.pdb new file mode 100644 index 00000000..283cf20e --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.58AAEEAE9F43BBE34D312BD53914D01A.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f790e5be3f3d62317b0e8d53d4797618450f2113492a2d7b013d10000161ea6 +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.5AE82EFD5FB29F367E0D45BA786D928A.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.5AE82EFD5FB29F367E0D45BA786D928A.metallib new file mode 100644 index 0000000000000000000000000000000000000000..f5d19c7a28aa59ad69f559cf0ccc2afd18c791dd GIT binary patch literal 66579 zcmeFYcTiNz_AolYzzjKxWQLq`mLNGONX`<5JY-ke;!Y640kA zr>hDB=_q<%rWF$FA7d_iC_u5^8hjtmqbi-pdr>$rMDww=MN?T>kK!+S|2KC7B^_NT z2pxoWdub@@nm|GSu-641g@WS#7E0-nqMoX*jsg+Lp7<|9uTK7|_4U;hi9p@VYiL-u zDKIGlr|ST>K@nF3M%gPO;Xb@5+wzLYDTxaz zDJzO7%L_^<3yF#;@hb|8$jga|iz-S8ip%l3*m}a9oe@@lH2`6?l$Akz-f)1aoAWJ2 zM_)b*2_G9fF&7(QJ0X5=2OB3BPiqhVCj#R9K(Tk_)B7K;JYo_ef&#+4a0C*BGQev0 zU0jq!$$$$CxWEli?nS+Tihfw_tcpy+LfW$>-01OBMkpdSageh5W z2&{%hBq))B7LLb)38kb1Keq}dQ$m+d!Idu|5+oCcQar>F)QMJ2B7-R?N0)*q1?9nN z1WCz^{aSL`A#odFUt_@>%2?Wf%Y*?msYh8ZP;#IJW5}X&TG6b^(S0eT83>`9XP{q{ zrCTkeTMnTa387gGrkU)an*`d0_*)EgUqa{>yJ^-7@fR6rcF<@+9#DvPRumEhMXE;m zK_O2pqmT|5{?I5-%P3KbD0fSs7t&4B8$!EPNCOI`9f8wr72>bU(T%`qCgF4d%~3Qu zfYcBgKQK7Tj~x>19_8bJ;gJ;O?tmiY>l@|i4)JG)_&J0jEu%agAi;o~bR%dK%Nw+S zBwrY477J+>L3FDOw96rMBXV?$1vK*vw2OuKz<}jK{P{wf-X0oIFYRg}{$vmBDEvR= z_fLufi2udZt0KxfI7+l2%AE+}%^u|k8fBoF2ZTg}-SVRC?E$p76}W)5H-v5+tpMUz zfzsW_H%c@s%2OQT!wvyt4g{q2jq(Gu0H`@cxfeh@K|6AEdw>OQ#Q@s9Xmsmiv5fM8Lj3=w(R>{gGYN#Ng^36Td_fKH2~_8^EaKopB%v0~FSA z0t4ah1gc@sSobtxr8NFu+}pyFU}4gS>Y_NaFmxs|g*aJNCNZKUbejYa85S`)oQMHn z4YdLTGS|DSLj3A5?m2|H2Sa>O{ukyAjd}u1KzEdQFosw(#yxio@p*UZuj5$91rTpp zh`%Mo^S0rVMDU~l;tTx7v37$Y{!{s(1CLQg<|f5~P^_@9gj{cfc~0%M3Ez}>}?@Cghh{Qum? zvCfDfelUnX4B`b0zP$s(kXk5R{^t%1(?UJv|8I8`H4p?Tiz4n0L)qsq&}E$f#R8y) zvH)>!lA4m@)F+Ut5HmUn1QZN7iY#z}m_?yvwlpBn5c;hj0T@BLEHX-B^`tm#R+Ry; z0;7@^)K&|f352N~jE2ds6^wzYsuhfh>7W%1!Hm`l#>TABf?-x^b>m>xXszR5zLiCS zgEx)Pg;3Pr0R9;O)I!i;n*I$MJ2EusXa(``zBu_{;7x;gWIe�ude%5u64S2;s@o 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.7DDABF541F1046F394F9BD2476CB5992.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDraw.vert.7DDABF541F1046F394F9BD2476CB5992.metallib new file mode 100644 index 0000000000000000000000000000000000000000..49950d7d560610ceee59934fea06b954825b7f44 GIT binary patch literal 66991 zcmeFYbx>SQ(>S{5F0LUsi@SS};1&q(A+Y%3Ss+*-xCM6)u7MDOLvRle+%AFFH1yQvPy$gwXrMpoH3rIU!RRkI z_OG1c4;tk27o7ALjPh5WjQXd-jqp#7L?in?l+{qg20gVwc$hoG;4UCNV=YCXPDNH% z1qwPy((fLts51L(RSBN{jQ;NF@eRIRK;b9GEYFtwOj>tMB_%!bKlJ`@z6Odqx)2a5 z2<7(GP|!7jfc|E$3v`8mV*V0J@u7mAimr}4Aqb7+52075e{y|&RRuzjp6nF$BV6i- z^bf+@!!}cjk?oNKHIUWQGXr6Qv|Qcc9&lF|5GYW?#@${I0dsM;bwxOv^MO$Q2ZkSn z`aduNAhiF15d@(J%DXzbB0v~{01IOXzybpknUIW;8dXq~Q!N7-10wM1yW1e#dEH#y ztXvT;w%&i2xGg>5PS%#L9=u+z2uB;l-`OqN8jj$#^>lLLM%diKyn3##PVT%~u5LEg zygD}SuAT@h8+Tq^dzdwnxB}41P5}Y);z7<6kEnuzteldt5Wf;XpOA=>ptz8dxSWE3 zkf?~foUpjK0FSec2h7O{ZuzGG2&<)}1mb-P1DLux-BNV$<~0}hvbGgF(sw9v?<&`2!KokOU=&JY$i41*Ovf4p0n;~DK(b<(S zwE^=B187nWF<&6%KuHLUCXet+0Q;~-Jjn+?9f}Z1i0~>0dqE=*&Wg5>2E;pT=E9uQc>KEf>@>;c-5rQHL@-b1rifVV|YGu}-z5=6Zu zLkCE^2BQT=0Z?0_r`|!K0r@6G_yQV0ih%}{-2%bhfWTt^lawVbzb-92(E{qvw~WpJrjnpYUqBuR*c}-Df6U0=BiaL$2{hiM84W^8vam_h z6ZG#9iEzoGGIgQq$x=e8(qvJHEl|p#cu){X6|jw4n+un@by86Pjt{UE0R|N;sC5{6 zGDC4F@c9&4kU&bT9vy=dTC7fJEePs`pj(6yh7)00#DQ>=prZ<7Xi`J+QZZ;!&9V|H zXi}kQ5<5Y(_3~m9A(F*t()szgjF2vBlqB3826!|Z?9|u*N-5`r4VE7uw~FB(2zA3( z34uhrr3fje@crc47MemAB6*-LiaiHKWz1pHAYxXRUM51ZaU1`rzy=9{#A%W7%R%S~ zr)ax_0!g8OH2lgS>=4KczDPm{BOpIXotp~Srxxv=eF#$ZfFU9+IO2(Sgilw5SRk5c zB-%YUG_eIYsxK3mC%__*0sC5jJ#Gum3HZRW@CKd<%-uk+@9l#`T7Z2C!B6wSKmh>V zp>(WPlgMBmyDDqXU74P?1|H z($@*lW{^@4sVBr>u_zCq%QGlyL2R^889^mlxL>pgG03$7Q8C1{0?{#yv;r|PytM)$ z7#UiD*cdwb*ch+0Ca^JTv;uLMWj)aYw~SB)L7+E))%pQ+1tEddeVf#_q$pC6@?xRA zF>--mA8%mwKf&Ds5gZcYp9SIz;>ywXbkmF%P}}lh+%^lL8vWaBN4;YJZ{Y_4`=|ix z9_;Ie_S8GV4H`i)N`!xqfWOH{;KE1n=>-2o3ty11k7f<5OUG~S^Cr~FzS)NoD=3;g1q>Uym-d#x4Bm=MP4itO(Lb27hrlF zEHQ&7QQM0<2#;_xia@x9c-SM2-UD#D`4JT3x&%icf>SO0&k6XSWC%8)_y@o!plmcN z-GB?Houa1(JnqT{HQ<5vP-tz*wZ&@X@8yI@jA}9cH4uvkz`1&7Xse$k5Fj-`>p(jK zqu!yXS?i_=KmmLz^(Z~f2@F#&EJSRySE5#43Q)*(kK|{0iAVtKjp@gZ@X3hq0^|X< z5jHR)Bk0j5Li~d+{4ZMg-}o52r(^;DcNcJ4Yk&Y+#$v@GlFdQlGa(XyM=9==Xzu0B z36X42)ql|2k$?hg00k#%!(vVqg=>;`wT;jy-H0irK=b8EOe%+kr`KdWqE?#M{f!`|G+<^QNdz?=cO zY;A22=C(E-R`&l%02%t&c$>R=dboLdcmhEe8_dH40k`z@u;F7za)2T1%sqVEY|LE% zDz;9pFb|=>(YF``%#`={#^k?mo`=&=6@84Z2Ol=k#ma#5jHSuWbW>P@C4f3 z>I@E8g08L=Fg&D9{HySX(_aJu1$#Q%xZJAc56M4T_7*aL+jwaqTpj+-Rb8GUi+^Rv z8f28L=c=w^0z7)INJtLu^j+Nk0qer8Z47`>xgr#7 z+&t|66mQuJn8@8)j5^#I?%|H?>*k8^&;`bNTde{E=FQs0#@!t`mVepE-@5o00_Fs_ zbGbEtU3u4A-FoQScmNae@A5yCVfA;#ZE$`&U;i!v2ZW!1;|3C6unamQghVu02EqvG z10X_1hys5wAqpcTls{O8nh}C75G=z4KtRR?K!U+CLI4D0k^m$WETaHGK&B2r!of0n z00d-@07xWQ#u|V`dZF0eY@>XU!7|u_xP^QvJ-8w4gvEUFT1XswP7iJ{1#2RI9Q4j9{V6V0JC_PmcuI3ZWW> z7TBcIVhgxx>?*qK8L0h24@E-cu%{G|&0~wk@{5CoN^YAw36fWK@#lUTvv}1r=z&i@ zT8mvafnAn>=`ev^?S>7n#jLpnolb7S3C!AC(1j2OS$l$6cMH1l-GYSR`dbj8bqn%= z8{KfqCMHmLR(jZlJQHwUxnVzb1Gjczmsx&`9k_RZf zC*9n9HX9k;xP$DqJ?tq#6genTqtG{ULnJ~Rx+61Yr(I&fafge6IhU`>;w#S zN1Ya12D%_QEmN%Y;_C2*29dAy03+tZv<@WjbHjP&hJ(u{R=^ihhkr1E4{UHJgaoG+ z1V8zD1F`q=2};1A!6(%J$CE?V90WXyK)hp2M$?Q!c@fO}=h;DFYtAuG2ywnZ*x;mW2~~`bmzCik;tYB+rcouz;F`_iyf;OV~%|_8tak*rFOx3knH}3 zGdcT#pF0&ZVMI~S)aOSFJuBmTJ>w%C2P2=irq))Jum(0uYlXzq-!zFd3pLig78Pr) z7j0_M#ze4z-Nl%>G{*aD)Z=P!T~lO$h^7LFJCFxF9Bc#|u%Cl{jodQirGRa@R$hFf zH+YMB06163BEt>fobYF#1Wf|xKun+ycvP}DL?Q>+ywRlcLnMKXJfRmEAHkp?kRgzh zpv!UrO+i?|tDp=TUZLubMb+?xdLv|2I1=L0(W!u0DKh`xvS~Iosm15JSQhq zPfk{rB-CM<@VYm=n+`ZPh~WN$5<}m>HX;&1QFv&oG3Y8zpY;HDN*2!LH{?*5-n^Ri~?K% z^*r(n!pP1$C>I|@0%fT{Z}EZ%tqBRyz`(doF`1!J+-M{zeQ7AzYL@S{Fqq%iOavz( zb%IP!pnuNa0{Dasp`b`)m)m3moWYSgBt}cwK_Zazfz_v_(=7-x19;;DMS!;>5`)~rZZDet6+Hl6RYZsz zhKxD5oncn4?%w=-Jp4jDz{LNRkY_kvWKaVCvlYAZ8dpnr)6<#zXRN4UCrK>ruAX*t0>kQY<#yc#eoOIF1OHghbXG-k<$% z=Nz~o&*sFmL+)%p%4f&JUq}IjV&XFJ=zzJNmQBztgHl(5U^(GRr7Tx%Myw9D3NQ> z9!*{bgfgH`B2S-~m@F?ti5ml@#G|z4#{&_w3k|UZXQMBX$Y?0ZmQ{p)$BZqe6dIHH zpj~nKg}~LFt}rlcIGrVDg1LUS@$rNOX_USgy^PEvN{Gr(ADXX(T?hTxyBXWeHAk08<*`O(%PVyWN>WBT7pGL)JN#>3u>~z)BhORd0mRLqc zul-VbvN^c(!_j!FzHOs9HA$i{e5?zdj3mPDQw-^KIgGBvm*2{CZAI9+J~&)Xvc-F2 zN7i9d_1lmv=9M=`q46WqG|m&Xez$QFr}FY{l<$5I92NFgmT`H6`R}ED)Aa9R$AgV- z*cCPJmxKjv5mr5t3sIwdSQ8B|Aw-X+B=KO|NOVaHVe0HeLj%M#a%nfZ+#Oi? z9m3uA9c`lQx>IH}Mw_&S)SX5rQ9ZGt_#j^)0$t;1k;jZnY)3rfg(XS|rih57t*6cT z7FMqfPxJ!DJm^vRB!7Vv^HFUep^jAuXZf6PCcif^Ii-`PyTI6CI3G_Hf78-FQ7K2w zXw8qDOP+4Dm0_56tptjRJ5CT2(Koa=k}JGrutW|Ph13VeqT0gx{rU#9f#V*=EILc< zh@YhW0xqz%LhP=wH;-z0QtummF^5i*3;Iz}5+$WBC%Jy0X&(9DMU!Oj+_-$ewa4l< zjcZVwZOcIWSs(?CyvgJlq3DLVh(qV~FQ!KBcM}HVzC*0lD1t4|X>Hzf z@$=@i<@YHJL}s%G^k3tnKJMYc1XYpdGtV*~_nSG$4GmR6Zj@o`U1ilStoI&iJi(16 zje$BqWA&NxQRu_2bRJNQTP$#OIHGyiAJ?3ekDyEtW0idRS!PVMrPvY_j>`0G->8*u zAN7H9*CV|&e?(6u*Q+HfBT@`Dl-Vx5V@{Rn&{UbVCKQ2rxJ)Cx1mo8zXo4Iq*fo+w zxof;c!G}yWtk{c!`MXgDsp0}IyR1Fh+lBY?8EC#6!!6*BP@b=e4ze$T>O+z!#mM@5 zn;$tdu1xXQ1W@CuPEOw|Cb|QE(%3`TuNmBhBgoBs=0N6=`F_eS1wP2q3}x3;eU_kY@doWd(N5u83zkm>{px2E_WfOV zOkNX-;$oq=e-H!7V|}0D?Xs>D+W*Z-IgUwQnO}dOHjvn;5M?I`bJ^=t1My{_ma_^B z8^>KM3XWdhz%)!9D6U!>jH4!^{`#ZC3{$gh`iD?%jss9|55rt(ijLR`hN;X)LyjfV z@XDh-SvPRs6V&>VsZhSp_||Gk)G1MpBRbA#7{4FC_@G*|f(dIB$(RTi@&0^wDvU|C zL;;Nkg{Xcsyf{7bp0>tg4VWaI%2YZR6ibhf7pF$9pnxHF`=ct3`VYCCDM$6AVoP9 zCbMo*mLNL^Rh0w=J6;w-dRat9Ocrr$aBXF1EhQO>)z-ZX99YcKoi9ox4`a=`i_xtg zJX6vj$j!24fih9|saXk;zcvvIPvzq3U)&l2)@D5po59|1p@EQ70zl6HA2$Megl2J|v{mFq*#C3dXfu0XZ}j#2naQdDHThG>v+keP&dx5q+T1&q{0>)sNCY;$^#8H$ z<-fWX-xlwD-q`NH_}cwm=CP-i&w1NBDgVPZwEdFht*cEP>8s;+gQKa_?Q0#=l2@Dr zGX85Rny+{{`g&PN2{;TdtR514R804%uSrr{r8WRlNP7j=)4B}S3j7Ir8c>?56-E6 zZ(w_T@MHVI5uJ0H8LLf`OJ2y*YR%hE?|z)8hx<1l9USg{Kd&yXdUgJG!4bZ?Vsh@J za#fJ``q}yP{jGP=Wh98o(as2i; zqG&9ePe3J*Q3izGm1Uts6lp&pgc*p73QsJ^7qTD1ltKQMN<9O8xD+dygb{=lX^Gye zuDSz)S|`EX|7D}N7x}}A@5{U+gMJYr>0A3oN5gwDwGOasf>CB=;>?0^AURIvZ4I=6SdcSn1X9$TM6c|7< zGt)#Bb(R_xrIaA_Zsk%9^wCl@h;nHbZmfD5MguGFvHDKqKKh zYiaVdZ1G@4Md{2^23+VYL%AGMtbmm;nXkmiER|2mqT7|Novf4v*Zskg@}pEpm|TGP z<(@!ZRvt7@Z*7wFS8Yi4A8ksb;^xzill`9DN~2j5iO!PgsDl}sGi8OoBU#&yo15lx zSMSj13Lm_-SgORg*l$Iz)Q~K^fZRLgoQvD+aAx_JMnoO=456icG z`PRH6+q5tG1RLfZ z^5{hlHnvLs;6j#tS4YMn;a|^qZO&ScRe#I z_!8`nEo4uhYVqs&i}4@#r}B%mA*A|2K@gn7Y%43SA66+}T9e7=vVJi>y$iDi^V2_c zAgEGLiPV8AFlHxFMBx~mWDD;ehQWw}p7_d`XC{qWo(*L(%**NIo z-sYUwP=T6~%3ID8f2QFaIJggUti5tH#cpCTo z<{8!9unF-6aL2~I6sG=E`8%G!?VTMgM(y=85Af4 z=4NJkh+*gqNvuqt7lTVS)gXd?)umPNXI)~$yC)PCdm|%v4Yde~wV)6_2xFSTj}k?z zyMvRDY}_kFLWw(Bzf0ZsiUN&d&G#p&RZJS&bNw9g?WxSY~&~t&9rPyNA&g1@)Ge zNcGq_;M-H5uXBB(5>xJ*uX+8RcRYI@vVK!m`Sad44UmztMs{~X7?lZu^y1So)Q5{4 zkY4MDlHbzrhcwl&C5erDz7W>I{1ur!N4fK)5La1f)P&OWJNK(3GNQ;wFcq-_69Ut+ z`dv4s;Yme$nIXE;9_#SK!MOgecI!XvzvDj;+gb&EHP{mdj+KwtRIgkDP3*q zFi=>>R6v@Q!w`fD2<|u|mHh6Vs^sF2fZ2i)p}e)M(r0~D+5^(2*j%&j(kNLnCfJ0i zP?AW<$gg3>j^CXh=7_SFh^h9&_A-}u?-9%46($8-D`JE-bv?RT{b1rHbAc8?KOsR& zHd2IGVR`@QG+_N@(}`qz0<`zVQ3Q^i*dp(@C^NB?*GywHbM?XlBg{1^8_ePg?j*?y zYWYEhM#}SnI2ViS(=Ll%neoP`?`qNnuiI-23yppXf&-05HxQa2Qc^MU?AK(ZahMm% zV{wx|>E6>kw9l`#AM zQkeu;PUefZQro$DDOq6&)*FT{$(rBx@ty4nhwsO$hU`f}-@opTX@ycQvh6|j=|h>x z@_PjyoH{Yd7(f$J1#Wud$`N@c`tpaks5DE25wMwIGcJ^gTINU!nU}2bJER$(PYKZ@ z7^uuB^AEB(=F)7~Ru*AoG!h0?-Y>JAD5QN39Vl~*wfxAnKU>!Ml4d+T^!fNB&2gpcs^pjtn~K!LdF>`6FFAW zFVfD%;VX{_^c&(0`NIWjduq@y1GWk2$X5B9_8eIU_n4k5U@qr%E|E$_-Kn&{;~b28 zy(S%!1ldnOUkW@6933*8Sl#}KdF3CUD=$RvLs2yH^YWJzr@m=-lV&)%p1BbggTh@UC0p#Ezo zes$^;>|vGP`JS|dldsjff3duPIqF*vR9$!&9?tG2JVN_JJmnE!ZYa3;Lp{JiB0CPwq9_3oFd90V-Ai|*rSIXwF40^)U z@iDkJ*y7jzc<-?H?mg4&CwL<4WTahWU?_P$kmjqxOpNYfzph#t)T+##Jd$Dc^oRP)9) zE!j)j>^0pFTI1X)4{_|gQuAL5G0{h!kBfTwsJRUr!e7eapo?x<`!BrJx(-37BRSJ# zY*wdrhrQzOC8xW1`YNKsJpE_Dl)x~mGOh*rcAN~s$9s3--yv>It8QY>X}wmLKh{kb zFQ(#MHdGS6ZjByuD>c;P4!(_c=wXTzvRF`w!9zJP#V`s&Lp zjOJ};58PU{DNoLVh_sU0E~A?0$cRX~s|X2OhcF^kY}NzA^zF;tGxh5QGVXNmVTp)? zG9{WrI?QPT49s=RPeN!BlSA5CA1Cw^E*&Hr=0hW z1xH={Sc-Z6p4j;$aHhP{E{J}-{?Tfy|A)z|*{^;QTfZykMkUh3DKICtm5;XQhDr+L z^a35oOe+RL(evzPNbzORnF(p9U&b104qU{cAY`1mzwqg2Z*@kSKc|aW?>VpvhCFd> z{PL)p>VA2TFtLmxArTfN5UP0GKGxY1s1CbBs;{8=>q--?_DJYCnuxu3=NQ(N$<4cy zfXA4|iQ4)*Ro$1@1!v$n)9$mfrIVXy5dyu{^xfzaw{P?yd)Ml%MRWqX)?M$qS_b>R zE3@#8j->^#**sB&-`|Az)P^WM`mbp)Hl`SJx-5THt&{9R_{Lb zK~ctaxaVOk!1dO)M8Pa8dFbFHIpRLSAano+1LODap|LDXWeKg15JVZN+94!vuP*Uk z{Lu2kqPVDA+K&}VX~NY#`7d&d%|YK2;5M8-%y+>=H~WVkW=w*IuDuU69Dhnt2{^U8 z)ECrC|DFz`txEsREwoFsa~DetlY>*pGtPRxdHKu((!aQ_{*=b0gd|f~B0NDQg*a^f znY`C}F46XXrs?6M znklw$ej?gA;F=J>wS*4KK-wyl3{}DC zSd8+8kVR876)|JA@#e^^vBL33UinQ**gl(|)iJobL*bdfkA6l>;+@ysXg_sY-@U}h zC(;;Iyd->3nR(rBWg^quj@{?LNa2zAe91#_`9ov2xOGDI40n@E0nIDoK6G@4+(*4dD#w~yZwRqvA3ac4bbrOLMc*#^ zNlyQQ&oWr4V)Z+Jf?Q5m{A5RAlX;~FDfbfUDg-Zuk$Eoov&p(UC1gh|)&=_pOJBFo z+uK_U1ol9ubqeTKH-cs{azI9BbXe*1XrZyKmuBeqa5x`L{c=`6^w(9t(+;~d!<`H>J`c!rq2^*E%(-S3AL=(y%-*w{CQPn zOdRk#NiX=1|a`MAR^phcV zNxQ`i%S_t&DMFLQS=o`RUlJ4>1}tYh-uXZ$JP*k0IgH8!0k#LBVkCReZ515QJUNS(Y{3Fu$+ z;jM2NT*WOd;qaVF{?csf6uoM;YounQp#k6ESH?AD?e^LB=H`SLOg9mUEuXdq>0#^4 zeL{<9te7b%-nB(dpluBCAafwq9hMEIl18lI?dxO}ctrc~1Uxt@us7YwrHne2V4Gg? zi*P-uGtWpxk&2!fGDq>;0zZ!Ycsfv@qUIp-QqUpjCq@0d3uMQ#%O0de)Wgf{X8Fr~ z*y58*-XM1;t#O;L0>E(EMO64LQ51*dj71-?UjWNDMO%#YC?WC6c6@CU|1|*TOg)jUfBbS(gfr0sXh#zzJs7s~; zoIB;4kw!23LJ)k+!`|H`8vgdgjnApA6T?gNCb<9Y^8$Z|ktUMI?>~1;69zS&C2qET zi94-A_$I!)BR~BsQdYc%p7p%PopIbKGj~bwhh-nS8UN#+GTwTDWD+dFw&rMT@+g;| zA&#WYrXkxy&$~nT$C;{wdG7WU-yFQe0xcR$J`abUp75hAX21I;tkchbl1e6= z*Os%FOZIv{Z}Ny#Ey}KF{_)R#?%6(18cp5@hMdNi>h@|>E*a!O(tYpGbGr$R+D&B%J1^zL+joXOo#s|saHGrV**r@% z(s&Hl?}wmY#;jA}@V*r?`Gw!6niaISXx!$2;wkfUF-_pgP7@cF&f?+C9b)!%RQwB^ zpZBbO@$hU=_f#}}Q{ROvgok)qb_sX+LYQ1+Bv@Nd?%|ziIu&0mjEH=qgI@v9w=A%! z4A;N4r<-Qip_3^Dy_qC)>8o#%jqlXP<$90n_Za;!bi*KoXU)tGF3@<>nkFu#)D|0a zV-GoHvJ)_p?LQpmL}B<+fZu~kf_sfkhhy*N%WaHR**pF@H0l-Y6UgJ=W7)XA&-jAA zq`Y!99`yc(_)gep1`*GkuTP5G+&{3Vv5VnbvL?yEy@_SFuu>eOY1(_U@#XotMq4r8 ziE){UkZueS-5?Czo&DhZA_!yuwDy!?J1axTB1$l}&{s=L4F0hiGG*^SO)j9$!?}pF zlK91qd7L@t^5)Jt(bve=R_0$yoF7(}sCCl3-i?%7GZ`bJ?q3L(!=;N(O$UC;-Gm#q zAX)I#8hj2mrR0Yo{Ta`S~*h(>jVXnIvy z*6R9I9COqB{YN1o?C*1y>EB~)gToT2Q_Cx9tdy%q;$InueQYNXAGbcXKYH{-td;g0 z9bKJ?kSm*e*V)jITRn`wtPmn#0ybCr!t=Q^ry1ckHx{<}FsEU2Q#z>}GmA|4e1)!s z|HHZdmIX2gCwv48cvG#MTO7@Ta^dDy#2%F^W#O^nH zmp{!4f~AanRAh#2^EvCAMRRQmh3nKPf?Bm+D=_N`WfnpJx-zB&37}u)qP)QuUFz?XZOo`K&I>b46fRU zg5jfh)X8k6VsyMTgU`?P(_VOkjp1o1`;Q?Hn$ZL)$7UiL8mcF=%*fC~t*pf;+71No zmZWkJrwMJRiLCLi36}Ol6x2OqTY40Ho?ms*D#dJR+aVBRmM?KfvFOlnG{?n7w5>Pz zmN>gBA%!{naHSOvCjk5D$C;58~cPrW>YQRad2jhIOHw$_eLa)XI`IK%Iz6ZtEXkl z^}j-k(rSrF*mhT$v2HZU4OiAL-Y}`~F^>hZn!Xci~fhEX2$v_Hm&ZpPaC#1O`zFx^Mm|o8D8&wGL5ibXq%{&a4y7)48w6Ay6YVOJD zLr7j8DTmH9Z8mp9Ua^iq!ESJocDHp2y^3~)8?vWM;j}HS;@0`DKUG(2(;YXV<9CC@ zb=8j`yN&*{UO5udf#K;(H){^WUx+?gVbbZ#uji9+Ne_$+}VAb zkQb_5mEfdZ!DP~e6F}55`JATR#M^H0+f3z`mZNkUJf+I~+L8+8x>}L7R4cu%UemaG z&dR0gS=sm)E3Oukftu>d{e$jB9D){)l`KiFx&AjLzn`SSzSR>hQ-53tacMt6O2OfE%5 z>E@650$h%HiNil@WX*ooUcOX2vC{W{o{L|7f3vCTU@$=_E1NZE^J8=3QKa^bA}CL8 zbwX^>-iw@!(vRpJ_UL=lJbto#0&Bc6^Vik<&zTp4p0rI1F?r=jagKRny5tpiT@Qjf z%Cx;4c{c~U?qP}C$!E(@iH6dCjjIHpw1HGY2a$3DGJwSVF-)Do1 z|0bNqbicHaI!4{s1uY>s9K3+|41w|m0iNS?PmVK&D0jfCVT(!oiY10V6A zBL6gS=;ye<`W$&sGTnP2-*j=J)J3gcJ0Vf<86k}nWqDNvwX<#sy#-?knynpw&&@Xh zY7yIMqKjPLMO(qSc^-Jdpd72p{a^IGpJ+ts%o;CxbmCq=W40bB(u<;7Y+z$BCE8KJ zf5n_?-~O21dx1SCCLG_EnXBFKptOMClvUJIOI0A6DRE+6`4k+NKbl@JZDZ0f+i%)j zirrSe@U50B1Y-o$lSR8H3FQUDr-9nBqI-dEj;^H3*aPT`3<177_Elu} zn>??_mirz^@qL6nE-6-=f_+k0ExHz@-MW17S(m+iOC*Avcq-BGp&?OfSBiSu3lD+P zCmj4*-%hN?GDDerw35_i>FEuKt;Y_7VYRJT?+rx7aRoD~QcvHEt<~7QJI@VIWi{yU zhc-2Rx>HJ$UqYy3iIDST^^#S@R&gL@(Mpq58DwVAwFQysp{cdDURYi$HYc+r;0%YS zI5fAR;gdJSNU-ws>nY$zzj45Lca!tL+9|%!u1;_&l6k=@T{X_yj{2E(7h7oNb7+t~ z#7qJrOR=DosiHQuvG(1&H7-1Avh#EG>B9Eov)@NA3O}M}l2S|lzPs#aHWAcSp*qqi`Lw zwTPm>n9}TiAPa5BOm~r|{&}J@rHTRiex4Je5Q<9~+Dwa@amIhOrwQTkT zi;k69x+*_Z#SrAArIQ+3qBff{#>|$zKud7BF6!CM&74$DSqIvW6>Xe)meTqF57AgS z@<_HjAxSN`X_&K%x38NxCA5ScSKh2ZLx0amb&Q>#dutGdH;9wj;~nvdii!peyEFe( zrD<&{aiv-5+DD!Ay|o^b2Uvc5S$ZnOdeG&DykfOrLlxpW6?H7;cGXb+Pkwdnqo}J1 zs@nWosNaV6?Gf$$7t&W=BAKo~y9RZ0$K_xw=D)V9Y0e3@o;S^J z)iI3-cw%>}ys;>lJojad^A89lm)m~7q3!?MP@;R>T1R>-KrAewZ4I}&+^qAgec*#r zHWh!m-!MGsvYv9$dZcv&T7^4s6D~(I4T7s^lMCGIKgY~?ToTV^ zN)vd{2xV48gY&C4&v{LBhL0#-5y!Wy8y-&zs=#`VwFlcaO4h|UtRuuAssz$Wc5B8A zh>Kb28@+o9OS)H9m-um9!5M4?Oco0c&tj)9bJtv0<sx^EBsE4Pc}802j;KcvT1iaVkw7nc-)=qoG3ignRj1en2E({o z-f76Sy(usyRk^7D*5aFrS} z97$`DlIi;mN|@>s3EXYm5!AoDGF}@095X2twydIf9aQZc{hAyTOJO(IBruUnIxZUC zf)H2C{Ph8~jNiIW`Axq{;7NkeGrJWOVfG*pd+0rjAQHExB$c%39~HasKmi?pJTHbj zjjT@?`OCK!MN;Y^QocNPwL?(j;3*QECkwwkPy3Wptsrf&I?GfP)K9Ng(Urs zjhvr4HHuTQ>fEcYa(bQiyLj@e*F=_B!pd@ch}`2E+JqGDFKo2NU!L?4T}7eiLe}u& z#{~kUJUa?a#Uec;84Lp&wm}oQaIBhi)mVnOjbh zBk20y8pI@sd@wdf@4j9jXW%=MYByTPwo`3Q&X86%%O(hw_=QL*7${6=n&`>w@;fLo;YcFiA3?e?Z-dyP_ zZ$-MYR7if-773ou5+ip$Fd+ZV@Z#X^=-c2`eVvg{^876J5@A*v-Cn+aqpI|wr)`JNqRNet-_BUXrV70$ zX24NAIHTHrt3S#lW>eN$>-epf?P$>Z6@uR99bUO<=Pe);!y&maOco zU5*jlm>t(z-K`;;6biw*1~scOl?5DCp570spn`MqK5vdX_c!1uUNP~ncm3mpNgK~s zwkS6-$h-s(6Ru;XN3tk7zjo*AQ|M{;6tK%&=i`soUoz^1nqofAEU?}!a zHM$TvrAJ%jt60v{^i?Bb*b!iC|7__yntweEUw`b) zLqe8Cs11PxkwnCH{%pH%ZsJ$8a^i9@d-eGDYu7TRTsFe(Q7xiro>)QMN*obm;dI$$ zxucO;!5@b^5}&4xeO{t%itt$BTv@$s443XG=h=3#S0;QbAiqhx%o=~y1XcA9=vgb{ z@o=OB#Whg+D-ot^qk5W5EOW@ZD=hWZRnbQ=?UeQv((=BMEa)F}H1aiy++`19SmcYP znk9@k%E)VPXpE<}7Xb8wq9>M5h zMH4N`5%NaK^b^Npxc58>?cQX?N4dfS>M&bdED86VrLCya#z!ww_>uH7{gMbN)NgGIQvES`>WQ|qtH)0HAS<(a+^GlevKZ{ z5bRKW!Lev;U|p`NVw{)$QrKRhXt<9ODG>e|M~dJruBLIMW8teM;+@^>L&nt?l;73` zOrtpp+VwQof7?o+p4IH#5!&vOu`3Pj7ri0WZ=I;Mv-1wL_dLhGdTrIBDPr3lTND$WC{vDqU81mlccP*pTiiUYYgkF21e$Nu)BPfd8vaHu zb^Va2-l4TC<$eEYR9)DxwIXFbnM2e=Pa1gae3L}R;61;?vEwWYj>9OH$us6yw9=x- zV;1P=Drmd#HF1zMchpCr@0l@sNtR3GM}oRv%xrZD+*6BgygK5Hc`erqWWVa3Roabh z`wfJ7J?9OzB-?|*AoS&WYUisWEV#{MiC9F09OHK1<%|knEb%0pVllPO4C9)FdL*~o zuaHPe2243f8LD+iGv|s&-MOM-hZEyaGTm7HfS3Jv4RIHHtZY}RnR$#r6_eKE+4f_2 zSG>V2l6_A8w%UnF0o83k`|^a_-ni!DBt9+%DTg&T*%+=C z_D8+m;<^;()MlG2U*eRy%q!#hBOlN3186V?XEd9Ys8i`{$DX1fk37z{oN}+0i)pdu z=jw+inSl&GPH)J*&zMv^RJUd&YRQrQh7P$~$28bo;YfuVGhYs7ouW(RIxKK@KP)aN zn}J!7Q_sn@k|j_Wu^0Yd05(9$zf?maq)0$B3r}$YLW~h4CYUP3&wBrwpNDs#wGdKT5{&|pU}l2tP;gAHIr3?zvQ7C>P# zJy9`2VIvj;Mg(LB7*DehZBM)Dx|kV~(Ec7RWj=2xxRm_U>WF_M?g$M@O~XY4=#S z%mlb4&m^x500|>Byj#Ly;3+jcv#Yf4!K)Z%+vj z_43O$e5HfbGWg{7e6oE)ZK_UBt9b{Xy5g$TLLK;xm5v>Mzk6`OS5rySz0%;rz9%t^ zzHocYU@=QwSo91f)(XtXB>Ce8j!_sQ+!jST$|p+|2z zId)*J`G--VvV8ScHV!TzjT#bu9p&v=7|9|U25BTBfa!?|l2zBx{{H{-$N$|=_ou=5 zem<=e+zpB9&Omhqb@b0v>wj$-%z{d{PmQQSq|2qY9C^y2m^J+UvK8e`@i%1 zU8h3TNh3{4N`q<8@O%hG1}g>~DHDc<5F3UpJN#;X7a>$tBhlN)G?%9=bUZ6&Y*FKq zv};rJIKF=jbTYMbVosd5IGNYNN|h>LMCSx^!TBtn&S$AJdKt66dX4t@f$d?ppQ_yT zI(9Hga~QHCkc5Y3KV8}WH9Zerq(V1@gz6P8SN;|fz@7$`2B(Azn<=r^emSUK*Ga`$ z2?$H)zl^%0^dPar)x-v}4>fAVMewLo`b^-yLtzf>7@xWCZC2M4UcYzq{Wm2~D{Wds zC|VtOC$2rC0+m*>0)rm- zfkU9!E#1$5VmS5@Khq;DKf65@J5%KKduOtr$P-}0S=idHE zy-9*{a_MGgNSS+BFHky)o#9P5Tj`=;!z%0QL zG8RFIS;!a71ztq9ToFPwV4x zd#&hD0Te$U0#D@;kwd??`sn{T+Uouzqvq*#;$>pgLA3YYn@6*F`BHBv55sVRCj2b_ z-Xj;8s37Q>47PR5He4bO2m+293ILqjO#h(j$h4&WCfIp?c1-O;3Xj@y-%bfJ7&}wF z5{>p=1EQ{rmklhcSb>{i_VNI5X4K?;006uCkNqQEB&fKExX(+wk%Fdn$Taz!b< zh&d+3H5#I2cU#EQoO6^2gNYc3jm~nIXp0Qu;`bVFfrx z5BG~-QKRha>GJp(BuQiWc40V1TdcYRea#fqR;3AUYuIM{AAPC)zsU+F#634D2-zg7 z+&ooSt}A%AbebS|W??fSnFcP8Edcn7 z9$W&zm+!yI-Rvg}$rAEqps1fE^@W9$u*(_A-O^TZy^gHU)}~wPM36V@-24h`Mg5#4 z9UB43yhC%@!ulWmusEa#41Mo$VEa=NvuL6*w9mKyU#|BTBwR!8$b<6`H7^^0F$>K# z*P|Q4ltwQqrKHjP&B;*UJrs!D;Si89=DZ`BOhqHgZBy~(Z^+bl%&fEOQ6LS`xf~4c zuj~x3gsFp$i8yor9VljPE*?vh>6|TBCqWaGv|R|L5=e`3NhsQ`s=W}&qFZi#23{_@ zLz7AF0%V<04Q{axsg|CZkN`*pN5~x>d1&lf}aG+xy+bzmygL|hKEb2e?elGu!@Nov#tdX zUC)Ar+yGmzq~ikF0Qmrkwm-l5#0txVDkD)LrIp~af`RxNjpbpW%9GuRt*{Szc_MuO z;vo&0$wWj_HXjJqx-!6(#RlZ2cZUEPv0t2aRSrYoyZ6vWhsLEJ0 z5Ox6S5|KvOQ=ONf_tk4t*H+J}eHxk})u{#%EOd0{nFvH5p3Bp8sI@qDGV?!w{jaz> zVogHYp}Y#k3K|xS%LYM^Qy|L`G|n`HWMd;E%HVgE&B?Xosq>|wIY4Qew4OL=Ks|On z*>`>JuAuUD7;M-zOU^4IG;)j#?FHj{uSDW`j1e4W z^h#Esepm(ej0P}?px5aO8t&u5(b#QzJ(Kr+)Z3TyJG?W@djK~gf$vM@s;5~(om<6= zc4Vvm`5Tcg0v3fsZCwLkU(SmbSkTxBuCzZhd#PCDW4wn^exLT9EBT6c!3I+=8Jh8< zMznT3*J2_fi11LYQm(qGI+NFS9u9t358_RuS*esfk%eU#D8{ht+%R-LwCuKQs@3eT zV9b37E!^&Qm;R!)=RAUoHV~u~Sx$X=mrZo08I%oWtBpZXthC!p5%xLz@oafV0~8|f z(EH+wuDqX+r3!aAoi+}hxn5PIkXM|jpuxah$ww@mk;k{ZPNCd~+9WbVUV+o#KAB{vh{KXbY47p?4lIquyHwaX4#Z$-QfLCEz%>;+bR6So&SjY_q2 zmha`_z9WT7=0nTIByA$%Ga1U1ruTm1?zUt$o;xLUo}D*ocE;V%A|sv;OB7TCIb# zM4+$q9=TM+!PmkpccewYLy-P71C#JD1^@wE{Za#!&dl|5IpOnjxfBtb zYS;B~T{9``hSm8tx>8OgjGcANj&UYZQqQiI)-M=tRA=l z*O46XEkMl3VTNEUzSWPtY247fi!7_SABt)vM&R=&9Sxvjd$k9teOrt1N`-dMJV+2!tfL8+_kC)aL8@+#WhMANF~A z&s7I!_*P(6=4qfq05W4O)<6D6z7INGa7Wtwih@K;&MQ<51 z0kFv&Si$A#zY9p5dr~C0SxY4{nxR^R`g z=gokpBQp;e%3x*Y=sVUKgxowt-k~xnFN7ffIpW;7B?}FUR!g&D zj{Z;w+F(){nJKAUw(R8#F&cty^EVhV6c1CHLS%sEqJfqpi%K=|Vf#}lX(ME8c<6kg zlc)G8t~J(Ehx|Z~N)KV=zLXT{V}|pBpA47V_?&8gmaL~=F~_7ZSF+BbmMe9%x1iNx z1vkMB#T66emL&z|jol82@Q$PLG`L5jUxonP<>wBaFOF#|FlL{rITDzgKVJfK4`HDhz>o-79^7A_|K>E;z) z;xNCavUac$#+{;Ahev2wu&_{;;`?&zu?e(*0!uUJyw#f>U=sINdd*mGK|N~fE(3p% zJS$Wg4^;k)BX8bN8{>Qd7%qjL1(4E}bu3@g4R#h*yBy>WBIGI=C$IA&WT zVsBajr4$X}@w+|tZt0Ri{Nl0;4(tV^a2*Nn-csYH{&aqwNu(W-3=)o;8*WGsDF!-F z<1KG#{QhI+e-_8Z?|m0G2bMgb#Af&zQQe`ej@fA$^vn!1EW04PARUik1yUml-|ODs zE>i;BhuQ0P86JuIHZr}I^^iB@2p@p<#k)5hbQjqGi!F;CUP!Mm))DX)mVAaWFfaJA zns&MVw*!P2)S-$B3UhC1?rYW{8Xk0C4C?Q^i6%4+V}B72l|)G)kspGoLNHn~|% zl;f?2pC|mODFx}nAqRAXNMRIS#<~3zyg-PBI4$fMecyRr!pf3|WQeB%5Y72!KWCNe z>>V@=Vd=FS`reGzi!0r&$P4Bn`e!G8dBa?lm?9=B;+&Q;5lPZ53?NwZ&`U*A_6YL2 zY62(+JD-SCjsj#qPquk)&2`{r=X3wt z^LKM8c%fO_miwI)?sA`aR5|{2)ve7*2WM<2*Vfg|%Mv-Q_*n!Z6#Q6<0C^X8X`cRL zsgnC7bZb8hc+jFq#_m-rB{v!qg?`qhC`%;tvah{M6>Un@WVkSnT9b>RyGTfcp?MZb zB(*PY=sdc`psN46hlx8>3DAlXhKmUe_vVTPVS@Pe{De{mF?7|PQl?4(o9KF z7=DYY?vll#cfU*pW2Rbhn?`3}0q6CV?a|KMfvOPg3rtd4DZ+oBHGSrni5nQk=-}sV z9^7Oc60%;B+r*?N$yeJ~Ak*^&#z?OvYTz-E*pZpWruzrUq4+h3Y_yu*)tq0RB}z3Z ztcoS4pvod~I)(_jXCiVWlrX4{mIP|~+Y~&Bgr_jGEa5cM<4Gq_l@i*O6GQasOr<3P zH+sGu$|+Neg>t$|^-K2ehqVO}TLh z$JhQ>_9a|L5}z}Ni9F9?*vWp14pyt2gHyH&&czhSoQ~faqD7sJqgG#7=LYiyk&XPUHdvT!!uK6fz`!D2am)6uHs)6~)fk9|#{ z;OC);8$p@s66J%cyRH7F3k<-qMIyj|r;zn59l|{(@H*gb{0wDn+yDl z?MELV+Vu4nI(q+he%Ag`YiYg4u}rCZjJ>V77@aF!hYb}p%uvXZ2^Rgx__qJCd}T0F zga3jP**b}&gG5lRq(?3kXd)ivO&GCCGXedfT6v-e`5-fnSP?8&Ng-$LRAJ`JYeewyab`CD+eAe0-}0RuNY7KcdxH_rIRO=#iG6_C3$4H`V`supgIc;G2E9 z47kn>xe>1rWC0o5vD8_8EM2v>DndTX_Y+N^W1sQ&A!B@FAE-?VY*|ixoHiK~vQ3ti zf1ie-WxzcMl_q~u7=2`9x?;;>PxmH^^*4@{?;Eg}5fDyJ%N-Kmdk`(!|kdN=6fqm)L894>>S7m|W~T*#!1c*=>KKt_Ih8`SJ4@aQd?^il{%}0B+bXk!=rs z?Xe74smj%wa>l%O?_DSY1eRd*zDn5bwvxobFEuI*YhPA7QoAoyQJLV66LvQdh}5_k zZ|<(Kz1!HV*s&0OZLDf)Ab4n8uI`Fh2MEZZuVRIx5t6m?5mq ztL=j#6xK4zQjh1zGfVhbQA=}h`55tZCD1#4Ait3!4V$Z$^=VeLtnE7tV#6T1Ugn@#}zw5+ufs(hsKl0z}N zNtP0nU^gSRjo66KAHd8!+3*pTGq1!v1OU#hXtS*Wq}zV{VwfCtGYIsiIal^*jjeUCK%dM#8{am7C7YWPw_3P4vt?4Y7hd~K9g7-C3ERCxnH=KI*l{x{M*lJ+X^ zD>~=;h@a;UMKk9{?Kd~7H3amX#|DwB@xD0N#CSl*2{i#{* zBJo&po_slddtU4TlJd~<{t#mvO|J5^;UK@8|Ep#jD(^}5VVecikgdjogBwIHu_9mY z?}}p901pQb#mm`pcWX7EeC>C>&;-IiYUzlBhlk#Tu90qm-AfZj#stE!|B@L%=?~8 zo3cSF9rpi!!IcX=Fb`;UC+62|&|iQEG$8Ex0fbZQK`1+S&LxFKmE-P&Ca=HP~{Jp`vfNVndEr1l{i71uIb$@*s-PFfb!HdGq#Ql8CrILLH`QbF1{Vy? z4%m-B%Ixyr1PzWYW|$Ihc0H2`;=8u;wr3?$j4LFKRwKCu$pYq4Msjx&LtWUDWNH!`wgkWaSz{qB10w{x~@Gt?$ z1gVb2ujuhsPyIKW)0ChqXG zglfroDBvZ}{@*0Wm3@a>jQ7CfGG+x(UZ;DRV{*?kZ(Fc;8qY=V=%8u_{Ro-6pJ~^U zkcSe9xAgj-6GJzt{omQUE!_CFHn@Yu&S9creEz@M^(t6ewp*se@#Zha09b-XxSk#q z2tl3s_VK`a16T^=QHRIN^G=QUn$4))M`g>}$3z6CQ>7Odsj}>-k|tux8vKP;Lce+B zn)D0+^j0IcEl06(#bn`y`rbFsp``HO7qsLQ?QngwIsp&>sUL|b29C6|0{=#wtraV#X7MLHdi$`b(AObnBZqm?RV`M8ECz z{a8J(XpI=8*HSRkSAPzO&C@piHyXa1xJD|^26`of!SAC9BP@=?9%iENDJ7&m?V+VL z184OV@fsUj?ZHJNZWDA}mdGn)S%*1%v315pBs*H}g@~uXTTj@?%0&qV_#8czXC{{! z{AYIfJfo%NgAyZ304k{2J#G>HQTG%U>E6$3=)wXuIf?*?NiSOG-Q@5r$aG6=S*Px- zJ~nrO=AUP3R_SxM+aS!V$#5YhPGC%>rceNX-fU`?i?sVhE8>Si7+ zavg8cW+^ff=uZ|jdD5;n66s#sd_(gB5CL;IxMK)!qFAn|mNdZI@&g!cAZj8u<~KI6 z6a|Oa3$z6Nr~5;wkZh)-cM3>{$&8!_`R#w#88SP$}tI98f%5hdFVXO5>AUc-ofQg=Rm@ zqY0;v*42TsA|jDUj>(-yjg=fxS36N{&W2w%PjdaqSz)+`6@E>vYi13uoq>g0M&EED zw(-57hBCta1~g_%F5q8?b$H9Xh+H$3k@y!*c6VY=zuup;?f9C34 zkc#9yAY=m}rw&YKnIIX1rnQrJ3PZNiv!1d>gnSrQ%3nsWZxPJ^vI2cvu11UN(My)? zj0G+*RRMx1kie6NGMAjBD1;aw0}4 z^Yge4yf3aq=}wMl4`Z-ewkdPAq3_gg$LRHSLg2Eeo1?w~g1kkQS^n!uJWJY(ofCq` zR(eH6B1ziP) zc4_kD%#K#EisAb{#1?e9VS$Lgw~1bKW6x-77}id(DJpcVGou{3Bdq;gVK3@A&)7E7)$Q8{CwsjK@eo?`4*SiWL_|bH zUT)olb*uH(qc9!bKe6D_CBW&YNNox*NPItm#NK%`;2iA2UST;_*Q@SI z#U)`dGYOe86*?^^@KIY*;B)crk>mBYv}tcx(NW9G%#$6-kJjbkPDflm^mbAobn~*s7cJ?>yhH35px(azkDB{j zcg&WYo(u6XCkLP~YmJ{1l_5I~X6mW(HaMZJQ;i%Ph>K_Ii)8?WMy?Dg@cZpDt2{cSdhS^yc8M8csV5dso3@!1Q9(Qdu|9jv^{hbz-@5gy0< z*5s`2u-2B@_PW>a&Kux>!Ur@6Acz7IJ||E`6bxFvB+kV%!UrtauqJ$13R7Tc!i&Xa zw=KsS1**&rO{J!AGg$j{N***_x*|4K=yEHOOEG4pIPT#f1=S#|(~`}K1Tnff6FwGjE}&O#eMrD^tUxcLPYu^ zOyOiZ#`6p*pNEMo7NH6O=u^^SOfXRTSQ}h0uxUXIZr&C+w9*pma*eg60+uUJ3zNi< z{lE)MC-Z-m*i|}gC*M6zFr)Y*=4ilGqbM_fcLS+NG;EoXi0B{WZ}S+)eQf}Wb@S~_UpR5hQlah!^kj(-$8+_QC(KKkmb(J~0MI~x4ER$o zHYb!fZ^%0-a6y!!K<>p)HIO&Gj$FZ@GBR{3i-ft?+UP9cm;}QQL=ZW%tb`~cDpD#{ z5~aTw^*rjI#0(;rh-fdlPdsU}e|#S-oZ8f(qNbd5pcARw`Azq*-S(J3GiWBp#YkC- zu?iCB*r4rNfQtZ4B+|e?iJ&>tUXCp1ug_u{=iK(ZP~UGn=o^{$tw&{~CZ5fYXV>bu z{`}7k-z=|sn=^t8F`4^)nRIb_BvfivH4`vV?J6Gr&_?$E4Ik}wghb3Ruo{d{5~kRS zFO%<-PalO;RkxKpjlK>>2>1|qOAo1KvkzaD5_CdtLPBKe6-+jRwHKQ2rYGcoY(Tu zu`&9_ZBGCyAXKEQGHRI5F>Z-Lk7|@MzMAF3vyZpiq6M@_+5%w#dJ0qQ31v}~aPh(u zUGG6yydU$}T|5_ceC9|MG*rZ12jAev4RZxBDGAfVAPS_Nzm+E|W=rgTbB>w&PX0zO zLm8DigF;gpjw^E+PdN&Q<2oB$tE!izrv{y|k?!GPEJ=?R*rqL(R()^BVMT_PY%k|xIs{jG7W)&e62q<+sn8-)mN*a&it z5I!Wp8tWVJ6V0Dt_IVM3!eU0cRp@xd^2{=cW|GFhYOYQ`KezgHpyUY%DA-1u4E1WNyRil|C@|Tv;SJC$ zdF;b@^*pKEcfQ@N50DabQ?^eHt5HSfpL0amcjlalI<3L@5%wEBahkV1CAus)mUtNi zmm&-nx6@0*%xmS~ToOtwRB$afn)zY;G-*Jo*dAq5GV0=M0M_0(j!~b=%90b|iL(b# zp4=^#gRPk0GA1PwH$ayRLC$&f17K8v3TWU2zzW5{$sb$H(yPmfUR;<&&I2baDwXg{ zohq>iY1v~cv*siGt3mzzZr?v=tuz5v(WKI@XslxzjZ*mq5|$bFWZEF7wdeLI83wZT zjh0$m9k?H0ND={%Kh_M4YyUux7i}T(m@F2imoO*w$YuBiY)I50kpfvFvjt=~<|jDM zg0FBa(x*J880BYh*Ay5vqZ?c51mE3fu;1#W$sXXTXC}v2ARTsdw@2Qo!mh72ZIzZ; zbAg19ixnWp<2bs_VAG$5eoS(}{Yx{VUa#Ld=SKZf>FE%)YSKc5vHElHM+IJeKJumg zg5SN=U9p_MqhWfA0D$!sDLWRuai#fi<$b_4s%kZ#Bal%PC`M5T2AWc-$ z5Jf~pRVVHw=aBMfefv5LK&U8i5LSYrOBhBlIY^vH6`T%w1#8zh94@mnpr`9x;#f8+ zkZC#DYXwd_2RfPX$Z8J`gIv@%uzp~lqS_7e6uzakF;9alTEvO07oV=jvE=hk{hB9T zL1RE(u|K7X82*XEnDnHm6DOYDI=s$;4vRF;M`8!k4xl@>q{=_t@~(iA)v(AT&6Btd z@92^lYXH79@!AFypS6k$yebXu+%e!pUp=ec@)FX``8&0W)60S;Kt9PWfaFcR<#pS@ zsxaw0Kut}kQtKm@q&f40&CEx}yi8euS1l%iGBo-O9X2-i7ohjF)Xj7D)&Y1`h|7z> z{EqJPLHsQxc*L)cpAdh9-%nn2uFb7#*Qn2&JD9!h3OB3jdH{bq?cKWCzyzT z)Sn-!ZbLy#JFb=lCsK&MHbI*;Kp9*`kI~m|T}T9=`p8Fw!!>N50C^~3mnzlQ-Lm6m z2z2ATMk^LXIBW9$xJSw|I^eSrh;|A6-7Kz3`H4=x-`GzVKA2_^HmgyIj-=`VV{1Ni z?I}PzoR@gF9QRbKPin*uY9+-aR%Q1$HZW)30-tS>0;%)UMEPPK1WQ6{v4= z)0U5tg?h9dKm!6~OdT^QwTMHMUqb=NgW2Gf9&H1W9mp*`^^n9BP7SuO|}A zt#2NP&-z-lEYEUM5oT0}!bwV?vZw6+=v-s;a1}0;NI2OL?J<}0f;ILVkM0ozwv4j^L7?0b(p~hp+P6J zM`}T+?FidBckswO=K*+0EyvFsoq@=Z0rZA4fr8F8ELM3A4m9|Ldej3G=Xn>5YgG^` zoiZE5L>Pf#W0YCqR97jA_aNF#?e&E@%(qPDxeswH9s}ZzP=PV&9Rq&)`UZ$u-$sqm zgHRo5rS~>sM_B(Q#^eaEwV%4apBzV#&HkGH+sc+Bb4N!Y*XiEbzuDqSe&0MmhtYtF z=to)(3i|01rY%P_w9O!n+bK_1#=?d4Ktkj^jDK-qX7%cK03DY5({y{Uu^ER z8N)TwVmq>P_n}4vl#qW~0~R>)2Zs2~yajG15*-)u{RjCfjX6~w$15)x*!U~nY%T%N zRM~O9i9l8u7|1=gtL*0KL4Ad&6+o#ICKL3qAN~FLSC^z!D%+^kawit~w7V#%L=b^D z>6-W(Q(wiMleM2tbo?(L>g$!(?5B+rBC4vU*ZpHQ*}g>Arj(U`!7bFPhpwg<7N4!z z{QO7mdq!8SQ#A5MPPY)v>oIj|27m)J1qULKQDjllsqSvKS zCb-})q2mMXsLz@t`u{7)X#RBm`})W~H7r1q1l8Vslp9Bcd3Q5cn6|x{UHY79?f;VZ zU;Vn{8HN9s|GPCvjTG;r$^Kr4LT)f>K0SP((ga3qVdh%^$r>;FXh;{i9#nPp^g_zm z0X!(%xBdNF+7K23HwKsfEPG-YwH`Pk+mY!Wr%Iud5kjaYdQ}xymiHa0yB;eCr_=XF&&7A)88CkBF3rFpmHNw_^#L( zaazoLt&Ow`M^llEPDll3kwrcv<#Dsm{1-0!Tboo6$KG1uH+LmrWS`EQjC;=>1@wl2^RSb4$*sEFh73ns zPU&?W&lwXigLl*C2MgY(Q8>mq-S2zX+*?nC_yNAt&AYKz%sJv$J;LqX;AL+TqBuK2|65@KbY1 zU~drIVmE!gLn7oiO8r?OVF1|ygal#OU5Oy~DhE(vxol{-!>0`EH-u=tdZvB-gQ+EqgqB!c zbCW#7y`J4yC7tkok4yRco{#!82T5vC{gbl}p$s904WPmfNMR!^%rJtdN7y_t!C+Tt zI^4o4N<$nfG995Ru8mLMkv|jjjd8EZ-MMmlqi=faKSjQ`p}TcP#hyDBHHa(AxKOqU zsIWr8fZ5_qWc{*Pzz{r%LIVFY*JN=>(U63N*4UAejavzR+YBDQ!34kV**}ID5tD?i zK-C`$x4M%1DlS~f^6Vj9bm8!S71-SUpR0P~tyyjH1cL^x%dr?dFDhrl0sTEx zU|}76ujQxShvtG1M;j^VdiX0@&F`JgUu1*c-16HjmPRIdy3oV`OeanqgP6*~nctTi zXfn9aMZ{+X>&EJfj?PDr1qRegv1&Ob^BVqHIM%@S)U7O z;q2u5pcGhw&CXjmyWUE6(C=@x-e=@*n^#6_zPn!~y}D>qXB#Zh+h(r|+f&NrmB z(LGc+xcnu#4ttAT&{vB^_?d73A&WgLd*aQ8KOO`;^HLb#T;i$|y2ak5jo)_FufX^m zg4LrBkU>+qrR3=?i%e-5UKNYd5Sdu=C!HXZDfJ_zg|}es+<~_RrrV@XT9^|054Zjf zv^TxxRPF@i%0v83Vcf2_y1c4nVYX{{Fo(Uh>}lw950_`TD{F8(J=z`bFr_{j`_g-TO>-q(4!L$u!v3w$h@mWqmY0tXaAuigY7>U6t<*J3e7@!LZ_ z%yRx+5lD_jRhq14Eo-9bb$GRaYKi59eAdG>!Z+ko=627M@6-4A!UeFQjA2%eZa zlq9XkOQ(Ejg*AIc8KTu+8@@{H_Rk#?9;0^9B~c1tMMLz3j5YAFyk;5v8Jh+c-$Lea z01(qbfKX}D<4axe8Si`F>@qVh>k#uG6pkQ)E2X5Mma_lQz1k+ zm(c_0aUN0%gm7{lBuzrH&6y#Y4|Z|)$VfAnNeda+XJJVWqo>z8Z873pP;D@POD<*Y z25->9tj$vEi<2yU=F5xZ1p}2F(dVoYQvMr!&z?v~WU(~ZES-Am)7pP36w2fu+hlMe z2{W~=(|06boo+J;_ARlnIsgMTBI;@aq_PQVQ!JwXdRLEu?_U2e;k#{XM94$hz> zMPVCpu+hxET!7t>yi~7{kuR>YQ0ct#NH0rCl6Tg|ZRth~QDFPiQLM5MK#TGbgHy$f z`-C0uy9PLhmPcc+Tf3c~&)pm2Cu{#7k=S|Y@;$ycRTX9)7&&g8tjrm+X3a^nX3a^n zX5>QoTE4Hprq)NnNZH9ct2w&8wD-z*TK{<40_KgozDAmp_(5l(SL*N=js2g!!u|aq zssAVwIROGH0%T?jik*4ZtknLl)L!#KP#5j*8N1E3Wo=Gbb|8n3>zg~ zkar{>j1GGOY@3W@et-eKMbPPxgV$&ACFK@ez&@|BZ4ZZ!JPF0cK}Yd8=?^{ETP4VJ!XSOZI$jc$3wQ;K~`KHOupKEJfubCW1}{>TaX^Pb+mfAHI_ z!AzZ;;N_|E&>v>f`utj3fT6u3xFfzcZF4HrgGwSUKetx_9kpE4!4K@ZJSc`kW;z5-F6}>cYVFZY z_qlzW6N8F)J&so5{onLEFujiZG2h4A6+cW0n=kkeS=R~1qmLC2NI}`S1c_DvNry(~ z5kfB4yk(bKnKh=&mSWg9XXwWCnc($&D=>*8X?mNBl_0TK_N$K=E9g!o`B03@jYit& z7I=|&{N?g}LAL~vjvQ6JUw9Hlqou-!!~}Xzq`PGPkt5(h5fT!pQQ1B47hT|h;!Y{u zRT?_h5iKhCDo0KrG*)G*OWwbS&GzV|)!%8r`2)jAOTDkiLPDSFPL)etu0KI$Oe7K+ zgp20`hD6;*rii~31SSpW#*c&sq;`&JJWbP;GbMK!G&E68Ay=obcdzup<_8pje;IDygFN> z;$kS|xne=&G7f?dl@xaTase|OCu;l<1hECghi!>&fRsasL}#8$5nrQL8e1+S)RC^% zLqIUrx6&@j2^tO#aQL>(0z zbWn(F*dxE0hEof0M|Sg_-1BVhULb05@DL))X6Xwr6cR_Yf$JO)pVE`r{4P{MK!&v_ zi;!LNB`-~Nd-(o#8%~-7F4rg4X2pIn6fp2*CUh- ze{1AzVNek`55oJ(GwCK2uyWlX!qA|!)3M;4#_Kih#aHfY1zz=gRa%Z+wY%7V$WG5* zAjksc5fqD(7$UPTz3@kXjlm{@t>vM%K3#b;ONH13@KVx6|72d;= zq$yjr^!DGe4d%t%`QE7DiNX=;A=IDZ4*d8WLJjnh0n9)7y9P=zMf>gE2njJB`Y0nQ zqlq6vAgsVT+=5OVIB?l!tNxJ&MH_}#vSoMpo+{r^;XEJ4DBNtY1nl{5&!aN{zBM`^ z{XtH-x3O;yR8vZEaOAA;DRF9jux18eZ8(m&ha$Q>Jt3?JBYxma|K9A|@Oh(P+H6tL za|V~6Gjn?ag9qgo7%&WZ$AZAyS<`PbF;YJZLr`5>Y;TLsXVopD<(5!V z4Q+P(`O9g_Ttp_u!v@B=Vux9#J(oZ-)=Ge7zsV zcOlyWHHZV^D2gJ2qobiAKb!5kakyTe&3jnFaj6b)$_x<02)WFsEx+?8h9e5yV0!Wa-iA@kPDPQ^mif-#7@f9`zkMeYO zgnn5U7c8k2EPXO+6HuJpM;kpCiIW}fZx?!8-5N7zt-Cn1> z?SeMigJ)5ptmkYm&)K+}WZ4~HnIeiPAXx!~kHKx;fqM!5zNo27EF|mw*NX{1*>>u> zt{)Km`yFRxglYD2(x7oKG1QQD(ieoP5gUgvjFI)+=m>u^e$a<;-ha$ni5z}bmQ!Hc8lfT$V96N36<21@M^5Xgqp6g}-Yp))KiR|vt$c$%(X&_jBjf0hYj57zSW z=Cj>pKjf0n%|Fq=oZ&(SSd*s!E<)sa2-cDPnj=g_t5q|fG$^L=-X)Q2*(G*?`*tp! z8_9MbASbjTzdiU(QcN=@OTqLSR!6$fmmsJ#e|{xO&#~45=EXEb>yTi%`x zT2)%bnWkrx3oHM$&K69GdQI zV!89Vl{o{4nH%r8$d&+9*Hilg0fc9bWD77tRaBVsZE?Zs2_WKtcj*qwm zZo-@<(w$uT&<)cux@sKJHPHd*mcDW!y@o96TA`+d!ZQBtZhFPJesh)hyl5)HVvT?; z*e(c-n3&E2--d`a)s#1iiU0;Lgl~k#5;azqrjEBdcA|Xy0UM~mb~GN3FdoQcjg9u# zklpe5-C=JsW*)Lw+|g78uspE>_C2;NvCtfNfE(=?N`@6T>|XrO^k6eogFbPFQ{V*!dVk|1CW zOUHd{=P%&B1ZvjgUOcW_Mf8=&WhB8}X)ULFuS}Zm#8fvYk1ikK*E$rroV2Y+@I=7kuy>)}>u=CD$9kAkAFL4}8b0Qmp z(QU!27?RL?jVCxw!TfdE2@rAn#yY(F>B5X(~(t>lW62v|~=Zz4{c z>{;TzraVmLp6Hm&0wLBc-U!5&gPo=h#$xyzX_RIN_}{dJ@Vf8e*kQ`fr(TNvzD5K}A>zAhNhRvG}%G5Aydy1}n znIeS=H2rFB0+q|0%Z>NC9tZCJ7EhiyQBbjW1i{@l4|w^e;ybyub#YQN9L*s@9b|D1 zT~aK@hQSab1VoCroJk*VuZ!JpZ?vC!{70vJFzx~ThFHKu#T6zF<^&H~1!v_{*GG%%iqSvO>C9YM=Hm0bdwS>%=RTW|o!_3V+FZ0Im(sDdfNHatuB(TgTu^ z*3O1zV&KC&c4ePARYg@9USBroWzf#unP<*bQB_5ZlQW+j_L-TBW*OVFJ~_&& zDyX(epEVd~tjsZH37sy_8^H8mv(!J8*YSK#4>oc?XUk3UEX+6uOu20`)GBDDmBFZ$ zfe8i^EUV9}-xY@h7C6+#V-V`*P?1UY{hy7-XZ0WIA^@aPDWMnm2lp_V%w+3(PX2?>SkAn8ZlhDuT;M1=K3 zu-1r*wMO?=eD*Fy95_=nw`eI6>ewigqt)cbU?->&?g*oTM&;U~)=S>(Jx zJX`$}v+w~e|a{~XY`>0IlNyzM$d z9~9#_-`5`*>9;a0{1hGSQX*3ZPreV7SX#a$)BL}_?=j_M^z@Ar|4UEZa8UJ7o#%dk zIWS$TDq==V%qC%(nEI_H<9HB;9fCN$vCo)Xk)lYiEFbNoiCqF%4K>CYok!}ipOS*o zSL>l>oWZg=IOg*6na=ZGhnCx@z{PwYH`5kvsS#^h?S81-x~z5>m#$Pn4hY-0#L)bh zOLot|$YemMBGTF=H+~B@(!)*9odf2e%<1HGuA?byj9*o%^&45dY3pWxs4h#4QVbdn zymA+4FoA{;FwwtUGl#9-Itz|Z+RSDVX<)+tH2XA3dIW8@sP2GnR|_vq;X_Nm-tG3_ zEah2908UK=L8^r!id2Lyx`0F|g>Mg9Cwz>je}z_V^o1Qa?yIzyZ)CNlaJDk_Yc}G_ zOQ<5Cef`;DIdr=mzOOsj(9dMt1kbd-TfUFCyf->{-zE%3zUP6i8^K5f4_H9d%6bq^ z_ygN?q9h1QffBdjzYHhHiq`^!&k~ByvFv_u6!UI8vAB##xxJILyAh{X^%c9B2Ik+H zq3Slt?JqMRGI{;(1<3FtW-`RCA3p{D8{w6&)6y75$OQoW3?T;+Rb0zWc-byzUk2k4Wx^#c!j;oguH$aq>9+8mfWj z)&2&c-v*kL(v-}U;hC}UwbMYdTD>jJ?eBPMX$SiSc7syK*e|+`Y-JNBU}g+~`$Upo zz}0}W({GIP9ofT4ebqn;225Qrs-P&OP>B!ye+Dw=%zkA;pPJees+LJbD zr1yPY{!0dRn*11Q^dpH5`Qnu+5gZgx3~{%dQhx*5r8;;;{l8Iqdo-Bjh?gsatKxWb54RDel$v?i)aeg6%K=kse#d`^H<_YsHg9Rn8e2c~1U(O+ zKvKuCAIK5g5e=CU``1xfQXMFgGg<)A9$0>0U~#ZZJZc^R2PAOKFNLTQ-%dpO0Nx4~ zKLcu>76v?V|LF`l3@}Jw*7*HilZ#`ex(;Ch#v!?HF)PUF+5x&xMnj8ZewD_^1+EX> zJ8rmUDc=acf;H_lk?kn})^X#qbgF#T zo>LIl5O-Z4QS3?K2T!O;H=Drx$S_!>>LweXW99=dxxKoBTu6vy4J9l0=5fVTP zcsnF5^%+^4)Yg2q2SdqEi2(eZRB%k!<5qd_=-U@@6vuBp?UI+m94;cfKba zap)F8U=39+5}lC0@Y9c&kL8ij@+X}+e-a-=2@n|rVN7ecuMcG6Q7-pYG`t{TegT7I zpbr34uy{pP42nZQh4b>Kn$NjdccKv_74ZLfH5RNvmm#<)ez*dPAm>FuREB_pzs40i zlDJo{1?Z{%%B4b5Br0vnrO=6q2zrCnm5Rt|1R*yc2VmNehOW|;RaI40RaHe*RaI40 zRae{{ID}e|BDJl?E|9`|mvL#SaxS_gS16lY*mOGh%c~~%7qTEQST7kpVw@U{4rdrl zI`~wz(z^Ae4cl`LDl!xWz+165+H`ckcBet8W!wN!-jy&-ayfjpFx}GS>w60aARJDiGGwxxWcf+4=kN9%RLj+N z7>f3_=-0XLbDZZq0S!T5+w$r<@a!}tAjypTTkOSGjJ+u#99K~~v8xFD* z5n!{C55$qsfE&Xe0JT7#hnm^Cr?UVYY1RKMifZP)p+#?q{T_>7pTz9!754mG@pG18 zgt|b3<0N8;Qp6(CdCJ0QHQE5BbU9tQpSv>~*>2nMr||BTXw>~k!{gS}{F^c~Yt*-x ziZX8TgRQcs#)8}t66O8gotSer8}$On69&ENL1y8OvAc6?JsCZvu_6jzcY}BT56pKSXJJF z)h;@ST{_HamiE2NTCj0&aB*B3wibP@t$eLmWMf7}!wheWh3#_HYYof{TVz%(G}W># zbZVRBYdJVLxUeP;7}16pT4FVY1}#+=adBF#99&#n99%#qxMtK6Nv`aO?BuHiWs#xQ z=Q;R={l8D!Y{kGM5Adqqq;@%~&Z}z69-`o)KUn_18i#p85AeXDVUrCS5j?-Bs_=62 zvz(TWTyQu-C`tw#{0?ZDW$w1L)-ZHjo34BVp_0$U;)asA2$g6tMJ6C-hGYry#%uu! zFoZ5?q7py^=240=flNY<3#P8eY8X>8^uOVa-TW~G@_A$Tl1OBeS&BuQVw z7m;E*&es>laa8HhzGDq1Lj+ZUU>Ss| zky6D4b|zW}+{Z&!;bU>%=hp|PeqL_y<)}#@qdDNhXj_*Q0UjtKA|nHqaYq*Pb;72? zYkh95jncz-+=Rm2w3sjCnPT#OkyD2+>G~n3I{$4?x~(3JZJi*;sSS`p_zL(6MqcuO zEqF2jt%ndOpb8SiVBno_#C5VFaeEzL$U7}wP-et%fCnr)yPLdQkb0F=-bh%AG6I}U z!Ts)Rl6z6LOP*$cgQec;VRpQ}I!TNkRchd#uWd|pL@u($8REF=V9V|yipfI3n#-{T zn`e%Do8Pzl8j>}cLTdgRI%o6#@_4=--H)#h*WShSpqc17W|XW;f&Ye?|n~N`}|Z zRQ*{no$m{Utw&c(h*JG#bkE4}rYcCAD?%`1KBWj)Uvb&1yXc(+PMju2@dN!XSY!rk zmwmp$2yH(P)4K0?T<=rm6Y{#OhRPy*+VWypN@+V5k%u=kmd@U=v0>cRDlv+gug{$S zl&Pj;43TVMy{J&^q!MACj}kVmh~sX<-l-Br!W?{^hKv$ePzs@t9Zx~oR9)RW9n6l6 zELETa+MS%SIO-h=In;E<3yDt@!Oz3Gj<(Trq7N0)2(l=LrN^G)OX^455o)>8)awgtRJq+lrgWM($dSEHDmWR{!R*Lqs+Obw6A z;#-n^Z^P*LLHIq^_qpmma@yEX+V%x3q7+$KDR$z~axaU-F1^uAMkx>gn;dBsu!Dh_ ztAw!S?Lb?_v($`f7(ycH=D7a8ZS9R_h!GR*!O(MRz+g5+KE&VN3#b6ic;UaBH-mw* z>Ia~QMQ%14aN}TvJiYy%xwqWi=mk{;5PV;2?tj;fr230?CE|DqB)cL$hTv5ExGCD` z^FDV`+0;uZ-s|grAS7mwn@#%by(wwE{J)*uWcyWsFf&8iQHWWWCjpN0;nuQxEE>V| zRCS=cNt4l)wK=|h^l8yw4LR5*M*PUw%?VWA1b4(;qNLDgbaW*mS`{-_4oLejB0?`B zd>lOgMUi*B5bMNB;?ouT*$a8LLG9jxYm7Q>yV^8Bi71eULr4dac3YUEf)oRbk>T>xh)DlY z)xd!(tDx0<&g+}7g_02$>2^XUtW>-aGv&%A79vRG6;O^iQjW}+mNPwY{d5w9JZ>?z z7#GwPVg=epa0Z|PXuuXp%ntyMOjv<{$EqyxLBPh%A{0YG2pFN$p;~Q+3|D^aZzJbO zwmoVG1h|YuVe&$DZUoSXQJFEltH`S93$os;99S151dKvvupaB>y zR@hh9v(Q#AbT24ttA;5q&>UhKR%T{ZRaI40RaI40RaI40RaI40RaIN4d0LR**q11l zj4=#D5XU33&R|spMzCJ%l<4s>1sgolShQLYq>)LwDkV+ILS%8krQLF|m@2(~(J~Vl zdS3T+4cj88kmZ$vs_L51;F3g#FWL0nUlZeKoR8e&Iehkl9%|$8_fpQp(yMB|r_Zep zxB{*pK2}@%WG|~Ty}zXf{PxQza>BuUEoa0%oCSB*?&Wr~X7_Q*ySf1r9?k%^0!Y#D zjcd%6LS(mkP1{#B?K4+3c!>QKq&Zmo^s&3peT8ltGGNXiPHSZzl0l*g6U{|~LJs}8OeqjyDg zg*K)7NiHUMYV=Z}HxQMSgxukEw=Vvfp*5b?=MO~>C*WV(Bis@CZO#vmNO#gYs*i$~ zRBNs|^2?x_0aq}=xFoUGK=hs6W6y6s{@PB!(u}ma*Tio_9{o$;j+-}P2`{bGxDpz9 zW<*M3G11e!HI7$0M*Z)#BuL>AEQC`K{na8(qq!EROtZ-prDGql;Tq&JICmBt=pF@! zOl0>~X_R1QJT3-G(>*jsaGkw~LrISb9mMM$wgkNfdu>oI$rCV+A?v$-4zLl9q60EM zitAWFp(MM){NO}ChKf@I_-4B;;&6-X%54s=$4#{HYEYWXIjRn|D7x)vvM1+L*!xig zK@lxjZHq~f;^-_;B)HQJh=yiN`@F4}o9aZJZMwCR_Q?SUMFAK!6iG9KMFI}Cj)QbM z#`#^^AHwoE_QX0~T#&7~pL$_Za7WTV{v)5xrmq;IDJ?LmOM9d{lV^4@Bro)QoSPY zlmD=HK=EtmZ+EjGi39Fa^rS6SH%Q+GBAS9OyHVfEvbRDd`NWvOet8I~3Q&s3RmzC& z8LzTh$#}tG)}ry2jF#vb$&Xqm9yIF^NKlbZd5`>=<6d7Vlj$e+_}asWuu5t87pK^~7+yFYOch%JxL$TH|LryP2t zN8J^Xd&zlAUtZO{OIfKWqiXN2PsW@8o5`^>Xt8wX@4#X95eJu0 zKQtrkPh3()7la^;7n0~Xk+$DEH#7$w#r`J;{`<|8LIDT;YkLHFgN7S2^;`==J@^a| z04#jS&a^NQ{rZL8GlWp|9_Grd<^b2B7K|k&W1L6C{qlM0{5N)q9Avoooza085JzSs zCI(~Lf*ega_uA^d3nYGCm!#(mjiHvKrk9|~0s#4`En53MJ#U??o95~43}^@dK!8fk zP}Q?BjCWWWPLpkFWVXEDWrh9XXpZfdT72IlCfWWjG3WBZsmEp^_B~n#-7eOJj=zk| zKyL#K&zWGXV}BOo>QDZvx(vN9(&b%@q8F;D6kHo=98Kvy@UrMLXMoV$>R+yUO$IbLeL z=cE6=zu)1$@bpf0hf%7v7NV@SN=Crdan&w>isSq4nl&0Lh2u?T$PbQMJ*JZDN6ty< ze-y<%uF6IRiq-MnaF^;_g+TTGkvSG&+ZrmZ2N(8Wu|Gxr76`Lz&j+~(^!fFB-sLc>oFg%NK#($?E%tlkmW^)6R+wx$>_T$8#F{I>*G%LEW;l_ zB51(*2tc1ZHQRrNiQ}#-;U<7QxR*!3$i@!XcuEVnz`dV1ps6!&{Y=)=w9e7tba< z2zeN&M%d~yAMhcU7t9z_Z$_bG}V ztz6L6XyXLqsv-C;s%*bf8i%3hdSei3fuXL`H}kU@yGpk3wiYioX`Y=W?O1cS{df!? z``Z6Xo-^`ya!F3b4WeQaO$fAA8Jy;L%4wr_15y1XCd{bZ4NrCCa(^${tb_Xj8hohw zaVKgcz6?SBzI=Fat62K@j4Q}X$rc%w5#BiSwfk>-f%y8SsfuU|yzNTC#ERhZ3iPeY z8S4OTf&gSnMDvuC@+>{>hcj8Y&S#I>Z3+z*9pbS?MotGIJfBJ*&%}g_l;=YRtDUsW z8YGLFy}-5&D30uf{l6$oB$NRh<`mKBjbE>OT{-FGWLnxDD z?=R6%Kyrw%L3)eOxZ*A6~&C&7+k<-mR1

+KkjKS*^W!vD_A^Y9a(W$JF> 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 z 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 z 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 WKY@P&{{;RC{1f>95Rg)mRR147V?Q4N literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.4DD1C89DF8002B409E089089CE8F24E7.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.4DD1C89DF8002B409E089089CE8F24E7.cso new file mode 100644 index 0000000000000000000000000000000000000000..34867293992546f03541c1b57312e4c9fcc86dfd GIT binary patch literal 14416 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%0A-(#7 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 R3H%fIC-DCvAgL&!_CF!TxP<@! literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.5DF351B082B2DAEB6EA8D2B69FF8CE75.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.5DF351B082B2DAEB6EA8D2B69FF8CE75.metallib new file mode 100644 index 0000000000000000000000000000000000000000..16f2e390eec3b4e6e83e7ea3db787aaa530320bc GIT binary patch literal 66226 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 HQ9}KHE}U6T literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7CF9397E238069F29B5AD306936DC2E1.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7CF9397E238069F29B5AD306936DC2E1.cso new file mode 100644 index 0000000000000000000000000000000000000000..7b7b70da3c2cea3cecf5df740cb05c6fc90b863a GIT binary patch literal 14416 zcmeHOU1%KF6+R=|iL{pOmH*;cC0s&Uk1Vb1#MG4e3j1OCL&ulpjJKqMUDL?rJq& z3k30>G)J7hcg{WcoO93IbALzW^QE!Zy1TD0z5S~Xj-6WG^RM6jV&8m(Ap8vikHh)6CDRshg42w_sb8+p~x0bd>Mm zlud2n?D+Yyvu9_@R6Tcb(yO?R?N?OIptCIZXv7D(f>AmeXl|A~J~cBFqo7H)Ou@NJu-yW>sfT&t7Lw$)=CA*L_w^UAyz_yqgR=O#^P^`AagtbgvW*u|vI0Z0kNEA)p)dFK~yXYZpPotU~24|u-Y)O=B`xa$0Z zVf&MIqv@x9nChupwxPNr90i2Q#bZuA=+g3-CCh_E&2j3Y?W~3S+}gvJlc|?arc$Z6 znzKzm(i16gn!c3ZI)-5dsI1k3?k}pEVH=aS>97*ln72INa0hDHBe1qLSRnv93_)um zkH@qQQ6C>tI!K9+BFV_OiAP57rlGbFjLJcOPNl9mmM&z}oKY=%Kv;Gxj)X9ScseQs z_wUuhu=jJR%!GY7e9ACu7z$5C)ibT=nlzl4O9I zjSM0Q?|timuRi|jV=Ux9-OfL!Pt2Lkdi|Jd)S6aZpPS{;-J6?s8iqbMV|Y%})eLVg zJiGVi%FH!icGasvZw)$WW@M}~S{NM}&lif>;n7Ndv~>J*xxm@NaCt00p37*Sletv) z>b&ZRDf0tmjX;^(QsxC01>T$vWjZUG!x2PSS08&}k<~;6zAp6(<$=rCD`xeR;7*UqMz2gCd zeTkmzO9wA7#qX(?{$G;m>g~|_H+MuQ=&3#hfnBMq^B!dvi`il}nZ`E*I(K9{*9Oa?oPb*%O6knv#rZapI`(i{3p+Z;TPob z9{3*hT9gL&vv@9s^q>yv$-mE;j=BJuhEK`wz2bqL@8uM{KkW0n89(A|if;k%zE)Pk z(_z7RAmRYyI^ZDnANVe(;7e1u{i08nmol_%@2&$}k7W_H7On(ZE#Ph2Ez7o7o%d?)HvG>2}ov?))xYc*L`2GoiwW$P*Cs>$#$hg_(t#YAU zohZ+==6dOa_EZr4p#3??ZypcezW;E~;1cHcZk`~~_krI8h;KqjA|vrY;(^=dfxYzY zVDJ4i)}XX@RDa*c$OII4S)dj<& zLC@6&FB$lJzgBm&%OSz!ulT*eJ9(s!g*iS_#A4+UMgT@KEa)F)#DWHwSl|K3j~SB> zmqLF;zliaxJ-OiAe;1{Gv77$=l*;uY&Imw)WIJRROOgQ#dW=WQJmem!!UPyu6kO4ldTLF@W6lai9+nv1DlJ{vr zJ7i;|aWHIUr8h7%%%kM40>*#A_!;AVw)ZED!FeD*KgKb0jZ@s;G}y=T><_8nXY`Hz zj5tSoh!OuMbBGZ#cQPXM5R$!&2uJ+C4nlGl<8DTT>R!fujF5xAb$~H}JLiFTEZ;fJ yiKctO1Cvwb;D6(AyE8IkYQ>^y7L9^xXd{|2Jfs&2dTm70&3v(_XBv79Hh&G&KcOuE literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb new file mode 100644 index 00000000..4fa41831 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51a47194c230d2793f614eaf7b71cfa2bc84a7083c5a8d32c2b394727b49a88b +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7F37BB3F141BE207B89B42BD7E923FBA.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.7F37BB3F141BE207B89B42BD7E923FBA.metallib new file mode 100644 index 0000000000000000000000000000000000000000..2ea89ac3c1b491a63a1dd9812258448057abf13e GIT binary patch literal 66226 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 z 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 S{1f;m@K50XLqJkdLj8XWz-!+C literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.9E055DD95BFFEC03321947DE0EB82637.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.9E055DD95BFFEC03321947DE0EB82637.metallib new file mode 100644 index 0000000000000000000000000000000000000000..372f912779662ad093a03784d98d3b5a2be7c476 GIT binary patch literal 66226 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 Dp1oK^ literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.DAB1785A8432D17D3A9633C69AC4C0BF.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.DAB1785A8432D17D3A9633C69AC4C0BF.metallib new file mode 100644 index 0000000000000000000000000000000000000000..0147b2f60fdefa6815d0fa2495f20ae0851eab41 GIT binary patch literal 66226 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 PC-6_;|3g4hQ9}KH)J||L literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.EF723B81A7A0BF6787FDDD555588FDAA.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawColor.frag.EF723B81A7A0BF6787FDDD555588FDAA.metallib new file mode 100644 index 0000000000000000000000000000000000000000..50be5f16a2804c2d4559cdcd6e05892872a35f8c GIT binary patch literal 66226 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 z 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

5S8{;7X(a(cTMqGpvEzk>Xlug5{huF$BfMa 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 T3H%fIC-6_;|3g4hQ9}KH7p!uJ literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.7CF9397E238069F29B5AD306936DC2E1.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.7CF9397E238069F29B5AD306936DC2E1.cso new file mode 100644 index 0000000000000000000000000000000000000000..f1cd2a6712bf9051d987e841f49cb022cca0eca7 GIT binary patch literal 14416 zcmeHOU2GiH6+Yu6U~imcoj*ccp{s}@2f})P9DAJrBJ1_yRUNYRnkY&wh1vPBm#k-2 zGqc3y*GNddEf!HFGvw@ed4K4ky^oX+bF842vw-63N{G!Den1Z_O92HjU`Lu z&z@tQy?4$%_ndRjopXQ3`E$9k#o`Co{{5J9e;3g&xO^%Y1D=W%7i+qTfy6fj_N8u$4W)W9+jsC7CK&xWom2RO6MBddWf5#{56Jb;=5A%wy4!i+<3vh1_Vqp!>&lyR-g~9@ zx^o|SFFRNMS^TT4gR=0t^ZKtdVUlEz(g(-`_ABCqsH@sV+caIn8_=?eg`+29J!Z{T zy`hC6QM6t?TQx3)xKioPY$fLwfvMpT>r1ZTOxu$a=R-2n$q*y6OxxfNGY*9qbJbd{ zVyli`wPrgQn+~_B#O;02cIMSu2kuO`X)jsu&+Ylwv`>_)x^dRfJUeXl(3<9nyixb& zIy0u)nwJ*ma}CopoXP5Z)pJ9h7;3jQEzp{}?Re$tYsRgdueJJBOsJM_=$7HSSI-lv zzfmZ6wTl{Qg`ON&s6W?5rQa#^#Sz~51>4yN=#7p{-G~QV&uM6$C>I=ccHXeOqE&Br zvDafgwW?*PjtIs9VRG@9UGraRdCZdJVWMK&HPLp~!f)N$!H&4c5v9Ovm4X>%E zslaY{Qhw_gh83W)R`CNslr_ULik4}!633XWx}M<-RFX$wZELtf2y_^P*2Er=5 zxm0F?cQ|-TFl!JB&o-+kTG7V=!NKIKo`=d?HA;mn( ztOss>ck??eo5P~t6%-${cFlbH+A60{eVn4OY@Al1A^?!|4Lkal;16sbFceloJ4S+cmQFa zqi6c!=pZG={nShU&B=82c4+;ZJE9ZxY@dS2F4WXnmy!$FWHy;h5lGETwYq!Z_=TiT z8Mi#=w}dGSZg`U7eMrBB4Gg$P1R#Bw_aC@RROmCGJwea)buq1nf=LT}>%l=P^(p>I z=JuwXK)R%Fr&T(9A?e+1ble$AdT$#Y_nVR)Z=++&1Ut6}b_UZr)7AsX>AH=bpm(wp z^iFny9=5ZKPjr7|1JHW7Ij&6o{{4MlUw!lM&cv6WyjARHTbG$W!3a?JPo4?GFUX@G z_#Sn!nfmv$c+LiNzYgljzn_?nx&WC5PtouF;(?uiNh#<*?DM-BuX8rWw*cs`m6hOh zSa2SQIKa3LI7s~mp63*NaSFCy^uzK}g0}75b%5)!ETY!Jl|ZZbyluNhT3&jBb{z2M z51$`(_}c?oyB&qxgKOlBs~=yj-;BNGrQM|Lg&vF@h|3rqf|dTex|>`6 z5YryvnQTX!94_AU(BA*@tY>Ga|2Mr8wr~Tt_8u2sKVkIfv@-o0(>MRDmCxkM6Zxsu zT;C}a1kuZ#=n?I~_Wg3pP$CO8c@3{xo+wMgDf6u$;jvKJv_dl0e`ye0gU&N&=4O;5F;nJY%XoGVG zKHsm@Z0%w|F!?KfcknKr>0@P%ZxpdsIl&0PK!z1P?ygV1^|J;8U#Xj6kfBbY0?W9R&5R81jM+=M+4szyE`Or+|dJ$)YBD7cN;*;9{G#TFD za>?7Q8q7GBZ5d2>`pd+UEblC<%kN)Ef!&Y+KCD{-l7BsAU_}B;92Ap_cwL+u{`@jD)<@i#(qYeqdmfi z|C2ey2$?$>5rc@yUPi71poj5 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb new file mode 100644 index 00000000..d67b0765 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.7CF9397E238069F29B5AD306936DC2E1.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9efe348f6f64805ffa5d9cd3381763805361e6f5532633211c225b01a6517369 +size 13824 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.EF723B81A7A0BF6787FDDD555588FDAA.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.frag.EF723B81A7A0BF6787FDDD555588FDAA.metallib new file mode 100644 index 0000000000000000000000000000000000000000..f2ac10f172fd56a7d249d75bc73f80906302a1d1 GIT binary patch literal 66222 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 T3H%fIC-6_;|3g4hQ9}KHcj{sc literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.vert.2FF984AB185BE7E8637187AC34C0981A.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawLine.vert.2FF984AB185BE7E8637187AC34C0981A.cso new file mode 100644 index 0000000000000000000000000000000000000000..ab80b51fb28ccea30c8744c3edf9131dfca15737 GIT binary patch literal 17816 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.C1B07717CD6E335BA0719719B22FAFE3.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.C1B07717CD6E335BA0719719B22FAFE3.cso new file mode 100644 index 0000000000000000000000000000000000000000..3ad53573ff2995df85d8270dac9835f658224c60 GIT binary patch literal 31676 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 TayNcU>%K%f-aDV3q>=s`wi=F9 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.C1B07717CD6E335BA0719719B22FAFE3.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.C1B07717CD6E335BA0719719B22FAFE3.cso.pdb new file mode 100644 index 00000000..0017ae26 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.frag.C1B07717CD6E335BA0719719B22FAFE3.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bef2fa5d1f21ff643ce7b36c72f30085ffc577750debb9befc6f7a64cec3626 +size 28160 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.29EB9B0EAE29F9736E833F3E1F035C27.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.29EB9B0EAE29F9736E833F3E1F035C27.metallib new file mode 100644 index 0000000000000000000000000000000000000000..6fea7ee7b66ca69c14d5e2053668b55696e41e82 GIT binary patch literal 70111 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 z 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 UC-9%Ze**sr{C^0D$&0G~58+3_uK)l5 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.75A6F16850E5D3B8E8B7368097463B42.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.75A6F16850E5D3B8E8B7368097463B42.cso new file mode 100644 index 0000000000000000000000000000000000000000..dfd62f4961f7f527ab19ca83b14b9e495a4d0ff1 GIT binary patch literal 34608 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 G^8W!eC^jDe literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.75A6F16850E5D3B8E8B7368097463B42.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.75A6F16850E5D3B8E8B7368097463B42.cso.pdb new file mode 100644 index 00000000..40443a58 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugDrawValue.vert.75A6F16850E5D3B8E8B7368097463B42.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:034e0973f1a8b545ec7129f888326688e207a505acfd8c5561c4ce60f5a96e1e +size 30208 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.03430199D846164B6B0612A9B2AB28EA.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.03430199D846164B6B0612A9B2AB28EA.cso new file mode 100644 index 0000000000000000000000000000000000000000..9dd007a5bf7229933df05a9e8ab6aca92609ed22 GIT binary patch literal 25100 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 BPJ;jd literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.03430199D846164B6B0612A9B2AB28EA.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.03430199D846164B6B0612A9B2AB28EA.cso.pdb new file mode 100644 index 00000000..5f53b2c2 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.03430199D846164B6B0612A9B2AB28EA.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3d97923da159dd3d543a682d3656e0a428b52f53696599dfc47568137efeae8 +size 22016 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.40C070F9811750AE211F3378926ED3B0.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.40C070F9811750AE211F3378926ED3B0.metallib new file mode 100644 index 0000000000000000000000000000000000000000..f033c6da5679635d6cdd0402340d494baa12e16f GIT binary patch literal 69034 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

7D%rV|msLwD;C1muk+lu2t3n1EezGnPDm`l- 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.AA13DF163AA5F83DF77B65270B739A08.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.AA13DF163AA5F83DF77B65270B739A08.cso new file mode 100644 index 0000000000000000000000000000000000000000..c6b2e594df3ff35285b15fcaea585448c4812657 GIT binary patch literal 25376 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 kH=FGr=uJ##`=k&GacBne28 z91S2y5>XIT-fDF3yU)4ryJOrjz8~+$S)nP(y;DYc#zpp7$ zoQsOtA2{VtN%y-MB=84T{{s{LDfMuFBgScem)K@(-|I@cYD6G^N3^evI}+sqGB(#& z18|y3Mw)QYfdG0#>hbeyJ?x<;O;(xTD3eCiU*3GJ#N*CV4F^v~>#3_7|KazW>%Tlr z)eMcGAY2g6#jUGqWB~>JCEf_=3I%2TQA+K)s3yGiHVjfIfx-y z;^jc97Tabzr!ld8yBC%oYpAJ`vGFBAtn29GVxysNB8c^` zppvq(u&S^sLPA7c7$GGss-lXJ5?7WKR+AJ}RuWcM7Ib&?MY_46?0#1Oh4t07K|=mW zK(MFV1y|QVAsguc2Pa8)2Qep6gujc!Eq7mgpI~ocDFkpidk7i-t7HMB6G8%k6hxxX zAgm)+x-JuAJxdMT9l+3?1DCQ&*NQmMfSqD?BnXZOa{NIoo|Oay>c0kZ|Hd>6pQH>>_B@aFsKNmHWs=sHLE^*N8;y5;QT?a2550 z3J{%$GFS_SpAe#3Fp}|O zB-3Fj>HBr2?QW*QQpUkj(m__H9ae08!It^067$DW(h(fyg%YNoNak@IM7)=6d=L*L z0v_+18}CI9@#l$`D2eydg!sEedqW}q02VaD$~cE)9>#&sl`?K1nHNCJ?@Jl`S(!Ef zo?VPAYnWZ5E-b98PKPv zn-MVoA0zU|qJ&_;nE-Jh#HR$SiGN_cSIOTNMUdXn2NBkROfUq4agK-xuvx?vO+1%g zWky9@e#J}WIL%02aySl63DG2I9xm9AohM`ws>!{wgVAzXy;9?NvhP(G276_vqh&EF z(ijy6jEc;hiVRS1?3U|`mK#@L$ii**YAyqYrae zBwNS8cE$xx87bYR0Z2-gw zvJW8gy#tuLE$omSwhOQVk?mt(dx~Tq;AHOlupJC+7c?F%H?1NKik9sFG>MjrQIXA3 zVd(0WEsvHRSCJl6VaURhEmx6kjFjz&mTklVuu{2rimkn}jY=}D(b6OTqQ4^9q5fY& zOJHBeVF%*`N93@#U9b-bvIyxIJXt_VPz+X9tBO=BpgdM#hDH^@Q8J(-IN4Xg_I23) zIKdYTY;z6vK@sL&g4K2(K?Ya>aN8w^9Yw%E@`Eb!fCsQ@-~e^0E<8Cv;lh7sB}@iL ze^-Y!{O|yFqz`+iNVX5y4u^fUg>C4=4le|q0z#QVs`7w7G11b1`TrP^zbyI+I1?Z~ zfNdyZHQ70Uttg-RF#+qzPhR5&SyG&UNH0=e@Pb7Y%hwy7YJ40vv0J_NfMX(7R0(f&NZB7*pj0`G55=P%VLI{r5~homE@V()f?22upxTjxU7tv zx)hu`3a_M7#BfIYD5p}u19Yl^|4!dCu_iSJSLR^kzMv+qe5|FZp{)hk6q^K#WyXM` zXjOA#GN3Ao|@!UpO=;3|=@@%O-$0at;j>VZfbREHajJwj-Jl3y{sI{g z2n2tsRKkPC0V&czF9Dzkb1p3%g$^c}kV~Tcf zQD_8X-#VicHI96Oid0N*vhu~g;gjo4vH>Fd9aKa~l!09W*lHM^5cn5l(F`Ma*hrI% zCqELH?CS*yfdZ=}-pdPEJ$TrS0v=B{LV=B=>j*Lr1lhX-*nvJwl)R5=1=z`1nR<}S zPKZQo-~>WxBc5Cb5MO~1ctGuM3kh+7NV)*i5F!~7?}Y)f10W-S_@CedYy%?VZGgE+ z3v8|NLAjCqdk3(+HQ3iKAfn^h0r>@x6pUOvmynFWrrj6GG>jye0k#xiAIQCUw)RQ^ zaXJA{Hmg?%5c(rZb{bE%u9sv074KyhkM@f81vYTocwgFh-;#K`F(a})AVBKF-ea%< z^7pnQ3g-c`0OlSg=1E{bk7Qn2W5gyqILuD822yn@GKJByBl;YF46%(52!sUY8t5Eh z$gmz@cD+cESh1N!I1V<88DV8QKoS_oMoW$K%GRmK0}lDoBlliKHUR*8lV1`6mc|DF z`T$t~4+NbXdGq&n_dy@_1;O4usl@z#{qo#8(+Z$~zPVI+v|MYXG_a`xLsQ->+uAEs z7%kVKBHz_32MU6NK;MD+C6W)N#*IzpR#zXS5OJ6`jwI6&2Bre&8auDIzS~V8h&dn# z-zjD|!_`#aX(IB_3Xbe3IM|zC3s)LbPfKdVGw}wIJ&j0e5F0VHy7W~J=xd~U4Q>kL z&pt=|E-H*b2n&jf zh`@O+5KfK)e>d^!V)JYuBNnvxboWBJISM*BdU&GUeQX?1K1e$^$A6-nkUrRxk*|x5 zqsM>4p^@%@UQSMqXd5R-UwfB-GQg(%j)69we!gCQzJ9=gg9qvBi$>Y``8pzau@aDI zXB*!jFGm{>fQyrxC(>8!ujY#uG}8IvFoSLM`g6bmTmvxu>$ro({1Jol0Hk1HH&1&c z_9$e7@^EkrbawP`L?eA29e8YP0IZFd8`9p<<>D}5W5atPRP--ye+&DIrGp>J!}m9! zrHbW^^6>FRde}SKpd9|H{)GTeM~?QsHou*LrTya;?D$|ov?J01Tl)B-{Q$ZPyHUVs z8X4IGDq_d=@5*mUe;5Kz@^g3exG?QE%io>~6f;FR2I!+bUH>YzJp8fMKLr+pJ>?mD z>S$U3KVwfUq>OTNv-3ov0rj0P`XTLaT?a-U>4t?&JiPt|HbOZ#ngUjNqE#Ked|iH5 zFT{&jC|``a4$2+n>x1p<<%#w+0&KlNYa#*PJ9s$y_+V}Mdz}CB#orA`HEYvqouGP7PCkylK3X2Xy#oyMpO%027yUk7Kqgk0zMqfF zU+jGTZ*89L9w;wQUto0M*tHDkiCxDke0*?YWhEsLD8>}KiGe_fC`Bkcl$kaePTmW} zRRW5aP+Vj(+^h?V>kUAIP~3E&7>43L1&R?U?gUVbL2*9=#W)m~A_Y!93B?r#ifJgW z0Z_~U{eWT)=m!)FK))1t=n_fq74RcOZyk{`-w5JS&l-^^$rHuK9ug&CpzR5WSd_f~ zN(V0g2sxuDc#uR%B)XJe=bfA=HTjg(1WA+#JhcDC?Llyvs1&$Nz&`Q}MdU1#WIwYLHzJyFvvvxeF9#M-Wsso6K1L4Fv%u>OK zXuLmt1ICF0$BA?{cDhN%_%PjoZ3oLrd}~U4h`e5is8k&w8nfF?dlbz-h|BK~iXixf zh!%qt%@Swwb@V_8&b=VdBOvu%N0INa)QSXvqj~}$wGoioE{8Fek+lw7I-Ms6M5|1V zxXg{XnbIYQ=msK(3yuB~9n(W{>4N)h1OY26R(U#}2M~EGM4}u|^ogeUIsh4!So3NDHoVD^T8+wlUCK^G z_Fe#+4XiU#dI2^Olvrns6OHgnJw)Icl6~_cJLw{W8&L8J_mUGIl~9U;s}a2zB7Sd} zD2c!X<)(f)$jh$Fn{nXZe}xRKk-$$4$Suujm|Ah@PojiAMl!cDT4V4~A7if9;bWg4 zW5O{6(il8T41wG@js`@8GPmT;+}zH>&4rc0?YZHbBXd1t8|tiMI82jDOxKb24Yz!> z*!g_!GjN*4TlP%8zqvE~eq(ZFNu6+R{b8M$^yOwmOT)9ehI*lPk+!x*$rghs|5jdp z-7&|VT2jH3+MQ3Nse-$s?jBjddkh@r>x9=beV+1V-skIO;M6AsRRQ@O_Jt8K5t;|c zn;^kvUb!m3K@P}Jq{n-sHW>R$NrCquKw7uK%JlIf9|28}gFpm8AIQkXnGr~mfTK5X zT33<6^kP>u5)J~<0VNe!i60;Zfq`3f1f-9^Q|uuDAw>ZYBuYVNkkykADcS|6b#osl zk7WZBqG@Fra0y9ypu=NvkrsGFQ6h_8BwcPQa4;RX59ot^e`OiR>XIm+LeYq23S3Ay z2t)=5{Yw@MXj7#o2;+RJOF@e32#Z^RzGeq~x^A>R zQQU5Jy^2(FKwpA-pf4zdo|Y8G1Me>;h%dk+N_cut>2Ny&H-72hB^Q{rB!c#g?y>M7 z9uXsY_;LYxOa!joj?3J*A~lbfCaWFja_Cb+BoyeK8i(+THZ1946)*2GDe1zuaZ`pz z5%*PqXnja*x`-TGac^Q7a<(eoB#ICoumv~hj|g0lMf^pk-bKv0`x>mV*2x z%3t0r@2|t5I8ep0RRmrogZP2lG7dhND9}s(u`j0-8f^C}0<7@VQ9tV5oQPPYo*P{; zoWGgGXpPD;?h5%GfnJ)Ez8qE(TmW0Bgl&|7hT6SSgkUL;;0K8Ucs$tdh}bUfW|CTR zfEY=GC4R4rCAPs5+rqHKbF2Vyv>cYWD;`VCL4kRh)6Ef;Gbi#;b)3>N?k>~<;7p}- z&5aJt21JnF>tKQ3*#`*Z4gVcmL}27>F`z<1TCW1Y5)jA{Fp3>0DeLos`*-yJN7VfLv<9S}5@G^K>={qM9cl0B6DW)j6c!Ww zZ7|kXLf8W!>i4n7N65_H)4@>?pcev?Pi%6D{TAcz=mvbJL0^2c0dh^?^zxfd)zJy* z=jJOI2xR%5ZWkCKKOeNv#hFp)LY$Bt%0mcHLcq<<0WN?<+q=LoRD%D}#s+XP_Q+}D zj`D#2Q4KEO6Xb*T^z?=QFLcv)L;7B1`9iu#dp#pFLEx}<(eMxbf#b2yAGENDps1ja z!!5XgC;b2Q4_fg5-#%i&1svV&935=_d~W;S_!s-V?teS>z{fZtdpD$qv(Vr3Q3%`S zfJ6rX(*meo%oH17kpUA^5D9{j1Me`D3{`M}5&=@SaFG^PGUqZfhxR|k0})l-Ze6JZ zgS2j+?_b?twFDOKDHuq9fcJG!Tj-0xs4UPe6Jro=1jtxfTs;p2A|=Hs0VX(bF-}pW zXX@nRU?wm_7~s{5*x)!KPH9w_j!tZ-gpQPs1fa%a*Ga*HIuMF;q^DQCSvP4wg?3&CF!6WIl(+igeiHKOw>$_*)WL(!RPo} ztq?q2vB5@RJA@e#Kd;>zW4EZ`q(14rq2Yyvx4N>kqtqmM5uMO)ji*}9z4%97XFa5@AC5nBZ!7s%bSD}dz~ZRVGHe^%}w5q z{8n}#GCI}|D5TY>l4+{iY5O;>7-oHJd2uP-K~QtT#H2i*g|8H0H{KZcv^;7?#;K0P zJ=*7*rd&+_P()F*)jB^XBhSYsw+$0fS|5LBYuc~dyZyW-p)s;slvf|zAlaZp*9t0;Y;yI+?;Ev{gwIMbszv1 zRC)gDOkpQ&S3O&XtNj~N=Ew>Q362XR|(3R4jK? zCg@cToM!1d-kzPG%1itiPKd5-8(K9d{WYe6n@e*NKL7RBk;iF`qx~G$;q4W0mz=sJv48<=-jEq|F!Y?-CiNNFR$e@Z#!;|))3tam8VgU zsv<9O)l>D2jtF|Ux z!H!$D37JU){@FIy7SrMwXFg_V#q^dPZ-1TtK6A))fLb=A4fO6MWXz&z4sF|Y8Vc-| z+^N?L(V|Eoe3PZ;@*s1j{uMv)YXF`6Qtoi)G}xXW3Ccg$(IcO5uIhmPd$I(%J@$E&sXuZoe6VJj4SAU2Hjl!PJ zI5;bW(cCc3KTVQA*hRC{hj2&_X|#op{Q(MZr zck{0&k&v2!Tbcar2hIT`bwAo7@1V&h-)N_((>(Y1l9hham}f&QPi5-Ve>M5D)aKz% zmQd_1o_+@9=G)5>#RgOk8y|M_Cz(aG6x{5rxkZ!r;|X7DWA@I3<|i2LZ(@p85{{C} z4R3#alyn>J^V;bb;!4@&W5*h|n30!Kk~EFz55MT&YSpJ!EgbYdm-)aSJ-f%kprc;KAk>m4NqE z@GjS^H=MOEvVKzJ@C5}#H|2g;(%RT|`OKKNbr8@w5H~uOXjpBSsQut|%;5fDM^2TH zea;3^h18<}#R+`9oRIsZHX4zYgW};$IzMU!Sn0E5N6+3`mr0ZiT9j7{X_#eImpXnA zb>a{I5k^^QB==6^o;Ip*d@9{BJxaCZgmAb%+5Dv8_gRDvT z2j6y^E<#k*OTu5{-}y2nlWkaSa*2=R$qnMN$v4uDn%m>!6Z#d(rH1K-Wz`r%9ZuYN zEsmjZUExG!Ze5)Xx53e^bzg>!?FwxzGrNxQ2}Y`4I^Wxo&V-JL0<;4=#bXWD%9V_qDEDxpQJ&;$J)hCr`YCj z+*dEW`w3xvh3v1r-eZow)ayg*M`rY{kKtoI4l(C<+Sm$tG{N>}krCMa>_69kJn$b6 z{Ko_T@xXsP@E;HS#{>WGdI0+ux3IN8Zv=o+_#bZsjLEH1K{?CVmv{g3wbpL+s?qH8 zaj3;%*cXqZ(-ItofR(rY!yu|Ls%M)D8v%l0ot-8S%NrqO`z-ePE4`b!mW*FUrQi6x zTRA#94QTi2TnO1+`X(FEaxd)LYCzcXN?LoG`*Cwe*!&Y8nY?{J{h;Ia=kj5@?RcLm z7B|k;4HeGzpAU>=Pj#$xPRX6|ktv3)oDFn;R5%O%+Oqg;>}=6$o<+21xp?>So{j%X zaec+t;;}EUJHE86>`kqlo~@iNk9dqZwQsa_zHUA9xPI2TyPUCB*xXQLwW=$>alDE? z3v*ueXxQ^CUOryg3sJeXDUL3F{-kz!_s*vO^_$KLQ?CPS7WD#F&gdE1bdQ&g7e5t? z?`>8*f8Oi&%;R&>yz^+G;er#j|5zM(b-6kM+*C&1-us?hmZE9a}t#qZgJRH@tiP?f7n7 zSnJ--?$+1i+VYx5#|?A0P|Hge$8MTurNvJ|kEcF`ZtR)PhH)?N%Nq*6u5CMB4YArg zcs1`E7GUwE^NVLd+i}q`L+ABxXE*Kz5S)G5llI^D8@sjKA-lNTx;LQr_}faszCy^Y z{Z5nPr#ok3)`vk2qRaPO=jA*18}{Sxj}{z9qiH*LE_KQvQDqT3R3=v**MuHQBJPb`CaSX1QEYl4rRuq^SVWd$q!ninpyx^3iCn6%Q$K|4@ zwIz}Dlb+0=I-E*tt3t9m#GpyuXsBwJ_w@c(ah9rWxE2Q#6ak{bMSw{nTtEbs;PELi zDlsv=s$R^24mXG$g_uB4aZ#y@3yTd^=H}6(Vy3uwA0*1DQwZZt>QlMgo&UYbaD_&s__ z+ii9wp_&L^JAg`XcSR>Lz?^=YkN8%Kn2XpxOJ`%piz$P`?X6zt8Fc;Lx>&k8MpfFSTse|S7)f(80LG%&?8Xq4N^NX6mYu7cKZri9~vD+x-VJcalWiMg<5+y1INNGS1c zfxSKdH~Xv)&oXIe@_(}XUq(7Xgjuh91GfCQ;7CCE7Q~KXKnN^Ed{tW2(@@z&dI$jd& z6W1Gt??A3*R!Uv!^XySwYcE_i_PNSyXs{c;QF~;dUwQYs<$aCI+ZF_V;`6e^#7#7M zYWHg%4}B1~9@~#EezPrJ^!WAdwBw*Qg-yO$T}>!AUSw&>J>uo42*nITle@u2ipK6A zO3~EBE8HGa)ectX4barbjU=>n9r+?3(Ok*RR_KrNaOd>&O9@FoNyC{;mrJzN6Afz! zPrgbO3dX%Ryo3_5Z5=X>A|Oed8#qk8eICkiId)un4$`?Mlg05eTji49udA8J%Pz5l z=3BCchB3}sZ{Fy_6N);MQ8*=SH`X%Vzdf>6uw8%oDzBlS4o{ojqE>g9!Dsa3@R7hJ z?UJWj(boyzS#rSyexw-MeIL`ad-JIw=lPE}71fnczgN`mK9rC6L~zadla=dvidmJ& zN%@Mjbt#KfUr#YrIaKljP!=_P}8_f1xQqM>n%n%uQXXsUS02Tdzg@UMILpVx}_o&hmL`Q;0o)k z>haep!&>1MlM2R&A&bP|)EUglmife?ZG>GZD-pO>|I$N}>S|WQ`%QauB6uWk>yAQX zQ=0cdc>GCG-P+n}vG^o!EM){nLwu>T9xshFJip=;Gm&_owU;o{u#)_W6BLBe)SPH= zF*Nzu9m7#lSxK2hn=vhZS`5jQy%j^E*{@@f&S`qhHam}6Qf;v##2#1pJ!4b#yy= z_54BgcbPA`ATtf!f^JMKg9Vwwy#FZf_4zB%UWe;)U+!LwZh6d;AvNZAN8FI$XF|aY z{YURI5)H8t3wpn=0*^9iC=zZWHKlee$SfZ;Zh3JGO{lRd4zg5c9yCfSq=xfFh{Tkc zFz>&8vwj&ZoyWS(mCO^rU0O-U{dSL@-qW!jABTHX6Qox?1Vw9tP`9S#GoL@#lAHe) z{-(4-tav5AGPJM8pkKj~i2sd`0#3f71ra$eoGJl2{BwxC^Vf^lGZY02lnkF@xAPXa zWGIzM%QC`$sNu)9blp5#er*w;c!C$tIxfphGkhPt#P#akVfgC3mIJvC47~TwUOch0 z)V$D_L@TMRCmf?pGmYZ?!<>(^);OhAeW)^3wM!z)%rs^rh)?EMr#$8Z^3u$4pFhqK z{n1fZR%Z5H6cS-RvWC_JQBzCN7CfP$P9-?e7)_n{&hm=sy1hZDPezRT{4XffRBs}L zLH34E@jZzoy6S8R#dX=iFeUmd2Y-2%W%7cn3lC%=%8DNX)!UDCDrw3p2%oZb$vyt% zlJ=qlv-@hSX3&Ki^!4-BsD2FnJkK`Vgf)hfrleQo+MyeVqA47cEppzQ`Vd`gVWP52 zg3Gi(9*>+Jvf{@Xuj5RhQ@qEW_K`aG{UJFxo{hnZzGNr=%1n+U&(b`ShDp}6Ch%T? z8=XSXt}A_^xqb+(!F#*4$>g0U~X0y6EX8#kMTl#g*!RN(x|1IWF}2%H-zIv>UtjI5rl7& zv(PLfTDEU-4{USXRwY<0ez8C;pLnU-<&t|8$&VF<=nUv540s{pC}L#r#`yB)cY?F9 zv?3KT)*!n3!{1MT%JZ36cDLxo(cUo5`IdcS_)VO#g6Vgsp1NN&^Ph9AX9vVhsVk)q z5pMR`7EkM6S?@Ac9J2>YqKgi(BoQ@v;ufZE5~r*E$Y+(`b&of;`YXb_Esl1j z&gX;O3G$YSLx1&&fkS1TyJ^1E#?uhHY;zkGajUV70e+#-THQsX0#J=oW<|^ZJ~F;4|P)0){W)r^sdM9r$;v!jx_QQdR_XQK+LYD?V?0p&C@=@ zdB@l!O9bhfLpj1f=V)zww@KoPHcGwVie02PN9Wt9-YDCjpT>HJ0=Hx=3%p4scxkA+ zXdrOf65yJxiM243A$n4?G@xHyG;yTTPNL#v&+#OgKvGK{#*}Xu5foOey>tUd5YNDK zO<~&c>ZChY9HXGera%yzk)zNRw+C#h_*{zWt6VD5uR}Cg!k!ixzAaOP`4s3@+U#T& zz)D0E$>Asmh^tnJqZFY<2`_@u}X zt_F!M?PjVX*;|>*sIO43mSry~_ncn)({HPm^Cy#O9&4JI&l@86hvxRu3Br`cd)CZ))Jiz^uZoC-++DtxkKelK?n_dqJ?Y0+8lO{9*JbuNDIq?A zL}p61)?`i=P-Y(0@B_ zf;j<+Ax{@{$wko5C1n%!FR=XXlE?2c17o9y&_9zf*krfKEQGW&GE@zA*CL zkOXcscLm|^i<|ZNl|($S_a)h|{0Cn#!tbm_l}?{`C^9xTQ&^Cg-+!}2*MDqF#?ry#YUC7z&`nfKM1!bFi$ry`B>9^`lIv+GGp0&^kCuO zJTzXUx0bb=myMN38YB5S!w7HAbhY&K@jj_!!a|Jdi^XFF;yx=ov8=vt_8})DCCY=4 zJ-kk90;8(vZx4UuT>(81;?l;Ch)ViWuR-ayhHpR&dh;lvGL-&mTAvWvuYTF1$d`-9 z+4BB5dZkg1>u)qXHHL2g(0O*BMa0OV>v>n(K;KslF2u-aPB@RFw-)N^Iy9&*T0Qi0 zv7qKquvun_iuPVd%sBfRPC|F1i2)pkKc%%uHFPtLf?mIdxda&P#LomTP!jEU?JUjI z?WL1Cj1InL-*Sthzl1ZM*V6X5Sud?$u9&FZ@(;q%AaRxPH5cJ;aH>$X%Fi6!c}t7F zN;UxRC&tJB^=oi6pFl%a|1A{#fLePOnz~(|E|WI6I5#gX>6P};q?z-kf2=DSM;7F>#-q{7$Ac~q1* zN5tgve8AKhVEa#*OLt9RWbTj7wgk7R65i$*!*H$C+W6j4eB9w5mpuRRj^m5?K#QLo zOhqj4Y~Srmf1T_kM z^G(0K;48ZLy178w0aGw7(4tt%^oX(#40bI_kh17P!{2Igg_huiPphOcP$fw{jcqf% zMDv2fuYYcpySAcwwB^}3Ig!%MYdUH^kJvU?J0#yJo17r*qSULFzY1fN3uDtJI?GyY zs(q;i7I2rLq*?5oGg0p?R(*a&)p=2nq=d;JRHuUF_**NMC_(pi+pl^ zUOCxmp*>@43lZLh`@_DZ6!SVawc|JC&D;+>bJ%{2)O=f>7LqC)@I4JR^l)!9Wv-C(2eEA+mX!9MClZ3q$H)>yu6)%_IWyrNf8BlP!M7mEcQ+WbF!zfZQCkAM?6rC()CREx;(o+J zKj&`+b9P6Os!C}-w_|!hxNmb(mRtmuZH*Uxv3JTHK9D;7ex2s>%DDZ(t@Rfa2{nN} z0dxH16v9s)OE9eRF$j>oYd1}o{y|KLr;(qtV_+&RL8cfgqIxwSW;;fZ zk)I4%j_K5!Lu9;&OL-Y!Ah;qn{;gd%#6v>l?UMp;wL(Voq6XnGE%sa5%*EIRLh`KD zxtWoNi3xHJt4?jo-|BPfEh>yQoob{bZP5>YEfK7=CT9)Wz~+5q;vJEYH+ZNWAAky-jX5j(pPepbd`S2E;ny z?O}gombRcciU$NY?Q*w;Z)uA8+ofTy!!1NrV4Oce$Ufv)Q1OGhxA4CXL3{smA{eQpC|qB zn2r5b(CV#FiU`{#i}yn@hX=wq^99eph#S5XKFFpKFK#c~E~0tzsd!?KT07DC{;c)) zmjZA4{FwBFuHE4KL5%6T(rj5jRc0qIOeC^4_vrIfhj*f3howo8XJ}7SZrVtfaC7Xn zIyTBZ{4iIc4rN(M3znwg<4)Akf+@Uf6!$w~m-- zC{KLKNcDKau)$#+PM@8cVQ2S(ov(33Om+ zFK$XIVlm2`I}j`9M@=I;{%6m6`s}vNO~kK=>EB=VcX`8dfODJi1mn~YVPC)fSo4%k z1*FjT>bR(z+^oY=iTuT>vUJDC!FPv6wYCCaWn;(CY%^VJl*vmd_%wNyfmo&?(C9!A*6XM60Q0)8+zrA5g#BgKvOUGTyf_gBGYUI-i8jrrl zHl?%|1|h&M1-Q^Jh8I^6Kp=$>%Q6Lk?#VGo_ciLwq=FA4*|8 zxKt!Rh**eSyn+SH39Ea@-p3?9V)lkw{~9eI2@XX>e#m;{X+9A61^t!0*$OJ1H`|zz zy8da$g~>S?vEV?JOLCsVYiqAI%G9#`bnV0KRo(V-#DVz(3o)Z)3YGyR*oSxL>pTem z(_!5q+h%^Qm~EnHN?EYJloaZ1Ep*Z)Y>HMyN04uxcq#pZ7v~sf;pzFMV~WoSPwZ_z zRJdQSuF!tL^kgeRdBtLshVkWGoH7YZQubZopLn#8#Lmf;`a3|5A(r$AmEe;#P3tmN zB;!-{LsfoaPJz@?Iy-W($YEGs!om3mPBA8}C5owK4JG>@k5V~XX0P6ij^=$;xXAhn ze-jdmVa$G5&1A1pJDm2&Joaq|ne>>$zRTXtZ&J^gkHKIa4s!kifi3qNAp$zF!Vk)z zA{G!E^$&vYUlg{Yy=F#Z*RK~gt*MNqQl=}wD)vNipH?4!I9=all1LU52o_c(f6Uo@Amt5q$ujU=d z|4@*b>vV?4^NSO^WkQO}%(A+Rb%=>|zNxrH;m4Fut$`2y^COX2!*A6%k(&s26RRZt zP4q-@blg;W&!^ZGN*gLe!#m34cb-NVf(`1X*}?-!hCS8rX_PKgOmBig#;S&*mu5z< zFmh!Id023ECQ8XQH`CP*Pdqdz7BM#*Oi^I)-|RDViIq%ZJ%G^%O7?vUU=CXj~UDRab%~wZN{jRQ=t6v5niHxTRdjdM|0Yt*`g>; z!{p&7g_WBv8=s`DiF;6Mv56|BNKd_wHMZ@29|2?XEsv!SPk0I}LW) zynC9#A5^u`_CoYiSODMd$SlXZOE5J2E||*=$Ghx>weV-JUyIoWlIlwWlTmB62$E_xYN&e&tC0yg z(+TB|rIOOA#lnyg)#xDUhmZ%;*TW}IKFsWWGTwV;Fhzbn#0}%6v`?@#NAyu zUvZ`UK=Ily`j_%fW1bB;G=bILB={5E`z-Md7qI*Rtrzz^1%)08TwN-Mj@ z7d|}ed6<)_Lr#$=sf54`Z? zkvL{FWmv4P6Qn!-`PKp3E!yJ6ajQ|DFH}_L39fD$S77LCRV9ZJgWt!(bY^HHGg)4V z1>cpX$e!2lbrzF^9Fa50(?6`KVstmEV6|nB#&dEO?m7P=!YJW1MR8ITJntkrGb@NH z9Z=@hy!w;1_Z^cYi&gVUk74SQP)>*b`^JeZ^G!T#mJ}Z~VUIYoT{^5;1Lt@PljC4c zoctX(b}CEB4!I@$^tD8iIMT;wH4Y)EB_nrBryMPs-n_JItt4uHIQONFKN^1+)KcUH zu3NgJK6x;k%Yk!;?OlJ}=zW<8uUnqfi$wk4dA9K2k1jPdS6lpkj4t+FlSjNoT33{- zO(Nf^F5mwl%Di!U=e-ec$A&~aE#+kTjq5ikvb(Z$+VA*^RC-?#*8g%~KbjZA*`uGK zqr}Q;O6f4V8-=WUM)=B9Qkq0GwFCO1=jX>oaoOCaFJHo2THal%q$;T(H?%`5 z`*8;-sS#vipz3sZO4PrHYLk)3%)c~ zg(W?8#eaTYc+J5rt<1SzbTWZ+&i<}es)I9Qs6!V|Ox|sHqzlwa7OF%yr=F*&J-N2> zHSk$#T;jxw_qB&}o7P9a_U@Fu1?N#S%Kf_hDQI8s%G=?DDXv8We!V5{lguUz+0PbpiN z&LO5B8j044mlnM@Kg|48_>)Vd?Q_r@Sk5yu)rnJCVM8m9<2YyOv{U!P3ZV? z8Z#y2@qHWxG3|L(4Y2O^+M=Z0=$1V-9}1aPYgF5vprnJtzt7Vq3BEI_|G6P8LYZ>) zPXaaCTY1S^hURi!4-}SI~^@Tv6y^ajvNQ2f^jZGd#k%z!f?$SAUA!( z?3fDeH(8^cJOy*iWT&f=e%%6`84u~}L7!42n$G|x6E$Ta}1045p`=mwJn`E z4(3h`3y+{x-h8!Y5ccbaZ1H6;D#amo}^Ae5#7t%yt?0!~w>So)OUBvcd18ihYmbN|?TdXM=r{kv6Dy7;_D zpYQ+FV-EFY33$QC-M0A*UM&{96{!RgzNcKN ze+o`5%-_duHqp{JIQihgM5=u;L(cRA*Ekvh=25gay z_y!kCQ9U-JDmK$UzJwwY;CNaUTdf z)N4F_sTpyA5es!*!V%|<1o6hm*hW%$wPa}KOns}`LPdxehLHxaU25j`W*2_AF)xwT z2$c^ObgmnOn@3Gj5qr=5^gHa+$hL>Jrx-3W&@uX-E$7hP{h8R&_V)AgD3i0X)wk9$ zr$(P`O$WStbcgopUGGtnJ8FykYIk=jg!W}L6vtHz8qz0EH>1DYs~Iw-tRTJq!<5q zXh)krowS7Eppt7Q^35Q_SES_oP@49Y=Gv^C93!S(86!Zqct@XL!w&j-HyF6*TK z^yK@zUq}nXZS&=4x5W^${0QUT0HSX~kl42_HNJHAXS-fmT6r68a>HPgFHKUi6hZiF zBbT4d@AKiE z05Cw$zp?sXy<&MKp+CmZW;a`( z6>fjKvENkCn#CgUT{!ieU5_!p{ab-_mlG!j49&x-ztK&J>;wE74{Z_Y^4$Bf%_?W$ z)>etcZ`p(>3xnh6t?%=<{IGz7I!m5 z6_wRr`|cb!qbMVThYpU&ER0e}6=vA>E1jLC4cdvm6%|Ax-p8^g?fm+FkAdR(8XZ)P z{;j-$(PQ_n+k5AOhR#!v{EXAeni;?G!Jt(cR8hjADMJb7tiO^uP?za)c|K(pZH4?U zvM>XfH{XFpyyvQmhg|Bi5>}9)vdE!s`$=u;4;L6`C=ln&P!ZEEjWbiK3pQCbmqFV??#k6O_U-69?kNdYENqv68-lr~fYZ?HKwHkd!5SLK` zbz0EdDnWBZ+QhP}A&DgDro^HiFR?tK#m8${dRU0*DS;x{FpV445RX`xp1ifTj~rqv zwr3*`pQ-&X}{n~)Bmgz*5%%==_QB-5$>J-HDMLV^Am`BP5z$XJYqntE&0hxO_4I(;! zk^?%?sp3MS>>Pz=W(hlUoZ9AzrnX#*lrWOVLYz;==xERRnSW_(QZ0~z@)i}h8Rim>u9f$$+T zo^BM)5dd!pKQ!$lxd=cSU5j{!t;OpB>!XfX{YwD2y-}IM`xx_neTD}I6hP^=X)Z(q~IksoA(&At!yMj0&wettgl-v ziyE}xb=BDJJAc9e$6H^->Y>Z;QCb+v%DWrt+=j$ez*zD3LbF5Q8HE>v`F@7?eZRfK3uWQ1ifpnfLyPT+Zx%ksKxPMIT@R@)jd2F#3_0(FaPE2Gc5xJZ` z^8^SNvLwgBscRbojMu0KC(<90EbXCfbM2&|r_^C!7#!9@x)zWbSSg}ZLn5R|Kr;(Z zaREY%5hNyJP zW#ji8hu#i%==#3>&v~f=kL1DjFQMiG10BAX2OGuhuwxG>PwM)y?4jpvV`JzC(gSIq zmcCEyV;R;ZF*Lnxxd58tfnIDsfB+r41s>Ib&AHP!1l>Wt(>Z<%jQ`XVt(aqup6V9J zIxz@nbW8T`VaN8PiW^5qwcKgv_NSprD|jpvgQ={NW~W{%6GfwRWn!;zB^kT=Gl_8z4W}3Yg}U+MRuv zUxkO^JPx(cP~Lcxy=|IBsscRZFj$6`*Vd6PVH56W!WI1id|NQG3KQTQ3R(nNGcV6? zE@S$G9E;%}0tA*?xl;ue=Z=akK0dz`E?{gspF|Mh)&E;@vji@J#%lM{sIdc&C_FA+ z;&GpCybIFF)P{wHrkbg&`u?xjXPwB_5wX)J%E*y)l(#gb6T3ex045>O3@XF`#cZV! zu(|tAD(#{ZE=dFY89+sNn21?#!G>VBrsbkXEP7v<>xB+4@%`w5Y4j=HW|<%;gD;z=8Gh%Qk$agVZwkGm09e=-jaKTqoNz%R2;KRNrF^s-&d(2=lOI=v>3?5`G=!?O7PfA{qv1 zBqD(6i3yTb*U_!)2fSpMt=MNS3QVjZD1LM zt*{#4g2moSaxmZD$R(adie~Zoin}x<9iM5a1L{45Ab0Zdh^>tONGr4+&hy_;yXE}# zl#*Ev)}U%1VxE-1RzkFiCS5vLld$hh{%r+5R;>4_>4~H-v=h6)so) z781ao29*YB~L4DT06=Jrz4s3S}o_^{z$z^f^y{|(3MaG0nP4Pvc4N=$Z01BC2=~| zV$?yj_uiXFvv~PZZzvDLaDpcMEdSmk7n!Ia=$Q<*b<8$gA`S=wjvER9oZC$Qpz6r9 zr2Qt?d46_G?LrEV+H&7c2{9NuQ@s+6_Fe;`u8WrqEUH+6RUGVA-2O;8FsDHZd^i-j zLIJF|a+qj~4C3PV zD1jA)U_@f&rz@*8MEIX%7|^Bc_+6F5_=6vRE>O9~c5M@+w}NBJO+wg|BtcZdqXSK^ zdzD3}Xh6ijgu#qP3nRyWEG=OLI7bini(gTr?Ck0C_!uNfWBGPrI7VBnx&wX96x3Fw z32tlHX8Rv~sr|pn3MRxoHz^3&B&*y!RfUZO{~mYK?D@auIB`5ZA)C(gSFPrGS7tM* zx0aD4m~<<}WCqx%>;ZQE?364IB9%j%IOO-uwYR5rn+l>r_OKiaZ3kaT=JqqX*3#0i z%y+IUc(-(#Ab4hBGa;DGE=zslY0Ck)9F@@1f?pC$E$g_N+%8Ohz! zR&l+Ktk2e_Tk1rRH|yN|3T#FFoFp9^0m-~WbJ@cBAN{a6qz4Rr?{Q%JQxdaiqA|43 zxBp+R_ZK8wL+;3f^AI&J8-Otj%{AAf8^V-EFDj*^(frNHP~bfjh~423kTK@GBbiJ^ zBg$=4@#SyG)OXCRv+7YG4bizA4DPS&46lT#gN}(fbN?MEW^FDWOOxrGEmtQ&6O^=F z2&EE8i*iXQ+ODd-5XqujZhZz`F1kaLN$vt$IE!S#1fpXn78yl_qn&(BMid3aL-^A!@s@F+6igH<=D1AjLwH%hXylyk1 zA{G--dxGgo+e}cW40XTNvjV8fSTqoJ0O}HvM%YuGm!S96Yg5-&&#HYInjzJx1`#ZD zbmo}|L?52Z({!k{ICe7gKY#tNxH@7@LfWCc3dIT<7L3aVL6B1*%MmorG=yYhBO}V- zca_b_wdASurJ*@MX_~a2IB7sVc0J@o4lddlT3z&eZyt;M_{2+@%tYCDeeSNH@^u(& z*fmSeDvFo~eo=?fa}rcQ~Ck4xYJQRiuztoT#9|z+K5l zES-_Zx4cfF+=tpEGDBX0)9NtSpEI!ZwtiQ|07tv$VoSQFA?;(d&edy8DuK0nloDzp z>#sR%l-T{Jz=IYxMIIaVR4?Sm3UTnHbJCLzd%b2>UPL7~6X8E|x$GCM?0q@z-3ztL z4q9(TybVFf^+D_fR(%t<7dnkfwRD#6<>J00g-Yf_%f=*aBH}X{%9N(}e&g=8WHz2V zC3K#hH)(dp>!RD8CRaZ-zV}_9v^0)p0m4jo;nEHoXpT-XQ@H z68~oZjD*U}2mxZ&VMeq5=NDS7gR?}Suk;?dRK&s8!Yp^BMZiOl{xk!V@Gu4d0hdN_ zmQApx?{WQ71C`Fq^>aDl^K-cr5u0k)^>JM@DeH#S`8K*zP9%(-b z7;fYtA-F+ewU`l{-tIH+_v`9e71h^~9Plkb%*bJeU@N}WkG*N!(7cN*tGFMEYr=H< zZT*U%zfdoh8%5L>9A9ewGM#1{^ds-yXtIyN8nd3w)P2WR+JU{>a7phEyMV_royGE)!SK#E~|i*NSu38B)C~iB{G{L%DEzuWiP-g zAU>^?%1Z|DNZ~fTtrf4;ac|W#;HR)=rS$)X!>$rea0i!4fd# zdEV#YQNktVWl$J!yqUyZ`fO6kF2*)Fktt>pO^XNQg&33|S0k*8^LY1Rc6!d|Bk`;E z>ov?=z-rTmv>QH7xH%gC`q$6+unSWaMj83Lx3j<4xNA0D@Ay3!eU@6hGG=ciaWdS8 zghKhoVJC+Ea@@IXmWh%%j|oTFnVhxe@-6xdGK(yKAO>vOIASP(w}nD^e|+rR!2`wZ z{acM*ae=a%V+_)tR4U1Mwvto|^PzTyzQW=>ksa&?~zNQ<_3# zfaaosmLrQwHSuBlQz>a9WNdioe4&%4_$jV6)>DW4K#xifVdTD)6zOAz^MaoYm)rQ9 zYJZljr(ZG0q%c>q&Y_kob+osj)nWxV!41U~6Xcd91?G+24v6rMqwzGjN26bc0S$lV z(|Ph$lEt*)Az-Nqnbr~^ z2=oL|iiyTUJWcinFTMHhR#|19UdX6x!MZl8L8M`arHu%R-QZssuqG9E-z$!03E z1Cu6<*>nzoxQwuo1?cqF9GVXjrhYP?qBRa_g}Pw15Ij zGv~b3n;l>h_g8w&SZ_f+YU(Zne~>&YR2dIc{){7U-caQrM~I}GY5eL^(=elQ^x_Qu zcD4*Fz9q$vkC)iTgG(y_WTmH{=K(fcC|^Hyv~r z*#L_ziydA_uP@dS@D`SQhA}WN__3OHx&F5Ugc#JJiV6yIZ)xsp)*u^{yCgOkP>_jW zR7Zw_Z<&y4<BAuhbc9G@6kf);{S>@Fh=n*U z>=}LEd0xWGl80o7rvebo`DQ<7mFw&sGz?+swHx~0jMj@Q-L1$A<{|oLCw_UuT$Pw2 zCMx2bmNF4Z(k%=iSo6?JMN{?&^15mQCU! z(EPEa$d64bUQDkMNNiIj#6v1R@mtSc(977k6o%{$r_<`y_O0KMZ)#qDaQ>RVpPn8WV+n)}<&*B=oYc zy-O8sO4VezFpgT2i=n$nNQ9wz7D*(vFK*~Oy2YTdjYJGWC6E+DPz&jJZwP2YQ6hg| zS>#UcqvC&UK_ivz)TBmID#iDn=Oa)`6T5+33XI}y5^_A_>&fI~j z5bX<0Qd%j(f1fpd=9h^Z7{=(}=WQO`WE>K*UXt6yq$kN&+gBjd^99C8uO({WF_GAj znZ~C32g#xMHHd7qn%>o%U!EmOH7Tr$C8wauB5^u~2)Sn>awL>6sE(EdYWdp~Jc)#- zFtaS-G}GfrCs36V+LaSS^y*BdB?32kz8%UbQ;UUix=Q4Tn(&W@iS2yvo&7Zc*Kipu z@^vpl&CC`cS`jgGM$-qhtzb>LaR|rP{#W)TTt^b0Glz*h&tcffeu@rOtDJ*VwhGS0 z6v&*8-x;DsosFYbUs&f0I3<1n4vu&9=8^l8*6QNCqofO9 zlHL?5#p>|u^SED|#G8Di!l6WPEJ~#_OxVIy9aVI%m8GWXElDe-Kjmv|og!zNv~aR; zHr_sWF%-dKIepX7s^!zv(gTluO`+iDp@P_3j#E)-}Y9_3A4uS+-g4vY%O zTL>Y5O%y>2=G`a;blh}4S9$!K{nBZ|a)_}=D60-nrjkkKkojmRNgzgA@Y*J|i52CDh&FNRzg;@uroOqmlz;C zH0jn#XUIZlN)P}*P=UWESt%9gt#KbYsORwC*p5igQ@VSD5#wQh(%|1|Z`5b?Op)tN zi~Z=4mY?=L&#E`o|9-F^mucXeeYp&{&JDQ{uMlJb8QZbcS$!;BwYDlkKFjwLO`v0+ z@%JHPd}AM|O$uyTPJEm;856QimX&{>hM{G^JqVR1e^MBIWMsNx%VJOWCX4kqj+O5l zu$K`KPEN}m68JLJ@;||kQP_bzh=5OaP3#gr8dLUYl%*TbQQpBt3L+zcfN61@xkXNq zO6`cy&%M;)OB?O>9EHa(bOwjmcpwXlVmbvWSX-Qh*z0Sv02XB?b$agN-+TM&5$V@t zj?08mtB~+fV=txf)Yd|>pM8X1MtquiL*JdioncRjNQTGGDK1b>kLT0>n7Qv1h*Uc_ zEG^U!_C`5?*du4a)UA?-iHS!&7m_0AR*DWk(2zIK0Z<& zXQj@`S7ZLx9U#4}+pVb%gVYhu>y^Bins$JDXZ@pL87JAEL( zks=M7tCsa?RLD;2c*vS4j(may(D(@>g=lY1B=MF_P=SJ-}H>x!R^qt2Bk?FX#&R%+3 zK{Ll8x((e<%K*3xZnh?2-;aPU(DMEeV;oJc^0eU~znlN7 zW*aK+N%moz1=NtO#)5+zL@u!+U+(XUV%7i;2M@)|*>ZPlHK6085Q2Dwt7!JEN~AP+ z^XqBO*OS z<7Qk)${LsRT;+~ewa3Hh+TqOmo=cmuK`I^g|9`=i3q3FoXm%&&*KE*VfCw}o?D+wN zQ|mz}J9o|{g+-O)?t~_<plr$GQN>!>;liNerw3Fd9L@|1~qLgTC6&OHf7=#&%hB`MKHPv|Ms zaAUO<$c2&sga#hGOzhv?YEJ@(lOoTjkX}&b519J|Cit1;c(j!`L7cAX-7MI#rQU$@ z)HE};jtm)Ec7Q?u8gihu#kKVpN!Hk)7PkPSXaj45Qiu+M%o75TN6w?)M=nRooV-HZ z?%cJ zX3)UMW@Z8?gPS`QQ{-wRA2h+w3G=`yKu3y+>oP8Nb^JOlSInAaL5M~nQ;!{t9|S<@ z@B!&T_qF>9isKDZg84lu)Nb%F0muZYj>Y8Uc)}M1gK0FoEVjsAG>v$V9&32g9^M!x zH@cjJv&K*}E;=__j8BaqGEjh zzuNUGSX#DQro{2)FU9~^f=0NW9ux>co%#0hzd&x6e>i&?e+awJ+Eku7^K%yFw<9m4v5XuHvTsnzMHs4D$fRb zC4<55qX{D{j>8^iqVFjsq&@ASr8NU*^%U_M8(ZzcMIvq!bX}InD`Z)RIef8o#ziDM zTJD92r@&iJ*vQI72?qEaJ(XuBml^zLcKAG_rRIYYBT4`&sM$Sk5&lv46c*{;&uZwx z0yQ~`0EkI1TIb#5@GQu5OKe%E?yNpGcY)@gXRvrs;7jsnH+O7NQ~p0)A<@{E5qeKU z_~3IZ$f5%Z*t{=tEg&0VojB z_}?eLsOx=C{s>@ArlP4UK1%9l9xQSlZ_#EcG7{)d7BqR%t~L_sUfX;_^8ye7b2zwT z2ydcTuBetYz}xZz7;PYGA~xnXHn9{1huGuvR^Q6qu>u$EEr;pavfwCeZkw}iookoq798p(0QEkqKUpG&3 z{mEHjxQ7*fO|5HY4X&Mmgi`3n>ls$hrngHd9!VSz@j z;;zADSV1ER##?@KoKe8<5A9Qw;~~t07$B@!H}`u?ZU%wn198T01CT^JyY49OqP&vVK426um9 z;j3`(takCu6{Zu>b2_k3f**h8>RphEc3jeO#_ai|f%#mhFrME-+OAf+&!{lZP^woTMm(7$5@?=Pn=a%+78% zb%^ssqv zvZtG)z5#-~MU`3p>q$II+KZhNg2z^U^F+P;;qC?(ukCPYiL-R@DE^9(+GUSOK#i+P zVM>TxqJkRvtdWSOsMnLSRac^v8H4Tx`IKmNH|{XloeOPOvE|bgVO@9J(W{{aj%$>N(HY zHqzDY+Xp9my$SIUTJsM3&7DL>9o|2&;L;_)>8D6- z3NT1~KY_&Fc{AV~?807QIab%J?n=caVK6fZnKBhREhq3%TT5|8Tt4)6 zQXh2lvc(rI>Bqc7>=>ZlzW$Gz`&@U-mYkjo@h~R`pfGEVpA(fKI}K*)sq!{Bp{-Mm z92|&?Xd-2QFiXY~M5#c*6ARix1fW!iRft34{!78kq>;gpWhbxXX{rZ1QItP(H#T6x z|7>JTkZ-q=nH`)P>6c~iKyi<|=JY2u$^=vquJ6dpo*3Lq$G zH4dDHH&xFP`^^MJL7B-}a!`?qY#oJepIaNR;*RX~@uqIYj+FgvHi=pQ8I(lAp&=0h z5;O7H3y0Bez5X4nyvm0w({T|V$NbjhtnRSZmf7~Y*YD07;DEvhGzcJw0unwaP(>6B zTD~OC#WTVOEZDFnd{_!oU}(aN#bviG#~KBy%nnVZrf@S@`*cbkG+nwPHdg3zE0Iev zW~Dgp;UERoAgt4p%13nx0Nd8=5XO*iJKD5eH-vgE@lM#n3>nOi7Yfm8@|g_(Nd7)X z|D=D*G?0vsz>vj#`y=$XHAF&0`XWr>WIM+53@M+7i7XbO3IXU-(qc?7Q2JOKTrjX{ zK@4u*7C5xh66NK4@JCv`XdkmU6j& zc~agc({0B?bNHIGvA(H&&V+YghHrg|n{~R)D6zriloVAITV&y!*C0-`0`6h`0-X>K zy^m23bK)S%AwYq}e6A>>wq9I6Ptn^`WXzwQ0$Yu%EN6|`o|}W_Ty*;Rlb(nJ(+`bo zPw3vs?;iU9a;r*dS(rUxieENa0@>)i=ZJp`y`f+z7f*d{0E%_~!w*CdIkT*UC?YCSDpeAtzZmsA>Yv06BA1A0FS$=VX|sQPA1s{O)S;rL zoOGZQsoeQZ_psgem_RdVCdS1`S&Fd=66e^U?OK3~08J#)z(0wgIn!Q_Ea$J!VjAb% z_PkKvZ#?K5nfI+nWuzva&5vi->bU;=&kf%!uX>v^f($X4`+b>oae5?FYF0H9Fj4I) z9{$iq_WunZ?RA7i%rLMTj877#*orY;5v;8unh09e0DoHmNDl3x`#fHgwB+yplzbvM zIPV2H+NWLf7_tZda$5bR8r}6;}4>(1pz=+r#vXC zQCO?!5X5}6;BZzWX58uWjOyJp|cB}GlMp(LQ**4zC;pkQEbThtIGJQY0mB7 z%4iVn!wP@~48~nV50~Q?jWqa3i(p{v_rAqj$wYn+3BT#5RPHfTD}A?8p2d1M4c`b3 z-6DGpyF3zMFB!QKn0@nTQFL< z4g`YdZRNr#N>Y^c>S$I0!4!KXBL5;QLsLtGGnNDT>x_Yz|!_AWV`b z#|!51{QCPPg0iy#hILN1Hg+ObxQ0hd$zLj(1FXV_SIwtrnHwE-)Wd47PCh@k`gEY= z2?!|IMw<-vYO1@j1~e!z*|Fgb&?|ZD!+7;PsoZzI-K`Ih5_40wPYtV4MdqJ#MA&!c zoQXQE!T1sO8$EHFw>>4gEI5{U83dOi3>LT3OT)}-<=|WrN-R`xEjOC^Vf-{{K&jXs zWm7Wh;%flb-Z+j?pUTRT6XA)o2T-2eEtZ3=nBX!dB@#D4mkdG9dGrHdRDlX;-~_-5 z#lXoQTg=j{%ZXlGm_*J4Co3wI@JpR4u?T6|V=A-eBmApD{rqm_yuf8)FF`qSt7FqWH;s~IM0Hwa4gcNJf;}sXK>dP7&W6CTj~Vg-Dj}h>ZHjY z;HhUO$5$X7c5}B!-l@W_uQqL!mRWOwgpZ3AAjji4y3JtIpN4)+a=`sdGooIv-#O<- z{Zi@a5VdO3LWQyVbMQw6UVT3DrTv26z0_T?oWG-CdWrym^%W^Q7QJz$`EccZz%{CB zHJ>ApQ4}afQ3wW}*L@I0+47A6Y$yctr0i+3$s_z^uzITc6al`*b-NeAQKk?ysGb1J z%z+zwgx{GM!=*A9=7}DrznHQhffs;bkHY$*5IoWFkPCExWnefPJ4-SJ|)HkqxV4tGe4e}Je zrL{3ngDYCZiL4i&uE(+D^G^MmCtX2fKwhywrHUB-iNculq^J`op58jV&Vmk$G|xw3 z2ht9pJGP|CKi%@KfRfd)$Ro{@xDD^9cgTt$!3*KS=% z1fcrJM})&QY@YymC}Ec>)z{s!<7NnSH%YGK6LFVPykB-I>b;4ASi=7TdQ;3Xm{AaN@CtUHXQ|a zD|yqebCp@$YV_2u&~HwJhQJl5Z*tR?kCKIYv>iYL0%S}bGbpu)LzG`b0m$V9)I}&6 zv$r!zlK})taCOPy>h>c&vZ(HOdo5PYt3&VZi24aof zrT{&AJ!>iy!-f|Qg~;Ux3Jk8FnT=+)?D*;_rVRrSsVHMYlvNc&Orol)sHy^`R4Rli z7$p@4;pv#-IzJOzkq#cx5T?P15<%UmGshF{7=uw253H!ccjzjYzDT?Mp}AdcH9Pglmmh4er|URJgmp^CCZ7%iP<3qJCW81Ro1*`m)oiJxFFneCTQVb8ziiazGc#7Nps zs(%2M^)Hk&uW!06L?99ial&70?zI`iHPT``vUB&LMg)|Qe_8_;IPwRE_|3cpZYB~P z7xDcE`6`V$RUXGHFB#bQE8c7_0nk+0alVN_Ru~w_J+`at=IKFwg{T!ksS_p>^spcO z{rOjyq*W^0sMK;N7WuThD5yjbfj8-z_#0DS#hsJ2pH6iAFCXgbmDcR1jT0iOs;1Zd zV>a2oMAxR2m4Cr4)T)QBrWY2Ut=atiNA7z@SFKYt@m&@vBkvJx};4h)$1MR5Knk4%FE68a6bpHGL$UikKK#~O2 z-hGrCM}&EIGgp|ly_sG5oN4Xi`TL8%#FZ*an7r7o(b@lW@%Gd!sDBHLF{ae})76La0m;Nk!Vi>n2L8ZF({T+Tv zvLX}2vAc`H`ct|IcM0GP__ASZRwCSu5=W7>BGhGwZQOZ`GV5zP4>7!T#eo7djt?hK zt*0>^h=|kQ99|;EsnMWvBU$*a*cfqI%zUklv!^6_6avecfn-#FPdw~r?n+uh(fNiZHpzVbjx zWS`sov3v8q$05Y@HgeByeGop)x}8x-a=y?|F+AmQv(Nk&F8f=XR1nABTH!Z$C1GTr z&YX;U&mINzhJo|2lXl6iy4;2gM_f+nbsf(c6EK5!)8_{Z-ltJG#yQ>Zd)M4sPlWgZ zzSGUS!r#Wh=;;oH-sFWpuZfBgzLtvo-~Km~T>eyPi%b-EVb&_Bs)EK;0%Y-s9d1wh zw^$S@?+yQSxnugipdiIr&6rc0MQe_QW(|t~%x?HVi`)y(cjJkl)c*=qqk<=(Lp-FM znKEq8n3K<^0-bZ#?mevh|5P!~;4m^sGwMYmf=ss5nL#eAi@?c4m+>T&WUW~o9t}W! zILEWIcHyH4Bk#|dag!3~*Xi9xN46d+*$*#U$EVc1=XAonTn6AzgIg@P8H9-2I=cdgHCm z@0{zC%f$qP2Cd7n7(6d3XTt&gJyc*}9el6lr{0I=f)Ga=Dd>9mD_PC&oz7omgWlZo z+botwCV9Hh!~jeuP91}o%EFo7mm6p@xX?w!X9ercaQ)NKwOTGOGA?Bpl*};MF7W=Y z@X|HJR93WeN(+gI&egBcg^geNQs4AGTSoDz>QRJbWZVu=hcrwqMjeMMChRY(@CtgxA{ma|lL|*(*rad5y0z>c7W|_T)2!JkR|& zI+~4X`d)EY)zL_*W>S7E_6-%4mDP7}2qvL~%MU+i6sRS8!Ui_#F8Sn?;GAd@Ne zBc+A6VC~$2w*{u#q)%Fy68aCf{tmP^z2;Qz1mwy?{7qrpuD80ps$^ldYj`k+y|wIV z=yVU4XSpkDa6CQQ9q%xuJ{jfi`wT(O=5uYk7Ghq+1Ac`{Q+?jodALKg-wX?UESZ*y zigp4A6hg1w1Rv^jyMxzaF-Gy*Lq5!M{#_ABjzv|PtY2;F^0o$jC|cbQce#B8I8X?lm^zdst;b8Jd}xI=dqo+d)n6OFO6>N}9TOg-cF-kJ z3SmV<^o5Ky@UgsR8T=WW1{U8!=5PQI(?NhxY0~3MUGN$2d>NU2V%Usx?VwwIGRmazaD9-qriKjSYZ8fQxjOAVRBCArH5-Cph`tHM>yJ)e4v@P8P& zdE0F(D-?9J;Vk!&pXHuMW%2c0zONpAF>qG~`fB$gKwzsA3zb#B*++waBbMUY=%`M> z4I({33p_#KS$1uCh?+yz)pdOG%P< z*2Zn=MhsD4`_oaZvJgOv@)3hm#fm8M9{1Nwa3nNwa3;Lit+0ufL|&N5M$h$vUe!y1lgb%6MA;c-sQz zjk~@^nv?iJXQ5Z>@E48!pS{BU{UE9TC=)pW0xAMzW($g)_xyaxY&T*{xk0itZiL}h z@M0OU+Hn<}H5<-rfoK}Zj4EWOk42G!5c}|4)7`6vm}Uqna9~u@ik?fgd>3@hn>K9O zvu4T(6DOgSjSxRb8Udslfa*b@RG}20K%r8FN~)Y?O5pu4cUM>q`wj#!Nj1akV;$t4 zL!Q~>=&{p5>S*$~-U2d&Q7rgKPBIF4x)-?{n~{!_U4mu!M9^zjWX%Z@@=I>+tG1N8 z`1L<4me$t&M4t+W2X}OW^6?BCC0&qrBp-|pdjf2mjAMR)0lr1h>5zlhXYnQF7F@tS zud!_phmSl7#l=BK{GrV7)7M*vs(u6@M^li;&rhc3YQ$-z$v(DZ&9%_-NbYH39>tSI)tii{! z2Y*2|hdJW*0DdmB>oEL_?;5_#+~yyFuyYkoJ6{Gi4j|US?hG+Zu&k<-v&i}#)c-Ts zcCbFbwAyo%D0%+K3HtM%-oAhE+pWP&ot)t1sq)YtX43lnT3djjy(73IzFB*IKKpa2 zmbk_QCOJ98Judoh+9fUN)wqZTzTC}33HQ4hC?J~9Il|<@R(@@BD%68YA}&9-R{@n5nZL%Pj};F{LD{$jiBjosM%w5Wc#(JfFAsQm!2%>oovD+tb^SKKZ z`kH#KMFe7^EWq`^`Uj?(Q+c`CcErcqrq}YqyTFOM;PVzQx^{hK=9;jn^H5Yf(|A1K zpIkS=gwEVf*v%yI$NXSVkqRfVnO6G4uTJr6n6Y_0W%yYYWxrc zu?573ZHaDxltYL_XP!$DU!ztUTP`Eik*?N5MoGmdjUe&9@*qUTVg}TYtDT}p!xtoG za4^M?CZ!tLL?yC0AYY=;FuCZg2xe479TgmOP>5{UBfpu3QwwlMcJrOw^K9*2AZl^& z5F*QF=?gCu5=XRw>l_fD(v#WzE>uB4hP5b*kX`a6FHLoO`2KbqPMQNQ*C*Cy#gKO@ z%9mA1t#jBvTsxcwJi$5E0b5ws~JBAvsLcV)&zdJy{#8whn zi+{WgY8V}AiGWP3-JDt+?~QnvvNeI%Ba{t)YvgTVP!Tu}!u!fI=_VAga@`=p(4e%_ zvEZG?>ox7gSMF;CUiEubT8>?{yV!roPS0K-$O7dN6pNA=BC{{O@JE1+!6t&O<)OAd zU3oK0h1dk}Qqo2LWM10i>=o6B%de~FkLl>7DOuK~A~1v2PAkQ%Z4gE`qv6sb?5Cqhg@We%2j)x5;?Q4vvqC}67PTbmmI%o%9` zadhIBX00QZwzC39)sb!6vj%w&19kl}t8Vc?aXC&WNwLfGh@E5_Z=xu=Q^y{{J>y6) z$F2jN#zIhE*U~W^=*KJAXpAfwa~gLv6xoc`RPnoxX+*IA#3DoqGXT1f&U;cx5-hxB zxgX=t`d%kmy|2 zXAzdSoG(Px+z!4Z_RB4YDA%1c_rP^xUe8UGCL_>Awb_Wrl}$jjb! z$neB%Qa-kRfbmKF@fVI#E%sdd=Rb?LpBI#>6eCjA&;5O{#aGf0x+~s z0Pb=&^Ss&Nx&z@kHfBw_VVmR-X86b5UZ=e6f;QTNXHlW7=WH*}*|?iz*&Se+B8n&= zSpkHP!EN4wdkOx&sHsaVB!_otl*Zqg_B9z=D6oSF0wS`y+wrG$7@*uIPg2YoA4N+BJ<}sl& zEGt(C!O3`VEU*_F+6yeWSr4 zns2hZX50Jr4-)-^9H?uD5zO>#4(9L47mXMbtk+$prVhVZu*wc3^xWf=9)vvhh;`9N z)W*`{11oRGx#ND#k7tsux)97TMz$nSRl*wH(%`SqQSrh(9ZU6o5zYxB4^c@&*_fsip5yR;Vfa7F_wH3L;!?zMyYBAkZ%(E%M4ytH5wVq#2) zS1`4pi#@-|4_&7azM4kTZ_*r^?rdVY^SPBd1BaO#@3_g&;c#bo-L9&qB3b#}h#w-$ ztQ3KR4{v&fRuHj)gGV#gz__stiVC19r65EIP?SVKh)8Fp0W&}8#B5i3Wl4T8&)}uA z+wFT>n%Fgv!c=K0RRYOUAd4CVs--#@R}?^bhGYydDES!k|HYETsP%iwYUwtHT;_oG zVeu%nEoE?RItwmaUB&kM7aWd{xCCy(oF>wpT>8)r(=obg9MLt=0q2&!av{BjEb3aJ zri8*W{_Sph#kqcSmH519D#2onfGyZA2#uJS&H~?th&9!eH;Re?1}}tfgvJszR+grY zw>oyBeER_#sK9nK9*-~{$YhO;_ScZz@%i0hZ!%^cvRK^FR0Xg+u>eUx-=PSB%>wKq zXy4+sY?Gv!7sc)7)i%~FY+1!dw*ZL%hFe!8GO9%4Fy6R?Nf0-tJ4mdfOvckRleF*8 zZh2^+fld@Bf>Cq}BLrgsiZGHOU=2&heQW10;JpND*5qD1u3JU)mB(cy*3j1q_6tm5 zXb@vj>O3Dth`r2g=#yP++fyTHx2A$o4M5bcw5nPxHZ2-zt)>LM?vyR;=7wO3re->~ zngP9agXysI&UYQK;#n_o97}T|8-metbU|VS%L%;_>g)@pp(O{bXpsE~;r`1{qpu#G z7WvquA@$&Txtdn=V35lC|DLxpYOCR=eFj*SW|{PrgDqEaeVW>0DbArK81n>Nfw}Fn9Kqp)-2u##Fm4drVhqp_#0`I zW(fG-w1x1x@8Q^C%Fg4kW(5V8JGBMMzTg?F?cBGN_CjM0?ZNXop z_1cUSaKn^xVBcTv^{NvkL>?0AS<+Er^6wa*mwTYTZ;hhk`<=X*TM`re?G$(3fe6uw z7j-D3=d0_NrtF5zn-0p8@u6&syg$XqMYHk9R%bd%N_qrYj?*0}}o;XoZv3CW_ z9YGTXWj$KWOejwUV61az8Ui%~1pWs{128FoglZ>0%*>A_Y-Jim^peMHEqDtWi`^ zMT#oLQDTasixowRFYNh}y>EhShRAG&$Yvo7vT_i#`6L-7GJ-NrmpEq(;hZz(&TYd7 z7GyGIdK#kFrqm^_Rm(P}sG+rl&olxuO!V~hUbY`ZIY9VyVHMI4Lsw$|q zNvVBI_nDBzmQ3hfGv%CWimEM=Uo6(nhGt^m!#j3mpE*@URT*AiJ!a2SGcje*&fS@3 z&Q(!WMU0a(pB(m?nTuu_+p|77%Bm`;wn?8g7-y`^F=h#!F3%gl^k1{oKb6<gG_9N%sApjmBs7 zAL=3iq*5uN7x)MFFq-7D++4UZGTpD@RB;CQSCNTxSbPEjctv>P0UECNqZ6e>Nt~W6 zj>!#ZXW0!I3ID%V%MCBD5UyRzge|A%{0L?kM33X~{yuCEPmB9m`MbZ%B{j+!|J7Z+ zoPyc!(1r;Kh3g>cN8N@>QYA!$^+d4Nh>lk1F`iTlaup#V%?L9rKiFnh6huvY)Wg?8 z^Y-|M;%qZkhd?y9$j)5X!LhpM9SWlIWjBlNOzuQMhzM2!HfiR1~;+YK!lAz zeOsXU&54h}UT#>Q#T~Yo(Ad6dq(y8v-`;5r)s7q&NOWRrf98Z*bKet(N zQ$R4-SCU#4l+&$gQGD(juM3m>?H?oC?Q?e0L;sfXt5xv=mJZbfO0qz@=)p*(CF=<} z>{9#JcLY`Oas58xzJtZ^FE7bsvFC6C#iN*DYkY0p9+y8KMT@Hz!IhM|de~t!+O|&& z6k&)M8}$Zq`^z=N_A`wK3y@u&$4n(&_cBlX_4QbX=fz~Z&_1RXPu@G~`q_ORDz~;5 z6RXtwbg|#A{GQl{hy>v$%OF|gyg)o#{S)KId7(z`-58~9Zg;xe7k_?${a$Z1-@|)7 z62946WhVg^C}emUlw^%->3PwAVU#`VB*>FeEa@~ z(cg6Z55>2Qx+MP`(75Sb>yNzcIzk^5<2c{f9~tSlGA#TQ9qm#gQwC4I50qG1z9iH9 zzrOD=am}ag3?#(p=O-HvN<^B^7EO_^InIR+o-_Bd>=Q{7Hz2! zYg+AosNA}&b{LngR6!01+qlHg{FqC2&%nrJK&T?p+9fxB3pdikP0yVJ=Ag{!hRjTzHS-ffMW`C$ION>$s8V8dj!)XmW)W#%!v8e; zG)Z~{ZMLZHfNoa{FHPY?OTXUj_TVh#Sx5j*O$0%zg(8Yngf6;(L@0%C4_YUDjHiEv zR&Ml#9XIZ)w3lyWwWV;jGWBaV;>t^?BA|W!*JiqEm^esC1? zZalHLj7Yh?leD`Lr&skAyO{>&-?VC;Z&k5p~Oya)#!~4AM z73+^k?uW&1qr{yduhDVxIQ|-{f#%iz2B6;tnv~L%%#`7ovGBFiK(boBEzRxkcxq_} z`vrD`QpeaYx{YjQ6DDA041xPZl3&2pfV0zYjPo7Y!%2PBKney-T`;PpW9gJcmX4RV zo4mGy_C-h8Fuas8=CrvAyLHN%N?bu3ws4FEat9ACM`7m6iEV~j7CsWSNO(#H4<+hM zbHnM#-R#;-m@L10-xyARcShQiHfW^xeO>-b26dYJ7;5w*i4OVVl_?P%6i*Csx13Uc z1KOoJct!ocW3~EYktvZA90Z`}ClIEL6heD6nB<6;D}$@zcykZ85v7!xdDztH4>-#K zQ)_<5e~34kqHQ*BY0Mg1KlB7W51>F&$FU#C5!(?BnGyTfQCU(QD3UW;0MQ;;eqdm6 zuuD8@9svg=aLq4;s1n~!MEU^U3Kl;DYMvGbJaPZ&3^@!iNMP3Z{a%xcW2L$dVFAV= zxofS(58XR%xMnHe2)}|g?KF|?DFD`SH|XGa5bJ&5Z4fQT^~{GN#O@is7W`Q!2HNCSfuJE8=qtB z{gvsrYuLC`hBdBxoaZ}tUO5pGKnr*~BrWwBS)0_>e6|Ne$xn-wH}?PUkHdYxv-**2 z<5GM?!bS3CGXW$Z2gciv6mxgJCmeC;7D8YRRW1^pkiYQLkC>0;k(v?+JRaI40MO9T*RaI42+#NWCT96{Ot;Q~p!h4r-X{mB9x+GU9n_Sp* zI{3@0CioY!ATU@j89id08jTKT7)(0&RJGE&^`s5ka}Fvp6a~Oru{YXubia0|LFsLu zebw}xC5=GoCzz^B5+VXxr3ix%s_C9N@c3FvdiL0pe%o zU@EoWqaaE5*JJiGzBP}&@vYfa@t>3AW(rSgGIc=^QALu{!bOPHP?XS$%4n)9qV-wk zi<6E!JHn6y*}pxs4_zF^bB-GhvJ??uvyl(Pk#L=Pp zO=L^3@{Kf6NaE)7)w^&v`ol}Km=E+l7ee<%(K9*kMm_F(oaZ~_L`jD=E5Zdd6Y|)x z-+0?U-rDd`-SN=<PTpG3(eXXs0typAZ zMn%I6Z;OTPa@A`M%nVy(RxLEuvMqFKo8@acI5@blCJq?Uh8S96HH8K(RTpt_TC5yg zTwEMnKqk0m)DlUq?1=2-s|00{q1NX)_=WwyPupz8z#|Xvs@|k_IjYX9YRev?;G#cR z{=XWBc|s5Hz@cH24H^+Vzo@G4a`UsCmX2I-I6^2&1|0kjXqjd1wzSqTbX=RRd;_79 z&&1+}lDG(!XfZ`5AZCVS3G&8l0SYjLE@`3?Km_JdiZX#rLXHcjuE%N^Q!@0w;f>w= zF$D5}N@c637~dgyEIUgV_dO&@U&0rWVmi*(7shc^>CnDo4JShcRe@j`grFp*a_b79 z;g)6CV|+{`w~_qWJkGX^3c9#Aa*9OJg{qPTsc5Fk&nrJ`v--U34lLZAhjd7l&%fK_ zX){lc=}5vLqxddkT{M!-o+lykdJt61=F^p~Dh&ob)=wL*3Vq;ohVWNv4F<9aBSKvR zj{xTPph8qWX)pEQDMW!J&RPP?G~C*rYSv1d@Z`$%LEq5hoy}}Ct%dF5-gbk7^%Bg7 zSbEqrybi+8Pi%G!!fyo6>-Xj82&vtkX93)kAM2L25Or1Q9bh`85#~3Tyd9z+2w^O zhG)UZ)!YSY2Z?Pph|HZkit%N{mOPPC#RYaIS_j<6LssEqao^|H2d92sZt&%(Ng$&+ z;KFEImlOdWC?X;w1D0_|7W8$(rowA|Zmo^d!+6|;!rio(FXWkG@_vz1hcD^+A*VY3 zZBM$b9*k|BAjhcaz9$$U+I@&wW*$Ho!fx8P zIQ(F?r0eBH6pUs!KM&Ko?|5AAQ{@x#x~zuEB7EBNVpvLP zI~I|LH#3&b-mtM@+|?>EikYv^od1-mreh3|Y+=2qQ0$}P(Q~2? z719W@D2JuTp5jaDN8Ax=xzgk1d%HVh)5#(69oPLi7}WNbj_~^S_5qdTZIQMGyhWs7 zDEwq*Hqck2n4Dymo7vZTTJB5@kIUj)l6`N(==eeSJ=XWR>OOMX*ihQ`1uUWzSy?G| z;?Z(1i^MLy(M(1u5CEGTX%(=8ftjm>u;uMQTg9`~jAcTw5YODW##>wX|4W{;aq`s=+ZX}$cvo!w;n zRe&%vL)uY@S(hgPj`QKxvU)5U!Sqyhpu0(v(UrA1zJ2s*(O(TY*d|8&$k@#ZRNe%4 z#9gAK&}VdXB_diCGgl5s`!FIxFCu&#JpV5&dA33A-hyk4I&Qn#G(d?c zkcLA@2a$GLn4^Le1B;R2^3;e(|54Szfh((^)qKwDo3MqF5f|xpLME(Kyb&|y$|e>f zNaPhzjyO_|%$SxlJ#hVW5`;W%F}4^N)D>a{+D32&paN*X7D>zx0FO*qfq=)VEb&3W z#?2xWLqP}_q0^ySZHEk3e(Y}}=Sa3aY6k?kj6`AbLUwKh(1=l)F}RDK5|)Vj5OvW>r;HRaI40 zRaI40RaI40RaI40Tc~+jkl@&tD3**d3_}pdBeKq5RRl(`Uh9 zNxCW}P0B)KalobBatq!;Xt{*;DTl-`$t24d7r3U==%P4Zf!F(-e#66q^ zch>IZcC%*pamu^80TUk10JZ{1(eRG5MVHO#%bYDm>eYdTRqcirN-(Qm0`-Mn*RyM1 z3=z3=2aj`H_qB@WIqp}z>~qGk&vLQP9@f44gx(vI!8d*m7nI7xW6HUA{+%IA@!Sc& zXa*kqxaNF{zN6gTVq}e|;BL8NM2%Rj{=iFx!WfNxoXc8S>5}OuWhied{8_znCY2L& z5<-v)R8S=Z7zGNzln_8E1r`vXf&oJm37F74Ob!jpTLV4{VWrDIAlT*Cr#6#GJkR2hUF=d3HEl{*P#Q+f zDvFF9suJa4aE6^kSGOl=*KWQD=&9X%AHH57qeMc9;5UXP`lN2Hjp5CE|0x=xsH#ZH z3Z7VPM)Q=%mDc|ct*fgJt`(zqMRbKWrTR%OCU|P}QlU2xm6U|s;dQqz{+XdQp4R6N zMGq(7U)v+x5&CV;506N9(mJY-f|pclt~v6{pqc?!Fu}MavDQHJo!w*4Z$AFoPQcQP zw7S>CZ$lpaOW=;1H)07dt<<;@8hK_!N@Fq6)4Vl~S2{-h@3kaI;Snr^QxN^tB2A;Y z7N<m9ZP zy#{-2P%g<6FpeSXyM7L^5ssn*GCqpySU{m9yTbh7L_da#Qv>*ByDj2yi|op64z9;d zwDD?Cn#(z=4z(z{?P#(m=Tq4GQ3OE|Em&=fNs;2{EKnr4(+!A*W=#9Mt(TkXM4fHA zwUYM90S83^7&R10GlN9}4z`YibUMcQUD_YQ@;UazI$m6mt+}6jN@xgi)I?831rYr> zR<3AepHe&nkbw~j1OWt2Yj@7yK#x_0S5li$;H_cqM35TEedA7NT zm>4*HSO=CoH*)>K?p5#r<`+`EBJY#`uy;W5Yv*rwvml8B?o;%nEmb#2-v%O@f-bvJ z-^;SMLM8dcn81E{2&oECipW*Ui0&D$vRcV_!C}^-@s^C1=o!h6S|{a3kEVg!0txdq z5^k#JSZ4m$Hh#NtdWeuGV5F3k@z-w7!*-O7F`uCP+>K3}QSe5Oc7Afd=GR*7RMTC` zsu?00^e~VDdHt7jZ*PAiZl`lkHOhiV>Vf22H>tdeZ*-^rxikjlU6{gYmsQA%Pu?L) zZDR%f7~IN=^?OGRSu7e1Yeq7l!|ioO*r@3>b?skeqNWP=M0UZmZPSZpvnRO z`Kc{h`#n8xovfSY>Ff+>2mnBUO3hH!voVZ!SQ$=}ZE9q;yx(Po{o-hj?U!17-y0WhynFs7qbDc)2`%tvNrdj5@I3%)`EZ>(?D4Q zfD{D)Jx{~!@(Cx1tluLaAto$dTnDeOu%OXmx>oaIUz^DkBrzkxLd125)-y3r>KHb` zg^EB|H>9Pv{JWgHkcZp>-q<-_YQ5*9|GvN9;lA+nPIiY;sRg3D_5P7L7Gc{ODy;_> z_F%C;MgA5Dvun=>xd`<6^?TmsJWDfNTEi?9^Wwt9k!Nv^hyC)koL@DdzPWCLrA3!2#!1)M3pF1_%e};+Ut}EdtfIPUDN5JE!h;O14 z2ry%i5M(eTT*v6F^5C0!7izdUaMrWa1wYqPkt;<1kI6<`?@xmXX5naech`gXxOZ|4 zDpVgoZ-4@&h*iz7Ini41-#d}2&2zos`1N7kI;a5j&IlOWzlptvJXxkA=Y!!9wn?FWRhw`vDq!sQPgyY9qc3LH@pccyOy&`uL11$V=IP`)f(>F=O(a`Jk)~X3x$a#`` zwDQOMydL_kd((fQTr(OZk~tOyFhzeO;&(fO6sRw@!h+itK$wT0wLr_|9@aMclEEw-pKkZ1uL10Jyg+BSM+9}V<T=UynK|PMury>l6?>-O#R~_%uy>osRJPt0(uD{<@X7?3|mbtA(6&du}p zAb-u<+Z8EVh5(8HP8&9h-p*0DGZj>tH#uE1Er>0UUYl+?c*15I6~*}WI~=%Smx4F| zsrkVnm)e^?f&nFAM{K=r^CM;IZs9M-5GzH@(AqB1QhtWO$fo!%Dd;|nH_UIX%iu2Y zSE^ZaeB>f~)(?^TB8rNTDQlEyrmAE!-iJl!>XRFzII&q+#3$;C4TI~^v*tgsj9Oc` z2&os<+L5g4t>A?=OCeWBUd%FxV8$UziyiERX1)Hj8_cf8$B!CHq~AY^ch7Mmz*ewW zF&mnOnfV!0_c4h)Ou=hvzpNH$HGI$+A*2Jpa0@{}E(Lw;7(P#RfAw~!cfF0qV`L2$Gdt3jddV9#?BrnD=7~hJGKa7ycB{v&lgH0KeDS+GYm?~qlGW2ZU=z^iWyTY$)xh|0m&!41$Aluf#se0i8O_8hYD1~6vHT5JK#YKz#P3qQ_uEHrQ-Ik)wG^$e(+F9irUM8p)2IMq6<3+uyxoo8mv6!4RqoYlZ5AQD@QW2;$!oPIa3Lh%=J|>GzBL^ z(G?eSC!|zr%IQ@zXdfRRA0H{nH=M+DF%ifEnisr`s=w3TWvu%`6A?#4tf0FYoF*6w zU#%o7ks|-*epfPRflmt2|JIZ=EAMy7=8E+<#&~cxTR3lFuC8-Xih@)7D zda|9%GB#E<;u%$AQ2}NWvqeV3F0zbp4rF~;}~eGEh*T>nk3Lom#~L6;wRMA3k@1Z`{+|8s}h7pLdNIK*#7*}+qy)z&BypDvc)$IdU4^#M@{6 zs!%{Q+ySofI#5Fv>3w?6Obb?mxe<4%Z*{0%??ZMtRd@eyb6(|hnCFW3JY)Hs@^AE= zX8}}U9)7$~)r}4vIGDoRyJXM`>gk|hL)CEHX69I^E;Li7s<1n)(+IU24t>=st_GR| zt1BH9jtqUZtGV}JX!Na{D`rGye`Z_D8|Up~Bsw+EsC(9Lyc|L&LIT2ceeOj0A>(^~ zv)>_*)*R#rhoVo)hm;VBmxXRcb3hsksDGipWDV#eWG3Wkso8dtDuRdwsO9syy7!z( zeR#H4zbum+WG3uV*V*y-rAWdGtzeZ^33|_i$>*vjcrqkijkeYn#1>&KAA(kitrKLx zXb)KfLzmUV)ewhdiGY_tz;xpT10io&7ihe*itn0tR?}{TICHC>jRTQ4l&M9m_pH;{ z>Y?tXf~+&V2JsenaVB)-+W?pdH4}l=K{Qc>f2PqpA@!$&x*w?qzib73oZ2%_Un5dhpHJTt_uagMnIWltMM^uQ4?teH9lf(6;tvX0 zz5f3NFjE0KM8gviI!>x3LU2+^$ZyksEAu^*%=7;@s=3bX`f1xsfhpSQxt1xwE1=XZ zddOWvmjnTvgeo$M6cW&cs93#7T8WI7CY5pFAt*~}j+0BYt7$H#lqP8{O5Ng8CDKVL zOVqnbrGRTCWUQBoR+JuqEJ7P3B0~M`Pm?`$n#U)?3CdWg!9UMsE$M9bx2+cE|Byj} z+Pqq*hNkqTA>LUPsX-!y57`F|FYV}&Vi5#r1=zV9>3wqY+WL7VRj?-$}Bb}GFF8BT~w(7z@YV(x;kKIevOPD>Fa0Hvh&xAjpt!7Qi!{i88 z1au*pm=hp96(0pm{s%;SR~jybNl}L9M!Ae4hYJ%J)4e)5;KP3vEiWJpR%WRa!SN?y zA}0#30u+}Dh3M;}+{_jH4As<;Zfll%BjaGULrU43o{g_pVIO}ek@aN$N|*OF{%-Ha zi_ViPPt3h=gOMo8QZ!>9HToXrkFJvTM`^D9o@M{gtyjFOS>ekFnGoX}z9Ez*u0}Hg zNw;4h?_saQMUEvIaOeb7XuG3W+n^4`Cnu2|kY~2fW$G_*vOWOh9aztRKplg(JkI+c zNpNqrdbOzadak60^2nXCenN33M6Isz0QQE0^WF*>1bLJ@(?BmV3?^W0wsJW5sqK7? ze*>f7Qr7FVzqm`6LP~1^kh`RK3Z?^U!cGbGT?c|A%^#+*%T{gs5r#fDxyR#kS;Gyz zVHl{zMs(rw7(Qq>FBUKBKy_3c>hnfI;T@Y@FhaI`%*d7m+1<4#SqznFlOBTdIUbPe z@**@s(_(@9LNtW|IB-C@?JeAmX;{gye*;SDF5CijQ$7F2mp*T;hQ1qycUCUd7f3wI z2f51Ois^>5<+Wh>fu$`m)ovV#c z5gVcA#6h^O%F5N`Q2P@!ehefV8mltl()u0hvCI;|T1KpF>wp%8AO~o?GKm{%SE)tg zsRpQKYiMh^S=jDff<62pRSQVV>h667P)lc4(yFbxrB+h2n)i;wrMN~$ri<8qefMr& z%aWipt$ZIzp4>I=<0jsjBc#a1^9E(XEMf>^utx9)CdSsC8T3=Cw2eq!4UNdbwvHc% z7*Z_$*%70vpqRXh&ZAk$?OQ(wJp0&=Z4&$~@v3p3?YSr3)qUzWJoIu_KS``eky4FP zL{0|NRLsu2I;{g_u9`gIPw7-uQoQ;d9+sGsOltjx9 z2|ZB)Y-dsja?VV8L(g5tXARIA&T?oM0myo->55Uy_XS;9X<#}q9^6O;Tb#+zN ze8xzL5d49|6!lR{Or}PTS;d*cB&#qHb+|HDd&H`(-58s<&(9!vKTFG(zxxz3f4{zp zK%`PE3G@IpcGPwOIO;hvqAiysNZL2VR}4%V;q8$&%~1xZ#IH zN0gc&I4EfdEuxX5Hk!(5)5=gWdNZT{Eei>aX2+UDC|ly5{2j&=Njn0j&m={}VmNLZ zkIaaW_}t}QpEZ-aZRWX%e#aY6k9L_DozDVrCMA!z4S37k2!kSb&0Ir568_54OQNn) zW;g2f?|WXhHQ>&Iq1s5!pp2tdx-X+O<&V$DuOq)fAcTs5XSH~5Ck~OEu~U4+Lus~L z%_>?Ta*$atB-hj=V+k6qeoG(zj9tL&hd=4b4BpLV7u{CN3=&6+JTCzrwP17H8(d(cO2StAw|HdGoE)a>3K zAN?~lqfy_6z@NEW;n7UghQtH$!oWh;+}S+$>aD$hE4zP@!<*z}$i_ZS8Z%_jrZtzh z-afwfEKD|4Sr36O6wL6UgphH!et?nis=m}n1Ki9&zDHj>IcUJ32R`L21rUT3&1oL0(wzk6cX|5ifz}`M?gL=mZF|Czn9ET|weZ|Jd305JGKoI81 z-tGAi_0mZP_CQ26FY@;CL#9vhZFBnY(WVR<;{$7Fl<@fAv_N>pnW4qUU zHYfe3k&{x5Ii!UDU|?objUr!mD8{&~RTrfN?WCf33^NE}f#``GPhye~!c4lfRTV`P zSfZ$^D$7FPfOfbBuIC&g3cYxAT(q4Rr{wW6H!u^;dDN?F#aZ+OhBh`0s408YztCWlMu* zvs)9&LsMr^lQJ`U_}fZfeGT3zKS!A0d!M|A2e(9}!1iSAIq3vtT0zSG;+}3#`e!K7 zh!R}^vU-BdN!f!R6=h^;9Jn$3E z!km2f{k`NM^4_HuFu9q{%%zt*oa$vi49)L=mQNqXHuAnqI`wwUJ=XpJ0bg01pxFaW zc0W#*I0jib9D=gV&N1!9xK$BNF9iVBf1F4Mvc(B ziChl0FuE=BzfA3Bz`|?V=!2u_zJT^(Ub$PH>`mA20DE1>6Vc=DJ$Q0n0#G7CgsC^s zrgF$~B+?)VPfj2o&LA4%SVF=UKSt?vwg3ix5##`R27`WxG5|lwbq4+^(X_@}?%qRe z065Wt%UNoeNd9}&?OUFJ?EM+o^_f^JLHk3^h|cyx;p}c?T1Z2_2P=4ix@~N);4oo( z7yVQ-Yh;EPVY$0GDUmla0LfKf2QOnNBFFH@alSS4ece&O+Y_W&)Bdoo!|%8v^PU#C z5rm6g+vn7kfFnKw2)bRC^Pa0)la%dg71_OabF$y?JJDVm`*WzuOVym7lM4qUx6`L? zKcLLv&Ka46%*bY>p;3%hBMx(~?)$mq2ptcD6O;{phN1V9aqZ7wUF`%3UahN*lfGGj zo32Hc1VkagTjV65tl77$2#bqg5ocdoI<5d-kw@Ms=^?oBbwWugN>YNvh0I1i4fe;1 zlc}@BLd(SDw*A*U0ri6;Op|~low$&m9Ee;?iE#^OyL7?;as0Pq1N5MLbPx4F(nHr5 z65n$zRYUvIWKQ;pI&ha4pC;%dt3|zI%VFbI<*iIJ@2w z?>Z|!Ska%wsN!zi<%ybhx1Gru5Ju<_gdic7=n150LDnZwB~$hK*i;upw-%g&?dX^U+y5VB~-_L$$$H`Dyn=EMJXu;LGgqPqk11og#y02R%zGDM# zwm*VA3UG= ze>boTC-`Ueek>)WzbThe5FcJ2q+f{ zU_7&N&ey9SpY1rW*-6u%hd_b^8Nx<6MCo^h~%m=*gqeLVsol zJDr|ApK*SOCN`4WLrGybk!H~BAWUH@QIz^Z1<}zQZpE=9$GZML9$v49&hl6{{3s#r z|9vM$40Qd6U9vf=?t1NfN z+vcvU5qggS7Qz?(i_%5q#odh5UARNyjEE5O8q2Ch!Wj~uN6!yA56p|&8_(r$FXila z@0pQo#;n!=oc?_`KpSw_#9sB5LfLl8;m~ZiAcgs9R5(600M*HZvu0bmMg;0Ue=KsR zmnykFnc zz+ozF4?=rn>gR0a>mJ@e6_z3PzRyuKCzJU0C`S_Kh+YI!6i;VKHbmJi{4aE>ozf*t z4z%=Nu;f$F$XO+T*rvz?X&pGFr1U<{TZLiwGy4LLxG0o{ zMI_8buu9VpMTc*rKhfWgY%?IXYPbOf{zr7tnkhE2i1T6~#26D4euL>b zBij2-9i~OlgX9$Z8_+{hr&-3ZOjL`D7G67#b2;BB89KoZ~AZ+#l5ocZcZ9G=}^yqO=r&`IP3Tqn? z<8!?C0q<)SPiaSi4VvN!lo2W4UtBa4Hkg8RWI9Yu28${Rswr`%EgW{M)=QZ`y5Z9< zhrG{%PPy1(yx|&eMP+H&LD&qnc#>emTwyzLU+%tq9|1v(h1gG!`Icm^=GE1hc`~_M z`rlJm=v_s`wA^}qFCQ`A01NTzkh3^|-VK5&N>G5hH&}`kSWW8bPi4wN*hNuZfepC} zosgod!auMhN}Ue>?W3ysY&%$u%ldFuFQ2`&T9x( zLeT?qfVu1e3|3tMt*N09>h9F$XGOo^!Yz08b3AbTTHmQdpSqPdotCRip;S<+C{!E(G05c{*8qnrm!Z^bwGj0k`}sZneX&DLWM1c- zL!6D8{;{qayUY2m?cHN@COjJk;OeezTU*<^n1~}6CmuJN+M887DTXkj}?2gr(20jj!b#01M#?#&MvKc zJ!$BMVwa9mIro~svLYURJJ#jH$o)jWdA^}1R(6(@mn6!vzbFkJ;EQ8A>k&`|le?!d z)IE*4ks%@1_$ifIJwTMp8%$k{?XyHnG(uOhecD3l4-$e7i>1N?3q)CxL>fn{9RyUh zXc$oC-g7mU@K~_?id>$r0`b?mOjS z0w&U#u&=5_RIAv*pmRa7S!a87i8k{^fQ;*ou|kdi_N-Vpp1^vp8;V*atLvmkC%rte z;z2-!$x0(I+`T8{BI}Trn{i!Jm^j2IV_B8qCTlrLx7^fr+_GP>&wr`G7}BN z6$g>3lKFKIKOR2?cPhFfU3|^YUYq@*?xZ5Dag5*X7SRg0x_s*HU1?3Y=5??&@Soox znEpu9XHV)nCMqh2gbfL)Ye%Tay;o~ZQf?vYeh;*c9Kxn;9v`gWG}%7FRs*MZeMa|2 z^64|JV|n@dI?8qCEAhsjBsM^!`|L$?NdGv615!U3e+$>Tk1JwK0u6$U(TfMp{w{u79l)#y z|5)qZ-{T$I=1*dN+ir>{h$knr_Csx4Tl}H6)QnHbJ$@rqY+cghtCDqf+XgQ*onMRAfzn-UE0k( zuN~0bLQf7Y&-lLdBoL3h5UZ&tZ?Y^EJGA0Tf{09S9Iag=qm^Ow{>lyFnk}u08mu>- zS;kBY31+E4iQkACT3nPc!X_cA)}+btSQgq0CaH$Maa@HI#tK#W@Hg2vj%CNLY8r-qm zu=Zt~Muj9BVNKMkSvs8KV{EWxdDpzuu?KC>a~eG8#yuGsO% zn-2<4nBbY_cgIi7^ytqb1{A!^6vWfnD7AHX?!Plvz5ZPCXmP_s=O5f^p%YCk3W3%Z zJ$u$r+|{I6r2-FXjrt_+A|b>}Y%VPhx1^I7uQ~AmV9h__0^hIMQ}M*q3tLL5m~4xy z$1WXv5kco|vdp3G919JmnDCiQOP52>c>9t+*Ji@oNZa8kE?mra8+(y1Ss69TC^3K#AN*X zSMHibIV0I%62inkQR!!VSMO`WW65jY*mhZT3?D4cHsYk6aj>v=A=R#WFej^G-a>%cZ;7qx60R>sfwh$tDRDrnZ zGa}KYu=i$pjSa}V`AOxqZ`(yIG`={=|J*|c)OE+HeDb87h!5_{!>Jg37;SuP0(Z_Gx7ktr2aVzjCYyXWg8j5iek|q;z^@VQj=c zspYS3$+(k;7$b`X<_I+?oWbu>MU@x?G5CG=CO-)*!C;b(w5#UURr)>i77n+RQo|L0u+7-L z!NS=&%$z%R@za;<9BbF&JE~2#8!6&jn{Qtlgwj;C{GyI4W}zs2UGqkzX_b=IZi>R7 zC#SwJ`bNe2GajxtO&xjl@-o2U;hl(A+?;k4O1lLtt1{&j8vp_ZtQuM6wh`k~pZ0R; zmg8{zJ{4opydfAS{4axj#OU&-i?@jg#4`Np(Og{tpBXM5zJ%mO%GC5l#g49#g#jiC ziNUSsl;2t!1xAGarm?4)f5qp=)H|Rn&+yekoeU#Q*wwtjv54ujdqjtGT+-!kyrx8| z!V>KGPt`CSp@pKWD|hVb)b~y9+s}B%{?CTTo#KHDHTGc4;iHZ;K+}>)%Q0c49!=1U z@Y%#q`Ga?w?hSTz->_DB)g#w{VEM;5l!&t>{0+7U&s;DjmPXH^()f-bozxhdY`Lpj zW6oC)vc!Jdbmr;H{S37m6|}X-2%>o0;IkYh)dt_&XK|6IBpgKGf#ivG74mUmSn=Kj zaaER>@N9hd)yl{*Bm<);0Ndsz3l6Fp5go6dvQ4H`%kF4*L#S%U$AyaV+v#V0haj?i z%d+LOs#mZtc;H+{wFzU*EcZDw5jwJR*jo9MVJ(}zsO_$)}oEYB{T0y+zS@?Uzh25 zOtmCDcHOx+*$Y5#|0T?f)-Ak=T;3&t8>mA%eYf7ArmVlUh5A{O1e)#22pT7w4 z75`9dRQ@;-PowN~Wv{ryf-X|4a7Da0_01uz30vSl<_7Wk9T-28OkKRcju<;(3bfbb zOxf7N)0(X<5*zJ3T)?FvP3@X-`~rV7;}%Wo92oO7uI(jH?c8oRz)XM*aF2C<)G&ZZ z6g!y8eyt_{1kQpT7S7NNY$)ZmAzuy zJCu#53kUO=7`QpT`5UPgQVU#6q(^2i4{+o0*xFhy1+CIg{WSUo^ z({a}HNG&4sk~x$mCaLIa0VT5OUG!9zJjo}|vzses7eOYO)Rk)|_bd!HSpU3F(L;A= z0L{4pe~CSqu>1pxHu}yxRn4eo&hbr?5)HlA~Wf-SkN%W>Rlv&@sS2avpspav(-((jM;kE1ovfeNCp08%S5Mt2t_i{AFx<6plmV9g9@sk?I(J!8wu%g200pT1q=dzC5;l`@S-mT^a=ZTVi;Q(Rbk_rAHY zJBzl181lID@-m)oTL;sv)Sd49B2?n#L@3X+s*?8^l=@u)Ck@VK3O{vY_{p+_9vZxE zCcm3TP;u;s7g@6yW;xd;ug43l(#LiyI@BTYg}_lrGYnVKFEba6hjw~+5k<>|y^SQp zrty6T$peuSHk)nVe%uWlx25ugkckPy2?M&XQ%;qW?u73!{<@%OTX0~}#0n3~zA!44 zqc)8Hz54qv`9l0tbvw4<3=q);gKOuK?Qj;Ls$D+Wn(2UNsNpmLDJcBQC;1c{L05r-Wo_CMOdqvfA)B{zzS?3cUK^#z8 zB9pWb)iYa+<}bRma&E)0vZ6|}#rY7vTFVQ1%6bsl7NWl!lbbCzo^cfj3RPPse$5eB zv7$yrT+KIMb~?ABz4?g$hVUz0v!z_?mw|eUWnh$jEP0A_v%+w*WdsrmIJBlwMRN$6 zmaLEn{fvm*3K9uHHDW1^1s*$mGLl#YYax4;lMq1#4S&EKr%MU_X(3 zvWUWP0ZKein4xax+9!Wff<$Kw;L|h+h|yBUtA3{J@Ao~3JUqEXo$bAZk#&A$u-YGB z?44^MS|lPAkQ)q=$ha~HfH12v2OiQf?-HvG2M6Q6j8nbhL43-&Vf1f&gm~Vwb~haP z#iZ{R;~p70g}ScWQ!(6yU%-S3-s3|U7)3IVE+Ksa`?iwMJo_5!u^M?>dJ#-n zt<)GNeAU&qxU!6b)6xONOLMd~@PGA%vSH3(^M;c3IlP%C<+N)+hhucba`har4%$eC zrw|_#5!w)G(4o~4LUc0Ag0#4S0jy0`(lI4r2NR=Vv;WegjUX^K3TO|RK_gtdEnU(~ zoU<;e87)$)Tw!dosJ7~3gMoiF(#+(u3=$nv)-I04fr;ITC(hSHDM#pf4Frw#tqEnk z@_kaMo0t-zQ`QUX>^ZO_E^M92_`zoT*;7_T@?}X2h;_p2ZP2)C9O|qazx%XmI7u(i zshrSrE}If_X-wxe12^QHJL^1YhYIO*m(@=Hp36~;V>$z@iJ%fm6Y5dquq5%DN*J-C zXCSH1*CCH76sKdCDTVWQjek^dqS+dRjgGqW~@iHobq=qNlv z+qsh+h& z`(uHimrr?k-OxGipOXMjx;K9lq+f?}C*`N3We_Fp#+-(Y_Cm6yeZ*6RthgC+;_8x-a?Og=sH;1l2F=xu| z)9`|ssA4HV#ofNUZvF8&x~f7hM)r^1k)QnCN3V;EIS%^(IOvM*1)pj$Uo;I8B5eXs z<3x;hYVD(N)9Jwy?mp~_duhg>lknj!vggeT?nlczObv-XycQc;{fWD_1G^}#J}XFT ziq?8&W^5M?1diG~aw(_y%mSaX6sY z+<$3tUwr!hkLyU1818p@5kVt$Yc*Q~atr+ro8WtJh&+g}tk^ebJm`>$)X7B68Bz>u zgiPX&Npk^Dq?t!5%xV-=!-Lq)=#!vfp(AemO}BQ#Sq$6p%LO8+m^KmSOez5;%&954 z%XIl^;3BKtQF%V1_EZEU&>gMa=!)HnV%61|MEP2EOgDC}4g>A}ryc3kH{l=F8 ze^8+Wh9&MkUCN`=-I_ZFS`>DvspWE^LOIjT6*lZZ4H0ZC)?Jp~YTYuY+_y$n17uWn z@l#ciYOT)42CE!}^|erRs@$19d7o;88b;gl=75+A(`*D0co8KO&epdyHT03FpL+-_ zb8m0uXiZ1kW?q+xHv9W)?9Hy5i>mI#5>T#%$&>ZZn|)%xESN)pWE8~Czs`p7DnOyw z!CUQ}Ds9@s^cd($kua(q9;>RA zu%OBQQcAI`C^IiC)2h&dRulz@aI3Bb&(8qX{;jqF*27%zm;;boo|T`(fO zaNGC9wJmhDHv@P5@NzF5S%Es!39tj+6b4l>7E6DM1jB#iRUMkm7rI?4zty5@XP-X6eXn+O zk8k`+ZtZ%Y#3l^eq;9UaX#FmX;yCFib0W&7#`Q3I*gBB~d8Rg9BKdJH%{TU;}+uIMF(C~v+ zhaHou+#p0pHb+BWo55EwbI_tw(mYnvqoT4530Bw3?^sp47o{6ew&Swh%XR3Jd0wN! zA7`>#$7mBjtGAegy9=bu->(TU@3)MXO%TK9-kRP*Y8g3ij1QZcHvn{*JUTo86Qpb^VxfQL`Q4l5!VRnqqk9@zOAWML(Vby7m) zJf?EeSZzN5VZ{mh$BNcGdy^y1B7S&pu%V0@)^EX!`1rau2pS>?jLsd!r%P;E zuRE}Ay$l8jY2u%o6N!|Rf3VPBn6$e|{&k-H(`U;@=4-u?>5cmZ`jG85f^qm{sZjTaP-pDqBzyLqm=X~uW3gdk_r&j)yD203Ml_Sq$(Pe@d95!&Wjj}Y zc_spng-ke(48cH%+vo2`WDnH6XC+Yg%E!RR7brMl6MiqzBR*;Y#tfG<_Wi)r0rAa6 zw$5l08i$*(Z7A}b{TE7TFtf@CAW;5Lj@A%vaB!9xEx&5OU9uT0A|k_y1{|N;WOG#a zC9c-=a^n86GMKZ8Y9jOk`J3jW6uqE*vBUy?OAYd$=7#{;C%8-^s=%>a-qPu$CFy2;sv6=%fec)Qp}02OfpF zq9~nt_cHL*;vvcJB8|rL-%c;T0;HdVEv(;gij}>KY497D2N&2LSaI2Z6XsCG-gJ3) zMD({sMkT+k&aV7N#?&u9iUbVhJ0WaRJAEWp$S;Q5gwQ;N!km5u!aK^*uOa0%R&)Q|$JR1^WPvt7scJJ*hJh#azTu*wy@5Y~AS?pev2p zK9gOct(wEghnu990f3EpIF;d8<2x2@N&GzSJXHQ*OtYB)eMcd)QwoD#()MdCE ztBKO7is=!7uQ2#tjjG?^3=xo)luUR5O|`5#vz|>TnzC65l0OB|V3dgA{el27JlM$* z2sN|TK3jP+{fxIqLzD_(|6rNuYULN*#X!V&E}CvUQ+PQ!&CBg(R{>R z$Q;RWd@CQdxzK2y&*hap-0iH}f?m^}jWENXh`?&!^-@GbaSe?r#A@$MAj<-(12G!h z-u}Ffgw-pbgHEssqY2JK6B7H6SsDss*7=*?S1}kRx-LuA&v=5FVn%k-f0<{)ayDKm zm-uC`jd~fs?11ipA6)gQ>o-Qw2sOQ7#GZ3>M{NQZ$jV-m)jxy@4i-HO?0D#PUO}|c zB*wlG-QMv=q!6~E zlJX%!M`h`?@P&c@7Ivlye9UtTr zfuU0FT&8f#g{7-zwV>a4#73;5uqEeSiT8Qet`F4!fIGod-^}mgc;3MaLp38S6H`u? zlpwe3krMffj;^xU$f(>#663H7!I?ifCbC90ufP!ZR|R7cVYQp@i;3fq^}bgoq67hg z`pm&ArPD9ygr&TjKE9R=8c4ah`yP65tn?{P5i$+u^!q_W1-d4#I5Aw$i{=0fGkO_u z?{aU!+*i8$Ny{$IPTs69y=`G-?!2X5#L86AE+9d6oH|9(@gjaC3um1($wDnJPyS9q z5aTET6y6X};7j0;n1(?7MJPz*#60b#$q3`h5)0k9RUU}X^6I0O-kY{JIP}QYO+4#< zmR5CU(ia6}x#ZrQXhLE)C4V9|m?x3OZ@Z=$%SZ_J#8&Fs24%uP%PtrYcKe+4$f2Q` zGnQ3b39-!>*fK^b$6`#QEof|gjEf=Sw{N$)jIXU}mr07^4x4C!5VFvnJ#q2@gF86C zE8#F{v`2UKfVC!MgN~$k<#nP0u55A=N^N0+nJaI1$w+GLltRTZ>=+VU6w$dXDVVUZ zXP{>VsPO&%G?Al+*D(Da;po+-RAf&k^PdpiEdZWN81RJj>+nIP7@!JTYJ7BC-`|<( ze`JcnzCXI-9y>yoK6T2=R3uhPx3!GfhI2w9CtgyY;RwlFUaKCG_6*5sk(GA^R{ zDNO(`5bt@TV-V*S)XmC%U{(FaKjf31RH2G{O)6La87M0uNlxlzH?XAOm5&a;TOa-S zQMFXn{aAka445%zQdeI11r#iSn8NwR1394U`kG}fwQq0iyxB|Nn##p8gvxtU)yt<)o~FQP4hZjF`e`Dj;_4NYut8J zX&7#`XblO=$5hLz*})Zo!@Jvfj_SqjZ@mDiq<=qsx6*_KbN0;{8>H)<5jLMXp)Ijf z&fLREMM1U|MkZj;Gr!pc_uyq#fX2~mPn}g8{dJa4?m-eub+8MdoqQ`w(;OidU0H{mpfUp3-mFA&xJ3@53z~{g+*Kw&`m43@y_<9ZYwE?}gncr^>3B^7H3?TZ@~0wnfTx>tP$rP*N|Y;7FSIfVXNmnXvorP677-;5ELdolq(HagSnBn__&7rW%Emh7%EEsiT(%yk0%)cs8xmmwS@Tct z=RMcXr0f)ZTjD%TE%s>I$^a4iJf}v5W7M?XU0B%Ji$K9@84V`=I{eaV^GH z{j69iAyDz(+_)^=k6C7y-Xnsx89-BzisT}n+n0LlVi^+We8*NWDxii|ggii?ceF{{ z$e2F_(kYrb=af@=pfNFE{u{BJ-k_b#+Hx?}q3A@+tb9Bsw^(31=wu!Rf}uz)h(MDm z@In@_d*F7WDX(4|es1K6vvbEW6Frxy#`&S#^WI$Z5UGQ(q%{)*2(E0G$6K^=kSges zNjvIEO$EG7u%|-+f`$nQrqaUPbf|0%8W0c=bVP|~{eE3w;bB2l7?F=_4-59Y^f>%q z6D*awte6kgge*dUMBc*&SWHUS)gE4}b){1VD~pV|Dk8Ceg?+Dv9Cc~W8<(_ib0S@8 z$3G*+o15LI?njJXwVrxgl3(d7q%z1UeDtgF+k+AxeZu%aw&Gs_$bP8)F7U#mb!M3Z z$EAHA+&s41dCQaISV;_n%)D$swBx$L+go}^6qBi=fbQ?87b zpjgGsoA5h)_hXS;t6KoV4)yG6UjZ4dpm7V2Z$d>U-@JlB zPnb*fd_4B17Zfw-UEK%xF2+K1UH+^JeyRwtB)4nUj&9-{q|N5)cCLn8@!htUOPvI+ z`*Zf~GZLa^O(nI_!qX@~wDs8@t2gk7F=Ek?ut2C@QO3--)whn@;*BGBooQLqdK%5V zWrFd;LeFqR2=74YE1zSka?A^p=XXtZkqzGMO(})hKbQ{uWCAFiAkKdN0DxfF1NhM{ z)+T-Az>kX8@wrZH;V^y$el~dKt-cd9y9d2?T{vI_6P4k6yM6;iu>XVeprrw@8SlJf z$E{S($SplfdjJos*?1CtU%$k$8i@+)mzmml<@rR-N2fz1xDxvq0J!x!SJKs6xy&9ki5os`O^;6*!y<(U)(iNJO~)^@UKK+?P`I+N+~09phST>~K6ov6 zV`KZngeDWJC3@dth=_Tm;F+ukw?^rlFMscB%kEfR zQ0-*s7Py~n6cmQI)g~n1>=27$RSt>vkXz4Jt{}E?#_Mx}m=MZx42TLyo*@-HIl_O< zt%+?jw@KiUJ{xLIaw71=mgiS9lk}+%DX}zVl8nZLO)*?5q83SB^(EK#aSE}S+-`?K zmYj)JaA?sjL0EF$%B3Syxd2T={^&rt-XSaEhHL|n?KqE}>Rx^%RbdyCE#zW3++y%_ zWh_{ZJ*l4{2tPPu_|jD<6)XaN3bDW>!C1OI1LvuOM;^A_DyOKdDctAoEVc%4MAx!j zcr=q3gJHJP<0+179RRq`RS-G(H@d=moLZ_Pj!Mlj+ZtjVXliy42K zZK4harK<~_+vHzFk|5Iqa0rci?1z_7Jx;y^$b#0u?Lbe`k!c3XZP6-RA`D?(V1jd? zv9{|sGIqR&eFOyUx(g5Fm%)diGD(S&SdD>%2Em274EPYzUXn4zeEHIn{3@_4Gsnuv zsXu9N(+fKI_9i{y>$S-z0SFq-y8YE$uJ)Y#nmOE-75e+jYjEds&3Sv~IIqKC*|$WG z)ldu~lCUZ!q0EqOZvf!6eo#UN1*OL(^<9lBErT|}XbA&w;|OiIs*mIo);Lz+k6T>W zCTKz}LJ&7VQyU1f0QkDVx&)G(j0Xn}A{!y}Hz7X#`I9_m1abm-Le!jZ7=`L-Pnk`5s8&Ea{IXoo~^$w$E8*=@1Q2ApQFY!*OC7 z+a!=*dwPPHV8_ty8~rKVqXL)hwKO9bC^5be2wSviv*vpUTU3B5=zoSc6XZ}y(ZDc_ v{ek`){|Wpj@Snhc0{;p8C-9%Ze**sr{3r0Az<&b&3H&GU{~;hMC!+E{sB-}2 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB070F836ADD72A3E65E350E4F68AAFE.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB070F836ADD72A3E65E350E4F68AAFE.cso new file mode 100644 index 0000000000000000000000000000000000000000..06d951ac323a8d958bea92b4da8d2559499556d7 GIT binary patch literal 25100 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 Xx%l9Hvx7r}_r-Ge9gZ&MGUWV!OvrDg literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB420670B55EEABBBB80947E171765E6.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB420670B55EEABBBB80947E171765E6.cso.pdb new file mode 100644 index 00000000..6a4e0de0 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.BB420670B55EEABBBB80947E171765E6.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fc5f4ca1fefdbf259b24c7a4fe5032e4779146513d542cd41befe3e9990e03f +size 22016 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso new file mode 100644 index 0000000000000000000000000000000000000000..b7ef4d1c7c6577e7c8c304f12ecdebcd14fa865c GIT binary patch literal 25264 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 No|?!+W-=3${C_iH=biun literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso.pdb new file mode 100644 index 00000000..b5c63b0c --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.C0FACB4FBDE6B9C944D0F6B61E5515FE.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:802ae426686500ad0c0e3535eb58ccd3aff39e3ff4c9cfb855617b79202205b3 +size 22016 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.F6238D8991D40344B66C2ABAF21B2B5A.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.F6238D8991D40344B66C2ABAF21B2B5A.metallib new file mode 100644 index 0000000000000000000000000000000000000000..fab4f3ae7ddd78d69a00fb23f50ab8bf34298ea0 GIT binary patch literal 69194 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 R0{;p8C-DCvASx%K@;|0b7(4&~ literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.FE53A6036CA4635A540C1FEA2D189F45.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugMesh_GPU.vert.FE53A6036CA4635A540C1FEA2D189F45.metallib new file mode 100644 index 0000000000000000000000000000000000000000..3a98b8c5cf7c86dc8cb8b2ae7dcdecdbb9e533c5 GIT binary patch literal 69034 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�EvYu7y}ScSOSoEn1Uk* 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.05E05A32B897F2006A110EB2D80A4548.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.05E05A32B897F2006A110EB2D80A4548.cso new file mode 100644 index 0000000000000000000000000000000000000000..50beee90e1309ba66b20d5b012afaf3869dddfe5 GIT binary patch literal 18096 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 Fe*lOXJm3HT literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.05E05A32B897F2006A110EB2D80A4548.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.05E05A32B897F2006A110EB2D80A4548.cso.pdb new file mode 100644 index 00000000..f1bbd141 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.05E05A32B897F2006A110EB2D80A4548.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2b407174ebbf826bcd2b8bfe84c91eea066eca1a8d5262f3590e9da34d4a8cd +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.0E8B137E61B073CBAAAB0C24A2C4CEF9.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.0E8B137E61B073CBAAAB0C24A2C4CEF9.cso new file mode 100644 index 0000000000000000000000000000000000000000..dbbd549465b2f40035a22024b4dcfe89199a8ff9 GIT binary patch literal 17792 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.266E4511F0C4068B851B075051BA543B.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.266E4511F0C4068B851B075051BA543B.cso.pdb new file mode 100644 index 00000000..0f0a2ebf --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.266E4511F0C4068B851B075051BA543B.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b3399be627eedc6c0082458259260a0200a09348e5d8544cd3deb44b03a04f9 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.2FF984AB185BE7E8637187AC34C0981A.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.2FF984AB185BE7E8637187AC34C0981A.cso new file mode 100644 index 0000000000000000000000000000000000000000..87cc124027a0d13926df9d6250f7150a95a68fa0 GIT binary patch literal 17816 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�!E!As@4XoYbwAhgb>iC`?!AXCa;KO*M_13JZ(|&tl{pDKA66HigpB-rAEY)%5t>f_PADK-oH%n)bHH9m z6mm*LD@9dRTTSDlQ^8=#6pmqM&)FksP6aBiL#Su!lgrgHxm!@y@+ zQF^o1%YN;omrq!1hRSqf=@(nr8BK_HRR~_NWIA-2Gx#lV6eL6u*s*YT85~rW5T3A! z`e>>O#4)E%&MTill8VQ(OJ;11TRy%ud0mOqS+($^fjb;?4AfTW4sKY9SDOAdpTmq6 z&-i($VWR9_h`W;;*)q-$c#$zUVAr9R{C=Cy&BXHHLn-(tgn31|;xyv3!fM%#Al>#= z{FV+!*S1JB1<7=(!6O6W%-#&O&UkNuN)Jwc%^%;aCvqcL`Zd$kWEmLrNo*z#!w?M} z*zfd3#qk7lYBNt>O{~@1zqu%k%4E}j`xe&L_W4dFX>kRSww0%x51X&7B94k98LMWN ztjaJ8qmCVjTo>a(N5`erjpFNc))d^)s0_!~ofrfZEeR5Ayl-_C2;yEjV!pX8cxdCC zTx#DaI32^XV4ba+WMfbB#HN=$BKIjQ)B$QH0hOg(P|8(#Fuk#M=GT!F6+6|lRd=$m zV}APkD8BR)IG2n@^7q}Z{_C@27Iv0P?6JKH%v?Fesn&4r%`+VzLb*9&C^RO=54!(EMnq>Q2VUcX2nFjs#L)h9)iaU{OIC ztiHdoENV5eXHCY1L?qYg)b+*4s-bZov$uYz{(={dynItu4m2020v-j8fjUQqM!t-=hNOWP# zEk)%I!VFYM8dcP=S-Mms_&*0Wc8#O2rl@N1YgYBwJWDPduFT(QdEU@ngnSnna4eya zY{v7ce&|%pkeCHq)W$XJ`_j9tr4to@r)GSIMx9I!Vyx}Q^c+~Q7lv6(t{?#D}C z`-Z;6oPP>LaIOkLIX9tcV)2^DS7H!5lHej`QL$^_K#4{kI ziWY^yy+JsPyg{bq71rew6(~a(=2UIjg~#j>T|L$3b$!a{+!x==ereD>@uv6fp44P;1?+{&g7}}wRmwiTeUzy7ll*xj1%9E91d|r_7Y~x1;;0e zGgpOcu59vIB$@}Bc9P^4>SA)xQW9*DsXfZF+=&9uq$j?6gyY@;MPj7&hNMM?nio#! zM^HLREZMOTUxt7_U55$j&qlQ;IQsgdc$$7$esAg?G4~E9xxq3HcQ6dA0-fwy8#6jPg?3Q-A3v5L-fdfvsd!-OuR^ydNW)}8LDCNpU?E ze)*gXDrZ_lI}^2+sVQk5U$16SX8(%qYX9_ob%NGj*X;cDd%I?@eH9ywXOt(_O1)c1 z(F4V0ZpG|FV!q>h$}*GkT1~0bS3BW9o;8kLoH)0NQ?qH`tE+W>nf1GT>bvh`o>

KWjf)a{3lCiN{%66){W>5Os4;>#{G)hrJ?wbrt>ev%eAJd9Mw%WCGlI z!m5KQsY%d4C*skEr_5{dcGmjQpE_=@b(FVb+*qq6x3omU=JUiTTn_Xp&KS>+uRhpI z<=PD{sp~E7ZWt6BG;;C`mT@P%vGQjrxj!^%Cu;KSj_cFTSL?cyd2boNnTeehm?iV~ z{4xpk&L(BU!kZYV?wL}LJ;1o3B6K0%J6XAIoZz(I_;S3IQU1tY{Ih8S?FsMCa$gY^ zrSYBRn^&qzANo6Y;g+@TO#JpnBDS^Q{)8bX@vxjahwZnq#tEA;-)_53b{l;>&`HA{ zs)W8`OjH~1iKM>%LT8Nl$Z5m7gKovf!Pe^(&4bl_quJLHzDcPNrlViKnov{1S?lBX zh#Dq1C-492sORej63sUu`Q=_vk}z58#mY9-CMLPBpu(NZj~3TQG@@nfOySW4Nh90| z+A4SK7S6c}3oG!KV!Q9$QD9sfZe%^Yxe87W{q&QHRyXl?U03Lo^+o-1;7)kdd!3Y< zgqg8C%AW6i#d?&wTKy#)^4QxideX!-v-dpxrESSwB5!yb;TSoh>!FHWJ2mmqru&T~ z`Y9ERjPwl^Vcf=WwJyfG8p%k*y%Mz+cfY_LGRAv@`A%Ca#@Tc5qdX^ztw2TfC|Vcf zh?*5+`Y{z1V`u5JLQp<|slwaxrU1W>bxo!G#l@lZ|Ek*F%PW`Q zb0ki%Mb}ZFW$-6*=u%2C`JV z?{W`<-(FO(;fUIQKAF*^7^I?s#50x$Wg1?JoG@T4!mF2yGy)zFGwup7b!}M%j2GXG zBG=7bdrZdmd{^Td2BPfDIgqy>eBl13-?{Or7MVH{Yt^3C<&+M7ZN@}4BQX@gS@L$+$uPh$W{)G3aS@(K{gEiyFsG=ir8SwximTP0iSSwVFTT&;H&x0N zDEA35(rccqQINQwj&_NoZITtU3D6Nd-|>`OkMjRw7QBdA!j!$_x*OfXT0QY=Ddbhw zoQVjv_wu)|Y+!RoLcp^lSWxmT;H)3$A5r3)^ySEz`X8m(s3kMT4(sF#=I9 zais{G@HC8KoJwCTk?ii}A2O}RQ~g*MFp1+V>C)9$|7|CMep`V0 zUdLqJ2bB+B=02V`KXK_f3gzB6K9sh5qV@xW@+WWnnO<&O!wEd}8-q}hE7=4w$PId5 z=#Z%$Dnn%!?-yP7_Uruu+s-bJ7arqe>kJdd_k1S4`))U2DB{>3Tb2`lQ>J?VeTmZM z%{LWw+49#jItDciX`uO5U7at2=uxlaGS?4@n;koPGv2*DiEWG=wNa#MCU=Z|{Ib`;Mz!aKdoVTDvuGI-ii%HTn_G)tj)?44_B4kQUK74xn2 zIr91WOQ@Haxw3twM((jEx|p;s?@l1&oAM17k^BparaEV41$6hX;V)jAaK}?MZ}@y% zIFfkU4;nVH7~C&;cdTVhF*epoy}uGQsMibp2Q1elzd;#!H~eRC)J0Iwh=1tpwSt9c zS@gYxOdm!~)@ZInjoryaU4FcANiMVL`)8+Sk8I7`=BJC7*Y|e}`?_i;Dfq~LnSwhN zgB>VjpMB$TFslDFMSzD%#%aStK7pr+^GSE0yfK3%^R?}D07*t;?zPeUk-tyW0W1uY zD~{b-)VcDdQ-4{gcM(@-L6vX&<&41nIF7=^2xUu{VE6QX74{>D|L^8uC3pl+-bOXpg?oV1O z!_)KxdBX8674Vp2ami&60#aK1atJ1JjL)&*#5kXhUV`8ZF=qb@G(gM0wV9}D2uDpn znq}kn9EaWxcj)@Q{m*%+0*~au_AjC40|Ontmj@fg?XY7HC{OD8vFxGeZDV8T2hsy+ zpO(H)>|+_$B{4L;ZMguN;(=alKY#!oy9FNAfz7$oI0W56zSB8=3ylBN6RntIj-Kik z$T~3yXmm^V?qSFFqlz0xN44B(_gJ^g1h^&7B(Dqtt(9|8!YT~|2(W;TR1{GQ>V>_< zN6EZEyM}J%A5J4~iF;^2-n!n|JN}x?07o&l(aa74{moVuP-~zhRZ{>ZH~sSnZAg-^ zw*`_^u_UKUk`-LgNpB0Bpda7EBq z8Wn`PZL{z=Yayc`cVAcJ{XM2`lk_&6B1sJZ=oqnNSfZ&w0th1j7Da={dcKR}-{`_5 znUa9wkN-Sxwd;Am_Mo7kprFY-PW<5}aQaNd)jGBwJTE zC*ko>i);fX&HhXG$?fBf4E+$HM{hbgc3`dfhf$%jeDzi~4lW>#8WMgT4^!FRoBq|{{QpG|J_gbr@{DsKCKhn4TJ=_m z{uUCzo(7c$r-TceDY4gnIjCOONyS+S2utU`jJl)rAhE;M#0IhtHEP90@TgPzOyIsl zVGivWpSkaCR@W0=zjyQfHziLiZCXPpS{-;Nu05jyl~%F>gC6+gmIPU=Jdtev)Yg10 zRa!zG|L`23>a|G`kBAP-=Xqy<^xyS?L!j6#-OqnwIQ9`g(<3ZDyFC>5ky8<_}-o?t|;M?X@3b*rf z|83WZ6CbrNSD|ZgL~;*H~It>{nz6h9vVPvsGjL%+BB=>Iv|>i#36=IM3f zWn$DpwD;bdN3(eOQg0{^!*GHo{4D?8BNv&dAn2J4wsp)lTp|t#0*)IB0G!)Q|Dfu~ zw50te*m-_-OzlDnkJ@tIP6;s>J5#+9jrLvxqOOaV4J@iyfmIyrR^0wbIWVU|3Vb*e zxk3k`z$XoWPD!)V4I`2;9=O1AMJc_AIVQz58lq))TgcO#bCd{!i5Q5D&T^P&iwxr8 z_b7oCggh6&9%3ub(;#JLiVs63vCBqN#^!5y4KRt zugrI@D|okbnjm;)VKX6_1}={+0Qid@TmrzC@4w33>?aJ#67prBsGlYEg@u%`%Nfbt z(pGW3j;zntrd#SnkT>hx{0eME{hTBn8v)6@Lvz`}`XBwUIHU&*eeZE#`%@CLXreK+ z&$s_yuJ;!tTtn{2gYytIFB^a{3(YmxqZ`7MMlUL*q|yA%$xz@u6o}p75RftEyd#-R zMI*{>Q}N|*$kcbtth4G-APv#E91QNS>us&Ql(;v zw8FU6#S~-p?eqQTIbK91L4p^8< zjZ*8F+pJ7Xj&C>Tb3Iv*J^xi1)OD~K-GA_IhqfABI&lMTm)5A09&u5;{w?L`2dNwKfn3J3d@8lBT*rx zmEf|1f%qDYsI*M{xo+y1qDzzMzxV&yN zq9PU(QG0^vO503Orwnz!)w2Sq%2+fIb^z)Ukw(~4otL2Z)oWANR?n(^8k!;1sRj`& zbadvK2t*&A%hPnIwK#S%^FM$6ueds5O+wnCyb8q%8WxPp20@ThAj=Un&NPH%V<_JMB;gj5gcapN>-qLSOxZs1~7@B*Xauy?&HGI*ll_}llOhp z+n4h@yfe&u05>9m?@Q&Xr&&UsTg8iZWUK!98<8#o7KKA?T?1fW&WjdU(AWvCv_CU@ zsaWJ=yoXVKpZ1>dW*DVM*U{YD`|CK_294j{!Zy7QaNZ#S z5EB1p|BQsn%m@Ku)?r4o{^u83t%I{fps(~Exm3i#*TO7!q(#6(kp46SlkhMG00Eaq zaF$K5rtfk6QUjIF%=L3Q;q!C36cL+h*Y$B-Gb!ta)%iBMQcfg{opsEPaVAny&#so% zFBop*AtAUyVzrnNoZjv;@AvEKSrygSksREUUO5ifh7j z`)&P-pubQrmK#OX793w{{xY3r8}uXaTr+C2=&)4PtK_uksoTu61D!7(2!J`OEQIQM zD1spfge18eeBVFR=Ii?09y&H3_IY~GRR?GIR$x}5{{ z5=2MiTY)DQa@-Ua`JyCU!BFecUk!3Hy zDj+_smE^m-5v^H4;(R}l6O{s1-~XQH&48yPGY=TbU}fg$JJwE+-_*})hNfag-N6zt z<$2!c;ZedR1N-e;@{I+Bjk;fVYK0d4GKD+`$9I z?fqMgUUIS|tbZ;!;@r3;3k{1_OS58*{!jGDXCnx?BxqF8iH=~HyAM#4^x^# zWPs+PftDkSN;UCe`%@`tBV=rN=zO7*r}!zZHP%yy{6LRN4`JlKloaV>hVz1-442#Z zoN9lTtfyZw$D}Y5@VG;<5`4>;lA>)zllQv%$F+3R*09*O%lGQF1dkT>KAAAt77yEh$l z7uf)dEsGsqNUtx}5%3n4e19rgB-i+3ZE8VTg3+5sEXD5Dn!(5e^ zA|@*0oR%^XNzyG0AXxLzOGQ)m2=cmW0w@PNpNLbA0%Si=ws~*lBJmGeT8^l-BlCTR zM$r7Rq{xp=Dqc*l5lTSKb>L>_bN}1(cXKItp;_CO`<)c-a-VoqIsSFkt<6aXXKW|e z*453+5;?8-Sp*^!{8)+rc^7wSp8jL0lKUidYd;Kl(4t7j?o}!!HyRU#e%7TZOCc%?xW&=Z9yZI?bM`B!Qm3pOi57~ev7K^lEtETzf1*Vrdn~EMrU6E=k=BC(azj~ zsu1l9Oj24Y!hfGNedd>m8yLpu;OA`~++-XQvR;zg#H1(5SKC)0)AI$!NUtSo;4zWd zk(tJ(`v=LP_%(=Zw3^=4oL`3pgcy01l3K^yZQKlh*3uyrZNGVB^?fA_OugB1H6OzSnh- z7?R!;D#hyX>+`r@o5Y)Zq{5*@a4brtGfddRR2@}xua%{y=`Besr9b6sY@H%!nzV4T za5mmPcQF*fVmW=&(W>Rs)Y1cweNCa@=b?xjL7D0j<%6obt^TG948XBPBEWyAko{1T z-SCaaJ$_gZ=r_#MNC^z{}xdjEEQ*8WjzX}!j=OsRW}y{)+z zohx034HY!ZP{@)A7X8Thw*RqwWiV2M|AG_QI*Fu%L{P1yM=lg-A|B;UU9U?w_YRB- z$Xf^@fK3!Z3g+D?26WtXK394CoBh&h!g7eQNGPigPo|Pd=8*YlC`v*U$ske^EP%35 zk{fP?PA(ZA*b>5h@(HSS&lxltaSP~r50580_XI23XV*?^IhXWT!MoM6y=uOx{jT3d z>GSrjUp~x!Q3;R!Z@at=ePo@Q`FiJidEE>-4^S`<^sELe2Occ~uXF!@{QjQ>M$$)a z1{Gubz0QSRaQb)v#>Kc7nc|y zJT&RnN@vJIXG#zNKv03dCs`>K=dE!cIjHCG-`I{w&r`a4gAwClf70OJX>ZhL^-PiL zO^f~Lk(QtKJ z8?cuV5Kd0Z9TNC5)$%{Vk5SlxJcxi#c1`ROJ{nW@Xq2TJ&r#mNMG7J#fq-dooVi6# zkxK1|(9gZp;Y%Cs_8f)BFLVZn*mxidi()zjDOg*ah1lzBvj7%lCUtu5;@^Aw>JjPJ zWRA;(QLB*fQDZNq@YL2qvY&l~Uq*bIc|+fwz@1@FiAaXW&M7WXPLJo)|CqV&6o^zi zH!LmG5cWnnfY>8vz|^ghhlzOks06nWI&C2 zH|XP|ltzghE`y^Nl7f9)$-E4d7^)F@;j)YoROEmzT$QpLukKePTaRPwuo8FKZGWP! z2G@J}@$(pP`m-;Js6XHUZrCr8Z4Z6zu?$$L%GH{3#=Lj$T_^$smSFV0O4#kTlElF; zH7X2iUsgL(yDwBxnc$BTb~h1-)VLUL?yj-D+t{qwu@HT2tZHiI?;s)3w~>?lnm#^K z9%rS_$ya0k)*T?dt=p}s4ujMY&g+%Dn3{HgduRPLV1vR59nW+8h(ETaTz^w&1Ef9p zjOdk^#*hmzKKJ}?G*x&yD%5wFA*{`-?Smo|)-uXckLSoUOZZq(OLK7f81Zx^&^vt~ zzmXyho2!=fX;!r4wL%a$ijcJk&Xfpd&w?xVg81!0{5iBDctiaod1%V}*|-LQxfwDm z*7Widy8~F8P5}M1thExVe5CS{LovEZmJ*a;HzT!;*qKJeQJ%&6*&N7EnA$)u|ufe=#9}Q_I2$`Di9P)1A-TN^Q5nLe?i#1?QY0@k2L>!EmT!;#Xjb0_)_S^``F0-H_|+k_A2iyI_LU`pXUxmGv`L_H#e#^1oWN929fEwwa#98 zTR}6&A-WCSPRjte3~sh2Vc(klsaftK@mO)5d^vr4UhDyq^3d}B5MvxouJW|uAitac zt7aQ2?@9Jyn+4R6t;T|b8$>R#B46(BielCP4+js$%h_^wYc-(bqY#34gsW)wtxBXc zc=PLN&g6lp))OCS@5r8c?}2h#-Zyoi@MI!kDny-H*D#o%Dzhi*(;$ND&0wO6D9r>T z(c@-ZNXiDuAU`<_divOy{x_Wysul?y#E4`_BL=GSb{Uw{ZSAnf@8 zgj4H5C_8t~C51(mbxAK&UctYc=-p)M0E7k}yiDxh-D*z)hm#`Dr;uJyD?^Yv8CRC z^3*glwvG%LT6Taz{~B_jwZ*md7fIIGpcc0Pqi6$bgHnhNg3J>FkVnp=-$yP-%ACAH z-0s}9$7F@#RLHD)$3X0(?(npPYRP#h;3d!g-z3MCeTQ3&_rT*aW(81Qr+b-W za?dkwTd;Q;&qeR(plSyF2${Q|Y1fjFhZ2dm^!lF@LpQ1Y-`Tq@-1xROxP!&cVWMJu z{=eGwDp*>!Tc*VE<}bzoSb|2lo*onkL7n;b@xXcmSPJA(hsVqFPL24Q&8Xc+Wy{*f zLRwK79N3n9nWZ{MS-Z#&or10PuwB!`+ zaEH(u9D-d%>5O^UFWcW|1KkI0Dla5*NW+oRAxi*fbXR(lw+Y~8e_0Q81|@*}-6!HdKQ0!9E`wtg3S4&z@qj7-scy`hX}08I z#uJ1=`isr_OO@ty>zg>3Borz{zwPz?SUs<3jTofYQZUn3e-4Pv(>DG$8oryjMk>z+ zdL@Iw@1qGLERMq-W}@#YC8Ry=p`|qgXY~~E8XH^f!9^l&6Lejc$SY)7hdF$)b;d;` zJ6i6Ah^N3?PuR%HMF|G@96gn1CYKrfXLk5JqowA95+h0gDyZ2#ZV~=b_Y@ZC-p^|2 z!U8opiU5d7FIwl_ z(fHpdzo_edPyPsCO{Su$D?Uo0aA>L-PU<0dqLG zV+e1eSgxp+G{D>P0~l=}Y9cn~H#V^p1&7$<^j6=>-LV1}?d0n+g&xb?45N$3(nWZ0 zdq(TZC($wsv;_U9`$MRZY^I}k3P-0}dGo&q_tvA*#gPBaJidbLSq%!q)kz1o#ZdWB zDd|}pP&{0RIdPdv>N za{b9!VYr7Ceod`wW(}^LfrVQ}-*6$e@x7piGQ#}^G-gXK;9rP!c+0$qTr-v9!zN*1 zrGt4H@H6oat{g{DhK;us`5)_nDSp0opx2?YATUoWTGt9gT=@$W7OG%}^Mg@hv0;Hm zuHvr2WLQBX3C3G~bDUAY?+@)$l;a`HgBT#JS>&i<2ljU-w`eM#o#)zWBiPLKXIq!d)03j10*i&d+nn_6B!< zVd1NA@2qz5%@w8-(Q`VmPl6wR=IULLisU>XWCJ0m4oqj6AQ^+EwUc-XL$=bhp0Y-S zd>B^BUq-KQ5zPRy0)1SrMvLpwOP1}71uigE0fH!yz>|kEmz<<1gcu+L5$7%+?##|^ zH+6{fS7g&ezM5$$@i*K{IQ!^bPKm5i0|N<=;jG*XKFH3nl*)D6F;26O@F?qP`8mf; z6{P(He1*~o(gf0Fd9?g*Rhcs*u}b9g^SBPYFRn!CPL5~~W3XDbDRZ`=@6>L`==F6% z;IgNiqrL%xyhW8+{_9CROWKQ_6N1N9ee*=U{Ne5f7q9JbX^FFR@F@O@k=kXCNI;FN zN?}TfT%v*+`K*zMrl{AGvQ<~2lo^YR=R^M)8CGfwQh4bq)9kGQDH7uQY>7P_1nBJ} zv+U1^pYQg*70gcKu)pCMySH%nj~kJ=7s&l9VshGnTAO= zwcP$~+%trh-Y-wHOgnVT-ddiP&fq{FC1Brz=HaU^KgksU!-g}uJa2FFvKAQv*T=t= zk_=(1X{-M5_sCkifGxY~)0VXbT?L1BY4YUEj#jaX;rl+s7Ie8`fr!4hkxWu9vBQTt zn+3x;^-s!n@r#_$pfg6KSEB&oFQiO?go?tnhnXvId_vUM8KL0J1LpCeXJrX5T_6`m z9~xsiVh1=WrYMn*G{s^B4h4YD1zc>vik32C&uD8H)=sb~Ds-$fqa3;;to>YJFX}nZ z*f!GD?b`<@d%X$q5L)vN`^}w1L_|bj1w#(J6cFa>axkHFtM%5SFdg1MvEb4r!0D$* zZ3-|*d_RH2-gz_N9PGkgVL4XUtL{q0C1Ef#37Ik#IxQ#gQCm{rbMfwxO#?x%BSf8G6UHw>bzi!iQZ=Ed2^VS4%iIHsdG zIK7W1sD)lgvJvZ06Q!$ga?c%KQ81!>r^JPHH&8NqWfH%cdgg{%2FvA&iBT#;E zghcXDC`3f^6TmoU_7<9~xpL*D*>dH{w0n(1Yps(9-j_P^h)S3xhAv+Cb>Z$TJIH9dm zjT{_^i)bQce=tkN5=5y$!4nJGLIj{xh*gL~;{Hp)%%qXQkYy*YnyXN#KHOd58Q~6Ge^n)?3>7d< zrI39cxG&Y>+;||r7yu)r(n*B{L96jIZ zXf+O;hBsBu68p^rMM0U#S#nU3ifkQ)Zl7Blui}pE_3@@|#g3HyZ8nKo02!1-!l5A% z0unRv*$ao!ZoU2;th~yHE7Nfi9>@IF}{erKWH*So?HJ9yDFLA~sg&ax0Nb zF=nMW?%^N>)gY|XlFCPQ2>{#H>=4F~Z#&wwT{nb!E%8p+!VDSAj~5EjYVw&3|49Bm zM*pOL%QTRTkHC<{efuNyw>3mUMEW93;bc3;^9(7Uhlwl}p$Y-$Q_^BgFi`qf8(c83 zX+aEb-WE8t(h}=(jkTo$mMc#Slf;nyzza+#^M94tRXS`Z-#tz+qxd7{XuwsYC^LU| z1F1+fY?+aW?%%VvDhHjmgGZ-$PXrE&4+BLlD2|RzY>|I&^BKJueLiSi2((J&^OkbC ze|b{gCev-lLv#3=v$4LZea?h;UxsgeiJNu0%_yuv;yv7{Q{j3 z551334|C!m${|33#eA+PqPAXKKTpxyQ)JAao&sBqt1M@Y*`Aw&=3I38`IDZA1Je(U zY)|Ok$?qQe|8lEJX<3*(VTxZiSpwPUyyu923%#LWC>KwCZ2*dO^X*MvIC0EUq3#Cs zWQh;QbM=!a%uAV;y8{0J&_I6-_){-7CzLmD$U7-;L6o9E?!`|vkT<=KT*06+GIT17 zgt^z+=q%uv1j7$R5IM7~geW2^QYuvvrN0>UJnEms3?i3^XfL@>JZZCkd><^F+SH+< zrkr%36RF(!P4}?f_Lx93XeP$RNLh-p3KHkopzT_KivUd|(!f87pgGfCjx6V|&te+q z-1fXs-)}tV8=3d5M`ffYp3RSE*Xp?b{Lc;FEU$W-GlC2;nfra2ba8qlRBBc=6EIQj zDjxpOM)v;=AMJI7M9eU-8jMd8rr3%xUJk1Btpx!?0=n%wwwBT@7BWC0XEp>aG*YeP@G5W@BPXH<)RHUmiYM9S4ZizvUYLqg*n&rc@ zkGI>R1++-o0$~Aq3RCO}Wl@xH@xl{b??G6+AM@Bl^VC&7WcRc@craVn(`E=y=8Q%rc2) zlE&V9HT?SfC4#cE0fu!>wl;PmR=9>oOUYjrKwoeVKQAOsTb41v8 z=A4N-t-<&a_8UEMnzubAx-2-Bco_tjA`BL{(@Vq5Yvtfv5=tyoa4k2Q`Cf&nv*4{XdQJ>1nk`v*HvjiKN8YKzuCF$2m6lm^frO8X6(GmsIJ(VX)1QWZOme{eOEaQguirW6 zM*ULh=@7MQ(n5u?`g8C{1zvqV@}>QP-@Vjbv7Eo7VS0)Hfb|tAI~KihrTK8>eZV!U zYBirDkWmyUMo|a`p4WX4McML=0c1v!9Y>C_g zS@rQZnbpw^_C^2$6-5wT=dgzAiv`3GMMOkZC+;NYkn(7K`#KCjs3>p{R)V2R7)CHT zNSsI&oDO;gYu7j&F0(VBr|VqeST-tPlGF3#EGmIpRUKTm!z=IrD?f%tyw&Oj&?eEhd37 zH2Mr3Ha7Pcp!c-Y&2#qF0eDr2%ZtGLj{yEZxybuYkFbll{!Wv48p72cp*Z6RM}XnR zjw^xA4YOH==?{dBa>NUymsyG@n23MWpC77jLqSYCu9gHRQi#4bL7O!|8C*q=(bsNW zNCcqz$VY_3HEf>%c_?9*D%IEBvg2k5bmP26D;7jJYx4fMN6Iof;Ik2kb_xC6EUrrV ziB7)X*iRQem}U_+t5J!Lr0M}pIuF!8zgoeNssBd!9mXDH!dbAxt0|I1B9WyAkh(nZLLjlO;1k^<+ z8MC)DNs|EtNpN-9rXe~UYJzC5Clbr8Zyt!x`dYLs)$U8ZFGVHuHil1YG`bqhDcAZI z6#`I;T=mDL*SNPr;}3Y-X(THH$nY@FCVn4R$^*QU2soAtm#dpB!{OY9Nj+VdC?G^g zwRqr76sexp(!*sX(shqmJ0IKkni94Cyp769T5O9%xrmKl!*5&UBAdgKMGM1y-v(lh z-KGFNdp&C^6vKuW4u#0&2MP?XpP7wjw(R)oDW(kr5UD6*LX=e%LrkKos;H_0rBo_} zDHtUc2jS_M;yOPQTagYP(h#P>h!R2FsWZnD?HGem6%VYa!FT90>!A6bQntlJAwjGG zh$;+XC5;`w@oEwCb`~min8602K_|0EYC)*&2-`V#@W?#p0eDF*$Il#{fyj^n^oBBl zg3dK8R(TE%H28#i)B_Xec^8apRS+tjG8@E17=dA9lv(0bS1F43Algjr^@Taiw@l`_ z4{E7AD+2Trm-#kEv(SVBRM_LXF`sos;Ek`u8%^;53DNk3%!iDreLgYM* ze{o@E_3C#39hX06&229A+~Y&FFJs%X>IJL(mYpzXFED#vy;GF~Ut!O`<%&M$%fv|9 zPO5(Zmh~@`Gp}#DEJPp@3vt3S#!KvozS$UU~J?B?k~eTAqMK&cZZ6ZEhj z{r&k@m!wrH+o;rXCl>j%yC|qc5P>)8n)n-2U&Wo1wVzIO{4XEs>y_5*r;QULs;Z{f z{bM%SzC_oil$C$ME!3)quBI0jpRL*a{73G4MpvyuEI^V3 z)!u!S8%KnBcQaR*w!N8M`kZO)|C0A#{kr2Bh5wiTyERCS6z`+S{$7VdZZK*-J$#_j z1V(IO=34;C8ZY~3NEf*tRCV?ALdw_yJSf|@{ry|o5EcSA2ABRUdtw;3B|)XS_Wd1x zO0pso#Id`J!unIX33mzL4fwKQYgQuMjS@$ZwIbAIh;7_?j56zMIu9|tb;W@KGmZ}@ zPpzjh9f*k2-yB{d#;MVuawA#zuGkoHTFiW{jkF6#Q<_9V`vdJPdj*0E3lnvCoTK~) zzjho(!h~mTTn1-nhUI}ba=WKR5I65U+Vb&VHL}#6wcj||HMfr^7~9?8IY}@cM!xbu zNo1ef{IPrUy~iQM^fq$OZha6w&AOdYNOHc=P%%8^akJ0-7cTo-n^X|T-df=|cO_wD zpU#|&d(R#P^oD`+u#2)2?851yrchlzw3*M(uIL0~M?|awWTTg`e z0lw4CyTaeb!RYA@h2G?aKd*_35x$m+{NMgJlU)8(X^Tu0cVX5lsH%d-R03r2h#hWE z`nOmVDen#cbh%^tzMvq*SfRilC@phG;Q zoS8Cg&zO_XrvjaG*6uy5{Qp!j&fqXINHgk1B7#h|)R{pptBb(NLznR+lw_@093Blo zeK^Onvv%R52qW;?;mEQ+RwwiDQ*%jRZxGyKH+{WBBIGwp{aI2v(A{t2H|T^b8z!CA z&!N4D>hE2qEna~NW!Bd1R}9hU*~bZJM!^l4V~IhnixePX0NDYA1Yy`+i6HkX2T)?U zY-qT{rwr>iglN5brhWZ`sU?hrmRMbLlRU${p50d^o$!8-OZoerkNPwRNorC3ld}$? z3?YUMpu!GFVIwTeFoLH?*gP=7U{`25+`=kKLmVnH9ib|&jZfc^KNItfaj(hUxpI1= zZ+h!LMZUM8yLCpzo;wybh%3vuP__xEutLFr+2TxO{jyoW5Il)O0{=7DWN}E*kc5TS z*pZQqTM2&K3?9D01i$XtKZY0)lZ356)gKGDx{~`UE?mj->>*ur;qZSI*xdb}t9s+D z&hMP-lgq^fg9fe3u^2orDrdt1{XJA*VI6$0<)_|<=7JDM8!6~|_$yh>@14$HWP{$^ z^4lzyMkaZ>(8K^tCr%xMn99PL-3EJq9=EJybZj{3W>#dy8GrSBpjXnQ#Chi#;oQ;?0IX z9t1q|QW)S|;;Iw6#oncj-*(ln!1x@3)uRuPK~uS<aH@)Um?gZq@L;Ou)+^)B}ysBhjwrhAWhrPAz zY3OthmuI;vYj8Y0+8ysOr9K(u?)wZu&gOG%yB1hE_*Lk=@wBHO1d@Pxk zii&mu2NXiD-UJ`&bi0GsVlhVX+e1Fga{gTrNRCBSnyhCnYoh6Oc(tXN8?*t57PMe_ z_J1?mfbzBmeJEPp4|lnJ1UOI#o|rn6B(29wr+jFIHG4%FqSap;zDn%&&m9vUqju0G zQ3_#2L-d7=HSn>#W*Ph$n+6u&LgsJ)5Ys_`P-)WROI`38?|d1VePY;*bLB>`+374X zb0k)XjzEht1~XaI7PDqXIYtyyAw)Qr(F5pl9#RT~aB>|aO+vEGnIV}Ec5(N}NHdp7 z3mMpFVMz|7r`I}dG2&cMZ7_gKE@kZoZ_vW5%~I=&lPrDa%Zua%1C<=n=d2M@{u_MH zo=8Y!u{78$oqFrj+J7n(%H$v0WN;!0GqtVLcO+n)ZZiq^e+oPmC@K`#!+E+R1Wog` zY7kozZN57YYPOe?IhL^i8Xlj^O+Vu=CK_i;3rh`|!zH=P1>IimC9A?!%{`xbjPQRL zxp~`dD=QRqwBaoGk)P$BM`iK#UB0g#eKBxX2Ks9EB0ylP6AP79zu8BFeAdntFH1?1 zch<&j=|&7uVEfZitg;Y5i}DeJQ^kz?gdOj@1~`V6M`N#ByPcoU-5cX4YyTgS*m>yk zJ-#?>hKqh{hz(U{rw=R|0okV0Rk!lWM&JBo%j5F$!s@bOSwU^G;W09 zR`6mOvD$GJoHZNHYk_DQ$&4ywr;kOEf)M-gT+`jFhL~muDsW&_(u$r-wR{(J&6_rC z*|TQK2@@xwm5mTTNE!j88i49Spj4q0pg^Hgg-WWNWlG@vFn3p24f_rRFiADT>th|{ zo$Inlu=W4`hq{%+EWX-kC;=4uZ4?Wjg zCCGHbAbr9*ULGIWVPgXtzO15k4Uao@5XA^Dg@V=G7lq>zuF5K|hQY0;Ct;_rvMD9Q12EN?QL<#r187Lr{&^f~7!B&24b1Kw>N+K>lw^soj zwOrJ}5A3=;D2793Is{EF?LT#D?a@v5xqX`xgNk@Pj#lFR-}E~$y^i}a-^be(KTHan zFZd5x*9pd>j};F{LD{$jiBjosM%w5Wc#(JfFAsQm!2%>oovD+tb^SKKZ`kH#K zMFe7^EWq`^`Uj?(Q+c`CcErcqrq}YqyTFOM;PVzQx^{hK=9;jn^H5Yf(|A1KpIkS= zgwEVf*v%yI$NXSVkqRfVnO6G4uTJr6n6Y_0W%yYYWxrcu?573 zZHaDxltYL_XP!$DU!ztUTP`Eik*?N5MoGmdjUe&9@*qUTVg}TYtDT}p!xtoGa4^M? zCZ!tLL?yC0AYY=;FuCZg2xe479TgmOP>5{UBfpu3QwwlMcJrOw^K9*2AZl^&5F*QF z=?gCu5=XRw>l_fD(v#WzE>uB4hP5b*kX`a6FHLoO`2KbqPMQNQ*C*Cy#gKO@%9mA1 zt#jBvTsxcwJi$5E0b5ws~JBAvsLcV)&zdJy{#8whni+{Wg zY8V}AiGWP3-JDt+?~QnvvNeI%Ba{t)YvgTVP!Tu}!u!fI=_VAga@`=p(4e%_vEZG? z>ox7gSMF;CUiEubT8>?{yV!roPS0K-$O7dN6pNA=BC{{O@JE1+!6t&O<)OAdU3oK0 zh1dk}Qqo2LWM10i>=o6B%de~FkLl>7DOuK~A~1v2PAkQ%Z4gE`qv6sb?5Cqhg@We%2j)x5;?Q4vvqC}67PTbmmI%o%9`adhIB zX00QZwzC39)sb!6vj%w&19kl}t8Vc?aXC&WNwLfGh@E5_Z=xu=Q^y{{J>y6)$F2jN z#zIhE*U~W^=*KJAXpAfwa~gLv6xoc`RPnoxX+*IA#3DoqGXT1f&U;cx5-hxBxgX=t z`d%kmy|2XAzdS zoG(Px+z!4Z_RB4YDA%1c_rP^xUe8UGCL_>Awb_Wrl}$jjb!$neB% zQa-kRfbmKF@fVI#E%sdd=Rb?LpBI#>6eCjA&;5O{#aGf0x+~s0Pb=& z^Ss&Nx&z@kHfBw_VVmR-X86b5UZ=e6f;QTNXHlW7=WH*}*|?iz*&Se+B8n&=SpkHP z!EN4wdkOx&sHsaVB!_otl*Zqg_B9z=D6oSF0wS`y+wrG$7@*uIPg2YoA4N+BJ<}sl&0A@g$ zzbq?P2*JsCnyz2aLwcTnmI-4I*7EV@v)yGsVaETkf@k`68T#`_Ta%6uh)x6Jlaa zh*vPRpo=}f$q!wp5Wbp5(r?lnn(l03x%0V|IRl588}GQu&*5-qc-^k5ry^PT-H0C| z%d8ZEgAZ?dg;o%;frCdg*1)*242lY%DWxDp2vC$nK!`|Zr2#WP>BMYTdSyv|Fwfwn zv)k=^TbkH4kit}HDpdl>QXq>O1gfPv7*`ZPd4^;RFev#L^Z&(?#HjUq%4+F0hFs== z_F?fTwJl|EZ8{4sTV2KW`xhLJkGKSG!ki}3om~3R4bw5YY8=ru(E;a{zH%YGhAiq@ zp{9hwGXCvudd0bZbCvkKXez;CjesrKE(nd7n9c&ql`G#-yI9>`>kjrP}&-SPR|VQ(^K9tK;NMVfz1N! zB52>@wQQ55nHRW*;xOL0gh>!LraMTiqfExrG?TRN z&u)2Wpn*;lCxTIQ3nK($0g5n^AYctk$9-$(FW|idYS!dlJg!?s^p(eDB-YT^3ib<3 zVQ3IzQR+M&Mu@%4Z0M6+Y}->KX}6|=Q4K)UuC%IJEH*6~YOSUOz3!AP?B<4Gil$~d zx0(UHb%W`!^Uil2u;N)SaU4r?A{&Cya&$pr1j`A%66)*=rJ*GUtZ0z^2;u(APou9M zo)-Doq#^a-dbyfb^k9(6`v0D{GHR>gr+o%km1ddrm4hu;aebQFVkyp{B^dJrT!Fd( z_m*K{Ux$t3X@Qiv@c#*eLz{KRmA|PH?*fw664o(f!CG}+oW(U%&o~$-g_4MY078kS zN~!m3KR414%TpAsnE?JWS=D=$Om`A=WJ32*j3you&@PV)z?r zlx7I{-?WABy6@rGVam?qux14Xmpi-W#*kdY(ul4raOuQodt1!`B6g&a_a^>TCvCxB zr1jd26mY|oa$w(I?)9n@B}5()>RHlJV)E}8pO<@}zHg19Ux|1sq+gMF>(musmi!lP2OtCM z061U|c=@K{JGr%WaZ)oJ%^^Y^WN{8%QY^-X!4M(@M2feZNgr>oi`{Q;w4ZwXN2h!+ z?g9LUSinQY6($bm1P@P*>-y)Z&nUQii7B0d6)=SX!RcZlh$011MT)USQAHF{VysbA zQALU>#Zh94qKg$piZAT>lD%(&Y=+2ehR9|i466=D#>%*{P7 z^TzPfay(KU|6g!M$Q)`*T)=rNvD3vv}9Ay{Txq}dOx>W zaZ^Ar*jJKT6_nGhX;FOc8?OtK{Ounj+wF69(nJ52@vBww0+tTd1WK|%y6C}3r6ubL zIqXvV*LMU}@p1h=;=Y5$@GmdPW3lIO0>z`4U~7DB-5!@eA4Q9+7QvO2yL#ARG}^XL z3>0CA7#sBla{J3Q#P&0d2Mds0p2tijUiUIj{Pp!%hv&s)yU;$S7Ej(g>iXGz9xAuC z7Za=0`*gA2uKb?Zhlm8>C(9sN@AQHO3j8N9wVkl7iA#>!D_x!Lm6x=JNBI&huV}mfNVn#e5$((-v*1 z5o=oQeyH5Ktacceu2ew|2-~>C(EON7cF(}bWI(7Q(%L0AehW9!!%fef1LmO2>Ev{- zqbX~QUsbC08(F+*>t=tbE=!D33>pr+au;YYfrbz;(Z5_XhppZ^3yx3P%w`d3V8Z`2 z`!q><1Z}pc?tpGr3olLKLrcHj?e^d-?NfJ7*TZx320e2k}m zg;s9#g&jBUtF)JIWVNMmwlei=HsZ=ls3M?!{n=tUbh{kBuRGY#&t%*L&$PZBnV4^61U;M3@6Bn*8+sk5{l2U?0#?* z^KLw`xQs}-y_2-N5vN!66}y=R=HHp2>Nd&kFEb!AdHwDM$nYa(GQ_SQKL!39;gzq` z(ild_1pxdE1r|qEqd5Rn0egc2>myd&cY-t4pk@)P8>-DS2nJ>o&NQuOZ%5;VHLpcg zD~1YyBE9~{0U4{Sz5+0O%&dkA;KWqhb00`O$SEyVlt}>eV(ptv_Rk68m`vin`@{RZ z?iK5gNbZNlZ==MWA+OPK@;Lq)s)6R!{sy4m2AY)8l+2XjnX&M-(?GIXy)Dh{?|5oy z2m1wfgHp%XFS?CvWfLY~W(zhkxfW05J56C4Df=O+-Rj1)q9G??Uwmn(y-;&^ipw-Ke3nt9mN=?^%| z0aI&!$A5@7nWAkrZ)waLTR-#!JrAHjQpd3$$PwES4Ve-9*HKwg9Vn7BS^&`=Sbkt& zaj;7~Y90XxByi0yg{TtWPDJ_u-U=2!18SZY20U^9=?pmxFi2q5`2Aj!i({p_4q*Yt zA-QicE6C~E0lH5{LyKd6mBz>gt`FTiZn$PC-w3~gHSIK!?I{4(apSUds(>9XFLm~^ z85r1zN0a#`7`{qA%e%z#8|ni>-*7daQxMk>cU>P*>`CDVPpC;Zo51|YFj%DOCL5n) z?ERJLw`s<&n_xC!INe5+6hf z5E%nuOl!BV4`kv|F85V5ydYtI0fS_q4**oKctuqVibFt!^YW*f&$(E4q7ft&@c(!< z7OX*+A-E`hxB`kG=S4tNhJb><#uYn~xL2+P=&An7r9x69Ds9T8(20o%dV|%KipXgM zAvYffVA_y|uF{oNRaI40RYg@*RaI40SKJ*qgj$dywXMc3kivVHacQY?F1jRFD4Sf^ zbUOIUt0wptvLG;6FBv^zoEnV|XBbR6_*Avhy7i@dbegaP7b z=3pwd-=iQ&_t#_gGrl#CzVWTuRq>ybv(!xcE)lihsipprJE28yT z=8Kb#J3GRV1KGblv=3bz#dD4u4zd&xV6%}A#F5Z|8^ay|wLqSSn%TOivj7}v)&DGt zYUaJ6MQ@1x9*bX}#O&-9_WWG&bCzL*xYzf7ac-WT7Mm506LD_yM;f}i@bmr=^__nU~U#O`YL!+i=M(i$Wg^Tg4i z`b}g@u=0&GQApzE^wqm?H~Pa%w3rX{Jr_dvMbR@k??yfDdz|MxcC zq8Fif$Z|_Abb=X?)_roZKoS8MoJ@{#qYPPpM^Vt7Tb-tLSH1YUWZ)C2+k1^WcqhC) zQ6xJY^aKxFbkRtNC@6}o6bdAUOn?(U{E`<5`;*4@AXGJkh-n9i><%p4oriQtmCwK1 z<7qQbkLgIlAfxy$V_h_o&7LPA@p=$c%;wXTt||=%J=RYft_pqNbcXO(Y7GXm2_r&X z1CIda_n<;lK4~xY;3-6bB+gm_%QW2Do@&-goABhy^+Dgz3 zhgf>pG`tSN&rfW248m^&&+GhBr%I-Yeh5OqrM9lPI%X?xS*Iso0rED+5Pi7YH;q7}=%zk^A0QxE4l=0gmIOoWJ$ z7?F%YJ?D#*Cxl3ByXut{7teNh4ICs@bVQCmsI4Z64F+nO^-(?ZBN-YF7hG|dg4yMT zD28Xj$kp5hY6ppJHHgfeJBsmT#FjjfQpE*!CRzvF$3s@(V{zZ-*9WJ5UT*N^s7WBB zIpD%*TbC389w;IrBLkLkM;7#T!luG&eQvFd(!+S%gu>mlm@nj+V)A~GQ-?3<`XQ$} z|7}mYtsabRogl}l4Uj?j3it{}Uh;q~crpO3hY%>B3KGO%;GJ;9b+RIHdmUiNJ1t&N zX2fuS2P`|go4i|)dX-e(NLY$80-R03{qAg%dr`GZo@Ri9rQYgccD%kiNsJyB@c)lIokFO5b z-o^BwndmuYK~Qx*2h<4NFJ-%)N7;za3sD${TayX}*{v*K>AoizAliM1S!NzU7{YGa zw>bP@wxsLjMHGx?H{g?^ERy^17^s$|8K)@?uy@ zX*(8?hc`2p&fc)GVcgX!F^ZY5&z%31sitELk!)eTs8H;r5@DW?5;m=f<8H&=sS-uP z9DJRIj1pK-3Zal4PeIvKUEMn!%#MvLRiFaeot&{a>KzI>)O5xRiBA;4&%?Tow$XE< z4;9h~vM7h8$DZO#>POrWYPr(m<$Jq3W7EkY@g3LwIT+OTmX7fH_VxjlTatZm!|3=y_&wJ5x#~W0+SpLq_601W6j@m* zcH+@;FN?%3z0piYDG&gg9BCD>gMpc=gs|o9KwHJL)Qo8uLL%wrxcs)JrMe>+60XBxaABP5SG-DQUg@zn$G= z`&EE2Geg=@h*_5>0gm(G*0Opm8o~5bb)dURlhKv6Ilg`LY0+N|IoKvf{K(kN2~^$$ zcf?(yq|j${bR{BM6*E^3Nc%7%LN6kG96bL;k$1ch>%>apv!EPhOR_}l%)BW{2%3}%v~)51_9Brt{$ z$Ye|KE}PEZJpCrYzlBJk`Wi_c0wksRJ;*0<;o@& zB1q&FP>wiKj?9>rGd*zqbP|L-ZZWnP7t|GE1=>b%2A~3Hz!pi&4*-u$Sb>1Ysx0wA zz{brY6hlD>7@^alT5X36SAOhoBj-rAJ!%I8xQs+$@75vjk5rPQD0tG*jLxH&{i*WFDPrPhAA%49AX+)W@c4YRaI40 zRaI40RaI40RaI40Ra>ZeT9Dw_mnfEuF$_Zx$0M@NU{wT0uwLtw=YC8tl0=6u+4S9C6XR%{ zkKE%qeD;DKYUA+tQqIKEt7^Wd&#ex)0C2ogMe5aog;ni_7D_OyUjp@oUe~j0 zUknksa|e%eT=%t#=Q-|Iz3g+wvCnd`&mPvj`-I*blfgHB4i}Wl#AC|2cmACrO!3?a zzi0*?{J7?PioT=V-C|^osNin7V?>Qut^UAEg~Aw(eVof$S?QALCuJyaD*Rc!awe4% za}q+33RF-f1Q-Phz?2X`DFqe~pn?HI6bYEnfjp59FA9fy(4OkQ1kc>lLsZj6QB>7c z6;#zzRaI40D3wICTDW>?yi5)a%Uc6J3Sp(oKOorU*QYjL|3;bY1eMP22d+D^dI zjI_Gf#BW0${Y&7En>S(!FRj$L5*m4CL`q{Z(bK#&j#oNH{qMCTNZ}DIgi{dx)gn!! zxfZ8Pv&j^tV;`~M8ssuKcNQGz9tDR?WcOBSlwf8&E(S`|Jv2seoxO-dNskE~#Oocl z1ic1(ZBQ=B6EKb;>$`pqun~@;12R5}>sUacB)h`=;6y)$icO`Gw zy0wz_$pHsN0T?wDNi%~*0uHv0gLFE^`CZx{!ty!x#5!JFkgd6&drD{sanwXlMFkN3 zI99G`WuH=)o}I8D=Iae216 zh?p2SeOL#UJU4Rv!R}S?0Ol7`y&~_E|FCyJ@oVRAce5ag1MXAwq%Bo9NZ$q`nu0F7 zQQyn5w?ZZP#F)T-c?hWrP>RS^%82e6ud-Unc)?-TqVblDmgpJDk6I_?Mvta}+X4ym zH4<*B=U8U`*EW8;ae9c5Ct#$Ml=0VY&ck+;jWM5~{M?OAn^Evak9K}?zvkCk?NrlU z%BmS68uT!b0(t$Hb8l~dBW|a2Pc_PdN9uv(TQ{k^if?qM{<$;;?&Ew#`>Qd*=chHUZaHC7$EJU&@e~H zKtmIa)G)?V2_f<3U(c$lTA`wfs!>I%p4Z|A+!LEPmX-pIFOwxCHy5|gi)Y!}bgvl6 z0?O0474Zx-1Y#hFd$mG2<~kFeVuGj$l23!>ZLU0l71eA2-|x*}wtns~gbdIiZS&-3 zoyc3RN6zx4zcvMEv2^F}z+v_g2bWMkG$ZU!TvA3CgdmI;lIS^+w%0SEnSdjxrdh8r^VTnj=y_zVyLEPTk$v@j9<`i0&zgi!Pz=E|(*0N0@wj3p&w zoJYj{@_Fj~H+G2}WVra9(Sa8bM`j}?24mWS98Ea)+UmXwBz|6(q~{Ecp_Zejm!Qf5 z0QspcTKhdcZ=I~0=IQJVXb1p6fJ)6!)w3~-cUT!tlWl5bw!GhEh5h1aj_sFPeBUD` z+5Rpu=kmd+$7Uh+Jz56cF4l#Pzl_X4Zvza^nP9AAe-`8FPyVX9481SpZS}uk^m^`o zFk5)~kmBr1E2$51&9IlVHdLjuhXvNda^e6p%P*u0M>$l9MeEq z0)P|+06kB`?eYmHh^*fuA0Z|zUR(#SudtxeV!BrIVqcrd6eKYt!a~G#h}JVPPwE&p z!G(%IS2v`kxBR=DyO4+60p8d-UTVGPqyN6Y-{HRS^iFn%QL42TqO7(`M!?l^)h>XF zo?)$!hNm+D-FK=uBSITm5t8Y-;^ z7xrMWKSll)2(xR?2e}CJ`Sp9=Tw22{6!YT3#F1?CEUB^UF(0o;QeN@x0n%-d zp_1C>rTe~pm$jxHqf1efr87&|9DsV(dS|cSuDP$m zA)<$3MiCfbgCVQKTa}g8PZyOJ&n7$wc^I!im8qw!iv?fChWSl~q}N+j222S;yF zlgx;SkY{Uras7XXF|r{ZMG7eQDT*GgT+r2M;{@ZXA^0w;Y`;<(hoR?sV-RYAp{~<6 z^RpSdO1AK}7B4nwo}DG_SaY}icnlx=+W$(PGxB$GNlwKLqGA$F2((ohoaT7SX`^=o zQT-$)%&6QAPj%#Se=pjsgZlv*e5m?yCu$?U3_i}(n0Axx;^OThGEIsarGg-LKXOG%#3Jn$= z;;}_WP6r`8pGqIk#Dt5K=R*doowUpvB#WB8!2v{woqQke^V2s;!_m;|^wz2gTgZ8m zd$jV$`@A0dt$YY`s;g7}p!|bFD3fFFFVRpya)_`&dW+Dw;w~yI+&=RQK0Buib9R@U zN?VO4U*oKl`F8LX#f;h*T)=0RRv6d<^Z(2G)o-r>$vI%!mPG<<9*DpZ*SWz4nEp}7 zGnV%`;l;cWT7ZZsyi5FubF|EC9{4O|m;p;m`eFu}wd)f@fV)6@TTNFprpA5l(T~e` zygIv`r00XxwVA?Fl^=(0MGiH+itU8q?e%0b1U4v8Ap}B!gf4Ny-n_d2ICvhdk+}Pk zH?7Djx4iv}n4O--H7*7TehOv9;>gIdc|vFAmykoaM4h}|;PBaom-krnR9~>%H z?I5B#4BnXRlT803M08Se=i{8#rxHA=0nm0LJGcAZMkY1Z^Ie5Zm8x_U)_B$N7VV8n9 z0IB)GA(z^lK7s)yVMlDeZu28$>TcmL#}F$;%+T5{(Ncbfz{sZfE-C0fi#N<~t;^sp z@mH!@bA03?d)5z;`XY*okSS}FXr`)UGv0?q=jxLiqd2iySi~pliVcJ7(X-}1v5Z<< zxCp5i)!LD)>aE~~HcKH_M_$Y_h+xJcN{b!rg=W3}v>VK>#>bBuN~GUEig(X(BEVL# zSTP%#hMD;pQ};26JWRoBYQL-&Xf=G$86l(tzi=-^zb$|7Cr+2-L#^h*v zu@$%*e>ODNS3<6U8HO1!!o3ksY!2e8*!J= z43OO8S-&gyQZdH(4t)$nB3%DXu0t@)zCo8Cct;^a{g%__gFrzcZ+-IuM-BcFl1BDi z#KwN!wqN$e=;&ouL@+QgI8MlZ9}5i{M*HYfC94vIMncBt&Dj3@)7!d4x6Q}+DYC`F zr41AleWiGo;h1Fq?HpT8Wj{RiAOsqE)@-8Fo3zP&sdxz4Tusmh<+l!CZ#i-r-Nf5x z{i;wvG~5BM@j6gL7U_L@&P)qdg1HfQsc&_tUhhM8I8}H5Z*yMdbC~Cf_dH|yobqq< zoo4}5VIF?GP}PkN9XOc6+`DAZ3hL>gU_;e#+-Bxjs4g^9rmCH?iI;_LMRPzJ3#fmgzGMyPBV;DzX{p(Ek}86T1*qloxw`k9 zNqu;>SHCQi9AqZ!QrFq>_@zj~3awz3RS9~}gURQrCU`O=U5&QZ7Q_}|EgynbiLDc4 zz-SLy14Eb9!_^RnWQl;6K)`h41Op*&Sr=%$vx@JUcUIGGggA4no{a;MH2-gny>dJ0bSh#1mgNyu;0e=GAnlg#t~H>$bL?fPlkOMxlc>A99Ez$>8C zEqcgZLze^roP;VeiWCyigs51(NLq=EmL`>P;UOqXX^xXiw5w?@rj#aWElS>^4j`&B~`D-f#IXl*aUo@ zcfS!DVfeO)$?PiknIoN-wl4SnFShE!K5Fxn|Bu~E)k~N?m~aG}#m|I4pRHz1%EROc zR|Iq+nV1tGJry4XO#TN%d{-JSg-KC{=SI1VB8LkT7}LEvIpD*86)i6y3|3~T6T$H( zVIn6AuL2a83WezFquk6D{0!C9k#1|2dn4muwnIwUo1TrYS79H2D3SGK{z{kkHU4hz z#*5CAD^JY5aD$O3%2G6AA2s?O=8vwD_D5;1{+?z3(5+Xzt6Aa82$>M$8@?fwCay*^ z0!g=DAn#$X!$poI8F1(XRA{@SSlgfu#V03`9gt_X&t>W_aI!uC-}K zA4za;wtBUw^?I(Phw{jsvVKBwCPb~S@c{OQg7e-A83cKhJJUcfF$^YPZMJea_^IuD zjei59;8ND>w7p*o>9P0B%Lg5{oT`)qne9Xv}1lirSCs_=YX_Fp;@;M%m z>hdBqLepY_`$9B@0XT3#x$Q07jcHiPuzv$e>Mq;@byGe6#+N>Ct%klEhIdvj)fY%S z%LwNG7kKyfD^OxI*vVlIA1UG9@=$4e>w549@^@CVbbr7aolc!CFSFZ0mp)g&+rLyfTR!YFDX6 ziq4~1$?aP|2R!@Oj%^bBE%B;xpY6FP-qn5TH$3!mRzFFsNRd*F zQbbM$(^SmPygIE7hxYviSN=G`ws{-vqhL2+)R-J>Y##FawzR*G7MzWXsN2XR`jkY= z4+%X{2dPjZBF_&IlHT@s^K@pQG?Ha*12qDcdp?$2I#lYXWwUU6WASEtj#ZKV?#6lt z5$Ar#?76WL`QBVcP3@gf!bQ z)_lfDi4gpO!xZ&VOH8Ilj#&t=$-#x6jWYc|S|bm%sZIGk?Fn zia?}NED7`gHRI(#G)WbjJ4qBgTW(mv51)t?C^z!Q%!L@Sp@gDZZx+a^;MqohO<(Bl zZ)xzfeI~fB3^>FI{(a*cW5tMXp_beYGF|e1_#%eb_q;4c&vF;5BYpbi#`HAd+J+-x z`)wA)O=Cmnp-sO)2v>BBksm$2rZ(Kqc)n#Y17J3F?utj|1Ap%jb_K1L?~P0p8Org6iGV*rq3ir#9}yZ z8js9~koer?UY|9SyKUyVh>w+(p9+z5jrcgm_3wLLwl(0+f}z?-&Y+B=R=O{vHRX@b$FC#5K_G;RfM>OMZzm3soUv1U#6xMe zT+J$4AaamdFeKO1Bx4C0t$s@%{)}C~?1w+;$qe4jW*6O7%M1ms5w^5eGho{gn@-=b z>PNIkx;5mzi({57P0pjc3HF;Tj9}6)P}?Z@xs7D*WB4W_v)>^e=ECxk;9whWXQ%oP8u_0(55w) zx86R!_bf~{Rap;#E)>l0p@fiew|;<;@T$JlNCVu=K)y#`J2_~;pa(wXECmpR6wPTc z5S(T!J;#0lv=n2Icem`^96v%IAz3`#QI zXx^|5LT%mB7>|rbeGC?^a<;a@^=Ymioxt8cZi9Nq2r;ddXB>wq7=6XY#|c&;k3bOS z$=>bx5cSeY2lhZjH81k^@HZ7pLU$GB+?2&3V+Tq?_>qq;LU|WrkyhJ-}Y%wi0QE7qQl0TIud>+}g451NiT3sv0Sb=4DHR zX0uxp%0p9UP?It^ED;;&?#Ab*K5Winf)2ZQUPv8?h9kNN$VQFO zyNO&5wlKOa^1n>&X28O0+USF$>AryWVqUpho$O85?*MyU#}m=x?mc*NUII`eLWHR| z(57<8awO6q2v1HRAI=~e;#fk$7C%PmbhZEnei7sVdIp1jh%x{_$aMz(DbcjXTkhUN zYyddXg3DQIm`MJ6)a_fIfb9Jl*!7uMD?$51&4|wSLgDOgWLii=z6UFKfx2yMui!9Y zdl&swGizjq7-6})IVq7hG62a{Uk5K^C?d!3$8o+j^L^b>z}pj~S=0WouEX!RBJ-XW zxDkYlUfbu?m4G8Y0|>fZmh+ygTa%RSX%*SMcXP7e@H^378vApo%1hOpo|6j)Be&D1 zZa<*R;m#SEgv`ihq@huaRwE8`ukQP~K+;3k z7ZTzZGSMeA%fCqUIHt~}bm5@c)X87aB(ep?@!{o77H}=dH_Nd&oW6U1s&mi%l{mZJ z67M=IK3LJ8#i-(L+~tXycDJ3$84yP35QHEhmgotjX+hQ}P$g9GQ(~8wT0rUJO|L#v z% zZ?-@4#@S&QAygZ(3+P(%^B#f4g{H15D1>Miy{lB=VAEBF&YApO*PxtiD3?Dq7 z`F}UC3n%zz^?ocR&ZGXmMXJ{?RMCMTsI1g_f@_tJEc-D#be`3mk7dwOqI{)FQ3xm( z3Sd05an9GPAD`_%M{?us=JAvp4V&W_rxp&8hf*`ofAwT9xafGTrm!AT*-r^2*ckKy z;BW;Q)}WH8=F;AKL55;xX@IYyq4(yKE~Xm^JFuebx^?>lapPQp8}v-LHt5Nt(L#S_ z2RogfJ)d!Yh$c3Y+e1lVH<4!0>>x~GDp8dBLIu&$9B#$2BgeY_J|14LhtBd?H~c6e z?*Dx!M&$d#R{;z%0T=d&EG4$xO$n*_q58Tib7YxuR0n0tX@DC6fX<8nNdgZzrw{08 z5%rft$hS`k;hRnc6;x=Mc#XJzgph8)4Y3n=8|Gd2*U%Gz1$jW+Ap`cS^zcZ>$7e|X z!HVHviODgHVnb3I4I4^;HE=s?Z1YF&0Hw5QH}`6(dmV@M-r0fo1_1Z+-5wii{i`f@ z$J^$vtPy&T0T#j+{fp8?<;C5M)Lpnk;*5w8@*2ykMZy^ppGVIRIS+8fX1Z!hKS zckh{zY{snC0G$4PH$WS3*u-A-mO|Nf%Hhy#w;+Z2X;e5qH2~GggR^E^x<&-*K7TB7 zr;lc9!v=>l?mtBLp=c=J0Sl3%W5lHJEWBUe z)WBgXZ4W|wWa{T^ZKNXfC_P)OrKI#e&Rd0H_cQww(`OPxED-_=ZLBendzp5J^=E~^ zJ&WCm0rMIZdf2`neQn?M()hDw{+qtyeUFQS+GGWg1z-yx3+SjuvhHng7~9wR61XUo zhD9XIM6gQJ4@HM>qd(E#j%+hB_g8$Me4XPt4FyU-!qIWhrXJqXEV!YuRZ$)Kk*g@C~wRn;WpjD^@wkolHmuIAO%n0Yd} zTl(KqSLj_u#I)RceJ>v|-vA5o>X5TIfZh#)DN0a)x;I#g6j)8_=}%?KLfA!7UV#m{ z3!RXntHM99BTAhP|Lvoy`D{B_jm!FQRxh8uwOs8VNqlu@?UDBO=ZQh>caLM{950sL!Y{pH=UNNX|q3cTnkgz zEZtqt@uPdk|vY_$;e9sBt`{e7`RO=Mo@ zoI{+An*On_8oSH+uFj$}&*aJDnmw5EMe*kV8sDoS18Ou71dw^wa256NNbES8Pix~x zkH)*aTJl~?3bLeix~EQfuGvjQdBERnsl^h(A!a=O3d+{s)Kk<*sGR*MVDk>7jk~cA z6hV}|%okUBV>=QE2-rU;Qnz^mQ>n6Lbz^XwMWtAV)|`E~hA-ohgXE-2h=QR-G?PTL z$E|TdRaz`C6i@losd!ltRb>3N4$5jtFj6SW(*0lik)9G-jtXJF9@Qd{4_E!St+#@BEPNslQ)I-*b`CZ`i<~ znVV-tf*eNzN~}yNy?2SX1?}why}#DCk?uWl zZeW1X+aJyQmtQxNyyhXJsR#^(g|N8~s-E&zx06%0A-(#7Y>LDhEw#zRsySrd*sR=nVi@=gIkqTJn#hF_Qy>2#;8& zh%x}443Uo!8AjLb>#1*Xm#Ay!6^JjNc@B$1pB?^t)yV2+ZJLV|6y)GNKpZ#>FK{}< zkX+O5DyX?|=jy{T)B1J=FofdnL81BHWI9g&58S`qeUBY}wFGrX?P8X(%6%9ZEK~@S z%E5~Tep$-eL5dZ}>6^y|0;5sj(ONt-`qcgSXzem+lLs=)#MgHc-OFFjzgR}PLKI9hs;z?hQ)d7p)A%=LUFn^bQVq^lo^ntU5t;9_Fd#TLP<+aj*r zTB@!Y`8>}tnrTQgN`gpc5Lj9|C<{Ymg;i`Ml#m%|TQFpnVP+e4LQu$}H8^ds8tTKd z&5pGbOMn;0Shem>V-z<)g8N7+0U}B9ru!&%nZO%4{h)$d{3N+AABeM5=aRGB+S5!l zxr$)%H19RQndpm!lWPMrT^xdK4ho>-@LCoj z%F{vvucP*Qt|#%Xmur>*!&=9ElHd^!kVxFr)5W%!CZyPNJOvDB{0)No?l+blMpvS? zrz$dTq^-#8a=#D*(QTV(3Gs5GV9YWeGrna@(=tk;oWSgdWQXps1J96y(|~IPk_-W{ z0!oqs1)yDytIR?>ySv1}b9KP&AUTVa#&=ideGWUUq1ZXNnKVR*5Ss|UqoCHWiBL9n+=|1iH*h9#aumX{7znP{sjg!e_P_k3F9mHzZG)epc zno-vNc8Pta1p}k4_V3m4I`42DS|}^WYZv7vgg4NIxA|reL5es}*v1>ob-VzBYfZKw z5qYcvcV96PE|oXGn|sK@Pj`PxpSj*|iPE$8b5H;B2!XJ@k5v3Tm*+>r;7<)yV*6s- z``iVbt0g2(V~5*o{cc0IYs?$}b@71;9G=?NZp7j(O_FR7Zgl;fYaq{ea|#ga3>ivX zzD)~lM*J&J?eHZ#l*BQLq(IOhSSNG_@s>qWFhLhTe&Ngf9~bX7tBdQg&Bo|!C4YPk zz}ErDBDlr2QX(Ky1j{w#SHG4i^_F>29=;9;Hde%Hnll1czRJz>yWhjg^ISVZv?MV{}H2+(lc){@tCp#Z<}b-pF60bOz&1hs8+2h}`@m z4jWhoK={}L-B=I0g*=xgIT;?A26K-R=G7cEPKK~FYZWc*9b3Qh!%mR_VhEzewx=r% zr296`Z}|)jZ*k7*a=bq;sa)n;uO4z%%ei7v9&Bjd>|lm0thOmDkEApwqWIW+6fCz& zOtg;C8K%jIUd=0t?f3V>GxyheP1QzQ$tg@4P*bt@XfjpX!PO9feKAzE^g z*0B}s-Q`jo%n}A*2rTaIZo%E%2^QQPf?Lqw?ry=I;O_43PH=ZwV1dQYcN?cFa{=?? zsi~={>YjeZEXf|t{ncKDrkS6SR`*S6)mDGy8j~)6nuU?`wM0B46%kvB#l|rjI#-(A zlBQFc!B8)Eb!*T0iNTdPZClJdynCKubz?!b_L#yJj~l<0W2V`Y`1md^3YJ8C5xu8; z;97+PEexyNnWL>LQjndE?}BYje}-n@76lU6KV>1qSEJz&*VDBrlyaL^ z`07tm{_ysdj6~%R?MCIN3&k|%PFMDdClb^mgF1iYlS|(m`kI6_2`D#M*#E%nk#g$d z1w3Nrf+yNuPdH`ofWl@BihIfhVTf3?wXzQcmh;?ct z7d1_%VpZ{qd+$&&fjI)&cVgh?^yZa{+w)Z0N5GRL{Jq;V`-DxAqD^0;Z~AZY+2D@! zi&XoRFuO%wiGIgf6No`l;VE+{OIl9F&l+BG)2Ha6EM-zyS#UR3+A)$^F1ah$QRz_v zda(X+pSFkj&=`Sl1LcxnFmd@43VZZLXsVh`(~9?lG-KNct8)jIn6*s=J$Bc2_}KuwgK;PtNpTI z>LQ>k&v)S@=hxcELVvz~y%)>Q@}-AnA3iZeVdJX!2LAUuWtyKxN{gr&8d3N-u;*46 zIRJ@*%tfNbHjXq0Y%T5wZ%^*JDa0`cpPG=qEZ%QHKe#h-Snk8n&5Z`EmpwRMIPKTR zS>(5g8G z8fBTUxUdWeVLc1spey%7F#s{dCOAWK$l7d?Z<_qw%s1$T>mR9}pd?9mrdyS=&#Kz*7Bp#mHdFX! z5Gz8RC4S%FeKYydG=fFwG`z@_#X8HkHhDc>V4FU+ThXBfMN_jT&2TJo*LE$&}8Og(E} ze8xD5VZ|pl)pD$c@xNDp|4Y7*dDGaAYd8Z$wn2V7o=KK*q)_ITFZQ0XbPq%2X)9>$ zf58?@dY{e_`W`g;psjN&p!0}W(cd)@rRNn<+Pc@K14|owcUf8GT-nUDf;En&W!6f5 z)XOt5f?>Jafo*&Zaqh{=Prb+aopqrZhkcXrOuTu9MDoBb-RK4P_22 zDhLX`wsIiJZUMd4@SR3EkYz;pQ&G5vgTg8Ul?r*D`+?lDT_0Y2akUe6Y&sQtrO_?b zPfxT}t8Cs!SZk7iOlzygg8Q z`{4Ao;cpCTnoIT06w#zRICb&>C;;)V;(h`Q^rRn{1A!GmP38iEyM#Q>PcCcCZWZqS ze3eJ$N~?*k@G;l=h;L)jV1629Jf&kx-hCU_v5K!Cb&+lEtR!2n`-$~}KtW$>p34fZ zw(K~FG7YhQa^)1s@52R{34-A!2AykfBFTxeow0y7i(m*g8wKzBnXaeUvooQDFXF*9AP4CR+FkNtWm{K7@-~qyTaY?GxR1kV6pM z*Itj)&f7AKWY214z&#PJu67_&WD}c~52RR{W3os2Yb2hHc!rcWlw!o|!!fC(R|7R1 zYapF#=!}2RMkO(Y21-J0Lu152&_WH>&nyep6@UbAHC4&SmV_TnjE2wtmmX~ji@Q<4 zbjSe}>E3PQ_S@Vw>ym-ZI<3kb(LRfQt3ECS@@pgGOg`rz`7vGX;#fSi^sP+Nd_BBc zq=EN9@L1oPcm`PbjaJLtf*gmgUP6D*nFnoQ>rBBPDcj$Pt|Ce}OI}pE6UA_Y(Ovsc zf8FfGw^iFket}v2goSU}f`VUrIn`!qV9o}z5c~{{Ha=aOkKqtYMk!b7`YfF}e|1hG z74o{>_-#e52&K=twksPXqndLO=ka^bAc;rq5(bOHFDd_|t|XM5dCOP%omzVHoMg_@ z&H^z$z9OTe@B~e$^aR~jHDath#@mP_s|ZQhO>Jrz?Wxr9+EO@!U!wgsW9J&txt20{ z<{#363*6vYAtxp46Za+>!Q*~?{L^?h zO4`i*DPfdzKrul^Og$k~*+Sp2f()q)A?MM9OT$Sv#;F3vM`I}&U6L^F5B4_P)B(MydzJqHJYn>H$M?U>UyVT?`Q%Fej11rK=&9AXm1s1)M{za{}onN%|r z-=Fp$#tDDA+14q_Dk`sGFmO|SQYQQJ5rQG>NV}XluEXBiw`-aUJ53>upx-Sg(*dBL z{eC3DuGPry==Y?kJ>y#&&&(Se<|ex0V@l3p`QyV^2z5vd@aGGFj;Sw+wB`wuUwENk z9Y#c7uGDDBe1q$HCufW7{xmA?Zd}zh$TUb$UA7Rw%a*O)xh3tjA^K&$eB5V9+7lC$ zOTwcx5I~P3Lx6MtON)CKHVOc(qs!rX-sVLHkJPQzYz-(a^xtp7>>;BGq9Jh+++Yjh zz^O2#kT++1V_hR-m-(4I7x+Mxd8E#vNlQOGNZ^Vy2^AhT;vv!mbR5oN-A-68ki^2X zkF;V}4>adUOU+$o&i@S~x!N6_=PTtzPfCf<(b|op(ybz0U7bmuuUl8HiIFy#TJWu~ zP3=}_f{v@->@x5V7QE=N?CqOdc}%)TbH_l-_gw}CrCj(hzI3ba8;(#WsP@+DZcER# z9+^{~TO+H13K|9^X&UIYw&!DmRX-(+bTRd-JUP6C9%{rJM%(h{AlM6k+l!$Jp~-$f zTi?>rHbQ53>>;(u1p<|rEJoXAz{}*D{rxpgmer|GTcL}fA_b5X&{zwZp8>4>ciINH4s&5r667f^ zgv-_Y7LhIrX?$JF^a>XyZ~>taelOMQ@^XLDsaAPUX^ZL3E~*5(GYfAJo8IEd4AJi}+O5aBj9*=yt38 z(2TB~eRzfOyV@~0zVR;sI`+Uz)A6)Hv(G(h2t)(O%1l*@$9sX**zK|c;9}T^4hFl@eAxKTh3))VPN-44?+Fmce;8*Qlly1N~ zj4O68*Wpa&d5=oGo+)k}V^4gp0`UfS7pOQsz=?=2K(@;!*x_@Zw|%fSqg^6wi#T^z z*S!%_wg}av;A>^Y>}h}}*cD9gapq9DsaPD`m)lea&4^1evTfw{m(WE2?517lO~bqY z*}lJ>H#K|56-<#e%>GeZgH9m)>ev|(^wqctM6|rM`IE>2&Ijd^yZ9y?5-QJsoA~qVo58 z-Q_f(tn{M!YqN>I(Vo|8A)_~_S>;iBHqCbP4pQ|CvhD_K3I%PLh)JYj6?D@|mfpbw zM}Oli{AB4)I@lag8Xu$W_B{lCyjVb-RL!Fg4caW)tIq~E=9o!s7aR}VB^&Cp;-*E~ zZlOMN+Az{%558MGEMmLNDZEPYMo8@F>jk?!9}2rhAoc7< zL@qt_O%V)pQp+GLS+1#{ltXjBGKWWaq zeY&!|vcLDdN0OVr%5MAl%VZAH?PUN^{Uc}(=_#Ral%7r=)7$|jovhmN;m6~jkUtxa zJ{#iFIb>?=Hr;dTD$cGh=`U+=P^^w9T?CR9&pwh;BjXjUH_RO$MEr9%6{McYXA(Pw zbGmJ=jb!N^=ISrcBvJ4&$i^{XS;>g{0{qFHAiDQ#MeD%Atir-UVk7nucd|V)qt?(I z$jM_L_v{_8AN-4H3o%XPGg|tHuH)n<0{t z3Vhg*3As)7M|JNqnoUn9p06u|Ih$DK;!kit7+*_q3fdP-tWh?ud)JBRY!Jnzu&^vN z)am?S^WF_zEYF@lW@jv(dPeJy&kwv5D#6*q?YPQUwQ&EvZ0w^?>j}haIS5QqUw=WI z^dO#EvXBy@U~*IxrE~0F2Ax{pC;MOgX7u{+rdM8pFv=m2Flso(&)&r|{y`*21nC5+ zvK+99c&P4VvAjDX^}{-&Qp7=jSNSz#>Z>qqBCgu4I02QT5jq##JLk^oBDUsGgB>1h zKCNvps3r6JyNIG=keoek>s&hno}P=8f~*weaUWQce9u&C57~?q1D|r%@)KG8m&1|> zZgs)A7E<%yxv0JmKt4#-$>6^zOr76c}#VShx859v0FJF6Lgd{#nL@;ir!LuP4B zzXn&{9uYLemoZ%`Ltd1+NOKsqqp{^aiU8Bys zs8e}-sSme9CWSeYQKvV#Q5m+EI8!@nLr{gH5mB+oG%~)L=s{KLDgZFe{i~?PP|bO&vRhh94Ut7+z1CL%8vU^uf@oKPCpYdEWa-ABmd?q_C`)m+Dv3IKSeY_ zwMZ6scRDWAN@KR~WLH?L&M?N|CY4PfU}GLxJ-fL?iaRlqg4kZC{ju5A%Rmu7gaLZd zVR*1DQ_vG@8TrO`qI9ZadPMX+9Hm#g>IV#KB%BQ$J8@uBEtmeRR}-d=VpgKuX8{5< z9a==c7(kjBX>tTs)3UYCLD|wM;~8XvSs@V+q7YN9_GGXag!aPE*iCGKqNJpAx!r7b zoGIVLtv2O9U#Uu0YMg@Be@M<7rX7C?jv)y3#uV6m@IohFx@X+*$>NrhL(_wnTM*Xs zZ%IjdL{zN~kzbC=ksBwm_0^mUixGTVUfCns&H@(nTJ&s$n|wwFRr{@%qM68OYfqt7 z`(#4c6wn_?GZOXo=XE5mUilt$LQj}Z@Ew{{I=#*^(wcG2-~70W#Vs*#TdIB}7R!`2 zb(H_hF&mz<0j66LQM@+oWqWsoxP!cRH)N>a7{Mmf@j;Y+%rO|X4_cru1E*-cN{}8b z{xWtHWYGtI(ZiM<`#|$}As+dLy6qXxDJhi_&@XuwMpgE-?He0E2@(o^#Y$4p9{RI5 zDCO%)T5{K_;vVH01NU7mXJTmVmvp?zV}eI|JxPl|fGrotl)No{A>c*h)LQ^Dp|OqS zvTQ?JyUtsr;2UakK5W>iB8x7G1mxes&flW1^8yWeKu1}cygScr_}&olHc>}W8#)aE z+e)m}U~AOeB@0WLt$@jCr$WoO_^y0ocA=jjINLWZi1OL~X@qS?F*X*Cb*HXhH*MYJ zdpD)6OHcQ&acb?T;b82?OvyjXCb(`qo1a&(Hp~Kq;-0pAeNI`@D`g~IN_j7xtYqg0 z0#`j&b6ZI%!wrXsq0W%CxLwypQX!~@eT40K+>?yVor^%TmX7*tFCKe_vWY}uDWP&o z?va7C0T(Joba7uqdbQ4FT8~^L=4vi$mJJXAS{1DWjlfER?~7i2m^J{$1+n^OewWbe z7DWQS8AFYNZn~rdqur2-JV0u6mD6599T-JH$Rmzy_3$%^E2?<~k)ppU1fLwg-D+Q2 zhLF1Vr7{UK7!cfN1yd=Xe!(p9&8O-0eaX0iNJy%aI4Gg+Ky?NvMBzri3tKV z3&+)qFds0uL-?Z-8IMtKbk`74cS14vNPbsYKRWQrJ}0r%0WpN561YoES?j18CWGt9 zn&_s2!*4^&j!!UyFe^$=;{T_K1}CD1{l^GzuO6KWPYQLwgw$>UAQD64$5wQ4Cu9Lsj3@Pe)$NPv0~R!TlfkQB8!&F_bv!GVBikUvii2~Wahfr%hH<0 z!A-KE3d4Zsd_yP+4HHa3nyEfX$o1vk&+#7EKI7pu+n3DB8@Ma;1=fP*@_)m=o$} zz)8Y98b2)T-dBCNJb?GH*Y3nMzZpLGZ*fxlO*&*q4SAjfju3sNo1hpkHC0SK?wBna1G9ckXng$NAE>YqvT7q zrmZ5`$CAW0+j7$Q5)WIOe+<0Td@{Jh48p9q_iCRp#qoirOHwmw-q_owRCmLw$9vH> zfZO7x48`XDgGblMN^5zhb=o4S%8QSL;FcWZQ5?sx9+VJoB1+d-r&d|`-v^g1&{QDf zv|K|H5+G~-;pMz%eDCGDg;L(}u{uB%++dcRiVM>dWVV(iUfZ{zr>=|M#tIvYk*a z!&(8`+%7zmp^Ivyf;3I`Q1h*dB80v^7SBwbtIzz@&MR(Y(cJR)HFu|z*TQ_OB2(U; z$zWn{`$>_xAQBnHJJOri#@P6$Ofc=9;o%$EM6!=(zct{k$Y%Ada7*nipX&wAo3mf^ zMGmaY!M84SNcFAruU>-#sj#>(bfYi0jhRF7we z(|u5X4_b?L&^jwtO$<``Z*L;bZcvuxrO$|%Lk7eYoC=NP+xDg5x^#x@x$vtEJ9x9RaDUne*#4Y=^`tI0UU0ZBrK4M=!&?yEgQw(F{=thUw}b5-Qh{}uMV8*;Sd zy>8roe^`+lF#P;8Vz#;2ed>9{=3VP$xFz?VzCxvdkt)oxny@`6``RZ#0^uO@9*E(O z72t*;d*VoGvjlb>DgDk*WXt)-6e2ZP^{ANJv! zg-GOcXG-do=@LAbv{e&Hho3SOi*E_o;N+JgRk@7J`darusG_Wtwnxy!PfEh3a(j#( z@?xdl#kZAbV(y!X$t;(m^fS*n;MjKzSR$zvBXF@M@sJQLhV#~JOd@F0OpY&Os5qYb z8r+9X*)4?N%_|4x`Bm4F-o7z>&cX{d8VVbd0S@XlE59F~#!kx`5PoRrSPKSZv_i!% zfS$#RPCkUhf*V*ZJEG}qgaJsq=NZicCnY#kGzWZySB2fa@?0$O4@KQBfX*s%^ z@F#RTTrPEzy6?|9wa>^(SvHl_#z;(KLNL{5|6094L5r1+i9&+F@{Ts+09FHkZp$=| z+;;xXnl{vK7Ag}<7#4p-9zuPANMCsy(@^4Am^{C2a*S&5X>Up`%>Kl47NHi!?EK>D z9{>P|h2O&*?c#5;L=AkZdmo?c#}y8fRFGuDWCD#`5O{vE=+#94M)0s$Kep>PzKHd| z@*T7^05%g`cN_&&%h?3vXPFLAkaQYPV(#jfcvqvako+^#8n3(_7=)Si$;DRUK!E_D z_sN1$kidYKABg*YiN8P8bmuaA&^&(lv^6~;bqt>hHpDRS2LZE)!g^IKDQV%#!g7Dd zX&GVPU*(Xs+>MRxS98Wp_?DP`>mhQEm4Zj=9-@fsIiwHMPJy( z?f|z~j=UH$T^R?R<3!~z_C*ASEn?{^j2;PqUm|W9JxCOL-Vl27c}O@IJV^*=kYeix%PP$f^=?BlTE00c(uYnECmS@y zC;sHa?Zr$0<2HE*tLoK-J}~7gx!jlO0c6z1J)Xl$_#PKOQVcOW$aaVa`KaH#lrdW zaw6(ToHNI27-^rspQjh}Nu11kBGzkDP6AQ2T@CuH`Q4rPM09clY$}ZQm)DTbm74SR ztO&uw(Ahw8P&GWOq#TmEc^C(r$1?zOtsjbv^}8ylNo!ZTO4qneEJoHC#w=0~x#~6L zge#s4@)byg)Pz8$OZLSB(A4$?LlkCRbX^u*N#PeSAsROs!Uq`%%lU&cUL-~$O=9$% zUpTGCX>fXTmblqRoaRAwjp%w{6RLw>e7W!PFYUp>iTr7y_8=H5sD(wAjIjU4cAAV? z_s3$_@eu|vL39~2K?*xF;We2~gWw_k$hyRQI9qh~e+b`GA=|JVO}YZHx3_}rcPK^Pyp3y07|8_PpwpyCPh3U-0zz^ zvmRe;*HDr)WKVSV%>CxfnKNg8?!7bDNj}tn;zviHdhgFqPyW1R zfjhwaz|CONgeN}rOIzf0)-KsYrMx39T%hh2a20$hh#y7os&p@|nf!;kUI0-=%hm=V zdT~uAt)$luy(;p1!K9V+c0%tG@_WIgmGt&PkB#Z25@;p8F#TJDUV{FuL9d_wtwAqM z|APPBze)PH2E8)jJG=mjt? zUxyxqq-`pp{nGMu!G1jDI**Ec(aBW0=escm8$<)j>5|HTA^rlpEGJ~aq0%{dp`^qf zEZgq5Gd%c+0FOJo6#a!_ani}Sxk72mE1k(ccFJ*QGDUg$U}<(KkS^rx({{GvxXL-W zb|C=Y0;~A;6ylS#XDidHB4x;5*#m2}}rTMTAO zIXhRf%gPFj25RMeGu2XjM6{}-xzco0V9=6icnVjufC!CqtLJ^5*Bpek( z>HAOp33j+1aSXg}*i=J7Y(yq;T_bU(w_w2_u3JN#X^rdhlw^(T9wx>#@n1rcHh^gx z%b}FNfh5s4;yQo)$(0jB|1Rh3H2A;EU<+bSyOu4PC z@|x*uNYk!P(Awa>v`D9ZR%f34$pFT$N3 z?;C#sIh(+&lf-$_BvalGef%u+S@l=4olYhD1)N-*=O?;O+;fjLk{+-Qha-`e(9UF< zh2c1T|0?)pUW4{{qW=3Oh`=S@Q0sKtMgZ$s^|oz%z2OUdPO`xA-4K!?fsoHh%&XIv zI|6*hsnhKnffvHjz=7Z2k>_*e*FJvpmDk_u82!b?;O6veEzj$yFwg(odHI33AJXb| zc?(6rwWkW@itTnxM)rrk6>8GkDHb;oxF=#AvADnC1c$8UB4BzrMdssU^EYKJB=_Y5rX# zzy6Z;S&LgtKE3WG&9jUhCBI_S3)t}A8pPC30^+sb3Gv>?0rB=DLL7M@D1vth@y^zu zNPRyb-oGa({{F9^=y?ZI-g_Osg+_SY)zuVxeSbT+3Upth}3z`3jbtirVZOsEl$Oj`%Q`p2nQK|{9`4$eIk%*+@RB)-!Hzi5?WKKj9V#Wi+1=N4pGAKL|;#TvM1Kp7w?N6j70j9eep;l z)*np_^u!MibceHLCp=v&7lp|9>Z-`PW@TM&t*){>b1F~dSl6ttu1wElt|yks#51fb zlgqHK$!H>vy7ER{OK%}^rqu6oJh#W%v+J*sKowoT_hR4hPk;D+;IqEeQJ?1nS|TZC zz#U-Pw)$gl&0!;n`RH|-2T`a0lL+vvtzR5#Yh?!oLg=Sv@y~uO7f**)KLy4+gE-z6 z;LIK|Y)I%UVRu5o@Z;Mvdd(*vRLMg!;B zug04VoUcL}=c%Q(v(3P_8TbwZ-(ldp4SctOTLx|!_&x*QXW*Q3+Mf;s?=qXZMvPk!vmza^sNt%Z)?g<~VGI zog-qT?HNdmRlxC$qAA!iv|(L?)zY;g*jzndtu|sZwG0NTFK&u7?P>`t6zZQRR{X+( zvAT#k8j!2K*B0W8mB#g)BF(GWqf#*D2uSSd?Z7{C8r7!2D zy2cq-jhntOt{OLeVO%v%UxMNk#>EElA=2z$E={e0+>f7WfAj0>Km6YLv7cQy*!~A0 zt^v202@2rf6_wtO>upH0&wGTZDk)yX^sF&ue?6y z$*Pia?PNYzJLW&D@|BeFraz23q`2(Ks*XI+C2g4hK0;lbSCUlX04~@E zB+jim-M9#B`fW6jV0Gw=X7DV=K?tXSoGS|p-sw;TX)^mr>OyW8yV`ppsnP6xpB5MY zzIJtw*e!9EC&Q!=y`BQU()*@p*xJI6IAw-@#S>SF1%Ne+CGV?(_#8|O3u7xuT$B35 zQ=+zGlw207Q@(NS5u)}|DSaT;s(h$!_nnw`TWi5&SNgy8>8iYQ)vIPB%LO=KY`d zogHv!lkfh|o+9)9&u3!Nb`jvCt$aUU94z80u{zy45lF_9>A~b!?R{lA&n+R&*86|C z$lUrEzxUhO)OD4QfX#Tyd&BSiPBBe(d+(AbD&=Fb&0@M@eR56 z{tT=K)QSpFMt2)7@w4Xy~cSqXnabFhGA5Dlpog zhSA?}!rwLJUuY2X->~%GF!tZIGWuT~Fv7oT6dE=6k(`DS4(N$3(#ygHj&KF(8EYv4 zeX4T0sxZ*B5tP!wEG*JqE$-#Fi_o0m*!Q(1@posGaUS(BNZbC@R94ob_>12E;c1|x zqYDM0gV6rm8j89mP|!ci>jG1upwz#aQhKDQr>d)?Km@WQ{)^DNlfP^(6@gLqT5zNn!rIxE7o}ESAw>m#C2?^v z5n*Kk0Yzb9F>z%vc`-$CaRE6+WkGQzUKd+0xU)0D>aPaCu$J-z5Z@Cxu&|r+AF7VN zd=?TuHg;kzHo|s7{7)QgoLs!DJ^eid#QA|@@5-n5pDXhS3-Q|ui1NY_NDxX9tKD~T zQ3@pkZZKd0w?L6s=w1~85Gc#C!sBNSCc+#>^)ujsK(PQ47o7pvI1q>wxFI1-&*g@} zYFI>q5-Dimcr2JuN;+_yRWO+nx_k<*dxSuez2WT4qWqXl_FAx|=+kRT{hHOdbP z@vw|SI$-!iqr5DmL@A=&ErDK0H%)H{?N%WTD3o>-PPbKvzb;2N3a6Qb(*ZQc(C7eC z!)W}#;3z+KNU(d9j{}Bha+JFRij=Q!l$SfipB>`o5Qemj@^XL#1ANkrqERew&;p!n zGSDm*(kz1LRvBoQL+D23=oSlT<{4-g3-N&g%Z2#!g*3fAG@xGE)k6Hq9@;VZfAa62 z90d^nYfx01fVIqP7TTlaR0_BlN!(~A+Fc63nXbUo` zV#91Az%Lj}!hy$^@WNy=67|@4-0%{0qQ^p@J}B5Sf+&(0%Q6v!mjWA89LJCzR*;Uz zkZzWfOvR86$B^6!p?jwwJ`pBWf+15-fX4*wra?==+hIh+vcpe|4PaFA&NvW-K?>`5 zfx&Qh0@W~Rtb3}kQY!y1?rq^ourTREbrGCd7&=p`Jf1vNOGq#o%oAL|A6*L#gNE?O z%Mvl6c&>9-h4|HC+;a$X4~F=n>@VyIG|B_mfbJ;qU<|QnjC<}F;`8p*Unj7R3m{Kq zA^w&SuRjf!WCD)@h%azWVC@D&{Qq1iq$R{3Fo6OH&;USB7{s3+f-Hal4FLQP3YP!b zYx#faCHxOkmV`*ze7Um;eRef==X;!Brt{u0z6$T2|Zva=KuF| z0_%(j;s=BH!yw+k;6G1b7*Y!*%m01?!?aMd{QvEVq6UH>Wl_Z4VJQ9l1-h&gpq2or zp)^3;o2;g!IQ0>vD#VOV0s#dB8z2kZAZAf0nJorbojsT1xT_zbNv3hbmHmk}Y zSb!{&IH2L4o1Ud*9ykKRMiT`#B|UKhG0f(1!H5r(t=@DYIWmaR%@-}U^dGl z!NH%6(1lRc-vag-0MtUzV4D678apyH>1YM<@V3|pYLm`bFKjxodVbo*)nC6&oJm5_Npb$URD0jfExMMu=jdF)YQH~K4>?ad!@DsZ7 z6Mi`+IMyN%BI>7I1>S!K+Fm%F9e<2udzj>eg2X!vsrE1_z_`bb$(~q30vsS>C_e=e z3yyLJd=}vE*db3YFafeY!BG}~9a2OgGo$=6L%0u*2@cl@es&Y=^J7>I7t#RU7I<}m z=Q5mTl!2x{1aOX6v&jk)!wM3af1b^K;;9Pa(HN4ceSE;8*P)Wr7?QPpcteONccUnz zdl=vi0fYCVi1I3kqWqvscnBgq(IVJPCio&txB(;B2c&?p(=PYW^~%vrGSC42ae19) zbAxsdjn0ljTfA1`UT&D=m=^Qjf&f0k7vh_#t$vzJh|&O^Bg#$hFwm~{&<3HQ!owH? z?J*onFCt8QtWUC5K^joVb+6Q>f@CxR_Qen20Fp-e0Q>;H25^O$A&mvA@Ws*u(Hcq()C+sVRCmp+x;} znXxxzN3Dd_3l$CfQ1+v%_z-3QWu0YrRWYd05n1dx8%*t)tQ zT|6yp5T0-=XWM`8vV(h~5NT}H1US3FqmA98IKL=_BIMUw2%g^1`!WE!m=j;ae68;DM2ZMy$E4VqkAyG*8 zzwmEl<+Ty1Q9?QLCck#H|t8+Ho|px46P8E$Rs z@F!Wau;BQ!sL=n3nvFNY)$1?PYKkbb2v<)pxU03T1;XZ^=06=k;%95^W$~9DP-Fkr z2x@CkAkr3YgQ`8fklw(!KO!T5jnvh(2Dn3Q>AxC(t@JlRKtJ9twyuAq`itaWO7ayp zK-l_dA>ADRsnuMcpqhVIs2)@TtLLV!Y64t(ZYW3|;p}YX21f$y+y9vdw|062Y&zT- z1?juG{|Bs#u(34&q;f+l+PZr={MG!kyr7BvpAA<>xFEbdQFGnhkY2igtbe*y;egt0 zTx~r)QL_ANi~rHZzYuU|guUw@>(y0o`=eVgU0W}Ke{X}p4X8H)1mX{s1v5d3MMGtw zOwfJ+B4UCn3WOemn4sYTp|UhgP_SUAEHeNB6*mA0g~|#85Ku`0kZ`E1A^-uEIsl1; z%IX1-NM8Y@hi;62C!`x9gy+wH+JhHHPxO>uK?{YWzwW^cFN6dgLxjLXcxZwO$zzu6 zxKrXE@i6;^9|?zb<96_eoj@i}AwjYNY1ZSG7d-=(k3_=?Ayi=!OL$eskfLLVjTTlB z4Ck3FmK{G13UtRR`2#v={Q;A)%Km_k?tj2qtXF?P=j1=&1XkrA(6tul^)Y0e`W-sg zwHyYdh6v{w5K@nE3XdTk{E*si$TL}pH$TQH#G3ymgx>e1_`DqVG8z}Z<$8Dz-Vl9w zFMY5aMRbq&80;t7Ttx3CBxpTw(-KnX4k_$j4|xF*BI*JWYychkgx+Xq#w8qgdU&M!~y6jkWbH z+R;YI5yk}(y7Tk2MaC^k{yU+5Pu{0Oa*Bm9MvjFO!S3r(F_*iqmo!u{z>~+d;onS0)eoA zIgl}_k}%0!AZTGo7lcUx0W7%>l@q{Wz}GHNlY-^AfuSJaGY7={umCz5ya(+zQX~TR z7=^>2=n-$BL}0mV3|S)ZcS5in(XAawb&Me%jdCIr4fLHK1fm7zF{%tFYm?Vf>AV+7hTx3zmzAaT0QV9eg2`Pp{Xe`OX ztrS4N>+$u8Y>0?302v^_Z5jy+j^gPf>hDY6fPRL*?*@ObwT%w-MahUN9N}SY6>t%Mg&9viBWpJsTV7xuAK<)DTZj6#e`4zleD@>&oB;qk351Nl z#wps`!M&Zmczpra>gN2XhtJy+$@eEl^Zi+t&kEtn2Qb6q>}&($fg`OQV1HPH{mqpH zz&a|#Teu)xVSlp-`-B!PXlhPscXaw1jj#!f8!rWNB-#+ z5abo&^|Wz<@wmbMzkWah`+x0F1jb|QVr6S%@%Qn~|3ts2^Pm6e-UEj_eAdozS9`vH z*(DzeX9Gw20A>L+|5%CzV7!2V^1?v`L_p3cr=x%l)chcM69)+aIb&8`<7poSWe}Lk zqIsoO?b+?o{i8Kg;BB}BgTSa)1FD5-zU5;`;5>i$ApsNmfRUABS6VPjnz(opQT_^! zvUiGLkb`oH3;XJGK`KgNd`b{n8B7o>BpDx#QISDYm@KGxMq1e>zr0w>0W@(M9}EIb z5Fnz5N6Iun!w$nX!@%oGW#d4h08=fHx0%Q)Ak`JoxUVNn`RXTHS>!ZUwrByN)=!!9 z0?9|`3q*;+V~DTH=UfUUjIAH{lutN3p?xNec((E0rX|0WwN~8O0oDo zX8ZVh?puKlkCb74_Sk+EOuug*iWB+AOcVvC7M+f*a8g2ZIC5j_JIG;hZQ?E3^$Di@ z?RPRra)}6qP+{&?d0u?kuX`gB35{v$1$wPG%5$fBl$R9(T0fRUu?CaVLVhgQGTTE|JuHHhH4ii28GV7%+uceok7<`x z9worMlu8UXjpiic!^5hzd_|~dTUSs(;lW+T{N{K-@qa|pFxo-T64`;ZfVwW~xFtaCb%-Pbnq|K?}_@k2T)Q|jail3>L zRB-*}LbQ9^#Dq^MML>gY!Z)>I-S)*f_ob}lM8xBBlAoE8i{tVPNcMVni!^cSIq6s4 zlg(JHgf!m;HF>+f)f;^VdlsZ#TAfbHg&kB5ANo)^+mxm+#`HK$NO6!zI9WM8LLjob z2}9NRQOZH~y{m{ftsOlEAP*c&6@42>Ayq9Fc?v7(rNP&!C+nOhUH$G^ZYdcQTV*XP z)M2v3lW56)ocIWKn~)wu3OPfGHvx*T*)!Zo!@GIG%0GHK@#*Vrbvbs7IB_?BY?fF1 z@w15eQfP%vK;nMb7H%Ax2zeF!{v0u8XPRvDVNq@l-|qv~YN`h*;X-tz{^%qfhdzID zb2^ye>CN~>t;y)Y2#K~bmUjok6_ijJn~!x?(A@Yf+eKpT8MOhAlC)gTl3g zhjzCbWS$LhH^>-)BM~HA6~FP+s)9I3o|Sx<7u@@1vtKRt0T}^Np6rwyrecEa$7#3K zf6lg}6T;HL>bZ)dD=1*twv# z^u7-+^~7VMgHsfE&ff~0vt+{_@Z)|ap&AZ=Cdlx>rOX9VcfyIPD5yf0w2CI;z^FQ1rgUc82WDoBgDK+(z;t-T0?z$|k>%;Og94x1D#Ssnu2>SwS zIjsm599W@`aB}AJFg*y zU9_ce^oBR~kV5!9lS8 z_lW>d3;f%OfF6-qA}DYe*V16?$jL+)lC!-+J52UTz zGFv{pft{WD5L3f|q9c0i?A5;QOjDX4;}SETUsg{~FMZlPI~M~Emd_-En_dQt&#)*&5u(1!7?bZP5qLr3Q7sAFg>ZK{2>b4u!pi%>Rj z^=hbRN9M}^XVX&ahpQ#C1$v>pmHdO6LyIS?`E{i~^FRFf*#4tw^>AwS@@n;RWz6-1 zUE5Ym=f~zN*GE^K2P-M-xsCOCW@{SKTjy)Yt3dlT*ZM=Z{FU?7!vF=RZ4qRC$D8Vv zgShP{j~?60OnvmNTGI4cy`rLS(Kuf|U;36Wa=2aE(b4DK>iV&B`Jm;n9e2gKV`jB& zw{7*jbLRBh$6!e3y{n^^frhiqBc8mYj=9yqk8S}0dq0>u&i&#VwgSkMql_O~#fsfTK=W79GhsW<1yaIhpesunD^JzKHJE!h^barL<(g*A6 z+o8mhBkvDREA5g?E6s;Pnl)#uIY%-9PDh>k=Wq9~KA4~Q)eEh>bX<_`JgPs6Djv__ z7gP;qk_Cagvn`d0qa7xMv4Zi?5zh+?gdK*lWKsVBsb_*m%CKLMGJ&w8t-yWiYC9m9 z&2!*9T^R(*Mk}%eTUjb7lWKrimBTay5oM8?k?}8Br*x;STv(M!{DkBMtq?C*vsgcA zB19u+q+TG(%4~(F7ZWNvG=zgwWkZBP;0Z9C3Lhkh9l{^Us(~R_SaK>nk*UFtU6w`n zLW5F6NLTOrla%%gO$Cw!%@g(f7k8w~)OHK$)U%T~8bs9v^=@>hrin-#6&XRY(^JG1 zbygY`WmF(=k4l*ac&rQqs#2DXm!O`XrBT2Zqd94Hf;l^%27@b)JXoxR`y~_ zu4Jg9qHKCG6Cr$>sqzY1qKKXRsX&>DMY@2BRku4w`-O5gLida{^{h--ghG(y<(^=E zc0Md$Z}k(|O-Z)@izU59yI4&@K@m+>2TiqI(bO9%LhZ^RQnlSuvC07L25H@qiUW?z z;-4b)6?-r>W+?Cr11UN`7%$iXgjEKfm;xhWVxCvj3ENPj`!ON-Kk<{Yk}8V`2#=Iy zW>F!+r&u}4W2BUc1u!NxDsI2*I6LggFE^Ssk?Jg(jyamKyHHi=JCV2TxVvjEb@vUA zE%PI4OQcKfY#D@dO#~mUU%zb5O>K!`GG*u)(pG8MC(}P<6y~y;ugT(`_Ohz)FRTz`IGNWSGhK{&VHM&c1^(EU94#6 ztI!!-ES30LC_moLv1{~_&q+BhgJfGGedT>7kBP9o(hI*wFE@mrD<>;TIF!hT&hNDNO3opGy#=#`Os#isvFV&a7h31tovzy>X-Jq}^+@ zFV)0J*Jvd*Zi`E|eZ{$=HQ5kbSx~w-cjTpL6&uPP3$1)9U!iXxpl!t&okS2?OcA@l z$p8G~zZoFlS(5CJC+@$i?m$VwTrIvvhpoRindEpXPLm-T8TJhFxH z+ZN*MUDC5*TC8$+&jia`WI+-aw}D(!sko|Uk9U_K}cO`Xn!tK>&W;9^Yd7beHw1O7H^_0!er{*%2 z8w2mN>T_x_9#EN7Ym8ERj$fR-=DG8r;H_HNBkV7xtOPvQ2|8B4K4@Cae5+6IxSlDk zEQ5N#Cv)*6dCet=Zp}Vp3t1vBj1_|@xlY~4Xt~$(P>Vw!~xgB{G*mi zf+hV>XQ)JbuJ?{|HoPK>zmjt3-M~PTA$j#f_Jm9#%#YEvsYYd%8SamobRTmzm`>i` z=yiS-{en{(@r-VN>)|zjcMY|ONVH&3ekfDA!C9%2_1&RQ zk8M3GMZ-zD*nUdi_lW_GVb2Xbe^Bws*n#`ks5f`x-4_ptlbcuL-jlmg81=lyiUK!h z5@3~(dsGR5Z*zSpW$~V-dW3Cuhr-&ZP`zgatR$qjxJahQ z&WYHb+`P{7i+P@U-(uD0_ngz|v#_<>^2%TLerSMa?kVUIPQJ!-G8jFRp1Ar+OIZ5<{W z+qf!7vvLIZ=M{u-nwEai(V-@_a27OESSp;qnqBs^ze;;h#uSHp##06@Th;`J2pvWm z4IRB1Ve0(d^>LOsXOV>ZTf|=0((XMHdHkZ3plc<}h^FqxS1TV)d}J>$q8KJ5>BvWm zk;|;_znlcEy=*#`YEOps#T`cB+KVsn{fIFWPkqBYPCNTfWN?(FCUu=fLeZ1-h2n#P zkRl_MxnSIjg|#Wy1)r=WWAu)ibfN3^+M*((UqX;z;N-ND235Wio$vJ=)#WKEfL-Sr1*D zoCDvzqR=?2i}`s?aZthK$k(Kmvel-+CsiRT`~9~(l~_tYh4s2rM6QH!?T}ieuPUkE z_coJMg5}`K5TS;ki{N~WYuoY>k?A3S!R4caep=j2Yq4VOxKBAYniz8 za|y)qV?zCgBtwBn!P?#$46LASB6{)_{-!-AwxK=dXNp)$`CW@-(lK``9qzb<;$5%G zgrz{gC4(1(PlLyX4JTH%e_>q(CgmvzGx$*!kNk>=7j?P=1Cq%hP=KT9(lor%nR?S((HMzq56k$=ka3<_EN;CoYlV8&2fzlwkp;ctZMboCB5h zBQ+kp_FUt3JmiR|{K@ap5=pUI>-p8{0`8=5Ggx_{ZBth3VvsGq^)|pN&DcUg#O%Y? z5I5h`YKZoK_(o%$=V@ z`$8>mzJ2H$@!h>=n&W{l%0W)nO%8!k6aZzeD#FC*9?qMp zvBcD*323u*g8c&XA1oW9@nUGZt;5xPriq@k|)Kxi_7}+{U)k&yA2$|eb*aEtZS-y>z4k) zN5qi%PK%6RL6d?b=qh-Y6x)figrD!-Mf`-iH?6pfyQKG7U!JX*E?i6| zxvr}wf8QG0kEp+M!QZ&aI-MfUfhAqNHZp(s94k;>q<7t@SE+#c=)Ry}K*q|;Y|Q3u z7cacp2b11hg;D9HwcSQFvC&b{^jA@mc8(Fm=s0Zqh8f$JyQk{c^W;1kz9W)R`{l~C z2lQA|gqT=sSYL!OqCO34Yki*3Prd;4Nc0w-W-@xKau8u_84%FiGvfPrl$I$H<#$^X zKXRH>yq|wrPAQ$#H1Ydoe<0C8Ks1|?i;TdprR}=xG8}e-&4M(7?DC(<0$R)cEyr zHTC^hy&@#CN<_ri&|sL-QTupTORzfp4w=59=FOERM(v^SGYnA&->z}&E0f!f;~;Y^ z0Cqd(J60D$v<;(;zLBi0a8jMd#>?m|GcW8%5Y25hMX$5@^2XiLPu06m{LobJ z9PfD<3v$=nl`5KLzZl;COo6;lI0PHS#l-ymdw4t>OGQ%aGZa})_TT`TxL5c5UefT= z{DOp-d-~Zjl?>6!p2Ao8h31f-$p~96KbE@?;@fWrUS`Zf2X1|jG@O1(Qwut`yS^)Y zC-ZwMg03p#H;?cx?ap0naV$C-vuG3udjIN+PYjCecnjwunwlLz{t@RjgG{r z;)E@mnyE>cs*N{BXN(n(KJzJTP{F^k2Us6Lsyh{*2Kwn|#y`LFrU&DfPHV?Y%mQMK zF{MkQhm~2^1J)+8&Fwh-j!cwZ&z~)N2`znW%#pB3&Y9+Ek}aftP0|krJLW};n{*># zpVe5O7N7-9D#w~_+u`lxa z7yMSC$`va=1(M}+Ba%LK7ByK^dXe!gqOU;lQ<+$1LpM#a|;c>8#EJq@Z4PRn|(*wWT(l4Sv^aLzya(D!H94EtnSKkF6A9c0WAWiR#Bbqlww)y0jBfBJP*WlR$E zJ4G+_W?R_JRUqWi+P+gKcftm!(Xa=s8^lTFbrnw zzx74v{h;?o*ZSop+MtpX&Lv`71iJTAfm#}RKO*`2R`M^RUvk$LLyyn=#J(8Pq$U^V zy+iEsa4=PC>XT_lV2OC+^4%;r`Lpzd;wy@)c39DtV;@;u6vgL(C7YuJx(+Ydf`$^O zH#f-du1;7VJ8g6kM_2iJ`pk0^5evMj5v5+^q7%4em2#?M2^g-YY%_Q+agB?Op^}}x zuWcY9N+|nOQ1N~?f#nCRl;;*pnKdoG^1)YQwlR5jc5i-Q}9kvo#v^l%OF?rzv*Nbdd2$j20c71bTHk?ql!6^WS?3Nh;low zv&c+Cla8Gpwm|dVf|y5tJ{f$M`oK~2rI2IDFUogwuFxH;ZU>MuaW5Z>yVZ^7h~*d8 z{2`t$I^#BfsfV?EkLHF$GG5{1E58!$eDvh}uHZ&rU%c@h8scDrqG1t(?@2o@Pw!Qa z^inXFn2uX)4A~$hN*C$F={{*GToGh4WkR1bweUw?Wag1DGBUC}3kzWB8FS5YMDV2k zFw*Gbm=8gWdpUTz#vHoarj>6PUw46i@1KWA8C({R`th_~`Gpl~EnSgn3Io~_M7o^xiZOySb6fv&9!koyO zO~bZ_pY?nYL`7^@e1^llyj7&~`YfevzgDo3OHb=rwjs?&bayov9=nM!Pr;&@~x8?5T zk-zzt|LKtIL5zLzocXT-o|%4cT1~!(hFsUU$=#fdrgc+AR?-4Eg6s3IzfZM$#OSn} z>gTyV?TyV$8tWEljCfefNOFi7=*V}T_OsTeC^dG`)F5cWjx3Bffn%MxxIJRIKj9iX z`AbZjiHA6Y{thQ)UXZOc5kl|f{foyn^#wom?^M{RBp4(LdEetbOq>dkiF*DG-?KBS zC{;*Llo86Xg82YTodD_1MnZ}!Op+c4F|&W&Ft-2Xsc2hZ`u1k4|_MPD`CwbMDJYab}+ox$p8s-T7 z0Vwz~evKNJuU^>XhM-L?J7jOcxXlsGTlUvNy5N<)CLTP4)ytPB%-|4%B zgVQ116S0g9eOK-jL|uKj4w zFwLn0lPiY2{Y38C|E@(YsY@G=`#oNOIrt!a-5`v2)yy6t*m&ETE+MVlmJomI06k&0 z7c`O^I2hqVWBgi3(2Gurca1}j>)`IsV~kzd_hBw;r6g{A+jpR~kLO>sAm+IzeH_1T(6TM7TMak+`G zZagvl5FG5uvHx=cg!%2H_JnaeJ5$&)Mkt}kUrSsZ@wpm0=@2+YA*jyFwSc?){Hr_5 z2bSE++dJpP-=p7HTYN2bc~n{Ypo{j+ZnXTW$v8R9z@q9wAU(1Qj%aSSWwx-R#P3M!L_AM{GRGZP?h5NqL2pO)hf2Oy45#@m$~h zD(S6D0#{(%Y@y_OmF>CvQKDJgleCJTU3I0QyYl_RCCZiDd)wyzq^}&|xIR)HZkMiS zQi3V_bz(~_#Y!H&+^=})STASU-G10HnMNl#%&sUqml-fP~w{u%P_jUIABrkS$zpe#kxy?=EJs4Fqe4K>- zDMz^kjGu0>`Ak1O&KF{gNJsl-4t>~+Aw)Gk9o5iK{VCgw92{3bWhZAXBK;N`*-_pkqA*lA;N}y{0rG9`^49m}PiI(O3 zgEyMGD@Zq-^WX=S<%w&Jz^{}uX_g(FT-l?J`HKU6QOO^&u1~Gx_l#)N({tnpUSq^) zwL~Rvd#X;`G@9f^s_4J^CbRmuY3pfq*U`Dk(3Iw>4i`BwMa<1u_Du+3wnzVZ)F5$k z#lc$5Dw>x9<)y#fcE)82w_n9pOPA2MKp(Dyi<`(@#AE;~OY|Zy^Q@w#IW0VqTUORA zWQ3?%;#xI@cQy;3fPcnAPeMBE-0K@$_*G(4D*wC1u36?6f}A9b@uR^-eIeSH@7vb8WIhs!Bxi7&Ncih)(v6Eks*!Swzz^<=fCzu{Xv`V2NQY$cLYLL{Sdm_ z7&zmTD=8BknX!1g>PYgH_@j5&Z~6TfgIuYXV~9r{-?(c9zN+LUwzeISom#it=Y07+ zHU7)KC0-musF1;m!k}K5mcE$+On=vV`idIdCH3O>W>69GhnH?8?~SPDC~JN&f(3RSN`x1F>OUUw zIAAQyE1NCwn))C{^_}BjqnJbH{lvsFG-zGH++ekJ36<4DY_Rg!u0O8HrI;A~+!23} z>k%JG@pv5O?5=y*JGlATJ=a!5_DHQ!Vg}Wg*0)ZAzHgryz!F+#Aa^zoh$m2-I1w?c>C^ zG1PqzTl7u=d!}kEjP5&kBh)|RBi{o4$a!!=h2I_6Ep>|X%7y7ZM!iG7Egr$!NLtfx zWkodc>i(`6LGfdebV!oG2n{<(PgKY5F{2Yj{?dfmIQtJ$(%Wc9XBAEY|f)Cp0_9izpnDXH&g@!_fDIR*c@P@uF8J@y$~fo55ne82W_Uk?S}hhg@h+;V%}P6g0alcC+1X6Ac+NI8HH1}CJi$Krp;wIZLj8k z)N+Smj)I!<+`+ZWamtg&bD7L&ag1LEYsZW41-m=BkuBj2f)^Nr{C6Cx$nQ6KUym>K zKa}SG3^y+=QJRE*QCum$7NXm_jN8=ZXx|czq9B=kZurQMIITNXy)Dj5u*`!K`2G9X zdORzfrB^FOU5C2rm z(t=VV9V?`~H=B=~5{{}P8LL*hoazt@qplr@To2svd4{e;2itOuzCZk#AtuxdTZR}~D+H|vrXFY?3I6%!Lp>mY- z%2}!pCf8Sg`nD!U#(e79tUj6FHb4D+7+3TeoJB?>_51EOzqRR63p>k2_Ly!(X0FVF z=hpn(8$Wfu3FT*rq0s1Pcc#(|CPu!U9j;lg6Sw8LM9ejV_x?T8<=j0Hh^{z-wdWr1 z9gh%iNt$SHAqHRH;cVb8FL`W#og48e-12*(O+JrxhQAj4WML`V1Rd`IVXMT3zt)VA znmZXI-}&7nIub}tF`A6p=bEJIBI zrfLXs*3wA}FMTkRI?lqLGfzi&xhCe_!^4vDimDFuEkUet@@Z=8Lwsao(dc8jp5&AV zp-m%P-F*E$B&p%09C!+5g&O*MMrz|60z6woXnY}DEM6TX$EvCtv>Yx1la;2mX(W|q zWviccGWJ$`O&($g@Mr6(lIX#f8uCjXgc_=n)Tydtv$U&)3w#NvYac^jNmkPq(0bKd z`7$YQs4Qo@p}e*;AMrlI|433X$&BZ7&EToH5itw4n2l@b_r>?=izljnPVev?>U7gM zh_SYw&~sqHUK`QZmW)YRL~oz zNA;~`;iq$dw#2}oU<&!|_v_k$zYQgOKG^8UYz2u&B)6^NRlhRpI&B~P=$u0>kP$F~ zNV$ARwO}*ax(=(t8@!E_C!PW!RJADt@AdP;$ZKT_-(p=nRfRHyVt%SBKKGbDq^qI& zvSvUTmG%02@r@?kQ!jd-E*iF$?N(T&u>Wp|97y1$e3{&n+eZoNzsSq$DDd-iC7JAa zW0Aft^2HYK_dXpH7fG?dll?qjoHqZ6JD>AzFGjqHYR`k^9iAnAeXx##xwhoQg5&3Ij(pUajd^I{Om zE{la0RBfE|ndpohQobfhYF9Tr`Xr*8UYFjT|lUTQj5{If0%B0w@8Z#mke&le}HF(S=3(mHoSKZMdrVabgK`!M+T=sAqbd@-&%!7(rx!PD|h_wA^D z#N0iU=mtwY*v2q=72ssoSi87bmy=0-;BbRcvVB^(xM)JV@or*MEw)#{#_uS4^Mfw2 zgNlLyE;&`}8`Au)12Ht3#K5(OVwk5~J4x_rZ)aS5{md8G$IH;_rX2-m5=BQ1+sFQc zgV9wl68(M@JK5#Q+=`?#eQ^(PSPx42h&<2I)T@(eIY5utGkdEr$Ha?Jtue!uvJowv zy5FFTr9P3&)5a4;bK{fw()ic7Ns)+E73G_dYM0nI6j<1byP+n*&$(q1V-YP#38k!? zkLcwBHgzg*2ULTPlZBt!FQbWYgn&50?^%YBx;Le$rca$!>>`2%bpr8y81FQ)c`ymQ z+FB4zeFv5H=e4gLh8c%WlHz*I-*}(&tE5>&+Y)q^s3~clT&<*2X57TIw|xG-GEQr+ zXLi>7!S0>so~jMTOUe^#|?fU1Fm)l`KUe=ACpEx&4 zP_yaWtFCf>lm5Hp(|4bVZ1LpfrS>p+^BTJ3RGzQwbjDvj`iZY%zlB_lPn)$8;!rE$ zji=$Qt$EbQsBCn*5=AP~w-hO;}(LCpGoC;Fj$chKFX(~hBE zUMuR)Z``=PALUXIptpE&Gg&5M(_aU&Z2{gl+E4hbTZ!vAQ|p0ys#?~Tv(zY9|3`zk zB(Wdn`qLg&oI$P)X6=m$G)Tx z`j+(VWz@4Te#VSv-8R%x@%+x?R;^5l^+JZa;g3E(V_uE3vo?tO+LCS`OH{Ms#^+_XUALE*e(1m#SWcjLYoYQ{& z>(OFr$s>D-FOTDCPk4Wo_=vJ7k8Lkqzg1KI*xRFjURN92+gc^ z*cym2iQkYtzHL9*sq^+gCk=h58uFGgL4B+%g8J$!oe6w~(}s5&-HMHat=lPz2dnd1 ztEV+=gHkb6*Pv!4zOsu5HB4w$!SC&1*SB>9nooSvo87=f5wgbf&$#mPO7RzCI`7<3WLzDpV?DUO3`z?5{ELcK zFX4A}d&np2^O~iA?XbuXy2;n^Q={3GUEg~O^eOeUdkZ-fu(w`!rATOH>>~YSY{^|B zu6gVDF*3#0LX_IKE90Ub@70kQB$qNW($|)Ta+~n0w=-5(N<|p$7OFS6`vz>2G2ZLX zaoSuq$(ZFo%yzQa3{cXDq;)|It6MR?IHICrY%6-12g)IMtT<3o@9#TPUH`c9;)DCT z;LJh!IqM!PE)K2VH?@{-UioUYFOudE?;O5MWb}^d zw+TCB18nq`{?~2J+Y{)|@_ef(g8HFXHN`?-{Kd?PnJE;li4&EMCcOy#NXfH_w4u-t z(x`;4Uv2j-Oah9Rk6rg?uFQYGaVuBOV<*}k(;}YYO%T$p#1%Cb$&g!;KOCJAIy=~r z{4!gxY%D;#Sp{1Q`TQZ$M;sMaA3&E$loY>mm`F6fj@zIhA7D>Grzr| zF^R^CtI?i`@MXmf-6wln`HF+Q2j2+Sv?ofZlwQOu) zTdJyJnv?lj)Lx-v_zf*uF!BwqG+{lSrg5}W(d$K$o!y)RrjzX{rGiu=Iq^5m#)JQ?md$O8M~+IKQJhN@y7ks z&x)-*;SV`x5YBfc8z%<2LGKG6FttEssm$VhqpAnK-OsgcYxj8VF-Eq=Fm7_sd;Gi4 zRxO4Sj{T8k3GuNC)raqklr|m5sv2@7%~QIDl?*AMxkf$RuR`dNZ{^e04v615wsxn! zA2^Arix{y{qIyT}81u-R7LhR5B$+vMFW_MODBF_rAcpnRDN6!IS+V)JCHPzwV;8Y1 z0g~Z~`7Hc1D}FDdeQE%Oe!T6H0da9 z_@GmUB~K#e&J{HWf&`a}`PTXjQGWIY>M3rnVqd12b%aD0m(k-Ck?rLv?o z+g|yTq}F9!8P6U1c}MQULNU2w*{#K#%icKk7KeD{bG7BZ@@cu45^sK{esG)>%;@L* zmi*_mNyQ^|8#dyWT$vwW=-oQzp`HpSYV`QIR}i*I`sdsSg)W{4C57eFa7zlBS@~A- zWJ)8BB0UAh5>;6tTul!&`FLVx)=bX+O?Gild9BQ(^8HOt+!xqI-jw^-mcL>7X-wcj zu8iCWX8ws>PS0UIfAX2V2}>3J6n!C{FnmizJmwf&a#^^bw6=geoQWLcOH3Fs&ga87 zAby5uvxcl!j!+ei``NZ%&S|1n34C@gJ8wSvRiGzr_MGt*Zed{1c4k1R2M%hj3E4IG zF5m7KZo61p??5Io5HHg^HTSJ4XITVo`>N9H$p=+$YS+P$3k z7|`0_L_IQX+`Wj70hN(<*|td6uk??YTw?+p?yt74E=c~)9s{WeG=3T*K))F`AlGs# zVAj_Kv54LLfV!xr)HY$J=)Gkwf0%OT@x)gm{{ICyK*zs4y{g%NpB0Bpda7EBq8Wn`PZL{z=Yayc`cVAcJ{XM2`lk_&6B1sJZ=oqnN zSfZ&w0th1j7Da={dcKR}-{`_5nUa9wkN-Sxwd;Am_Mo7kprFY-PW<5}aQaNd)jGBwJTEC*ko>i);fX&HhXG$?fBf4E+$HM{hbgc3`dfhf$%j zeDzi~4lW>#8WMgT4^!FRoBq|{{QpG|J_gbr@{DsKCKhn4TJ=_m{uUCzo(7c$r-TceDY4gnIjCOONyS+S2utU`jJl)r zAhE;M#0IhtHEP90@TgPzOyIslVGivWpSkaCR@W0=zjyQfHziLiZCXPpS{-;Nu05jy zl~%F>gC6+gmIPU=Jdtev)Yg10Ra!zG|L`23>a|G`kBAP-=Xqy<^xyS?L!j6#-Oqnw zIQ9`g(<3ZDyFC>5ky8<_}-o?t|;M?X@3b*rf|83WZ6CbrNSD|ZgL~;*H~It>{nz6h9vV zPvsGjL%+BB=>Iv|>i#36=IM3fWn$DpwD;bdN3(eOQg0{^!*GHo{4D?8BNv&dAn2J4 zwsp)lTp|t#0*)IB0G!)Q|Dfu~w50te*m-_-OzlDnkJ@tIP6;s>J5#+9jrLvxqOOaV z4J@iyfmIyrR^0wbIWVU|3Vb*exk3k`z$XoWPD!)V4I`2;9=O1AMJc_AIVQz58lq)) zTgcO#bCd{!i5Q5D&T^P&iwxr8_b7oCggh6&9%3u zb(;#JLiVs63vCBqN#^!5y4KRtugrI@D|okbnjm;)VKX6_1}={+0Qid@TmrzC@4w33 z>?aJ#67prBsGlYEg@u%`%Nfbt(pGW3j;zntrd#SnkT>hx{0eME{hTBn8v)6@Lvz`} z`XBwUIHU&*eeZE#`%@CLXreK+&$s_yuJ;!tTtn{2gYytIFB^a{3(YmxqZ`7MMlUL* zq|yA%$xz@u6o}p75RftEyd#-RMI*{>Q}N|*$kcbtth4G-APv#E91QNS>us&Ql(;vw8FU6#S~-p?eqQTIbK91L4p^8Tb3Iv*J^xi1)OD~K-GA_IhqfAB zI&lMTm)5A09&u5 z;{w?L`2dNwKfn3J3d@8lBT*rxmEf|1f%qDYsI*M{xo+y1qDzzMzxV&yNq9PU(QG0^vO503Orwnz!)w2Sq%2+fIb^z)Ukw(~4 zotL2Z)oWANR?n(^8k!;1sRj`&badvK2t*&A%hPnIwK#S%^FM$6ueds5O+wnCyb8q% z8WxPp20@ThAj=Un&NPH%V<_JMB;gj5gcapN>-qLSOxZs z1~7@B*Xauy?&HGI*ll_}llOhp+n4h@yfe&u05>9m?@Q&Xr&&UsTg8iZWUK!98<8#o z7KKA?T?1fW&WjdU(AWvCv_CU@saWJ=yoXVKpZ1>dW*DVM*U{YD`|CK_294j{!Zy7QaNZ#S5EB1p|BQsn%m@Ku)?r4o{^u83t%I{fps(~Exm3i# z*TO7!q(#6(kp46SlkhMG00EaqaF$K5rtfk6QUjIF%=L3Q;q!C36cL+h*Y$B-Gb!ta z)%iBMQcfg{opsEPaVAny&#so%FBop*AtAUyVzrnNoZjv;@AvEKSrygSksREUUO5ifh7j`)&P-pubQrmK#OX793w{{xY3r8}uXaTr+C2=&)4P ztK_uksoTu61D!7(2!J`OEQIQMD1spfge18eeBVFR=Ii?09y&H3_IY~GRR?GIR$x}< zX`n*@GGksvH8N8V+(3$9a>5{{5=2MiTY)DQa@-Ua`JyCU!BFecUk!3HyDj+_smE^m-5v^H4;(R}l6O{s1-~XQH&48yPGY=Tb zU}fg$JJwE+-_*})hNfag-N6zt<$2!c;ZedR1N- z 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 We**sm{t5gO_$ToHAt0qBss2ApF%Vz? literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.473011F7B55118D4409E7A91C4CA0C06.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.473011F7B55118D4409E7A91C4CA0C06.metallib new file mode 100644 index 0000000000000000000000000000000000000000..b1221a3d0c4a4a61b9d94ee87fa622b4cb528ee6 GIT binary patch literal 66720 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.53C5FFB4F1F65014E9D8CE139E165C06.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.53C5FFB4F1F65014E9D8CE139E165C06.metallib new file mode 100644 index 0000000000000000000000000000000000000000..b942c15f2ae8bdd83724a73b867ea0f8e3a791c4 GIT binary patch literal 66837 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 F{{cyNw?+T} literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5A4DDE443DFF866A0B6F7E709735D7AB.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5A4DDE443DFF866A0B6F7E709735D7AB.cso new file mode 100644 index 0000000000000000000000000000000000000000..0c6d83c97a6eb999bf7f560955412ecdcb6ce791 GIT binary patch literal 20328 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5C6447565A432691A52405F2D1A50012.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5C6447565A432691A52405F2D1A50012.cso new file mode 100644 index 0000000000000000000000000000000000000000..8b821f055ad2928619d3ef67bdf43876708fbc95 GIT binary patch literal 18000 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5C6447565A432691A52405F2D1A50012.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5C6447565A432691A52405F2D1A50012.cso.pdb new file mode 100644 index 00000000..838b0c26 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.5C6447565A432691A52405F2D1A50012.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:141f017a603e3edd890b086566b88e7d7303b5e997f5c34924240f53dfc448fa +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.620373BC462CC9D98E9DAE33EC0EF03D.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.620373BC462CC9D98E9DAE33EC0EF03D.metallib new file mode 100644 index 0000000000000000000000000000000000000000..e4fe0091e3d23cffbd21f2aebd23c961f7f1b793 GIT binary patch literal 66586 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 C3scJg literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.11A3F59B29869268E24243BE4EABD116.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.11A3F59B29869268E24243BE4EABD116.cso.pdb new file mode 100644 index 00000000..f7f82ffc --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.11A3F59B29869268E24243BE4EABD116.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8e78cd8d3469016fad362c9d334601d47ed37288c8e1ffd14d810fdede783aa +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso new file mode 100644 index 0000000000000000000000000000000000000000..249c9b64657373d67909090dc8a2f7a911612ee9 GIT binary patch literal 41956 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 HhsgQ=Q?Ozo literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso.pdb new file mode 100644 index 00000000..0b2b5a1c --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.125C4FCD6DC29A9F6B47ACC988C0162F.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75fe5efb8a94ab8aa7a0dea71541b04698a4217dad4f456a32adf614d7ff0725 +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1873B621D321CE82AA536C28DCE3C58D.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1873B621D321CE82AA536C28DCE3C58D.cso new file mode 100644 index 0000000000000000000000000000000000000000..4ebc955ac2363f9af4eb8d72db803e9ef725de65 GIT binary patch literal 49712 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1C0F0C96333B91901C06D1175A16E1DE.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1C0F0C96333B91901C06D1175A16E1DE.cso.pdb new file mode 100644 index 00000000..cccc4762 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.1C0F0C96333B91901C06D1175A16E1DE.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:139f1138471674048384f34e8c5a933e412de21f27db0efe9a6a2a7c6661bb33 +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2ACA21574A23B0D0074098285F176749.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2ACA21574A23B0D0074098285F176749.cso new file mode 100644 index 0000000000000000000000000000000000000000..58c3782bfb0373c77303207d569537a02d64e988 GIT binary patch literal 49712 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� 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2ACA21574A23B0D0074098285F176749.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2ACA21574A23B0D0074098285F176749.cso.pdb new file mode 100644 index 00000000..a40bb6d5 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2ACA21574A23B0D0074098285F176749.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dd0e4c9078fb25883df1e55fe12785e80fb4f474e0358cda3939f1eb7614f5d +size 42496 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2C8009173B59A839A8E4FF2BC5B85094.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2C8009173B59A839A8E4FF2BC5B85094.cso new file mode 100644 index 0000000000000000000000000000000000000000..a3a6b91265cee557cf1ea17763b26f5f3709d4c1 GIT binary patch literal 49740 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 M?CzKx9wg`g2RKEK+W-In literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2C8009173B59A839A8E4FF2BC5B85094.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2C8009173B59A839A8E4FF2BC5B85094.cso.pdb new file mode 100644 index 00000000..8493913d --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2C8009173B59A839A8E4FF2BC5B85094.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05c6bbfe7dc8160484778a1da28045799e1e05a60eb2c3fe1efb1946091f4f6e +size 42496 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2CEEC2A138B6BB946C7E5836CC5E37E0.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.2CEEC2A138B6BB946C7E5836CC5E37E0.cso new file mode 100644 index 0000000000000000000000000000000000000000..e7523189102563676a83a11c6a313cd74ce36db9 GIT binary patch literal 40924 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 kLq|_XZwd>kYJiGIDnRu8P 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.377370747DA9B2908354049AAC2D30FA.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.377370747DA9B2908354049AAC2D30FA.cso.pdb new file mode 100644 index 00000000..d5fe5b0d --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.377370747DA9B2908354049AAC2D30FA.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f8f989694bde0d8e346ecb9fef7b68b2c7af54978441bfd4d0348d4b894d00d +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.38E2D27FF7046D8A00290708435B3AC5.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.38E2D27FF7046D8A00290708435B3AC5.cso new file mode 100644 index 0000000000000000000000000000000000000000..ad50de2d027ae619c380141ca9380487155b7bf3 GIT binary patch literal 42016 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.40452A858BDF0DD351CAAC7CAD4D75AC.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.40452A858BDF0DD351CAAC7CAD4D75AC.cso.pdb new file mode 100644 index 00000000..efd874c1 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.40452A858BDF0DD351CAAC7CAD4D75AC.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b2aa613af0906852ee2faa8101fb6e779c9565b04b3e9216f7f7d2f40c96bdd +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.455299EAF18CA9285CFB885E58CDC6D0.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.455299EAF18CA9285CFB885E58CDC6D0.cso new file mode 100644 index 0000000000000000000000000000000000000000..31828cbf90a8a3711fd66ba51a37ec7214b4f412 GIT binary patch literal 36712 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.494F248863E815B635F86B4C4A2B9878.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.494F248863E815B635F86B4C4A2B9878.cso.pdb new file mode 100644 index 00000000..126781d3 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.494F248863E815B635F86B4C4A2B9878.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b0946a852a7c71535ec4ed727ba858c476744e1933a88479d35e9259c73dfbb +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso new file mode 100644 index 0000000000000000000000000000000000000000..75130f69a2a0b09c899be20990554ed9dc4cfd18 GIT binary patch literal 42044 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 Z^&K0NqeB}Lo$E(8b|<^rCPs$H`Tu%?(`x_# literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso.pdb new file mode 100644 index 00000000..8458419d --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.4A6E9FDAA1CE421286BA2A3A30A6658A.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f392453a5c021f4638591cda4f03bc6ab1c8037902de4dc697c5c6ec079975f +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.566A5829015B608CF29A39550DEF77DC.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.566A5829015B608CF29A39550DEF77DC.cso new file mode 100644 index 0000000000000000000000000000000000000000..fd32b1de79b3f4b0260109cc67f78dbbecc7283c GIT binary patch literal 49624 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 RJGUQ7r@K35#txD5{{#4i`*{EW literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.566A5829015B608CF29A39550DEF77DC.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.566A5829015B608CF29A39550DEF77DC.cso.pdb new file mode 100644 index 00000000..7d85ae1d --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.566A5829015B608CF29A39550DEF77DC.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fdc37be294d044351773b81cdfb9dbbc3caf6cc3638c3fb0dfedff83a3f649b +size 42496 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5E305102DF74F937A763A780239EC2AB.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5E305102DF74F937A763A780239EC2AB.cso new file mode 100644 index 0000000000000000000000000000000000000000..d6c668a177d6feb8468ecd12bb1fdd459b96c565 GIT binary patch literal 49652 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 KV`hAmoc|w=iXN!| literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5E305102DF74F937A763A780239EC2AB.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5E305102DF74F937A763A780239EC2AB.cso.pdb new file mode 100644 index 00000000..6853579d --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5E305102DF74F937A763A780239EC2AB.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96e1a2e6635c7319811fc0679611234c70c5169ab540ecc5c487b28d9b7d6c1a +size 42496 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5F5DF159396A6B8FE4C4A0F97D78924B.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.5F5DF159396A6B8FE4C4A0F97D78924B.cso new file mode 100644 index 0000000000000000000000000000000000000000..2ff9620104131fb077de1ae59b92f831455eb34d GIT binary patch literal 36624 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7B8359347B0DEF37AA39A05B62E5CBC1.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7B8359347B0DEF37AA39A05B62E5CBC1.cso.pdb new file mode 100644 index 00000000..21524d2f --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7B8359347B0DEF37AA39A05B62E5CBC1.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0594662f6cea0582e6bd6a3bf577346f5bb82e3df48b9f9b9799460b8c19927 +size 32256 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7EEA6AF74A7E1398CE4B70E260147AF0.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7EEA6AF74A7E1398CE4B70E260147AF0.cso new file mode 100644 index 0000000000000000000000000000000000000000..5a62f6b134f89fa552a0949e1b1358a78ecf51a4 GIT binary patch literal 36652 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7F33C027EBB191F2059BE1A8839D31F5.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7F33C027EBB191F2059BE1A8839D31F5.cso.pdb new file mode 100644 index 00000000..dae1ece6 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.7F33C027EBB191F2059BE1A8839D31F5.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:709d9b1b803337faef7ed5d2be26103b3b39485404ccaca8fa7216218b3b02a3 +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.893C3B31AEB4B56E07A0C0112A35B626.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.893C3B31AEB4B56E07A0C0112A35B626.cso new file mode 100644 index 0000000000000000000000000000000000000000..7f4271c5eeb9c743d68a067ab277a919226591d4 GIT binary patch literal 49740 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 Wc*Ew*hVEoXx+}e*eKI{v&i@b31%%E3 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.893C3B31AEB4B56E07A0C0112A35B626.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.893C3B31AEB4B56E07A0C0112A35B626.cso.pdb new file mode 100644 index 00000000..d7781e0b --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.893C3B31AEB4B56E07A0C0112A35B626.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6199941801138291e579e1f66c14420b4fde9a79e1ba13ef5bdfb0ebf9b4631 +size 42496 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso new file mode 100644 index 0000000000000000000000000000000000000000..f00f4de01729fa1a60d36091fbba2d9a377ba01b GIT binary patch literal 40868 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 NJp+Bo!o(OU{}0T9rmFw| literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso.pdb new file mode 100644 index 00000000..a5663936 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.8DDF66C3535F05343B6E0711A2F5EDE9.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c9975f209e5ccba5f9bde6e2cd731ca86d25a840b20b55dbb6c793c7251ee08 +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9EBF63F0CECB121FB08C73258F424154.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9EBF63F0CECB121FB08C73258F424154.cso new file mode 100644 index 0000000000000000000000000000000000000000..d3943813af7f1c998c41c45335647cfe22b064fb GIT binary patch literal 49624 zcmeHweQ;dWmFI0q2(_%n-^Kw04=haE$a3q$wg5w9TQ>Htz`_!Y6GTi)YT25|>ZZG8 z%iv_h$7YgU5)5%A%oa0C)p%0uBva)-Tm`emR(Yn9*-R=kwUwcEsgx_rP9-z>BQ*iS zX4xug*x&EIb6(%~x?7fPaQNtFU!A_^oOkZI=bm%#efPb0U*CZpJMX=6{Mdi&|3$}} z@16VY;9(DwIrbP%^1$wNvawIa13@i^gwvcJ@U=__RvAFuSm(acn4@6>qK?3kFG z9Lc8hV>U;*i;=#MbdHM2L3up)1aw=XNWeAqex?_I>?z5=kAoD2L%{bU&%~n|-{-(L z3wkdSk7|5h0N**#dy#ll;~S?wP`sB+II8jGsoy;KPEfyj@O_2)318hD<$jy`fuR?G zM>YMvL;dE#_cHYZAKM7P{Fw4_Xger;6Zn(!;Cl~zFM_Yh7h_hS{duSyg+0K(G!MRA z;5!38iUBYOs>pj_B6DmYpZ$F^KABAyyJx!1cfVV2>T#Z&KqVr_&Cr$S8GGX1siQU{ z(BkedWb#AV{ym>JNJCj>Oa4DGb;v(EJ^ICav-u)dkL12esrYTJIvm}yYGDs`mwL1Z=G>;g&2D* zMn^=vmPb5)*W(BAY9+-tpbo_A`Gn-T5`_>iRkU={i2qAK9#$?Oc@_iz10r!yKhkIq z!l7LUcJAA^zt0RlaByJX;NGFV`|h>B^K8k9qnW*ZX5Zl5n-74OWoz8@;5Aiw6Re;T8e%A?IhMjZ`(7**$x_Ym}Y#x}=NpQbsEzg&;@@T@Z{w=4_xI#l|%VTi^y4&7x}xN@W5q^%HcWRx^l_v zc0m57Eb{UI-q$UnGwIZScb#9S2UdDyw>an(QyWl69L?nC?{7Wj*>Z@yf%z34e_9_$ ziB~=$Z?A?x-EnD2=Ay5Ur8S&y-~`h50Vc$#9bQ8AdS5AT|%vc zYX{|V>!9^h*=lpKL&#^XE_3)S^{D2vl!qhm*>ztF`|P^Uc$R@>MBCD}Vc!CMHtIK& zrSZYvutgBVY-8e77b(}ascVmrP3P%@9TJC(?^v%f$9{Zkr^eh|bz)gj|Ac*-G;Ram zd%^>!G3$|(ZtJS?CiJA`^7{nRsRJQ(YW|;Vx2e6@4lLKokXWW{wHN7bzeBmMo}{Y} z(r4Ar2uX8&Q0>mTkfuJ!^Hd+|p)%Y!`XGH}tK*-ni`y5gPSitn!q1XU;kd9q#q;ZW z@yD3YI?3!_<`HLY3wc4m&bs3WV#KxYhuN=dedufIPt{^X+u-9ABkEr|Mn_{LO8;HO zh}xbuc4I_h!jHu{Vnq1}=ZX=RuWye2lzh>c))=9$RErUwr#^+BHb%(b7>*G;&mcbV zDfGWQ+`fS};o;b(tUs>SH$YB;a|;{CZp`&sk>Qw>xse->oZF%vamrvBZcM2EQ-74x z66GOYc|<>}H-D>b1aD=})m|>&#f~GC;kG67uxwn%5$%&~dpzNR8jK~D$Lb(9bb00* zD?EqgQ;yCJ-SLEUx4(;yC#0+0)PIRn8}m2XAsEZGt*l)55TW+rJU=>a2;K7a%@Gsi zbM45y#)R5f#|>*UnZuG#_2+Nxb6h<``a@@)@77QCkIG{F5a;^PLg$w(OXq;lBQ(FX zvSBgWEjquHI{H2=JUBlX!vftvlX*Z{96+qSCZhaEA7SU8u07rPh{iJF04Jr|pA$U?UQ7*#4J4*hUJ4R%UnYAJ|6p0hMp#x)AtLisFC&ZoZLX%6!NWy{lZU4F`;ALv@c?(02Z`~&za ze&YGE8c`%wt7L&w?H#ey-z^{K)NXiF>cDF6%e%k+ z__zP;<>9ygLitIPsh^_E`TM$}sDM`c@$s=h{`lUh+;p+|vF7;TfIgp5@Jc@)?0D#o z=J>=^v4q<@c1QDAdIpPbLB8(}#9u zC$o9)c26JKNI|a9AIRj3nVErX0gs1dr@-SpIpUXfG&?coZO`R0Q)51Ja$+i4u$Q&v z_oa*JHg94IId3RGk)Ap&;*OqTc-M;X1SRV4WGy8S~HIj+wiE&zPS)isxwlUCeC%-!bz_JFY)JQ*U~D z>dpVzT5qO*6f^&vj+tNoQ_TDf52xgRR&Rdu2X*H9zpgXeTVv)Y|JRszPU0EO$Ba4j zpJI64ug>)R5#)TY-aPkD_2$dq`yAwL`31TYe|h8M6Fi>)O*MoAmnkp^qTzc80bVJ5 zLwuc{M?OAr=R|o2Tvym^uv?z}*7?AQ9l>EfriPrSH+Biujl$HSm$JbqftPvnxee{LQfv5&KQ!DHp{)_msBM4_0; zCr46t^zl7*rrYE5t9%?6Jbbh^J3d~>6qBQ=_8ABh#}>8-OLv5&f|Q;Ji#+}t5!BIH znXQ7rjx7<^;349O%+6>9f@h4QjL~WYkKoHA$Wi`iod!Y=BuBWrqE(ANz#Qcd)z2$E z-5lZT4pq-{9%ha*b~py>^g>TMM_FB6JFR2rgU#ifj|Sf1l^%MIvUS#(-xFCNUN$0nu=cFs{6PP{|5Go_g3cs^5{&QA%dT}KPf zUYh;+OP&Km=3p9~eq}j2u?xnC84eI-*yF_dW%{GesCTC~nk^)KZEVpx2$f7$08?RN zYEC8$OEYQk*>Vwz79wv;^fq_}?^d6N-=m=W_!528+eiUmg#B4>zv3e!2M0&$dp~PT%o8026iJpzSk(>LuK9;A{)P+!w0Oqt&ZZjfCn{BcVEvYIQ>H=D#6PxJ>?r zusO;hEz20YkOhuaw?H)#EKrRE3mj7m_|7lN+@E7i%tN1Qt^yygMw+jK+1?5IjHZta zWd|^0m>8YRK&2`Bat)@^+8Kqf7#ShxNW`Q;4+cTgIsfgMy;GQ09DyYANKH3-9qpNo zo5$HTx#hLbJPHR@Pj(CU_@+uB8RBk>l(8P-oWX|5Xs0KqOCKGQ5;+Se%_r7$xS3Di zRf@g~MdZeiX8v##bjuH9CbOdxMO!5amJhRI{)hyM%rQSO&%EGxqk&Msn_~<~XO1Pq zfpU!T6*027(<`5+?=2>gt4CPuftb z1=8d~yZFl$Nb0_HJ&Y)fw~Avy)G;Fd1_#lQ5=m{CVq1}AVO1)s6j;g&IhQN6DydPq z?p1=TB*4Z!tmg-q;v*rZmbN2z$*p9y)DI_4axi#i70hGo1yupW=6jy_6N7LwkABNZjs+k|?b5DLK6`7`J0#H46}JW5V8!J5vF5l9lCk_=_SxwIb9#+iS~cX#Ql#HM z#tzS(J3g5{#LIR$*SZ=;#Dd ziARUp3Uc5KaEC|_Rysh`638Z6@zC;5ZvQ)8|+;P~+ufnbVij|}G z%#jjxV?dQAj+h@}!agY`#bRgf`1(84F-rHraYCgk*p*j%EAfu-?R@pDw(vc953-^1 zf|WY*ky8rGz8^`YE<^L#b?yg`q-T!W=R8KU(}?*k>mTwvqa*Bua#;?Y?jtA%C-`6r z?lZ8f@oeA+!GONQe?~-~SlQdRzz)gwM8V@Aey`{IE4(ehhkHGADe*F&hM)VIR-)QI z&e7WP_(DUG;&%$&o^~A4zl6GJzvMQJv>;Aww|>!2BK+&G|Mk~=kn1H6f41K~JU%@+ zxiOy^nVy&&8y?DLCkw*^*<5C97&kPt)A`X%Vc6fRrZC(Gu0y(HNmXrZx8JsF$L=j% zyHh)N?cCAP*|B>^s%PicuFlOpySqEPJ2rQ>j~24+hbIe@*dQfRUeT79v*qQ3@(Olu zoWk%J%gf0UDQEdoUS?!`OV@a6G&4Ga^2SF}J)^d~@o0H^mp^Eb+OrPDYyUA7n?=*_ zd$sZ2KmFQIV+(z#kNkW;L?M2fN09gqDrHYx@ymbtZ+HQpbUadIX#ln3BVqx*XSBm? zTe^e|6l+F1wU~d|p>V!CRdFwjJD0{7)w?-EF{zoJR8K0^VTc+^=W&&04iye=KA5tY zT~l~k(6HmD88(q=S2+xGQj%>`lXxTf>T}$z<8S+6C?;Z2mtNvYP z29_?e)CQ4tdU-qKG(mRE$a5Q2&-MwcAj5wPvLu5P%Hb<~apR8y7Z78vft;9qx;`w2 z=P8Z*xA}EGyxUR9W{+Z#%x_U3M1%KDXClj;J)z6**1M>q_ z@@GTzmVw!`O(uRzq9Zo@dgIc1ir-W3#g`=3Q2aKEkFQU3+XAjlY(@^nJX=3|Qm_N@ z>e$wbygn8MpG1{5z}NXoZ1{FX)eXnzZFm4 zaLPQgkTP?&%vKIffoztk_yz~hG8NC5x+Zqd(tf-cF?K!lh8)|DEsafRyhV#9DSb6pxw7{Z8V?b>d)Dx!z)D}TKxgtQ_uBh1nrLvxU0jPLm1AK!8w3Z5}Th!Xn z&}0%VvDtSU?}Rh?N_3Sgp|Tt$R4+$~+sc(tSs^95%9Ma@*dBiWJ2HaooJYI$0S+t; z=3V@anQe=Ig&kU7tZy~1G^Wh?_zTz-ZJSxKm>%HwrSz}3u~)1XH`gEbU+QD2#gyL~ zL%Xs-+n{T^I&3UNbvX0%>=REruv*KC4;@P(GC`uvNXf*TQ_scymje2YID7U%35dtomRXWfnCo;)E0=NBc%amodzUhOLwx^X#4xukvcA6ut@Ze}#11r6F|o%sE(f;R zGl{hTV~C1|`q|SG74g=@?${G6?3j2>;%+qUwTbOu>yNKY^w@KE)%V4lLGj{?5;v2Q z=me%NaT9)fh^9ao^tu#($YI=wnK#PXMe)&gQ9Rp4+l#h--gac=ajE!dTq^!jDpeop;gvHF+Cx8kGmt$4=wmSCO{dJF=TxewKg`hL~+FKsao zrzoEKD&DOJ^;JCUQ7S+DFcnC19$F5|KWEGD3;6-dSG?;7EMM{T1NLuEp>G>TJcRnU zC*E^9xV~QL;GTRf(!s5f4z3j)ToRkMUWz|=+jbl?ebCFTpW^p8c-BwxoD-MIU3mXC zW6Sl*{7~_3`>|Zbv;9ha)57|N}X3|eS;_IOYIuo3%t$Ne5} zQ6dFd{fRr#>oq1;f!j;mh}q<##5MT6CVq8d6XnLYB?dux5Itd6Vi@?vc0gfLmfAI=76u>oLtQV&!p1LT$&%xXAL-_Xq&p7(2#L$UV*qgwO zp+8)KOKir_E%0E*&<%hZLwDh~8$&CRPbTidXzwM~!=t;$B$EE{SB>j~NLrb=-A2;g zHj)@UUgBm%N&-{J3q{iEL_2ue5JP?7ztf4N6)Zcx98t*9x7qnfk~(;o;!BfQ*s3&- zR(#Z#6#qf^5`E)g1OwjYtn-}qW4kKe^(D5e;^|9T?Gt%Ii= z#Wy&3%27P3E4KJ#k;ywN5xb3QajlB4lr{cZe4q<|Mish#fo>^ zpLJDy5=Ahs|6byH4Bvgh*6#k?zq9eG`hS1gj*7)#R2;OUA|l3LHnXGR^N1!!v>iV& zRy8`81dDL(_a9C)uEl~$s(z@-khsAPiCYtU>su4|)wjmm6Z>UIT$xyhqS`PV-hysG zhC}2$Ti`~E^DiEjmWnOe@?zF7-n6znS9b)Hg##VtJ^*=CVZcc zj=74Dj=74D#>Tr>Q4X;s`P57CQJ+>keOmo1ZWcZd?6&3pJT#AHxr&eKulT6`tL^&G z>az6)#Yg)|#jl3`oKIfNnAc=&-yhPQ?WK5EcgCdRsXMO$W--=1jJOD01AKkB(lx+0 zx&%C7+w&pt$bj`dUgrCtNPZp-z``WD4U`xeDB1}^p*V91tv+6;tbEbJOU zW%NRZUIXa*-osc^4z2Hf-10fD z;-m4Vc*Yxj|1kW17`6)eK5SKCf$y1~i0?-i_%6kMFWP>ie0@*x^flM_6@RJgd%v>f zmap$A-t9XWbBbr*ak0LCz?OMw>wCV8@cJHOU<2Be_f*c{SpeR5wQGExnEuY5eC8EQ z!sEE9b@C)~(0>Q|+pEFzRkJPh%o$!wwyzH#O;1i|?gHZ+hqej(RS$OwV)#lNLBfTXNfX zYs>2!n_C7>V$nNsUF=z}Wk7h*)!e_0;(d?S9g> z-%GHVXTL#Iisy^4y_HqL_JWV<bZ-xzdle*pFj+x}VK_Rp2uzF}>d?Vo*BeEzvp zACAwTvbHS07p3@UJry7IdBxM`H5TZ@t;_wk1vX;mKq7tFbLXU8zxn)!)2>N09Ahe4 zPsK;;sd(1Yjj88t`}r|-skZlJmD^tNQJoYYwf*;C&#>*kIbdynDjC?GZB>WoXWl`5 zXoVQklGycs{}2E0zkd2Z{^)NwPYlou2wkAP&qq4%_mTd*&;{E2bfkY@=sy>_ zKzkpQbl&&m`At5Y6=+sSUZB|~d4cADSpugbU7)@1z&!6i z0Ga`z3$*tKNauY5(w`T)KzqN6^jC!bs?Y_RA4*=Jc~kNNO$*jkdA>m7NnW5`LnWPS zsVsk3=mO1GB`?sfeUqPS;N<_l&;^<|BrnjsBYA;l3D!?}zCe?byg)M`d4Xn9@&e7% zk{4*#X(^BEwbbV|p$jzcNnW5?gEemQ3p72F7ijt=FVJv}p8NvMNy!VeYwx6U4W8w5 zO`Lgw<_*aUG{2I(K(hj!4fzF{l;j1PKFJHT>y+f@dL_%76}mw4J;@8S>x$&(`Xc#% zDRhCR0qb+53pA@GFVJ*LUZ5G0yg*Zwyg+kO@&e5n$qTgWdn}LZeAMS%p$jw~)+k9A zXnG|t&*0!>o#0?jtb3p58LFVLKjyg>7! z0!>cx0__?P>8FJMjL-!duEmfp(5@3Q|E}&=QCV9e@N&8?em1B=Y-B{IOYYKGm;l*UYEQ;V{kn}eu4JdlX+f)0-7G73pD+b z7ih*LFVN&9FVJ37S$%xGIU{s|=5@&nntsU(G-Hw%XmXMl zXy@sa$9XyHcUI^E&3VZSG!2-)l3$>`j$oeG6Fh&L&;^NcO-O%;Wzd#pL(j;y3Tt@VF0&_ak`pA@NyN9$!Fm@qEUM zM-GY4s_=LkiTAg8{5g`#Urj#OmU#RIiR&UfK7;f@;kl;A14E7JMjA#sf%F2>t4Ouu zlW&2((0g=mzqQU>u@Xx^c0R1N-(!LoqV0>)<~MJ@wamnpVM)d$;Ft7k`s7vki_Z_5 ztMP?0e4-BPjj?4|mauWccSh*vno7J^m?glk0xyH=ETfd837~PCnjOx*ES%0bT_@*0o&!I`bLOuQzK}_EINFKpE3(?B)vH zGu?)=uLY8_`FoB1ZR+@&#6An?M7K=`EgjqtJo6EXSfBb;NpD z63ShR^e`H=8D9Zno!@_-E$sJQ?7y(2VNMZ&W0ko!u+0)N3H?Ixv}==(?{x8$*y7{6 zi2sVIUzS)2EXu|g0`OM1-5kOY$3A$8#c@x0^A>Tv;96~Qx_z&Yr!TCr`0d=-&z?_Q zGQf3M9Lwo8;jKle$4&5iEMW!xGJc|uclIMN^!ZgQ>33{1_Www4b%yj0J`NF-wWLB> z8e=*(uq>|>WB&dCDDNtB^-B8YVj9zy@5da+7seA~jy^-1s()+zalBC7{P8GwU$(&d z(w0S>H}N=P=CA6^E-Z}y;N_T^#$%AL{&}5A{V8Cq-W)oJZ}h$cPlmkO@yWA5_M$$L zQrqiZ_SnHN;MMlJPZzsGo3Vz!S%M5WD&Z(r+v|P|8|2mYy7$&USljEq`mXiZ zS-skZ_O-q4YkS>KX46G%hZuf66FYI$_PP)6bt+$^a5p=h*EZd}hN|s#?|ukD_I(Rq zI9B-z!{yqd+dd5rudlp0wP?&sYI{jszTfVLzx#0L{q5Rb_o4j_bw58|fqB7(oouSe zw!rqKnFub}Dmd8cQ$7Vkckmaes(!Jj+ILbg=2j!kbHpiaJQ`|v=v3N4`lA>~YJGVP z@dF4ckyP93zP8uB6W!%e8{L?=e0*{C>rL18x}WpQD%L)B$Nkz~_xP?=u>HL|{Zkv+ z?Xh(NQQPaDTMbv+PrH2M{Mugk_&A}?U#t_!=kO|gZJ@T-y;s}ozO-k4ZLj;xOtQAu zeKGuDgUj+&0Bpct+v`4m{NumZJzniFZy@F5b}XOuctm~^@Y#jhF+U5q&wudQfnFGM zQRMlLBt$Xs`Hz%{#j`!wodVA$;2iG#pTUOS{F)4(El?UZ%r@b#nixE1;h(phve9!cdv6W#0{Q>$)1chF(^O zE^3EsK--?nWv0gb%R8PYX8fIlzOKH(J$?Iw_aiGQl1gxB2c zd)cjkDWq*kdys0!N7Dk!%*}Yy%b2H-V)8|f>&<;juY+@OyysJ(JUG}6;G=ZJtaIq+ zVm^I`ejjmS>JWL!M>*GvoY^{`Z!q|_W|)3b=zaXSv;PHid%h>4Vo`TM$fO6`CJ7~{v{9rn9l z3Df-aRp#sqi*W_m51NP6hI9f+4_=t@9VGWqV{(rb57!DVtqx!Fc!iSz9DQgU<@GVf zA91F#QyCyO{+IT*lwMg@oo!o6q2821KJJOaLve(B9$rhk+@H16Z|d2)XoXZkD);{T zEizp3Hz~ifgZ;mU#C>m`$BP6{LSOD#!{c?&pVagFZELpp?|!6!=e6Kr*qpv`9*OTC z+>5jo32bH`66buYkrEF22NLIlcOr57w$CEZI#OosVKfIpW zi}Y`h{w>lyNc~73wPWC;rch0vngwbWxNH{K+uwID`!)7{TRJnHW22cZ)q%x`06v<9a*jg%~rr6XZnLnm> zfUpUFP+@<+`_AdU?{&8<+2G-$pM7=uo^#&0=bn4cz4zU|?{@OQ&inWL=*j>2ztSgr zv%9|9^l#t4usvdodH>IhSpwLL)OVdR>*|d;iL~w}V}6Kq3G{u*UAsT5Go}VSXOIZV zZ>}5K6M1INyaC$2WJd>aYmhvoI8qBzGZL?pJ}CK19hkmZLh{drv|)vrLcx>uUYaeE?)nNd6;Sq$nH)z7KgOUX}R1 z3cfke`;d55;(Hu?mq71B;#G-nocciVJ~H8|#FwRh3*b9R{T9IYP3k9nHS?7Fd(;mM zeE_^F>Gyr=w*bCBrhedK69JglDIb@%gTi-!KfM6H55f06@HO~i%u2RDE|sIO2l&?( zz_$y0=fOuY0OmjidHW~Q#|N{S-!kKqnN+@ew%h#R2eqaa_sI=ZB6QseU3s6eH}+2* zvl)RF_ed_C9nK8w{hC1<&M;f_|B0!?{@tn3uRoZ{9!*W!>?2dtLB!C+SbBeYG@r?e za!~CD5$G0~N4GzRZprj?{)pW9wVgBL9fR5~Y8AjDW*;CvOXLC83(W`v`#wDXeJ_Eeb6rjGARKRJ`mk)oF@Iz2Io4;_j24%0uh=fO8nF8fOQ)_Eko zAjV!x(Gd}^#SzcXwfI21T1oMBr~~nOKOuRRpb+A<%EU7f|0jUFtXx3yu-qRJiHrJ? zMtcwr?>cb*Ll5msnxXxN1|J&gAMStXLHjw&mYg`2?oXPBhW2bZ0A7}@anpy-dZ~Ww zXLt}dCP46Fm=Lb-plm3+_%-3`V}(BY=;iKq>QNIBYl3`G|qW-yth&K2OwWRLx)=O zk^TUhg7>m6gsj6xkxhCJ=>H(}dZE{U%L4^t98xEWD9{CeGw|f4%>CE;B7heA)QI5{<~}ZI_+QOk=^2;S43?<9dR|1 zpP#?`yl2ZH@>b?odi-eZj1reTE9Fuy`4uM7?n>J(JkWEA%Kg`+zP`#2yIoHj>$AGv zuN&pn^ci#RM;o?j0*X2jSbL~Uw)=PMiaJmZ+d^e(IpiS?d0Q{ur}h)PrPt4Spcr!( zQn;Qj-+c8XpIcAnU42!j^-*6Z)z{ix^mOV}qOWUjS6}sE)@=o}N9c!rcnN)!^m-|q zK1e?35OrxRgEaEecL}u)t{s%et%KH2Wvk7_4gsIFy3FIV)T5HmQXZ~?&#wPg&}Y|w z$+HYBBixp*4U>!X*|6VGmc|D^!xn`YW*ZZyx=6XUOIsW=x zof>oV)rn<={S)?S(6}x5-m@M!jcG+vx~;3mo6zHy%kL9Nrw)YFsquf`(W~}iJFr|U zLt>e-)n25#{SM{2dXla_NS{?dBP7lBLA5*ULYn#@?^AuKhsto{=;QR2ZH|AkE^c3} zI#CbR2_K6(1>?f{6z{L;!yjY5>?E^$g-4vVE#wvYb=DnMAx2#LevF{1vZV{|x1!t`HPjHvBtV>d=5Cj3~OCq|TyaK0FE`I7VWr{oLAw8jX1rBaOW zKJ_Vlv@t^d(0s?vGl(zv6#8FYZr?zg@N#TZ(jQmq8z3jfxrL2mH|F}R$Y4y$+{leb z&U;ahC}pq=Hzw5osXxkT4)YMNJffe~o1fJ-g155gYcH4YO2-k(aNCl3ST?HTi1tag zJ)ZSIEsQ0W$Lb(9ba@sUE4+v0Q;yCJ-SLEUx4#RIC#0+0)PIRn8}l>Tp)i(fTUojA zAwuoLd4G7^5W3|{&Jz>lbM45y#)R5f#|>*UnZuG#_2*~pb6hhkE zT8Z7Ye_$KYkKYq}?!Qj@S6Q#%{cL}w>pBMI)4xdHjb{|Lh4NXP+)sVK-x%Zr%9f}1 zy8M(wKhSlE-M4ta_!sck{nYbi)uT+_N8Z~7x7PU2m&DK5$MofLr*Au3j@m~0zAs4q z?U+YnxN%j^2WTVufaNXY1J;IuCl7tV@=ANC4_I8t2V6dUwmzUZmwz!n!28Pi0P!Io zD6xT!r80i-d9}fP=tqWzcMS7;t#e465Alj3J!e1p9gVK53aS7YE9EZQk!_|I?Z>e} zCvB=ewrW+Lg1wnf8uI z`(NKM&Z*rWe&x=Vzg@Rs*ToH6mYF4wr<9*GCii;l;jS>sC09RxMl6s$(LXgklW%;w zF*-D;dpB}k@#CW%kKNN4otVlOas6ZWG=Afr#>U26K07m-_lEYQGe^_;?1_hF@*-<; zVk(`=dY->)2{4;Fe1B##ll8WHx}75dxkBHc&gRpzgP9z*j%235!P-sO$-mtVuP`*RU9@QYgWC;wP$e)dF-*>HvchV zcKn}+`C&VrKfhFKdU|Tj|Jzn;W_}zo|D1}LU;R_W{0tjcvOlXe|MJ^4=9WLNF*{l! z=BNLLy`ZPDfAeW$4*x*}djV@q&wqiObG7E>f2uYA0esheIbyc{Bf1lRdE+w@IiC+T zHG~T;lVcEs!}l-(yj=JO_&Pn0eB6!aM0p2XSJ-T@Tb_NHd`co+dxOp*pWkbA`QmoW zPUI4fysmlpIvl=k@GZD^Q7dTdSNp`7{1>-Ryt08K*gx;XM$r_urslH~({bBBH;#_j zt*%~S%Q?I?n?5{|%cryPk%S$6e2<;&_PDo|TXn(1ZMT{6@mx9|A5FB+LYO$Vu!UH< zLo8*a^n_SsYj8+VM`wAqG6FlchFA+5j6*Uz!xbp(KMpg7t5MjVFWZyD{NXwc1~w~) zxVyqt3vX@?^9SnZ6?Z;|___nt^PG*&Va5)}V4YrI7j&4_)wR<)hHiQ;<$S8(9bR!m zbeOHnmW>&ldSt=2eDwj`MX&5|ywY>_KtI~KW$R-hxqjUt);h5r4f2Pwsj-QfoSlah zhZyg$?O-XpF`7;1XR=d*YS$5jGnz(!PLt(ekv^2dKu}(ePWB4p#w-Vo66^_L{WATL zXwTRL`Fk)8Cdixb0896jGnoXytc1%tjo=T5BJd+x$WC8YB;ra(~w#+t8S&MvAY7xIf zL6iB-1=SCy3vDNj<PBWl0^CNu8BRT_Cl3?XxGIa!hwQ z6;4!Ep%MuyR3brz69pAqfAnqB=C^K}-{ABe-vcmt_YK-UTTs1-I{}<+0hs%8)p@FN zbt;iiok}EB=P9jDz}@^eDstDz-w-y(ILu`jW0$kQ@yZscM1ln>kzj%2Y60K*MVUvY z850Z8r;@9{$19N*>R`5af9ux7!KX+@2s#omX`u&$ zpqXj^ZJYinOf`-|5_zPio4k(p^rkK2?3+Gn4FgQ_RHg?oInB^M8Hw}r}Rg*ayb zqB7d)$?eid2c(4V!c7Z_H63mi(svc3?{X2jDWI7@92L6d{prcf=tSODNrL5*?3h0# zfgK=otn{2H%dXyaSwKmVz zrWKP0zgipp;zLZloji&5M8`M-tc(ifYkVwJMcj-)FWkP#Dh`3)P}2pXrWna#%OU0y z?OVoirw(fi3ZkLuBk3%b_fnHKl&XO=x!5lLS_P82FI^8K3gfNpSP*uMkiWq}G^9jQ z8>ZM+WJy>Riz)_|@QeLC z2*z!~kD_$+4L6O%Ecy{!6gU?YyMvRdsZ{pb%@gsKKBg|Hk?3DK^MU4Sv=qAWL*vKC zitK!4&K8YyDVul{88Om()RL9b`)6lSOC{Gq8 zVWACN3<`_kFmU;hC~8rDpefQ>dv}a+Mu}p{eiu-@=~(ML1B&{g1dmiwZ!WdQ0w#dc zSm*?EqbWO4p6B5eab~%KPh>vIeIQef?9iyz){#-ZY#GrLBMv<|&y)EKzdIWl2|apC z#RHGy);1x&!Xr9|=-ly%{OA!cJ~DzC$J0QJrgCXaLmu(Aqh-o27x=Cnd_ZmUe5r7j z=m@?S`?{^9FRQa4tIV_DVuf`Tg_W5wFIHN2iL~&{VX+do79^JTXA6}T9ZQd=W+wAj z+X9$vp+WudfRpk|Kg^`K8e}_~ZqJ*>a`2&P`HnR1KQCi0u9(1T+R>TGcySH6O`op4 zxN^5~@;c5)MG5w+L;ddKffQD|@bzi&+f}<*hi_vnY%Ag)vR}7)hXs1N;j$tA<=z3ibQP+2PrH$0t*V`PeQuyK9x+qZG_VB&1J5U-7GFwFSSY_aGZ8FIuUipE{+m?E9%y>KZhkUFUxEXlnMD-TN_` znL*5NZGFt|jE=Gsn$B?Obho7(n&4&?Y)N5P?!o3iPVnTg4{lb+1GIrhiC8=Fs%{Cz>Dlqi_9PWU-t2$j|pf6yl?K5{d7iQg&_o-*5VR zyns(SwiH9A{OaHArDfYj$YOAsXL6R+&)O zUV7h3hlb;{0<<*_ZB2-_&Y^iBn&;4@Sqt@RacJ@me1R5sXo--_Hiy<7q9q(!Pl(p- z(E38O9*33;(Rv-)-Vm+Nq2a78d;QEju>5&^I?oEj$V*JLCe~k%qakBA*Vos+I9p#+ z>&3R>@4Dz@Z0_aSx$|IPey~FRLV(^pICr7JL^s4bB6DxnFR!Key|um3WwCV>-%Ih) z)>yYK;HKCX^IcFPzC&qN`L1mE|a*dO1qmU8;o23MkQ4 zq6BQi_VD}Pkr8C)z1po0aA2u3D*+;=cj+&2dh7RUTg(sZ6Xvbxt2h;{*Q{Jh5Agd^ z`d8H0r&EiY?+^Pg^|67al;09TyRtyrpOD5jcWG>Qy^rng(%AOw&wU;26EsE5d#T^D zj)T_cJiCoq@ho5Q>{}JjvK7yMbvycwm3ZN54u>zWeCu;}z~_czH_+2A)Ymk79=zc8 z$TMwCgRvDwq@(k~?4~+UXHMQ=H(N)=Q)k7~UW%vAioaT0dA8iT5?d)gY%9gnRu95f zFW|-Lldx5-+NuSiGaS1W9ifNru%>xnFS^R+*c~ueeH2~g>ewx$MH`V;$8Li8;?c(D zHV^WOZN7N>ow0sBX)UOBqWu)lK1}hnpW@pBCgI3uxr*ob=$5N^j*X1r zK0sqe?ce$S_%aw$h!tDr8CzyiMsB{_Ev;0>1>=EIV;)@2^lkC|ClJFtvdH@WUbNOT z2Vy(XQ2E$iG;WU_*yhg1?f_~GQBhYrcUGbz+7jCxc{X9k#I>CVhucN*Y!_`W+WG=Q ztz29xJ{*^dzuLIudB_oS*0zu8L%&jdi=!v~S@Eu)Q~x)t{-yD)_;7qHp7Fi4FwY2V zc>rbp%hmU+?O)m=9&S-Q^;NuE59+IU)}vT{aN`t6^IlpG?e&%|KN;`?mall%4_Ln9 z=?CoJo=4wy5b+S`-=16Jba2T&>ENDwC)B~MlMb#09b6oTwqA`t^Ni$(88b=f<-E#^-BCu@oxLET*b5fiha}K`nP4a%(G@NAY*a;o66{e4DH{3 zEdATr6_}B@{oC`+u`ky*qJLwT#)&0|rJmSh==u^dPUq)dLl;$pSpd2{P6Ohx+v@8u zXrblV<30cLdYttg^?SUgSOT&JV)vrgtBt&v&p8|T6|s?y)m|#a-+SmAy6Jg zPuLYZ2>enzAhv<0Ep|8h#HQFi!1%=u*m(v9%9v-%b=!3DW9469e#1Aw!ef@=-I!pT zDn8sdK98|KV)mB!hT_A%q4;ng^}3ZqZGyh7c(_Bs=c$k48-TwW-~PasTiQ1&KHN7d z{^RHyS&swK4xUp#_Cbnw?Z>`M@fus4pEj6dxO@J~?JwTIfdY62jP&6a#Zwo>Cmp;U zKZJiT@QkCslNdU=8fO!@G4!7jc*JH5ZGZfl|CFTH?;EuOazlN9XAHdB1qmlXeT_!7%GiD1CnoHd?PKHF9Ct}n4&6;EH% zdN&yEGr^W9;O4vZxs7suVasi(xfF@pF;;2R$)&MRQ5yAfY2kk5H6DD2mFqs-qdrP` zig$gKvJ_7rRetLBj+KLFTL(`$im!9hQy6_NZc0duWgAv zT-y?DkL{BoaaC+RifY4fxB=aO42Q^hw!lpm=RZ6wFBV(0<&~^qG&i#iFV&ofPkXSB z`YnCOrO~EJqfK2J?drDA#hCBY2?tMkiVu&uiVw%eO1r*7Y*9YtC_e1dilc6I>pHzIfpH%!B=+F7&m5g~U*7gGd-PvA>cXek> zDxSLY8DI`$-4lq5z%#&qo-Owb@a@4*@EPE|ZG+Nh0L8NpQJ-V|6o0kP0Pov!y^_8~ z@!`Hj@r;2heFm7eWnSGgfXe8D9{LQR>w8aNO*yc>_wAD<3w$pQ2N(E?@w50jcN~3c zxpf4^hvQc9R~xr`ZMmiM62*t(P4SF3`u-94{Xy6&;QO#unFYQVheN&}Uf{bL`(3pC zM(O&V;^}Ly?<>9y_+q(>@An$4{YuyO6z}#Oj5)=#@3>Om&)d3Q-TIy{Be=fD7}$t5 z<##IQu@`{4+BLpTOn>K2zxW0w;Zc04b^07~(0?cT+Z)02g6R$HFT;Du_Eq6ysmYo2 zePEpD(l%kg+KX=qBKQS4h%B@f#}LJbeNplBMU}(vRuzvW6{l@=N98=qIC7}ZIVch_ z(J;QtAH|3DQ9Si=+ckl<3byOZM{G=er>`WY z<}d*X^<^)=CGGm13!hB8Ced)^?5_B5Jr&P-x-oUZwx1tUS8ID;R;le3AJ$3nVcVaB zJ%hIY&ZM>dnPkECY^xgVpLrkkq4!0QmPLMJ)A`NEp8cJb?Z5c%k3X^I7!I$05BMJR zjl3fG$KQ$LbpSWC0skgG-x4u%0?j*;7ihn)CVeIN0gdOwIf154@&fI5W8~*|WaOU| zx2l0?h%*3p9Dj3p6iCUZDN{ zgXN#~@%H-&=J~w@_5DEj1sV@yIq3pTpX3FagOV3$rX?@X@Ov-bFVMUud4c99k{4*d zXCnVQKHhMhoq2(#P4WWm_YkBH`gk)bbb$a57^;_!mj?e{~HCW>&U7+cayg)N7d4cAL zGnxhBu@KM=Y=^P%Jgng(<>%dL=K=9F)93Gb?$4=9J_G+O<&12l0`2-5>4QGra7}}Gf##It1==+q($5S3>p~Z3 zxHdz&K)Y_p{7O7?0vfKjF)z^W%VM7Uvq&ElxV`=^C2(C#lJ{glwp30``Pfo4+j0?qT17idmPUZCNemGT6dHzY66d?lL4N4Sa|&|62JH6^3i4XFMfW|+-PbIexeTRjgb{tmay@_cSh*Xnu@&FnPtGQ z1}~OWEU)qq7WwMT3goq1#+dRId1}o{;PLk23QYMdz0s^$#V=YI)8ym#N;l&3YQXEk z$GVp4Ut_)m`YmSNsy^x@2`FRwj6F!9d$t?ptXXvvkd)2O>+EM!!_O=SI@r&BxJ`L( z75oab+Vb2E8c_W6F7LZd=tNzMtLeubkscO=a_>NT0*%^;UjbsBKl+F*Y|JT1SjsSG zh`_bl+*Gj5GBFALLh-a~gOBfY@s!x?6KYKrM@dB>H;#f|%2_7RtJ#L5JV+pI!|KcNdQ#of3 z82bF`RrEWyS<+AMb_Vn>{5V9RtYu}&(iqb*fMt2b81v5pKzY}j8&}acm(rNFd_U$m zjxe4WbMzV7RQ+4ykK=;s=8rpt_hoaeFKwB}eG|_hX8x?k?AjkOKlo66Qfm$$!f*7x4^M`?>h<}vK<0{mB&B-Ry_~0mVZf`Nb)U+22M%5h{$@dU^{o4u zeBg90IWR^?w(42;V>lqMde*(y`e^m6`^u-*<7D+p2ijN9y04yfKbcA8aU5dsl}(() zRXyuIc-E=>B87X{>4J{w=5tl`tb6x|5M&q+K1^2l6^3hdM7P}`4zDkNIJGnJu#d^5 z=k0#-rw<3->8_r2A2{Do&-3F`nO8WllT8&m7T9hm58(<&1s9I`l%E2jJNS!M6@Rg( z((j~T%&kOP;D}Q^cr?)P(5ZNW^rtb9)cW#j;>QqDBB^@Tef6w+C%Q|cHheH~>G)xxLbzeL)zk1evdNy7?>pma+VS{V(s{lBFzk1ev_QYrZtb4rf zVb2zy27Ej8H7)moa6d!!Dz$*S|ATu6`e3Z4(Eg7&Ze!y9kA#T8-X5GzfxQX1XAgF0 zq;a4(e>sMG3zUWfvrX_9Obqr}`1jpFTAA;Bct7?6S=p<=;_FV+-E&YKa?2!ob zl>Y9J!5*ie9N`K5noxlZeJ{HOFoD#Iv=^y*eL5|$!rX~ByNr1r zDI&kfaf^9)`OR=Hj`!RJ%8P^TAbx<3nDq|*QpBh4)Zap!m^w^e@=?w$B4@6~=Nl^g zj%JX4TIfmskhA}5<@SD0?msW|;*W~^_up>m?2&x=$!zNQzVwqb=^S@ARb>EJ}i=7#t1@W4> zr2*hqApAYset%}nTMu{fmg)ryFvgEZJM8a%#Y`h!=f3djQak|;faW2!A)Q3hiw|ae z*T}upm^@>}!?S`*tHG~%{E(9YTnEuO%Ijl{KjKVfrqV!c`XBA@D!sg{8r!y%LcJ-2 zd<}Mgyk8gMNaKEZE$v$WteyU*o~?^kNEM@UAAQs;!xcZ1@@u=;|9eP$x9t_YNbnr= zofVyb3Bnxk{Qb7>t^T_o3FP@Kcmy`5Z@h)X_YWRK+J*!+^AHl}d~1*xpLZiMKJP)| zeDGc*9^dw5q&}n_NIQ}4M@k~?LfVbA2g$zI28d%TY)s=A2fROm_l}Toq=3O|{PxuZ z#ywsMH+T)(zPHBb7W(RqNNbUBoS;2B>}Eh5D`-$9TkqQdZ%4WViEer)(t4x~NUUco z(nh4akXYYMNbN|Qk!Xt!q)wzRq;4cW7qS20^He|5SCD=K=>enxq)*#5_-Rw9s!!Dd zRSR4*3-k{pA7sDA-mhys-PzOKv9){K$d>NJ_||TG>KGf}IyTxp($%$XtbKZHgq;5$ D6z&4; literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9F151426D3A5187075EB122B45099E95.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9F151426D3A5187075EB122B45099E95.cso.pdb new file mode 100644 index 00000000..67556332 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.9F151426D3A5187075EB122B45099E95.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7031e033cd69df72fa6c13f960dceb94cf34e06ed134224a6944d7c43eeb513 +size 42496 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.C1D8B1B3F659E4754B02859930024C34.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.C1D8B1B3F659E4754B02859930024C34.cso new file mode 100644 index 0000000000000000000000000000000000000000..86b7a4fc3417a74d3bf94b1995cb5592b7f440be GIT binary patch literal 41928 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 XlbyYZoTn5pw=N1dLt! literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.C1D8B1B3F659E4754B02859930024C34.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.C1D8B1B3F659E4754B02859930024C34.cso.pdb new file mode 100644 index 00000000..0b3881d0 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.C1D8B1B3F659E4754B02859930024C34.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58e5202863c92302d8a5e841e833c932240ff4404387b277925e0a19ca5b3efc +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso new file mode 100644 index 0000000000000000000000000000000000000000..69dab9f016ee0340482d193c83e8141911664f9a GIT binary patch literal 40956 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 Q@r|1{rrHvP^e8$1AA`LKN&o-= literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso.pdb new file mode 100644 index 00000000..c264a7dd --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.CD3CD6C95FE00B70F3CB44712C4E6F6F.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ed0ba9cc526da1b2189b039ad14f780ef1e4bc61c9e79f79c14532b33732646 +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.DBAB50AF656C0B77BE3EACFA872A4107.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.DBAB50AF656C0B77BE3EACFA872A4107.cso new file mode 100644 index 0000000000000000000000000000000000000000..e33620cfd9a975c40e9947f979b8c2072c11f2a5 GIT binary patch literal 36712 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.DBAB50AF656C0B77BE3EACFA872A4107.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.DBAB50AF656C0B77BE3EACFA872A4107.cso.pdb new file mode 100644 index 00000000..960eade8 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.DBAB50AF656C0B77BE3EACFA872A4107.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55c7066e8cfa8331aba60c1ddc6180581d53f83d617ef10e611d16660fd385fe +size 32256 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso new file mode 100644 index 0000000000000000000000000000000000000000..816601d4245b9b319fd729d776a2494b546f1bd3 GIT binary patch literal 36740 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 Sy(QL@jK`A6&TL|Yl>Z0Le!O1* literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso.pdb new file mode 100644 index 00000000..f99025ff --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.E46C7BF11C16009DAD26F2E52BCA71ED.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61fe2ab069639b220b503c55883a62703f8f4ed11162076b46a181b895a6e9c9 +size 32256 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.EDC05431FEB536B2137D9C70A18E0E85.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.EDC05431FEB536B2137D9C70A18E0E85.cso new file mode 100644 index 0000000000000000000000000000000000000000..b68e2d5d715a2b4b157f639a4f6f1b64f82685af GIT binary patch literal 40836 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.EDC05431FEB536B2137D9C70A18E0E85.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.EDC05431FEB536B2137D9C70A18E0E85.cso.pdb new file mode 100644 index 00000000..a22b2830 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.EDC05431FEB536B2137D9C70A18E0E85.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75a1043c7678a241796a868bf0ded8f532629ce240abee58061559ab8077b212 +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.F43E932D41866B4751D2AAAA122C0DF8.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.F43E932D41866B4751D2AAAA122C0DF8.cso new file mode 100644 index 0000000000000000000000000000000000000000..8cbafa64c313bba28f7a90d9df856f77772d57ef GIT binary patch literal 36652 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.F43E932D41866B4751D2AAAA122C0DF8.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.F43E932D41866B4751D2AAAA122C0DF8.cso.pdb new file mode 100644 index 00000000..0df72400 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.F43E932D41866B4751D2AAAA122C0DF8.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6143ddd4db17d6e10056cb5d2b9779a40ff2374fa379253bbc695c1eda27089b +size 32256 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.FD048825BBE1F9EEFF9AF105929E49F9.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.FD048825BBE1F9EEFF9AF105929E49F9.cso new file mode 100644 index 0000000000000000000000000000000000000000..ac6a80e8042a308d006f13cc383448197a194c45 GIT binary patch literal 42044 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 B%%cDR literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.FD048825BBE1F9EEFF9AF105929E49F9.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.FD048825BBE1F9EEFF9AF105929E49F9.cso.pdb new file mode 100644 index 00000000..4d40ce1e --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.FD048825BBE1F9EEFF9AF105929E49F9.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:185d84c217286426668a6c705e89edc0764b5ceac84a8e33f379f66480ba1c16 +size 36352 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.0491B9E5DB4146F6039DB5A1028E068F.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.0491B9E5DB4146F6039DB5A1028E068F.cso new file mode 100644 index 0000000000000000000000000000000000000000..f3b63a712552b8fd27fe9f50a5d73811d2e1e1ee GIT binary patch literal 19056 zcmeHOU2I%O6`tM1#NIlo<0ffHS{Ma`*3??QPb3 zmwWFzrYMs6D?&ozfj&eiNCt#dDLn9igy4lf0YaoIQYD~j1pNgyZY?whko?NpML+Fc!)7p{WN1+ z$UjW(6>^seoCz~_X%l0~&4g3>bZT_0KxsOGpS9dv3w>!tyXNwQ2v1ZTH(SY@6uUA-b^bB&LKgC0BBw}|`Ede(LncU+ zpZw4^57+Aqp72%=SNY+CXA3ES9KFs+1O7eoLC6mbJkYDxAw89un3?w%&0hc-w&bh-4Dv7Q^RabAG;&H zBhNg;PiDsWftX=zjqFKfpok0tn|zGiD~J<))boPhN5BHFt_8G_Eig!Zcq7+;qt_j4 z8Yd_Ae6lZ)C-y5y3+U0d0QNQkZCney9E*qcUwxv8edyKKj(&Tn<2z%Q-i#(&ukKn? zRzaG7pZeCbeSS!>2mV830lSuWdB!`vPSxCM&5e99(pD~2%&g6eWh?6@`MhZ@j#y>O z<_EbtFB*p$xdc2@NMH!J2urD%~L+ng^su4zYeMmJ3130qF`GbQsv z+O}RGo@zFK-YOOy(~ahh*m8GWr)2Z7Bz-JRqzw94CMrwN=Mxl9G-qofFh1a8J?)tG zj5Rrau2JUXJDb?>&%*4F?}gYe&oOpwD9pl7Gxl^X%+g;Av4v02F!zqR4^giUih8dW za9n)`n5f7JK=k@Pt_>c2;EPnAva=Va&Cl0N$DK$~uTmTs_8y0CKEOEl5}Hf`7~WE= zf8^K4bRS2OKHU2$SFKcWxx9a?6wGBRigqEV80wdD1uwlGPkD1eq|p+=Tu5fxU~^$U z;h)TDx}32vbCNOiNk8GA(uYgsa?Z-yg;Hg{$;6%T&+lnkK~7orVz%6byU#z(pRPdp zo%tK)dY&m2%rj=*73;NL>SROpc*?B03(Xnh+TxMm=Z3{HIayjPxsJ~gNxiHIu}D@e z+m$1~L3<+hVtu9L<5?Q2g^KCiCa_QFrsY|!&UM?~wnE3X6ud@U&CQDb0mES7hy*h1MUGnVz~bcN2U&}r9oI^sRinJqwPRq8~qo6A>gw{+%)%>F_S zI*ZU*$n|HT(wq+|h8r5bTf>iO_){95(r~Wf;~L(j;b{$zYWR$X_h|T84L3CWc@0l$ zc$IM2zlADJ_V+dwgx!r`pD@{9mw${hC|sAX>I?osO|Pmi@WUEDsmamppzI8O-402O zU$+C^z*KqkcHtVXw@a6X>+OO$Ps!2y1DUIi>-}MehU1HjRf?nkfRvnO{S)q8l&)$=9=~EdzdD3THGA?~KDC5!>WkR|B*MI*e{TSOI z<$JN<_et~+G;}~4(gKgsr-GROFxcD3y-s5eF7DX7H?Du5KIhuHlTgv8)CrPZ2L}Fj)^Lbq3h!VzG2Y_a!PL>v!ys=r6Q@9t z2k|ZukBd0=oCecw0oe_q6L^xQ%R4J^U8H_pf`}daq+Y+)A58 z+Wrf7KWfJBhmb%t=yY_Hl9d{#DWts^7?a>eSq@Zps6}58MLU^}%gr3EKZQ zlRR?3-M;@`rP}sRmMZ7*;SKApWEV|`^*VOGcfrJ;_vXr0{=5ei>92g9-UslOk3$3Q z!LV=n2sscYG#obek;A?QpId+j)Z%$8_Gt zhx^_Ya*B3Q;KM2+eb^p^cO&jQD}?E#@Nc+uBxGKK15MriM+xJ^i}((5Xx^vDb&|u_qtD0L6Xe>-VcdadCpq*T z`qOnWCfmrzxO|Kp{h7P?TXd8KZ_xq#Nk0&31&AL)VAzyg5<0t*Bd z2rLj-;Dcy^iOJL{Z(rBN@U=AdV#DV@qGG`{ULy4ij1Ic6|JCHk2EXJyZ9P032 D2P0Zd literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.0491B9E5DB4146F6039DB5A1028E068F.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.0491B9E5DB4146F6039DB5A1028E068F.cso.pdb new file mode 100644 index 00000000..e4d5f17b --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.0491B9E5DB4146F6039DB5A1028E068F.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51df02bfb84f7e11f6c9f7dcd6d4c608989c497e1e286fb73ebef7ea8152d6c4 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.089C1A93F75623C5625465ADC48162D9.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.089C1A93F75623C5625465ADC48162D9.cso new file mode 100644 index 0000000000000000000000000000000000000000..3cda55f4400a3058e090cdb88076b2221a907140 GIT binary patch literal 19080 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 PE_^r|iG-H&bKv|hy$gXk literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2CBCDD973DD8785D8ED96E438B732020.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2CBCDD973DD8785D8ED96E438B732020.cso.pdb new file mode 100644 index 00000000..988b0236 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2CBCDD973DD8785D8ED96E438B732020.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e49be0b96b216c9ff7054e4edc791652c4f00fcf7e0193784c68814042f2d22 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2EBB1E214294B7250FB31039A38D6AC5.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2EBB1E214294B7250FB31039A38D6AC5.cso new file mode 100644 index 0000000000000000000000000000000000000000..601f993d6c64ef327a10b36995a994177dc16dd4 GIT binary patch literal 16848 zcmeHPU2GKB6}}4w?8Sg_fVe>0tB6YLV%D=iHU$S04gSTFT5Or$yXVzX=&nz>u z#!VB+O{vmIQ5CgFec=JAeTd3S)K+R6sZyk>edv#rhpG}$9;%85o*F^Zs!|c|`R>eJ z-yJpEV$gT~ibI*}A*Sp>HpVwv*{t3|JQtCyEg5A!;W= zI$kbVrfrrS9+~XsqvP3eo}J4Tb&C&~^VM>N3NbAjV`JH4C;meGu&I^kJtCRN9FaEA zMc`zrNWf7J(I4Psx=6rLUP}ewvORK;xz04S{|g6wr({yWN%U>k6G zeQNmh(8R=Knq^PToYE~vUmO$VF~fFpMnR|AwF&Cm619O2w4WoAN!muL1rFIr!cOGm zNbswD15e9F#x78fggW@a139WqnThP!)Y!xccJ11=?C9|68+1KGEe=qAu9bymsHxS_ zK{duu?xZs0p&X|&WJ(-5P`*t#`l6%E-L@#lsf@NLr@ZnknF=1r!L@#JscbXy1y>F* z*>=R!2~5fe69(PDEKk-*r>hs(8y*He=r}^EvQvXom#K{VBvYF#csY03U^z(7vj+wk z3m$>z_yNFp!imJ3igLJuGBIX7tg#02g7jp10CSokJ-;5f9F2wc{rQCw=An20czNfC zZ@%-@?+-e6j{NuMf0bUrHUB*Izp5)tF&~rQnKYf8Q#K8SFHU@(E_aohG3~O)Ln~LgN<0*P{ZKeu z$k$3GT9{`Gx}lF5C6feM`fS;DbSskAy2Ia+!WNVKR9U~6vCMPCQ_U65o28PiJCTAG zUF@#w^w@kXNgqoSDFZ&1F=GMxe1c-}=4?#_#`=A%CvDxDGRH^H_+-ZY9Uzt|6Wo4A ze>YO)N+oaRtYX=iZDMSErBCBG*RtAoLhScv7`sjzDA(_V*l%)c*&15pb+w0B=DQ*G z(Oy~sx=Y=s=*bRDy&n(Qj#Vo-JnQWn8P%Fof3*@^c|+BZAl_o0wsIFI^$RuKcE-~5 zL`n|C1HlpJzDQAz0K7?fNXTYM+Lmh!LrJ<+D;o}%Ru=U|QmAZqNrw8CSJAy*uczIx z5^n78M9uL!tVX#Y7CK1^mrX*~O5C6kgIJ!eSm^dCLnFuu)0)p!nnccoKg^#rFyeeR ze?zRN_o1kt(hH6lWYwW6*%0b^TCX~D%^73L;1TC%Qev1KFVB}9+czpCRa@g?kgS@P zmwx}%^5|#Xz2Dm0uw?v4bO6Pu8%YKjLW7 zJQC~Sn)_dOkDT^I2=VYn(8KQmfp>Rzb29gJSiE4Ci(X(lo+}%lX=xAVCfVynS~v1g zFJwVdJo^P|JOZmrwvs0_?Ko*SYK!5H^aio&!`-15Vc6*c&}fu$ah>ueJ7$#P?J zol8_Hwn|6L!v+3(}7r2n3kqVsO2g%4!|c^L}sXEY0V9@GPOKe_t}7IHttq1WKS z=~Asy*=OnbTDel3o-)mfJ)JSDdU1MEx6PVW(CumW?984{6W44eXF26UML$N5+00Pp zWORWJprY~NR4O(ck0s*=lBxaiK5ZnGh-rxfgNcE3|KLzxv|yXjxr$w3Ea%hd2%S}- z)2i#V#d)1QU4+i6rxTC%Orcuybn5whOm}tWp|g}1I&+DEVt=ln=xm$=h%oZp&UtqI zT?;MIt^ah}8{mwXXK2QR`JXb@GR3nNILH28zv*&(F2VmfHyla#N=?U=w&QMeA z<*gmKL7_0+r*`&_l+0I72UkBiXY3$5yfuV3dZdz@wVAd!pbcnRi~*X;S+lys7VMe6 z8BHL=hGTt`VXS}~zRWtdBF}i6k@9RBc^j=eU!y$4t_t=jJF>Nfur}t75oots+QBkg zL*fLz#gpSomv{@EBD?bE#CfvBTNS*O6iB>X!LcNkI8KqJ9IoKo6nu|@cPY50;JX$4 zsDg6^Pb>Hy1s_%Lh=PwRc#nc-6kJpAvxLLX>s>#)GZeyBOYp-Q^0R6`rv?&N?U#N4 zziNL(;aBbNQE=7I(*Ka7`gxneulgC^he&(qlYsjDBDjt>dmbRa+4BHgeIDpD35td5 z*{7647hb83(A^6^i+*L{QutqQUHQ?alh?n;*loh!B|-|(zZ-5*e6Mna%6N|G9xr)0 zd&jGLIs1uM_j2|tukPjSPhQ>2+26dnmkXWHd%yqwP3>EVkYw)Gg1=9@2R8m878*b& z=w%8My+;pim`(w4pO=^2fQF`=%6BQ^WnYu;BZhgbE8+sV4@0~05$%U6{ zBd}(6Hm>)i4e-@E#fBbfgBOuEvrs4ejPVe$I?TG@N%3B9X008qguO@+X@eqzE;l6g z{=4^pv5mg_-_RhaJX0PB_PlWV73_J@HkrFMhP|+0&#Q5B?D6e+VHm;?g{AXNB1|dO z^nXvs(us6-G(B0LgQ~)1nKO1)mV^A+@&LZ~+S%573v;_xnoNjofQQsY{*dGZVge5Y z9(Xh!=wx3KdvBLWe5k%7=jxKN;n8Rgq&^8ASY>G_z6HkE@Fdt7*zjmPu-f;ZS4m~> zc-c6Q(|y)!@N{vo`V#8zv}t{G5%s(Oq}~|V&S(pvtL}^X9Ba#SbpA+37x=D7vNhJ1zss3AX_7ded zza3~<+53$U#>wY+HgML0+q;tp@7*qlKG;RNaW*1T~8+a awETfmJhs0-p3w5~1N*i7K(t!SgY$nV&&Kiq literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2EBB1E214294B7250FB31039A38D6AC5.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2EBB1E214294B7250FB31039A38D6AC5.cso.pdb new file mode 100644 index 00000000..69424518 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.2EBB1E214294B7250FB31039A38D6AC5.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbdce3471d218a828f50ddba89d49866aff2c3ba6152f5fb7c0fbe71d058c303 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.38E30D094B028C691653A728362634B2.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.38E30D094B028C691653A728362634B2.cso new file mode 100644 index 0000000000000000000000000000000000000000..9b6284ba59d4db51672eaddde8b089a60f2cc717 GIT binary patch literal 16824 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.38E30D094B028C691653A728362634B2.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.38E30D094B028C691653A728362634B2.cso.pdb new file mode 100644 index 00000000..b9992c6c --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.38E30D094B028C691653A728362634B2.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7353a06e7bb02f4ffe02256226b644973a779bfc597be5773bfebd67c1b9292f +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.45152D6B551F36103EA55B435AD0C462.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.45152D6B551F36103EA55B435AD0C462.cso new file mode 100644 index 0000000000000000000000000000000000000000..5e374b6ca5485fb8c43b35e17afd5b03f8399faf GIT binary patch literal 16824 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 ZYIi)5=t<^c-Kk_eH&w_-D}^a={s)LrL zScP;K@I0^r;(Nf$O+q}kLWr{{A5ZTaE}~2a@{5(%79wAsmvzU}i3DjKKm*tb+yZO^ z5)PINw&hqQ*XSJYG7gMpM~&?9T+y_RA#0{qt{{_$#}Z;ByZ_MZ;C}$v0(=>$0Om+o z1%pY4nG#56K7t?8VY&p;nO}hn>8d_cBISG!DS`SZquEbiMM|Izq_6bTiG4?h#>U3e zB70=&h-tg#+=$GNR2?^0Etq(^ForhFgP*ck|2R;Avf)7xNT+N9>CCTy!$=RdVHE^D z3pzpaA!QxP(QV3%Wk)7P#tw-K7cOKE>^u4v$}^}jfb>L*h)kiH-QJETA(&r}JmoQ; zM4oyT59OPnUo|{_=99>ipLrX3@=v3wCaC9&jAUKc}e*D5%9np3nARk9_SY$>;m_32jF~S z0Oi^VDP4g?&RMr=uA#gT?oJPI9TUR+>w%YIiAd~s50$tMed90ReERP@&wuvpGnX!w z-(B0Syuz~JI`z$`Q$dnq57T?d1L^qAXltchHFLI6s#rNUX-u2eOtyT+Gtu4#AX<6Y4&Dq(XFS2j;&Z0iJgYPrHmt5kAKx3dtB&2=?&`fLG~-T=!oQu+fd zBh^{z3kXUimuFi>U}AfK^{`{w6V~W~V*#1TU<1H1VUat?7;MI1xl+knIlEY{PA_9@ zGT5dJymrX4XL6MQ_vqUzME$D~@%h<^`0M)-@ylaEO#UJwny|_H{rV=6c_AV$ZN(1I z+v?s!Jv%h@W<21ycD>+YczWkX)mq(cjJ%Yg4PX@t7%$`?H_~?Q)VTR<-E`cMG&-!} zV6gB*Ng#|g0z}FP#*P#!)yq}aj~pY_qB#ed+KHB8Xq;*lz4FF$+6yevrA->EyMCMW zDAy|k*pOARIMkHoVJr;Bjr%GVa!N@B!~EeYXPjkYr{rG}>y2!=XdW>OuIyI&RMopA z)EjBD<{n?3F`-Q!N#od{oF+%hGiBF7S6w1gw>2pz$(m)m{-6tRo@vaK#(^A0SFvh3 z*9lBX-I$)$?A(}VuA89~+6=9Sg3l$lZGR?UsMmJR`q8MjK)_^e>^I$mrgQvY&b7;P zokqF3BnlbE>DKM4VYqg#>eMX9?DUo^y^y4`MrWeih0qv0{hyY08-@jY{ZQ(~9kfDaWHbDySYUm$+h|zp zwK}FEZ@2G;*pg_=cd0}*mTS8eD?31d!3(zy4*3{h@q(ddNg_sH@<-0`>|=58p<4w&0--D>+2g# zB?blt`r`3aG8ymd9~wq}c;8@OZ@h1KU?^5_tl062QxPH;(CJE@HL25X=yc@0oHJRZ z&YG{2J%6fDt1F%Pr8)~G=q#Ce>MRWu7IiLNAjl|l->!K!|1BPw$EzRw)N7+Z`1&PY zSAHNMKktWB%F1(nQXlHeE66Ol_NrOUk~gYo8XJLgsEl)D!i$Kd^duPBC{?cZ_1l}Ii7SyZ^n(d zC*PHK$VV2mcM5$fa$2S(zml;^EK8s|bq>VI6U z+`#W}nxuYY0Np}A_7V--+4gqN_FmRK=G)#Z>vGj8_ez?LY7eH{N!p^VtgCEowBEOi z`c`Uo^(wpkNWE4>a1sk&gNHFZDmv&%IeyoQmi89V9zo<;rO80?O@aRYy>}zT>cIQI zDM2CAJ?Vk)%qu+e;xSKn=9P1Cl6c3?ymxLc(J#gDSuwHypp1qxg zrby#N&Qq&m!)-SrRB*>UaHB0_`2O$MYx%z^zR~xe=U_$8Xt{clm;a)tnwv2l(c{>K zp5rF}OfFxs3MV~634bl;^xT2FJg$q?-^qR4_ZkBl*VB&!xvt@jvich=^-X*D{VJRS z;21yEnvnN?Yee)LYsG7?JctvZQIr|LZs0sn!A4|0rXKuMtry?Ivk}-UG~vc!f`?Ur zH-U;*67VB0b*fg?ME;4N#;&OHNg+{Psk@Sx6P*rQTw{SxP3i^#l9zg;c7P%EfBMJURah Dn|P?T literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.77B31999700322078CF970FEB7407F9C.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.77B31999700322078CF970FEB7407F9C.cso.pdb new file mode 100644 index 00000000..bd6e2452 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.77B31999700322078CF970FEB7407F9C.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc41e740bb15e721aac58fb536953655312914f848821ba85b9aca71ee98c0bc +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.7D65653E05F3CFD999E0CFE63FA6E06D.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.7D65653E05F3CFD999E0CFE63FA6E06D.cso new file mode 100644 index 0000000000000000000000000000000000000000..04f09915db63ff14443696e6a42abdee8603828f GIT binary patch literal 16848 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 IejZi%FPKzXxBvhE literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AA7A6E402DA45EA1877F3864059BB328.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AA7A6E402DA45EA1877F3864059BB328.cso.pdb new file mode 100644 index 00000000..d5ea5408 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AA7A6E402DA45EA1877F3864059BB328.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6942bbbc661a64935a38884faab841be02b884f2f8a4c51fcfee5b9147b7b3f4 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.ABC8329C82EFC7A175A670CD89AFCF15.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.ABC8329C82EFC7A175A670CD89AFCF15.cso new file mode 100644 index 0000000000000000000000000000000000000000..b96a4a7a803fa269f599d4c5906ff3e654b0e9bd GIT binary patch literal 19088 zcmeHPU2Igx6`r*X*o#dJ351Z)j#476i&@`Y|1A&)+q)QC8Q6LaqQn)fckh}F%U<{1 zyWpfk+O||JN*;JXX&+hzB~_Z1HcBe0rd1#M(jQexp8C=>4^`C%DpgIPQL9P_dcL_c z*W>FANhA;@zQ>$9GiT16IdkUDnZLVa4v(gPw&(TB1AqG6%Rk=pAUU|+dlTaHz7d2F(a@14j^@Z9ly(X@HmIyqOaP$Xf*6Kp)UXa66FA3C)XzDB5k zR1&a?GC_y_0MHSS&;xW*UjXQcH&X<3RURQw$)RQn01a`-`MF18E0HE#A;VuwI&=eF zz}cvpYK}#Ter2C=PjuCn=746%XVq9@x<&o@?AIi+GaaD2w>07Pl!5IkRMb z@T)c-r|tut-l=Gkd2&`#osiu$Ob<4UCs4p3HSZenp^if*>&oGNjre1+7*?0f~MLxw$5vtqM@Cj0YLkz zY&*)L4Wx7=H#IVKf#Pk1umvDWh4U)>C0Ia?q_FY%4#Y=C9ncFZT7P^<|l zggGb>Ya`@^@X59S)-fS0UkhA_CnDS4y1#^V=u1ENbLq9;o*91i%HQ8U^Xd!FDytw5 zsKdLT?+udl>@a?hSfFa=ZC8jHxjt z0!+PvX=J|a7#deHz$KW*ot#-Q3$9tzID3gx>g4UmvzAkK%T|?mXpgS;y*s04c1ELx znOdntM-aJ!SvAM2C5xDBbGGcbrX8Cxx}slJ!sh$k;;wBa9vVDed_-GxqknCYJqrguSzsc7Wbi_a1qxLp49D z1svC|63^4%FB~mbDl=BzE|#ma4IFne=-;z6gY38Llle*m?%trAKUl?#^TGU!d_9evqIrns zMKKxcQ&rz0SI;x%oO`@6V?vuelKjZ1m?kI6C(EuAm=*eTU6W#xoU?3Kj^0JJC*#lf zGbP`fuNKW>)pV8!>=kv>^sHuQ-?mF;=!7;y>ptblWdFby1B!ZW$E+WXdJ6=4LHQoj z-Df(-_vKx?JRjrb>LPc>`KfWZHO@svw&~XFD(9}9uR3#oZLqohbZj`$Cu7yS!@f3AS9DRdFB5riiE7G`da%tgYKMF29WqIFbBvf!LJi$Q| zhw8nP=(pet=BeJ@pwpyjMUQzsB|2UeP}!*9qfXejneWDXH{QcW&c>zI$d2h!ty0-$ zn=`d?r8qrhSrunGYt5O(=}FVEYIebNroFpAXF5Y%v)R1umJ1bg54}7`)7gXZQ?!tX zkBp{My~*wARC4!NdT=B$*grBbXrwc#?IUC9u|$8o;8^kF6{o^jK2WDC>YNjG+J2pm zxNmf(i>Px>)`=JPXko7A)tR3upw2=nX_g9ud8#u{bry=L?fFunq}RE41t6TmvR(5$ z{1+oqr>=kbyFZ+G>D)WGKK)n#e%ueK5QS@mF+#}ReC0o@&(WPP@?DunK?wgR7QlV% zD0_TuCpst+rG9E>{}@%_N4@!HYzG@!8^MSktK?@LX3VFIlwl+oNK<)x)^yn^=V<>? zLr`{CUHfSUX9_cXmUXU0i0>8v*S$c5ZM5$^Pw5D|DA?odiM7o{Yh#`hm8>5aY+%{7 z5piqZBIS6}6}^RSq&@l9DaM$hw`z2_Mn!Me=%j{E$IZ5q!!`N?8hwjK->A_IjsA#6 z@6+g9qvOs->9a+n4{P+8M$c;WZjFA7=&HBJt0T84}6c3qxTCn)2HkG@_EmS^3X&JJVOv{i>$g~XEF`1Sjb7fkF z?3*$zLz+i66F#yegzg{b@86^=nbHFpNl~gr(ZbNTz$)KRJ}HbWBMYqleIkOffdLaG ze3Qmxlx~4BR&L&eQ}Whw@Tr&w4G;)6u!q+VQwWZB<{j#>e_gw(=vWiBdh{gd&(r5; z9qWl(yl-k#%C3S2IqhuGzLbF;A>K}gO{m9*vKyJ$a*BME+rk!hjHn0Yy!EGcQpgtQ z-ON7_EQ0@0wqiZLS8Nh`QG~!?`f(`p+XS0*dTr`M*;BGjEuyS{d!p&Cw$!@*pat6i z+R}DFZj3G7;VYeSH!nYvgUT$Wbe6OD8Wy3`d+HyOf%!ekHp2SCkFH^@ovlQBkUZ_X zU!V@BcnHhW0{*#Nc;*k{ORjEHgawq{C@-glR1~s8)xXI8ytt zGf&LC0GE*FAu)3!4Y)!WuGobs?%+dT|6#qgk?L9CNQ!W+wf!fkv8h#*T&k-^eoeJ`LadZffhfim}~F8wPk`;Ozi@JA{NX zLJNczxMLPr#~u@RFK4NSh<_vFRi}Kz9jiPPeAg{-tD~Q=|L=PD+;IhN_5J@vs=a5T zTs?trwpdR!f6{bVk7E~lj+^-T_e{kqobU)G`W3j-a~Hnlz`9iZj(dl+791LOmiVRy zc>tW3K1zsn4j}yff@cSe@zZSy@!dxUi$1r8UH;B}v;&-=Y);rsSSM6~P2WQ*Aw#uZ z#Qh?ty@HKkR884x@IX3c##H6okD!S z^F9qUgW}l##|Sy`;@!aAIl7mAE+FoeG4?)1_#h#8G5)}_o)GU&2O-8FeiM)JN&f`` zTSJKd+W@*?+}=-!a|pa=n+P8ve3&qV+i!tS-+qyy#Lxnv1wspi7Ptp2Fg}slk9izl pQWOWa_xI)p`pucr;9y@WHDeAY`UlKZa;DFiDdkh~x#A2s{|5qCkL~~f literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.ABC8329C82EFC7A175A670CD89AFCF15.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.ABC8329C82EFC7A175A670CD89AFCF15.cso.pdb new file mode 100644 index 00000000..14d3d9ae --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.ABC8329C82EFC7A175A670CD89AFCF15.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:321e880f15b918a32223bc3bd803b75c33d73d710fc0e51d2c39761dcfd688c5 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AF299C4F5A88FF41BB134DEBBD221243.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.AF299C4F5A88FF41BB134DEBBD221243.cso new file mode 100644 index 0000000000000000000000000000000000000000..d69fd8b4216262533154e126aaa1f28b52700e2a GIT binary patch literal 16824 zcmeHOO>7&-6&}iVZPT(N%Rf>5lMD>Cpc@MSJX_MGirbLrzZZ21O5n)%VTr z(8D!r)Q01qYM=CWX5PMe@6FqpH?uR#?99k0d;P;}zkK?87q8`J-t5`->n}$bWA6Amp*jR<`sQ`Yq?&eD5)n!q4DywOr^$>Ex7-27A zCm~?MDBG4}Rb3vN>f^fKH|h03CTrm-Uf~I>i4o!RhIPjJ4n={FP6K4Jfbk)9GU~qmz?U zSynhbcUreyeJLmMIn!~AW?84wl}T#DGVwze>MsyVkTyI)1kfQHAnc(uvc;pTZ2(Wl zX2xCuBLT|b2M^?^HsvP^x#`^GNp|JRmBNW*Gau3YJk>Zr>5Cg!WR9xZU0qaS4Eb)# zL!Qh-rp!Z!PCPfb$B%qB<-w2qK0iNCO$CqeHQgJcX3IJqM~T3ekKpR1%SY(`Iw>bg z`cV%wDGxO02F>>6j&*xBfcBbC10QU8o?KFx9-e-K^5{1b;CmIodpCe*em|g)&yK*z zTVr5!VDy=1_(WlhKO0XZHb-}53s6LkfG?gVyo55r9xn;6{|6qpx)Q=__CSWF)z#eo z)!uf@C!7%LBmn$@6m!=7nrk30gh$f@Skr{CdOh$)T#M}g%eE@kq3?cm@sDpA$A{m! z(7EIc=3kXw!9Ab~?|&^7B&oN<{A1#QschmK!j?#!p`Xv&){DebFP6_*)vBYrv2r55)YsJMvjtev0hTsWG69yH zc@Fvlg0y6Nwl)H_p#bYCN4KY~@e^kPGLyju5X-a$?jU2Z86!rmR$F&<}mlynfBeULco8vCUmEkKx0m6kBC$e_&{FMGuLwDR}vLDWRLDXE{4J z=b77PXib@+xe^S%o*W$dM!-<7?U?nWQE!1jlQloCyA!&zFi~`EV=2ZBvn393elCZ2 z#JNyp>u$p~Id|=%>C`Ppk9q5rG)aXW^qe}`wGo-#Ivu?8 z2{~g2+2O4bjOejiao%BxrA#7|NN5bC>7qTayX>4ZH#nCNlw+oAe~V$_fE&KTy0#*{ z>USXY69Cc;^zK=wG{W8%>~Z$|)()a=WZr}UzB|EAmfso?JK1Y}Ii7S$UrQ(Ao_trF zjZ69lg^n{@N$*tXWJZ(TrO>%T->%RT3cW|6A64jk6ndWMXzw~wMD6vK5k$Kaz|Ib8 zuPUEY1xZ)s_bPO*=*8HT{JjdjU!kk*m41L;wY}RFe%e`R`kBa0`R)7f=niPB_Zg zvY)b__+>w3KljUi%HH$Ke#-vrm;ID|;FtYW=!D+?_3vL)e=Q+Ere5j(UpM_pi)0|S zi~1PhMRH=4PJy6zWyL!k=%qXm7DtvFo566}&CWSSIOR3~Sa~eA}5^oO(3ODLqW?QqbN2yCGzPzK1op04lIyA6vHr z=T{M717!#}Q@1$Sb!k7^+2z@vM%{1v_OB6jvBD6mVZ~0l+E#4^t<_%Cm-aTj;M)eB zYZcpK(l&pDZ()&cghIqQjQuF-17+cJRXHT54?zfOo(+VRx~PLw!`dk{~(*n7EWZRnrotVk~w29 zw4;Z#$KM0^-e=dwf$Lb?ZJHEL8$&!I_!#s%} z&_!(Oo0h3le*bUd*X8~8vO2_bg%sEg8Q{aZ6(DIyvDYfKJ&a>bd9EtjBO4`+gn=t7 zox)%*k2?sirVU8B_ZuS`C!eE?J$~#>qEA59 zE<%jIPC|^iZo+MZ^ix4G7B^Cg@wkbQepV=cD~PcQIXei^zj_FtBn;v6_rUJYUqz@P z^g!r=&;y|d9zhS}# z%o;Z-k=vw-D)pfcR0>iah+0*VNcxnAsO>}Bhf0mws*f$oLxgz9LsSHfDpiVbzjJ5q za(8eMk#K=92afNZ@18mL+%t2}{hQ64PLKWG{nO9BmHChUde6meFOT26qA|waA7yL< z(r3YMgKGdk1%K4W*!R~l_8Q8kGUG?eC{u~#+4@^6+7Fh+y;GTZoUmRn2S>rX!ChdY zI-pvWqx=@+Ngw4C z$Wy&ihV&c2Z*otb@(JWgp7J*GBtM6yl8kJ_5SlITX*&!7w){<%QNCX4IpWtznACS< zi>FIsq?a%v!hY!274dC91efHeN2f2KoSvg3xU7Z9?$1N?%*~VPe zaSc0K)cYbYOJz$?S2fP%Z0iNc)C;AvR;A(?ZnUJwmin4?`eFf*!GOprT2cX#thq?_ z1r)^-tBb9oFg_FzJ?R+sv^8<;Oh9KM*Z_!3TO=J63^pTOt<{QF!7f+LxmAo!1lyE@ z*G^dWLZKFrp7?kjYrLwl?<{KUAD?OLk7pR0`GdyVu*m!CmNu6Ak;bmOM-Z zc4+H8c))S(M#)9@^!AO+dc$q@yd+mTunYwhFGMHj8M|<9%6PG1IBqtB7gkD8u<%1k zAdEBvM3M(%M-n$Rs;28lj;vWWmY`GF(UJnqU9GZL-n`CufhE$~q{)Wsw@Hn1gCc;9 zSv8BgnzTHOg~7P-Sj9pbQj)su;xb%_qgHAA1}Cebt%fLW=j;} zd@)PWh;vbqZMY5FL~kBYbm( z7rfRBXUZF7F=BY+9)_(@4%|lf&r}+<+FsizHmbGq%(P|IoSB?e zH_9_phGRAClHtsFXJpPy22yjmg6&pIHRC824YOmpld(liBx32|WI8@JIx?2lqgW2s**ZZGQRcCo^X$B;Ys+}_S3kKp@$(;Fq2tQWMI=w> zLo%hC8{jCIbZ1_D=i&t%fKj>Ymmvx1A@Km62dCMyJ>B$xv+!Tpyd5Xvo_<%HjZ3^k z!RgFa;#~?3Gn#m}f^!9bO2KJEP3q}Ya9zQ7Dfpm*a|OqlO;gWq1wX9dQ3cNdC%-)b zgW)%CLIUh=M0U2pZ>oN2C*i7oX(!?RO1;uf!gU3wvj(YO^#fOM)eq8dq(}7w#Tcna z^*@@~#8v-4rQq}>L>OAd_EYu?|JqO4`~J0` zvOoLRe#$=bul-ciN%h|AzklQYb}*4ly{qu=qwax?AH+54r?kHp0l$H9Ac9jsdd@2= zUO=XPM%)3`!9?5H&TWU0l0+91i@GHH*UcLer#V4~hbIVs1)ue7+6HOVfk^Lf46_@A z9R||HS{68ra1FBEj8-$A9NpW?#M(ua(>!B0lRH<~Fk&}_K5zcf+!rcS{m-!V+vq!- zHc>w^pnj%qd$FeN)b?)A_CdP$jBk6pxR+*~Vy&duDA!=BorK-CmF|_cHe2u8MfI&$ z>>8AI`H^}v)36f@Uqgmsc!c$mCq@6=%sRR|fIW@Kvq8~;;(H?X`FqcXv5kS}e@}`+ zp-0jK;htBx=Y?&aaL)@zpV&!k+3pg%U;nQ?FWP?zE|Nc1LdqIVyfVp5{#a(JIR{m0 zY-TxQ-)&xmnJ<(F=zFgnodY*$Zr6cHhS&zUPc7v4Nl&OI^g!r=wei3f_I0uM_8Qb{ z%^f+fE*Trvrsh!V!{C9tEg8e-|1dnEwYA}H-+x|0)dLe%^DG_yvjMZPU^r~Ru}cH< z2K`K~ShGrJJ)nYL%Q*uN;4F`(#qxJ@`+ZkYK%?n29VE-&UeUMg&wy#3Lll0$>iL2C z__@xwIQQGcB0t&8-h1;&>;O%mn1lPl%V0^{k@=Fm@Kc&I5?urHz*?aVCl1rJSq1tK zEM*0NKjKiwv`ho}y}yp#kmalE!XB5nQEUEAf#hi3N8ged-V@Mqw^!OqvgVm}zy@50&3Na_4G)qZ>LHwuiy=k#vSnF>AL z9boErJHcDPU0~{aTfro=2~2&j6HNVbBX~2Iek)2g&~x1eruXYkV1H0B% zeW*S3K7^09k{B-UOAeKdRHZVM98L|D@H>s9UMTL1)yqYa F{4de-q%;5k literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.B73B1CA9CB013890A989873EBD811678.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.B73B1CA9CB013890A989873EBD811678.cso.pdb new file mode 100644 index 00000000..24db1806 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.B73B1CA9CB013890A989873EBD811678.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cfc11fc085a3b48013d254886a67c8bf343b8e65a2fb30c9504f9224cb131ed +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.BB1894D2E83C03A44A1F4C0ACFAC5941.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.BB1894D2E83C03A44A1F4C0ACFAC5941.cso new file mode 100644 index 0000000000000000000000000000000000000000..93d63ee509649689f64e9fa49e3729dfc411ab3f GIT binary patch literal 16848 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 w1rihS!%j&P1Y--Mxkx%kIw5hA$m1WoN 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D1027BFD27F09759DCE21D6C3D0007E6.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D1027BFD27F09759DCE21D6C3D0007E6.cso.pdb new file mode 100644 index 00000000..9e97900a --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D1027BFD27F09759DCE21D6C3D0007E6.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c9450b8587ee7f2f0756ab604597f39eb7f523291b0ebc79123b801143d960e +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D11F440AEF887A61EE9AF025D5E23AB9.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D11F440AEF887A61EE9AF025D5E23AB9.cso new file mode 100644 index 0000000000000000000000000000000000000000..f3cbc4ec6b2e67ce34ee33f2f10c54a8eb3714ad GIT binary patch literal 19088 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 F@_#ENjDP?D literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D11F440AEF887A61EE9AF025D5E23AB9.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D11F440AEF887A61EE9AF025D5E23AB9.cso.pdb new file mode 100644 index 00000000..4475a6d1 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.D11F440AEF887A61EE9AF025D5E23AB9.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2935c46ba81985360fef35e3f244cc4d31ba4f691de9de1e6b8144e37d31cd75 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.DF9214C22288F9B9A48D38F5B74524DE.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.DF9214C22288F9B9A48D38F5B74524DE.cso new file mode 100644 index 0000000000000000000000000000000000000000..f5ab58f0810c79ae00cf7b007a883ba82cd2446f GIT binary patch literal 16824 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.DF9214C22288F9B9A48D38F5B74524DE.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.DF9214C22288F9B9A48D38F5B74524DE.cso.pdb new file mode 100644 index 00000000..f3a3434a --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.DF9214C22288F9B9A48D38F5B74524DE.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6eea914be460fdd9919f41c9d86c42a6884c23674829cc1f6976793ec437a20 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso new file mode 100644 index 0000000000000000000000000000000000000000..c453459ad673e5417199efe240ccfb0019e2db86 GIT binary patch literal 19272 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso.pdb new file mode 100644 index 00000000..0c9434d0 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E085F93BEC7DF3EBA14A46B44E57CA65.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2a4e600bc87e04d4a5d628d7aa8bfe53b6e90629aa4450567950bebe0868d7d +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E439E2679AC92876BE93DB6F63E71BA4.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E439E2679AC92876BE93DB6F63E71BA4.cso new file mode 100644 index 0000000000000000000000000000000000000000..a25bdce91998cfde607f3260171cbd6ccaa1f727 GIT binary patch literal 16848 zcmeHOU2GKB6}}55*oy(11mZ%{UPV-07qi|!);2#8UayT;GI;AX2!ShSe`f6s>ltTe z*0^a?xoO%oN>o)URU;KesN?~am#B)=pQpaG4^^r*QeGNSDXMr#AKJ*Ys#*!*p6|}w z`#M? zZKnJ%(G{Xs2yEZL*nfyFY-H>r-JeJgkCf=1n!wLC-C7BJYf03dNJpc5eY`&zKe8`xauT-fJjfA5tlRI|e1LB8Gtwiq-$wcOe zw3%)KCsRcNj&gwh04LK$0*>-VDgc-Dk%Oe17AhkFLwWml#(o8W(qlxBy~)jgOF0s3 z11|4R4xb(xAD>9G+^OkPnrUl`8BxyYmYvs&8eLr-r?xFo9q2&)St6OFZKPV@kc|W! z<&ES>@O#^~nFPH+IFjI_9CaW^wJAHE%S>j*Pq3?3ujWRFPhY3|S*kHW`SYzTFiq9W zjt;tF4CNhEhCGyGREA#31NkW5ARKMcQ07iulw(vzU6f5KqwWkf8$7Z-Nph*IGxB*y z4lr4F#MKE*${5+<)R!1!0Yd`zvMWF6+WsuLBsV!Yd4cYupJZy21viJS_mVc<3-cb0-Ly^v)0^Ush6c)4oi?F66EjJYABYMA^Wmut7k zp#v0_COt{8E-nw%AC*03se#n6d|R;_Y{cqsVN zpG!Z?^abei2#Us}Af_pKk`(O|1E7k=NB8VA<~k z*oXTFaF)8Cp(oon^=>?1*=DV1(>v(w8|m{kyZ(B`x$>5(K|#F9JZ8X?)hzNos#yzp39tGmu8zADcQi3++8pBY6Zq+Kf&83YcZIRR|n_ZHjzTs7J?$@u= zPGAW(wsyQ`yUkUjoF5A*Ts8?^jd3HvAHG;f&889LgkjF*t4$(j+#BXk>KJi8oxdU0 z)4Nd8PH9D346*7^m1qd{Jgv>!v&|W!%HR>>XHsIA9IMP#Y|Aq$Bve~tVvw9SOxt}Q z8??v5FV;s&KAP7{T1nTeI|RmsZW^BD=v*IX?iit?$_TASiLX6l^VW?r}E4ND8TlNypFi#!zV z;SuM5caNO(ga~o*M$pCY0D*URcXKlLC0M**R7!4GI-alSpK56j=LXs9Mp-BBP%C6X zG{e0Ld*(++c->m3)nOTwdt5h!8v-%dY>Wz@`~W=%O~XVz4jxMs3>)2crzcU7W8uIyKU%L1(@wbQZLMc&U&qC*xXQw2)VHHqHV>D0yV(JbV5c z2`o|9zqW9B?DA_L;u!Ou68LdGBy&`*5rv2#d+>Dcf8U}5FxL=%n9b`v319+oHs`(j{*JpDDbJ>nx6!)u89cNa0uemzr6ZulDZ~3XU%= z@f9CAAxJOTXs^tsR0og{^H(^o<6t}t5$c9f8I*08!^ zzyrkF!LXEZ_)xctiG_=}zk#mzGOTat)DItRQuHUJemAmiV}Tv;FUCQ{ z+#u_M2gUogjkR{P680oTip`1)y4^IX{qOVvV_Q7^-?X9+J`^7C_q_Z)FWM$^w#Kj* z=I?pg;d)5t>#^sB;Rnek`dE~lKbY=e$hxmnq;x!;8%Zi?JX9XQ z_g=f(dY3V`Yo$pA9x~AVNc?^X@n!fP@IA0*9@xRYDE8i7Aq|20j+~=T#)dUh?h9Ub z53IIC^!tC^yJyV}Snd1IOQgMbtfHU82|w%A^K+WTdM&fqJFDU6bA_r=Jm&yq`W2nk zyAEf0m<-F`!R>Lq^$g{h&mgd2GL2(o`5P?xO}qd7DmjG`-tqHoQE~3Kl?C6}#@@ZS zopyk52Ed7Wh?a_!oMn71OKEi%X6v(&a8$J+8-U9?9wN*V`4S614E!A==>)+HhS zbE2C>ACaA}5{dm_y8Z<@dx>(K-@e&$d+#?y7$=|O*}$0xx_37b-Z#91JBZqe@XkF> z1fH!#cqj4uN4$?)h_(^ox1z8C{koF~&)1Vgc*eSj{Is?ncxr9M`_g?6_#SwGJ&+ko tpFkYPiCJH)e;_^(FP8^mg+d~(B@aX*#r{J7fdg7R8IP31^Q8hf{|9$@zM=pC literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E439E2679AC92876BE93DB6F63E71BA4.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E439E2679AC92876BE93DB6F63E71BA4.cso.pdb new file mode 100644 index 00000000..50b35be0 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.E439E2679AC92876BE93DB6F63E71BA4.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8141607807b563073b85882ba38c80ec5129d04c63fbb3d8bab9e6b5b3aad3d1 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso new file mode 100644 index 0000000000000000000000000000000000000000..cf4b69172d24f183c61fbca5b16197f202ac8673 GIT binary patch literal 16824 zcmeHOU2I%O6`pl$l5CvRag)>}DU70k*3?<=uGc^0rzG~;$qFZ4yiODagS+0nYu{#l z@AlrijwvZJQBhlo2OfgNLxozEhoFczP%FekBv6GAKQFw1il|T}DiskW6eLg;bH2GV zo7tNsN+U;c@IA@dnK^UjoHOU%IrDd&IXgV^O8i>(;==F$dGqkKv(CRi_$a~{d+Qiu z8!0_Zc!jV+#19GIZDH)<2F6~b`pL}bSc&R%06%NHwG#Q}vS>S*NhU$-BIJZI!u^Ep zgn*M~(Xm~-?D5!SH$O3+ALse`LdkIWh`mrXE0jql;z^dxA3yao;{OEUCc^I#Dj;(N zY$St0Co=_rj(miEKqu1$fR4PPtM*7m8{&UmaQgZnqZRywKazCVfO4Bmr$*0?OiWB> zSpLk+8N>06rL4$jE!QhpMT1ILC#Vn0#1C0$KToJY+3*+Cu&RUSGF; z@<4-b&>Sgutkbsvv`dl(KG^a!xg@Dw(MhWTfXekC(9y{m&wx#i=G%n;E`&r_t7K-QXa@jS!STPY_>aOdQYyp;ZfTf9)p#V$PT7105X+Pe?jU2Z8^dO$GHVx{l4;E~F*X(KQ;xiL z%61kCl?Lwd_cyR-zOjM*flglDK1ZA8v$WrPlCdXiEiCt~2%G;b4Re2+`v|?&p{e)k z0oQYCMUUs@xsg?^dG&GE$F`hCZ&AC3A81e&b*al<=lxbr6qo?|Y>xM?-SAmR*Krkld!!rUnv1g;JWD02 zzF<3|Sn&eD*9|Q7pj&5Clz=QhDry!b>2j@7Ip7$xHM3Hhp0e$VJDszuMrnG| zaP68?G~8+bj?A6T5Z7F;;CN=SVjQPU!^}wTbbOI6pyFehzQjPfKRqyug*fh#0eO*F1avl87wRqrWxv^Dn;f${%qp`LO`} z>W&R5phg%YgzPtWwSMq@I!pwgC+jE)VU2hI_rb&L@b(Toph%RSQ#Le_jm|Z_7`uvpzeexT=z4#ZAD~z7?+%S0UmjGc91&0Tw)|%Phn!~q2VM6+ zzT;@2n~D!9?Gm!-s3P*Wzq;4kE`7K4Pe1u(*Bd{4yPL6_RCk3C5TSqg{s4gXxYLGR z8OD}n%DyAZGG#xIWtpd;Rw>YTrr-P^n*9{ogIWN=Akt zwu9a=!j~xyMCld?dRJEb+kyR*2Vxxb5CV3wJv)z53XXOrmh^q>A2)AYqR%n5?j$P7 zqOUyU@gKVZ+EKyVu#9Dj-odbDz0J3Ssl};J!<^E^)F}m>4X~R+Cg^)v{Rp508}_lb zow&b>2pcFvz?pu;!EPw~(a#Rw{xsTtRocHnw8aWTtcEo^)oNR}6|_cs(O%hG_ky$y zI$Jf{V#+o-!nd(VCqg0O9L9c>b-|5z?-khpz8Yq{rRhNzAb_0e_w*b zMvsIC!ZVLzIz02B?R|LWK__-=;>-g(aR3&o?~5ElzrU?Q5!1)2L8dR0KarWNuZfxo z=8Qelj2_Y+eGlM!pWT~#Z(wb=i54AV8@Ni{;;SSl6cc(N^uUAhKqvc*ID2`K#7F8U zGQKVq8y<}2Q0iLnz}>cx;qzY$Pw2tgaJTROUL)1Lvf%C@4SIO zlbWsA#q&O)On)uq_CAEW94v;#Sr4V3A_O3yVG+HL5bGLTBZ3E@zG)7>U-bQfF@9ll zQr!D&WzlbMV?TcNF}8(`Q#B{VdEYXjf?bsPq$4)rbDGAMuGr|}!AzPYRx@mwJVc0&gEuxmMO*k-4!~3RA;|2qH*#$$~fc4*(BZx z$l6Va@z+j>G1p1>I3fM1pcsprDaCl)LP&pBDE?LuV-<3C65{>pB7A}{ga_||Jr7<* zs3G(~=z-7!p$FEW2eRXtQ~tcZpAGe=(&fQ^`erK8pXi@WmD1%zp|3nR*q<&B(N|UR JYH1c-_%C5tslfmM literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso.pdb new file mode 100644 index 00000000..f3b52951 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FD3064546B01E2F76BFF1BFDEB54CC81.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:597ce5af1f9a341bb6df180482e15755e7e2f29300268eb8b7de99135b8888c0 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso new file mode 100644 index 0000000000000000000000000000000000000000..fdc943b076122ec144a5477c7acf2d327dcd710a GIT binary patch literal 19080 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 Qfx*InX)Z)7`2|$vztO;U_5c6? literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso.pdb new file mode 100644 index 00000000..ffd0631b --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_CPU.vert.FF385EE49D348C3D94E3E75DDEC43EF1.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18af0e20df3ab32352f70e36bd6020526e4fd6faef275b2060eac78b6a9f15d9 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.03A9039DF625A5CE430A52161825FB2E.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.03A9039DF625A5CE430A52161825FB2E.cso new file mode 100644 index 0000000000000000000000000000000000000000..a25c2df9b6bdbd35bff15bfd94ae47bda82529ed GIT binary patch literal 16876 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 AcmMzZ literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.03A9039DF625A5CE430A52161825FB2E.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.03A9039DF625A5CE430A52161825FB2E.cso.pdb new file mode 100644 index 00000000..7fd90b55 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.03A9039DF625A5CE430A52161825FB2E.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87ae618b7b3e45b2dbb1f324829df0a63d18780fafb8777e464879742fd2647e +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.125702F176A5DC7DE52D9A2D09ACB336.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.125702F176A5DC7DE52D9A2D09ACB336.cso new file mode 100644 index 0000000000000000000000000000000000000000..a9ce3818a97c16d5f78a3c046bfb78bcf889daf1 GIT binary patch literal 16864 zcmeHOTWnlM8J=}+_QpwUH@7-&JBre3-8$>D7hiI5729jauGaSAb)qOTxO+KkZ?itf zoO3ocg$RQR1r($T^#v&pmFPpHR0yFwaCt$3Mt}qe#0#ho5D6&{sKue`Q;GS%IcGMr zn@wm$(p-H0c^Upv3{O8R5Y~s|=@HZ!axc18*|L4lu)!)DLM#rfQ0mj(h1{vEz z;Zfp?#IF4i*QxA?HRxKu1rB%*~QY&?B@^3Nm>n;MCKL@bHS5wwLe zfs?6%fFmBDKfuX+LBJ80^0GW+MHx?iqmXtn#CPmq?57^KnL@~K^1}B#9JT?M`7*SkE=^I}R;Uc>K=}n?Nzyi|THw$P5_VD;*zV$L z+aR-@{(KRFL`Xv(GSH*il$uJ9&x}t^vP+jPrN>52eMI>wDltIeD~&8LM@6lc7D_RO zcpJr`PvX!ianynMb&^3_bi}z^7V$QUqb%ZAz4$ye8#2&?yk2stEHnDFtEZ2#CRsK} zx={~8$On$mA0m{KIyXP*>H}tZx<}hwJAi#%)^|)4WiOJN^vvMQTa?6elhh<5UWoec zhTwy{EmKc_I+YlLkvIFwaQE;FFYt-q{p-E$n`jK<#A1y_A^bssn6r@Q)8p*{tb2S~zaDri90?r!-4g|@ zDNlYrbaeW;?w2MyBG)RUvuX3Y! zBzW#fFqq4h3kBMnr*pcYj~fM(ge-l&Xgj(U%4(g#FH2?1q^_vHnzGDSNMsiUR8Mr7PLi~4F5MWXe^>L`r#)`*_4b!)~X zjD0sxd-iVx*urzv&E0M8BlK4LrhZxv*p5}sIn){5b0lM_>{R+$j4Rz$9UR>NUCiqz z^_(MSSaqt3R}J+%p)WZL^#vo!BZ%_TLt>gt78i?-T{A1hRa>KCl3X$^$Lpz8wMWCR zRc1;)mND{r-q7t^6vjl|n4W_{cP6JMacoQpZz z(w(wpaPC+c!(K9NJ>)Jc;-pDNc_`AwHTQpKmzU2&gm`#0=;613z&krTIhlJ77N0eX zd2i)0ktrItwX}+8GhL;N0EMx|F#ag%3VL510Yv5s7uCj<4@Z1x| zV@!^dRv5}j=CD`EM*+RKgI%w(Ha`CMOK?}_FQWukfQP$rkHsj{#@eC3XW~D#Br-E^>78>so)0`e6NC|uSh)|3a%+QSMXyB zen7z!3LaAMF$M2Z@T7uk3Z7E%xPre-IQ+lK^}oA1BJ56tb~TXyRr@&=khp5U^bh1! z`=x(?tM+#(dQ|_*=K^`v|2q|V)&F}HT=jp4g5ygH`Fshk*kAAcLA~|fAK>cy(@c8y zvx(N%Da7|LIA__yn%cLuZ*FWpu#>)&Sb4LVoYKH1$%mU6zN3Jx=&CIN?aIf$8QnM6 zp8eB}%kZ5M^xexpI^;LD}4Fy02)UU*ORqwO>+ZXs+B^|H;14$8i3`uiW~f&ZU6?z&RHz(eDK z+niyk=SVoG@z1>cGp}ViYIFb0E7y^V-f;ga|7`g6Tm}2>im!S3hT?Q zHS@ois|d&ZkF_LdHw)}Wi2d13SFlxJK0P`fNW>E9vBY#`uTal&&e+R%2mI$>&pVGc zhVT8_o4Qx=Y#V98i6IMoFNog@CB6>d1HK3Dn+Mw1v*PUab*dpyIgxd%lVihutK3)o zz&&uMt-t^LANb?B?*`oI``@>z_U>fSID?NdS+|i{)NR&nTeg9sr+5!Vb5C_(6If&hX?Yvcla&CeqyY1K>qj3t{>3HUu}wrd*5v=cz!#( zd|?Oe0F#u>iE-Y$LM#cJz9(hE3*~wd_YIu(3LY$i2D+(x7YCO_*NCO80O*gn)H6&& zr})92g;!;MeO(RWxk3xTWb~uyK&?^ z5W@J+i9aF!71{X)af;%gbJU4eD8&8!1?p&c7qI^i5p(i6(mRRqc=r*b-*pi0B8D9L z-V?--*+z`Mhu^=VUv4F)pBana4#NiY*EV9jUwepg4$)3r`>qk>(>?S6ed_JgI`+VL tGBJsMj2pg~9_!Ed#l?tInMI~_^IK}s`j;IS#~OwNPxDVQ7}ds4>L9~ z0>%qj%e2kBBcf9s;>=iPOk@`HoMDM!bFo|~awHLtC1^Brdg68F-@&+x@w(V*lb53)hCJUypcU7JAry3&0TC5fJ4F`4PX>8l(^KT?3U@B{SS3#h(v zFJjQiGnWh5O;tEp2GyA+)Hr?S8yQLEaV07@%8}rJpnwt9=IAyXq~@#G>?7g>f3+V z`@_pW8T+>L=TxNU$`R!ixhGZ$FTD9|_q}diYa|582f+h{lA&87Uo>?`%p2xnrtpFx zjtO;~OB@e37HfH?Oh|78W96NvbF-uGHrspma(=PLxo~- z&eW}3p)_B|*ko;;((JVf(^}Mvb-267Zf&E`ZK5~d*XWlQ_z-=b&wG5pd%O~&^fxqG z_zVwo_n7-2bl1R!P4sa$cY!>?QTMzNX^;%d~1I#Y!^kKAQ`s1!<$ z7%Ay(kTaGz+jqC67^?SMD9-uSbjqDq!s{zDS#iAD_-C*lIn525 zMH3@U8G%~)xq`V+JbZIu?KFS3gcaxRbLYCbo`*xuIA>%X*{}RdRnNMqUZjk&vrwNg z;afbC;=+(zCdUek1;^&Tx=yCw)}&k{%ckXcL$ZeRh3ZNv&gi9_kt-SY2LyIY-B_N( zVRt3xRaKleoN>cm7}p)EuoM-A(z=;Kh)biGF@%t7wq-aKt0aVD=_R{t+D6pfSoE+Y z6&2A$r--}%J37655oL-;Ur+StA0UF>(a|B;+!tZ-C9{z8b{^w;p>$VEJB2XWUT?Z{ zX9%u^ipXkssaVZMW6^Zf4pvi}p;~ zEE~C*DZ@4^R@Sg*+&43OCdFLyY29)P*`jfp&knPv(`RFs_(3X`7)*@}_on&=2m4dK zLq|^yCVP|JgWdh{?xVelKAsS>wi#O}+C?J0MyDfnmZeUss?(P5boNXRI?J9;47Az# za>dihFL~MCT%WG@=X&Rk=5^@Q>*-v-O^`F#L%ZiW@YlGu%uRp(MDy4WzV#NKDenou zuio4c0xFDAM#%nm_VC*VKY)SH@$xtb-~sUf-V=xD>6Qo@NDFg2HPJtZRJis!xbcfQ z(J>lm(J-P<74>G?U3~T|bEwfZ$sVI;T0%@~BzK_!-$t;H(k+^NIp6NdaiuHzc77pupujhZrspo&t{r<;y z9fxSV1ugnF^c^;2CpES=x9@0cIxP50gXNc-xRN27V4v(De21`~5nVl^?S3`!+pm7- z^W`^xpG*EKqJ55tuR-MZCmb-3CixMEo>v%Qe~M_?3+ZJ}4|CcJ=`}Ck3+aZJ_CmVp zrM-~e_0nD_bwY25U)V!*u$l&~-oO8F`3R!~FOuZMc8~P`1iOEo(D)5d3Tk8-SJ*jW zeg%Sz)m8U(fL$oRqro^p9{}v51A9+$2#zL_2ZnC?*X@9#Bf+J5p~5BTT@sd@{LgZ@L*uovH3XjR7$3G!cW(2BAh zb&R;S_n_<-JlnU)ve;e79W*K1Bc!(WYxcKE+WI=6yt23I0naw*-0rh2s%-N{_a4$( z(UmdBVcdslKfEd1e-F=wJDK(v_l_Mt8Jzv0;V-}A2HzxEAKHkZ;Ffv7e~*B3dT{3v z+<7diNlWTW_rOL+|DgT1 zym{`s0ULe)d5yJqjTK54@r@pJmGni!rY_scb}bnAv$?sVnZ4)|^8D9xcGniXS9`8hruh|0ttipCjGIi2LbwM#wtA2pae>=2{saW#m5{ zm1D7yLyX7WjQnS&@^42mRxxJxGNOMy#)v+KyNCepuLlm^U-5zTzypB?9$*iQj-@6r rkK={6FPD5O8&Br=1Fb$IpVzyen#=X*efeBZZ#;3dw>MVK&4Kg3-{6Zd literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1ADEC6D7AA8D6B5FA2623A3803561740.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1ADEC6D7AA8D6B5FA2623A3803561740.cso.pdb new file mode 100644 index 00000000..a6f873ba --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1ADEC6D7AA8D6B5FA2623A3803561740.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32be53912fc6528c8438ca6867848b7488c9a770b3dd43b9be7b4e867c90bc99 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1B4EF1D1BFD046CEA6303A75D5A090DD.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.1B4EF1D1BFD046CEA6303A75D5A090DD.cso new file mode 100644 index 0000000000000000000000000000000000000000..e5ac2410ef8e30af3005f7807fa319cb966dcc9a GIT binary patch literal 19084 zcmeHPYiwLc6`u7Yu{Ta*r%7rO7e*mP>&9K*eK>X=Zv9w0Hu7WfI>tnn-1Y8Vdz;PP z<=(rFDXQc`03lUENEPBog%a_nY7ii(paLO9LOcaX{ewzWeh`6FAw)?)@TZD7-`qPl zvztwnL{(DP_q1nc=9@D!XU@E5u9KJ_8vgF!&;L03wfd`x*H#Yw;@HK30AuW>PcpWh z+!MsF62C&=Y#n2-*E5!EU~Hb^XA&c$S&CB$@~rX3M&QMDk#;5#i2!RS=ENc5L&Pn_ zpvip3G%O=$^UzEuADc)`@YG5=tDAh-I9tjW$P>}R5jLJWIrR^cZ*uw9NbC}+BxpM+ z3>^A{fWu!;9^jo=LFO+~S;W+WOkK@Q)WQJ6+7^6uLA`b^bodA}^%>Cb1-`^DY8_BTo=; z`0L5Qz|}efZ`k4BGCf?#Y^MSsuhtoHz%P;u68Vw~8I-HmAvv8IpBRkeCRT|+tEW}&{SL z;NV)`(iExKZKWcLRGg$-y`5Sm4J+@KN2hmr@;x4W;dn5ZSt{ppbZL>w=tX_Jm@_CN zQ(w+owr+-&v`*N<$!smo=kofwq-i`yGNp9pjFHP(x*f`B;k8b$OjoQ*Bwi&_BbUA^ zk@4ax%B#vK60I#(Bg4p%D$!GxZq6DLW2dX~j8X+A-l=EhF9z7j9|YK+-V3l_o@VUp zyXsio#EnwMZIb-vbd$(0|rvcIRV_X?Q>hKq_ zQC?%rix_^Jf$nBnYji77)kC_RFWP*hm|iOAS?a)2j~*I%B1&qW)z>Imxu%l>-c=ov zQ@j^WI8#Be(gyxqxK-!EipiX&%UJ_6XZ566J*5xj3xy>kZD#YuKYY`WXUjXcUGtf-YY=_YfD9Vg%oWfB~_H>>_`<`M8arI{0JZYkS)+AqDju8 zF{*owQ>(5TE#ayznn7tznLtLPfV*8}KfrP~-o5cI4sxHsBgNpcgDh%D-7?B%MzwITF9cz zl3OM^`Qmb^?3TF{*K?66xX61S>W)E+>zt#3U2d-*? zb!z%^Q$L;f_E)dqiS(Wb@^~MTE)tiCL&V7Y@4x!S`F?s#MZE3Ck>k?`!~%H79AYQh zTG2p(AhlBq`{$5!@AlQ7v16>iEr1a{T1YQjOk3;I`ZO)V0L`Y&W!+}0)?&}1CXkV$ zZGMhnVul%>WUXy*`=AWb8;&E~W;%CXpm2a)5aMC>bXz@P&CHpQUD4Y*`&hCqAYOzU z+@=@&|?F@O<4${uRRXa#K16SLHEBUMKa!A3|cEMaI z>!tP+GM9&|{Y3U3l&kiWc14~(k?{H(!CpSK`ZMyW)t`Z@{TbgT9AuMi=gEyX&<`oN zoi*>@xqsW97LC)_A?uf0$cS}pirQ`)`wxjgCrll!f!`!^SN`@^=hfW*KKrA;yvXT8 zo9l$XMGOkifB4n}gnIvu_yX}fW9zQVE>rl^6n0(qFA5{xby)+YN7!{)yBl_0*5!s> zmkqdK*JZPA*mZ?Y(5sF;PTb*zf!)o2|0VrU7eTIvz6D`0-DaU6Yu}4EAk_B}*3{ZW z^>~b|vE8fKW~qs<=lxh<$8RHnJ|v{}4if*B#z>G}fzgLIHk{W%%wOOpVvQKIj~&=M zKrSR&m~(x{{(b$L#IYxAa_}hdZ_(#tJJHibzmlg`b`4m7uoi|hq!UKIdzd_lIvCQm zGjVogGM_^t91&scIW^`UQrUHpFR(as&T!*&=dh;WeayQC%tF6|tZ^^uS10r%577yx zUW+oXZqC%`Tu>nGm)*KGh_v3DiO>smYi05{ezSh<0=u=29RjbcXUM~xx}qFeFVB*0 z9q@fvqf!TatSCNPbXVm^Sb%Qzsoh8h>-F28p$1pvQE#8Njs?7HIb5~*cb;k6zw^XJ zD6Z0QrC4!0>f-*LXIReXd<))r;>-AVh;3q8J1Ph(?q=HkRw%zE1M2<{dzE&w!j7u_ zA6gWQ{SnTHpnWW`4=(O!Zr+l!YruTkJQhgA5~;DojCVG#r8#HpS-<^jS!VNN_}+Ja zbN4lj?It=HU`DT=)$g~K{C*Sq>3j?L7I+{Q*v+00Z!hPmw1D>_;}k9Dh6kdEU&uqT zz@4ss{Puq+P4Yksz0>#q7f6%tiG1-4zK>?z#q?R-V%?UR>0Z(Cr{7BjBXh<9a`YGA zR`)~rmIM1z+<9Wpa*P;+2@R)Ie4m3jP$Tg{V(fE3{@*V+cEA`v*BlYwee7hxmmXoS zzp{%?fOtdY#9hSe#FB96`-lv7&-6@HZeBwDs5MRr`-Nd|@+P>w>86lKXjGHi*GB}B3qQ8rvxsInrL5@TwY z-Ca6r;uK2YCP1p)+C-#5EM zFBw{}3%mZ&KKp5Azj^cK&6}P7W$NtU(36pGZW(O-N$)eeUjOjt-+p#Sh=~4tf@lke zN15MazQka215x7!qIa3!=k%%6@JNo+`~-R0bbU4S%CgKmm5RrK?PeCt5$65O&CH;Q zLe?^EGw+DVRHqmn&y0)Af|k=QF=Q^53Pp~@W6?N`Wlo;@Bg@04M&=Kh6|p&zws0bF zHdPXE#6$cCIGZmCIN}Od`5`Owc=8*iw2L9WV+YZXJZv+Ekl*Bmzw~g}23)0251$>H zoSaHg=FIFF-E#D$F&Q5-Y)3P)IzL^RW_&iq|GO|55?I62UU7_RrhY9(VPNYE}Fw4_D(&pL$>{V6XapWXA#%eOtC#ElR9POs4NkzO6<=qa! z2e+H2p8iZaH3%bb^p&CRp{Je_6PXdw7mdZXg*#FiWaLVt-cK;Ui)W_C-5~h;5P0Bc zs{yTN5A+i)ujl%&_quQ5F-$PaH5P~P2M2P_LRvr%w+FE9326O#;Bqt`>iYd7d8{cv z``~-8efGm&oP6`}xu%JW-BZddNUL3Qe)4QjEu_SQ@B#8bQq1e-;*eQ1Epb?=U0m!) zxT#n$bj=d^qNzDjC{uV*_sPWT$xNA!<`hiBCzoJ3sU#`f&1%}T3!V&bVAW>vNciO= z;c#}YoX_+AJd@Q8eay(4tjN;m3$~+Mk-1oB_$8%miPaVK7t)sbJj;}{?0GYvw{<6y zjYXF_D`k3OH6qCxkvdxXYedG33n;HfQ9My!td7F?!5Y!iwr)+Eshy>y*~A<5xG(ug(!28Y24m^AP=gAw&(25q&4ed-iXI zXyHlj=I%E40eY(gQ*YG+wqupEj>vfDNJgpbRQgzt@O4%H(BO^@rLd>cSNV9ZdKgM_lFX&7%jrv;(|7Ep1S&^g(9G$T=af6Hgsba0S$4dN z`bW87EKKrnS!d{~9XB4*vGDvU(^}MubwOHK$P{w=89nRBIo3Z_ zC98&dkAn?x4PQm8B42v(Ag`BtYn9vHw zO)c#b!eo2BkxE3lRtKmIGYZfvCqGGLE>!=zyxi;{y%7?XUhbko^+Ax8tG}3K_#PrTb-8zx&My`u77&{Q*7kEf=jRyhiCHTV)1E9pDP!NxtVFx zEZQ?^v!v%{rgYmZTUp(naqrUXnG{RSr!~tdWQ+PqezRv!rcXyN@P$+~5$_%D8#$2} zj;9WBw70K!a3q$B^~Og=dizo*hN4;9j4l-IB9T^8rX$NN$ug}PqVQSs3dG`D@7Fy<}|LRMB zd*=IZ{0Y~Ww?&Xw_iPA3W#$MobYI+gwXMV#V32dXG!6o~PdtG8#6ddR+JXiOg}I%Y z=^ukCym33Y_Dwp`VH#)+p+}DtwRxLjOZ~C_SS(I}rZsC`cj$sW+dCVR$gts9-yqB~ zaKiy=X+=2d9Y!wUfeB$F?>#Sa7@~Kic$AK{ZeXm5+}QaeuDxW*?4ivBGhytn>&U-tNO=K76+iKkmc#`tXzw7e0K{hwt~{ z<32p%!_z*z%ZES5IQ+TE^{2biVQeizeH+-He)|PyP`Kaz{XX1pKgI?n@3+6phx`4h z{ETw_{%rTj<4XtSe}*gi>$NZR)N5bh{`ST9B>QNh^%93Eyqj#u7HaC)*0H(0d4D^9 z$*}xZGgq>KPO(om6TWlU&5W+p5}G{rMAv~=W`8~L)7Lsa{=utPiLNpJ9y2J!{~!-S zId3z={$ZkJFQm8lncsnBFQkvWbT6dec+Xx)pLow+NdNSny-=2kavSI|=Dn3?VD~tmBNdNUYlKc8OKn?%G+sXH+)8PaAzUM3fEQXuO?5ZCF=f&ciqzrrq$O z?62E-cHF|)quiS}`*d*fEz@8AzzzOC=Dp=Y0>S&%18baN`OlGXP7|DY1!rDMYUCEd znU}mnxTP~MOf(>e`KpY$i$qLJAWQ=Hi2U=vJ5Ld9t(pJj9L4rw{>NGsw2MN!5MqCJ z4_5JTV zTy*z%!8nf(F{#_o7ImAtZ7bWopyTJ1b44?I-Uagft4h239^B<(U8;T;seYG+0S#NO zeau+b;G+Ze8$9)!hT!{Ub_x^v_zO*OdGEW8!f$S;kKW$FJHT;H6U;d8U1nB8v{x^Wy>GF@d>vJ&7w@>0(*4V~jp|2Vp$((CJLknIXBup2rc zhjlARVF+=bp-Q_KpEaoODr9|BrIe8{aCNm=8tlfAa!&~3zhM5H`FCvR>&$76gWljy zw9Fyy?~igv!@Gd}e}q}E&+**OjON|LjDEM5c_%aE(B~duh7A97SoTHy{uTXkD>MJh zSpIexHlV+@G2{Julo|JE9n7`w8bblyK@ae!-T|#+4~&hcPN5&;hA)xpiRF9sgMG=l dL$RLzWM8sR@6oilmQ5UrCvtt!Qf>~C{{_iMojU*k literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.215E7FA2E1D915E575BF0D051FF57DAC.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.215E7FA2E1D915E575BF0D051FF57DAC.cso.pdb new file mode 100644 index 00000000..d60cbf2e --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.215E7FA2E1D915E575BF0D051FF57DAC.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f98bbca8b6253ca0019eff4f386cd119186f9cc8c59dbe4285d5b43cbf1829e +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.2CF9EB30E57EC06C260F1C994273BBB9.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.2CF9EB30E57EC06C260F1C994273BBB9.cso new file mode 100644 index 0000000000000000000000000000000000000000..bf15bf291031228589783867c93147bfd6da1070 GIT binary patch literal 19300 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.2CF9EB30E57EC06C260F1C994273BBB9.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.2CF9EB30E57EC06C260F1C994273BBB9.cso.pdb new file mode 100644 index 00000000..08b8b9f9 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.2CF9EB30E57EC06C260F1C994273BBB9.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d46e9d0be030437141de6d99becebc3cad8acf0395997fc9baa2cc632cc15d0b +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3830050E054524D9FB4B97B3C5795D74.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3830050E054524D9FB4B97B3C5795D74.cso new file mode 100644 index 0000000000000000000000000000000000000000..c574d76141776b66cac7d5ef2fbb18bb0848f294 GIT binary patch literal 16840 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3830050E054524D9FB4B97B3C5795D74.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3830050E054524D9FB4B97B3C5795D74.cso.pdb new file mode 100644 index 00000000..14e34a76 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3830050E054524D9FB4B97B3C5795D74.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f49e80965cc1987dbe87b0bf6769bf50f2692385239dd672af4885665178274 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3FC5681EEA9466868BDE6277412A1602.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3FC5681EEA9466868BDE6277412A1602.cso new file mode 100644 index 0000000000000000000000000000000000000000..fdac809aaebe5d6769334552f63e513003b194ce GIT binary patch literal 19084 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3FC5681EEA9466868BDE6277412A1602.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3FC5681EEA9466868BDE6277412A1602.cso.pdb new file mode 100644 index 00000000..a99b7c8d --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.3FC5681EEA9466868BDE6277412A1602.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cc67277f84e0925c432b61422dfcb70b835aa5ae9064a1de2293f00a0505da1 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.54CE329F05A57498A425EEE7FFB92A53.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.54CE329F05A57498A425EEE7FFB92A53.cso new file mode 100644 index 0000000000000000000000000000000000000000..69f844bdcdf36bf86ed6b2d6267b7852fc6e6444 GIT binary patch literal 16840 zcmeHOU2Ggz6~42v6Ys`JZP!UdlEQ5i(7JWj`{&q6>Nd95b}am}c%3Lj7VhlstUb+o zW|^5yO`%{=Pz5SdkRsHFJ_PZC6!BIBLXpY~C_;*OKs(f++72=01lwTy2AZ>Vp2%tkYK-fc}ve%{i>j0k69>%^3 zMgpY44<5+z+mxNojn9rxPqFLQujkH;od1CGvs7Y$!k1f^GEYUVwl+#JhIj|XAy393 zQ^uh~Bc8k5 z`a?i6nx%Z?K{jZXr)RXowF$KENZqGVlCc*^Om22?_A15Ek0hWi`~ZCq0*GRvV?u;jNbI_jelPo z`@s*7|NUmmSeNvQ*b~cy7vBC->Or@zbrOQ)qu>GE&{T_;%BJe@191=1B$vmz z#HmQQT+cIOI;x|ahL0~vd_qW?yC>4DY3m*jol@nA@KofrQ;|p^UoDmBu$?PthBj`L zOcG>i3%c!SRx}^)ihNxPTPAV3_Da?=UnZW4TDWMIO19=i3-Q=;S52qKR>zXAV`(6z zzm8?xxCDK5f)dHbYz+h^j@PlCwKZ$joH%o#PG+*c0>mwcLO^HF0ML3*BYxPai7mw-@LTeV)#HbijMM8e-Y+Ds1r!G|b&& z?xWCM0~@y31GZyT3l7hD_ee&i>ePl`iu*>foDt%3)bR#Wg*%VjXMU*ahQmh;HDA_> z)XAm56bTer(uAV6OxeD>Ey+;3-$HT9ucb5Yyb{@1ndz$I)y6-ArNuNiY?e)oG-(8C z<>w0KLjL&8h4s_?SpzH1{pZdNb3F}*qIOOzIHF(qm#XxJsh(%FinG|5G2vT0lKjGu zSSBa*CEc;9uWpd(w>2pi$%<(?-jJ;0e6_Yx@-wPY)QW~?e?(wP=*IFKiMT5{t*U%X zb0#%=aZ+_GeL2c?W5Z0r`K58p7@UhW+tQq>WpM6Ts$o}5TZ_6Ii!@1+Q65cn^SJxJ ztJ}-xQKESCjYNT4;)-=oZT-K~;#km>HHmg=a zv*+A5GkY#WTnky%a`Zx38>6$s{8;vE>=Hdl#d_1jBdO$x(RlA*Z(sUE|6n@VJ2EoT zH#$0WB01QbiWO`#wpg~yjHz`x9ig)#bXql?ws@zr=Zer-@pNLK%`a4{QfEOUouzoM zDs-x(Q`5A*QYn8Tsrq$p+$M+_?6KYR9QsRKSwU~ofAPhieDBYArhFg(zkG8;2&fW9 z2_gIHt)Ks~L=Rx#bG$qX0(e9`fcL~9_I!IA8c2yyJGHWZ4#{x+b#U_+bH+}xfp!HW zdbF%A*et%>AMcOH6AYwT)mqRTcFCUaosSF3h~ZdYV_0wChG$t@JHk6&2fB;|0m2qK zdsZk^*fqf(V=uIah!$qU%f6)E@$9Ek^*kn6e z^sneUWXLWSKDg)L&d%1OoW3+zxzb9N46!Nl$xepv5DpNctG6jHjs0f%<}aIX{w;fN zO#RW9iAL8T;`|(&jZlCWNm8Q8BmF$`^NcJ-A^vR&?j}7nso*I0MWPNNSf`Z%T0slP$&gsFOM{wt{ zEGI4QyF2i%B4k!@=Mny2cOE!V0~|tZIk1e~A(VinVB5jJ{$tI={%CjI`Y+ZjqGSEX zUI?(CDfs+sJax*h}aGLHjrI&L^9O@4XI&dsfl5 zEwu5(LF{UD9mUV_SuuMGZfj%a_ftXgz6Q_F@;6xWoA%)QRdNae#`r7Ygn0Mc!y<3&WpBUr1f2jUD3253 zzITOC0uFtjkqIx9`$gQZb2=+{WD$hu<>DW>&?LA+sIcrYk?{VAM;*g7G)f=)Rcv*0 zSs~G`kOI3Q0y?p81xOk~+?UIp>~=hB%Xf8AA6Y4BBn(_zYZV5&apY_ZVE*TX9}?am zJ6|WvQXKFt8bm7;;{EnET|%QT;QSvYF%QoF0z^-Y6#xJL literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.54CE329F05A57498A425EEE7FFB92A53.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.54CE329F05A57498A425EEE7FFB92A53.cso.pdb new file mode 100644 index 00000000..0f2c2a34 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.54CE329F05A57498A425EEE7FFB92A53.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9e47744bcf55f5f83175caadcea3eed005038b1acfcd8cb7f9fceec2980b9c6 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.63E4E8675470AA49793AE6B8F2EFB412.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.63E4E8675470AA49793AE6B8F2EFB412.cso new file mode 100644 index 0000000000000000000000000000000000000000..c4da57a295c2b021adb0de08a064d57da9978407 GIT binary patch literal 16876 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 Bpf>;j literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.63E4E8675470AA49793AE6B8F2EFB412.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.63E4E8675470AA49793AE6B8F2EFB412.cso.pdb new file mode 100644 index 00000000..00e1c0fe --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.63E4E8675470AA49793AE6B8F2EFB412.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:047f5ccd6f7d7fb2e2ce276631523791cf5738c862661772e46b5b79087f4126 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.6EDA9FA1D0CE763321BA160FE1F69436.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.6EDA9FA1D0CE763321BA160FE1F69436.cso new file mode 100644 index 0000000000000000000000000000000000000000..601bf7ff7f979adbe2e8a97cb5289b6b341c670e GIT binary patch literal 16852 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 NiRbc>a&Cr_{{?R+iwgh% literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.6EDA9FA1D0CE763321BA160FE1F69436.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.6EDA9FA1D0CE763321BA160FE1F69436.cso.pdb new file mode 100644 index 00000000..83a4884b --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.6EDA9FA1D0CE763321BA160FE1F69436.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66e91629ed45a19212d926cff52b6d7d13374716b265c418c6746b722a819501 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.7B6CA6E5E319B7DCD804E51483B1560B.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.7B6CA6E5E319B7DCD804E51483B1560B.cso new file mode 100644 index 0000000000000000000000000000000000000000..b762545bbbedbbd56c1fd8ef84e87ccfc11e0647 GIT binary patch literal 19288 zcmeHPPi$1j8J}H@@h&zo4iE|+dD3q?Z|3{n%)I%xPM;eaf4b+ssfX8I|Iv4zc=_nlowZ+tgb?SxEyOnX z$KZYr_b$Mf!a~$qgm`eP5Zy?hOHWMZk!BM4#n#WSg?>;|dFRr}B(c445-tYU4c87w zI#tY7Y{xFRGB(#Er)DxUGP9h`TNOEOudEhJ2qY8nq?pc}Jl%piM3AQq?n5|DTl~N_ zRQN-LS$`67hC_IK2p`o~M4Vxb>-_ZTv>d3ah#12fhx&>rn_(@d)q|A`hKc{($5b3) zR8iIG-#$)VC`bGA6X(XyoS93D%-Qp2t%_@{O{?&9*>SVwoQ2q>GqA;b$U|Ao_coj+ zt;>A?h*LI+IK!bG9&Xx#c(}vEwQicfWxI!Kx%8QL8w#d;(?(1q{u}rt$|Xh~*2mOs z_Dp7ae)`O5ap}^f%+$oWPr*Ek92dd&T$>1;N7hPbCt^Y{+=VdZ=`ib{d02)Hvnr0v#cekL^&*r`Ili5@}P}J`-LaJ74>DA z;ZZ!qD4%qS4#ON*!NJC>zSmpO}9GQ8Y6pmnmqXs=f@9Sl3%2)|K`7qLi6UkBLchj2iD7 zfAmp#Dl;h$#}kQ;=)QD@g}@-R$v5EMW*qc&&kLS+fdwvK3+P_9z%bhIXZNxJ?s47u z&6IFzZVR90fTzBRObh7lw!rO}OWfTSy1TV|Bc2Q$djI|c=b_ube>!<_|Laq49mu!5 zp5D4oYtA$}lRkK2pb;{YgYYJ?z!8bX`1%6;X!PRIXf*1$m1@pKl3Jyosk*CGH~PJ3 zq*N?h*@`Tb?5vxTOP0MdZkOzeJRltAzsg zaWXlpY)zL7HUw3yrK00nmDpmUheq>+t)=AIqV>XT#eNPvtJ&Q1cA?-{ZY-CGul3Z+ z^w}C%QVlFkqzpH(OqVaPyaqwZ{sy+0kGBZt$6@i8&qCsN&j|6>G}e0ugg8(Qi`kb$ zV)=H4=QleFldnzv$sjXiz3?00n4W(TCv^vw>gQe~4~?IqlxEBi8=^5qCY8W=3 zbgas}Ju~%8!}!|YIGBTF-X?b=W8;uMRxFhk?QA7qEH5<~xceK&_gQ>FPTQ50Y^e$N zK;tm~WSL)_8}o0_4?R0?oyB)iec8=VRceEJGHtE8%gq^+hQa#fGh^yAIa6FIx=w>7 zQf6KI)kkvGuDJf_vZ3_;_>1)~rJTy5Q|HT;bDh8eRkoVQMAgWW!dF$EwA@pcvwSM+ zR*GveSuE@6jT-c%yx{xln_aQoYNaftTgjH4Rok&*{-g(zbWp~Uy)xnb@9EW(q8Jb# z-w68nbs+Jco*s#L*F{Xdq8IF9UV6jUscf-)!F#?1ZKXYLdQx*(c){uw;xM9vd1z zF*GqaF_3(0>~MNKJ)B5Q3?@^<17pd-p~P4`=h*S(l2Z~Q+fb&f%3M`tR_bLs>fGE} z$g|8AtMV7g^US=@o)d%i*x&Lp8Pz|sC z_dQR|y!Gl|d8~g+M1GzRYM+^_a4|T_UYJ_>WgO?`On3b>cmaJyEWk7CF>!2XCtpw~ ziucqm{xPQg|Mdoo5J$ww&JcU_WGTDkh{W1(VmOgV3PSVQ%97=Z3(on$^9hAal-ITF6ccNuuX!1o$>%D^8qaGuR+ zInuyK4ZPdH(*_K2A(qTRRbS3@EUNw7hd?W65a+_aCjKXLPYNkhK*zPb(Ed|xpG zH`@u!RoB;SC%X*Xd@s0zQ|HGuoqBr%T*sTWXV$-2dnRtSXWm>}!3vy}R~Cn~2PJltQ)3tq%dtbkyG25{vBFa!hl;&|z^J@3&Qa z3NfrVyL4yh$jjA_4!$%0=R@s3+jjAl;-C;$flI%?hrq?VQlvd_yAZw%|0yAAzArxZ z?)%~cKkobDpMKo; zq4xo}2XE+8$N%Twf1o$piy}WTj0j)T7a?PVA9s^NUHq1Fd}UvbioLseKFIp+5N(~? zfIR@sTK)3BNV!4YuZ9J-{~;M-J7VLC@V%k|L~#p%?dsY!?{v5uVY)WBUO3Vov48g{ zd~&o4Z~s>O>*|$Xt_$B{Av2{0>Kp|Cc1VG1xe*mU- zhQt-EGi}r9>6~KTpZYp)QF-g9VyeEQidXNWtn0l?5W8OYy$au`e|H`8Y(SX_gR z>!5Y6Ti@4@cWPS<{doEIqd#E)Gcd3ObPrh|*z@*wh=V=vNU-P4YYuTeRUq6Bu*tb9oV#F&i^>~*$Yj!H_ZR2ARXs_TqBb9h!B@(SQX%R z9%>Q6!zyuwSU{V{0_lNtW-2{bUw1dFxfJ5r;QcqV%;v{<-+N!A?+W{N8`geU4Jdaz zG?TYONFXDyKwyC{%>rHGo9gW4C6o}VpU8N{>9OHUD?AW<$1QNPt)Jli-|^S;rB~o) zzyEj>rT5Jg%g^&-yXY%tS1d>LIh9=Bvc*4RuvoHl&wD@tf6c(@y90MQI4^C5+D!8LEWiet!*4 z6Bm77(-GgN?Ma^^AhA|pSW_4$!fNpV;8~<=UY)KE^~-kI0&wWJ@hdvLxva2yuav@i zQwI4sZzXArKF_RlX?NmUlfGA_^wCP`O0t62uC=QQdts*B5#snS;XZ>Kh8VLc8v)w!Z$G?BT zKFG5c_D}w81j^*!&|qD3-=$o(GyVu|KOBCNf>YIiZnp*G?G_lw3oH;=VAEJ&dM16E r<2X>vV&Fv7in`=p)fQsFc4qOFOu`WIfwKW literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.7B6CA6E5E319B7DCD804E51483B1560B.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.7B6CA6E5E319B7DCD804E51483B1560B.cso.pdb new file mode 100644 index 00000000..c4b1a7ee --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.7B6CA6E5E319B7DCD804E51483B1560B.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0bc763f5fca6c1f81e0d6574e5f1917088432de06a52c970c2756ca0c56f33c +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.8041C676881D61780106102C13F8133C.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.8041C676881D61780106102C13F8133C.cso new file mode 100644 index 0000000000000000000000000000000000000000..cbfbcbf54e093537263ca36c879f373d5f9d506b GIT binary patch literal 19116 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 RR~WHJlcRR5T390Ie*qioJ;(q6 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.8041C676881D61780106102C13F8133C.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.8041C676881D61780106102C13F8133C.cso.pdb new file mode 100644 index 00000000..36d2b2b0 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.8041C676881D61780106102C13F8133C.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55e12468e97d8d1332ad447dff066adeba995e16ce587b34174e84cd7d36b30f +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.96BCBFB5543D4357E250741BD758D684.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.96BCBFB5543D4357E250741BD758D684.cso new file mode 100644 index 0000000000000000000000000000000000000000..eb5d4a9071b57b1b26415e1558ad2a4ba1ba3c4e GIT binary patch literal 19104 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 MqlrkhkOSxc0L=Y9tN;K2 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.96BCBFB5543D4357E250741BD758D684.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.96BCBFB5543D4357E250741BD758D684.cso.pdb new file mode 100644 index 00000000..817c0347 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.96BCBFB5543D4357E250741BD758D684.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7758ecd29d2818f0134677c0ffd7ce1ad930e15c3aaaccc5731e1d4c776e8e25 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso new file mode 100644 index 0000000000000000000000000000000000000000..8412a99626c33a58eb48377531595f44b426e067 GIT binary patch literal 19096 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 F{4XH8R_6c! literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso.pdb new file mode 100644 index 00000000..bca8047e --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.AAE2DCCA9E4429BEDF7F5C12A4918FBE.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:529bd9e88fff6b020e64d3ab9331d0817b09efc3cb94f00b4c34a35ada4439e0 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B7B90948D23B69401E4275BBBA5F6021.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B7B90948D23B69401E4275BBBA5F6021.cso new file mode 100644 index 0000000000000000000000000000000000000000..fe85bd07f81dbc53142aa6bd13d4f96816c11f3a GIT binary patch literal 19072 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B7B90948D23B69401E4275BBBA5F6021.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B7B90948D23B69401E4275BBBA5F6021.cso.pdb new file mode 100644 index 00000000..c3854642 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B7B90948D23B69401E4275BBBA5F6021.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7503ad51c94ecdd8e8e3e919397d3660fdee2127919ae63e39049d26e5aae10c +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B959A091D6A562E3BB2A4A86D8938E3B.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B959A091D6A562E3BB2A4A86D8938E3B.cso new file mode 100644 index 0000000000000000000000000000000000000000..75f968c5cc9773832e5b374cd990d3648eb5b667 GIT binary patch literal 19116 zcmeHPU2GiH6~1dHj=iyi9g<)|C|5L<)*-BC*N$TcOdMxz$H+;xUMHf+mD!(JdttL< z&CCWvi?kH_6SWU1LKRZ`fLb1q0u@w!D1B-l+DcWakjhIDPyG`@RcS(1RVqsQeRt-r z$D2(^r9>gg9Oulv_uO;OJ?GrH|FcOwGJf#RKfHM=ams$Z`-N@pj;X&-MT8KqJuJiq zgbxB=1wIer&K4owZ53j9oe(R?pG{3n7LXSN@{9H7FGQZLsj{=FM1r(lpajN%JAs`* z!r@Zhwj8VI%Ghk5JT#M;k(s4z!L;Q;>%?-Yj7Y+WC&YAS>d3p`r%vs_H-H+Tl7bD$ zB%S&bNN2ni5z?W)0@4|eAd_@mUhxL#FjE2Z87Kc+9!az@4P5Vszw+tSjdYzqH}S~9 zqeo{`B6EDISSieLK(_p`5I7z*6lVBYCy^+kj{8399csc zw2kz28$G%%uld{Iqf^KysPYI|mhywTrjKT(=cbPy5ogYv$sC$^D)N z3#i)e?nX)o#*>Is9^;!4r%WAZ-8xP`n&3Gny|Roa5ocM(#{==N`SC@VLw?m};9G*q zjN_e(CWR-b4Rum>%NQPFj8CG1y)f?__*lpB^&WrA7_({*1#mxUZ~ty)R3q~CqimXV!AFZpo?y_>#@|rk#vgHuJ7o2yhO7)7Q$|sHZKbD<@fBgP=sRIa?EfiJ=D8V~%OhSu=+oZIGF4Gyp7f z7P%W48_gImm1jO^71ie=qV4ro@yAah;@6J~@$5IS=et{o-*0Xa>90q`d-q`n=xudx zkheNi^GZG7xOO$~%8Y*|R#~pP^*%Eo16?mTD)_@elc7N6$V>G9YN_JNiApwCZrqb_cUgZBbI$4TW-QV&^XK=t8m7-H2<2hUS>)K^El>3H5~`1s=+lwy-b;%a-l>oqJ8~$@tUtnNl9gRtjdJVmcQI z98h(0dX7fDnH;mKoHE_Rrn7W7>)NH2m@HM+3_4PtoaW#orJA#C)2-SSDP22Tah5H| zjCpI2K}gb38B6SzhWD>;x1TR#p!oE)M4x^Uk@UX4J_&W7p~fezQbBrS&EagRa!E~h zOKCx0f8_KA6Ih`m$_zghZ&=8T%DT3m)p0%0!Ww#5m*cWbHN>dzo;Xu<>>8H(cw1-F z6x9YDrJ{`a73tx3bW|GEzG%l9IjX8%$cYylln9K>^*UB*4b0v`a^NJJk3`()!z-#4URyYMapB}17F>P$JK6tl&x~;p@nE{-g6BaU(a$3$FwF=8M&G`F`8XRZHc<{G4T# zo%yu2Y!>EcO~#X~)qxNFE=$Pv&M{1`xj&)?ZYHzm2I<~bwsPl~$aRfeY6aRt;+QQen zJMzolm=jNZ>z$9k`(a-t^4I%FB{Inlp+`k*RG_EOog}-|h=TtfJ?GURQMAk!j6T#z9QMZXc>Go_IWZ9>Eo7Sna^(z#iZR!?!|GsKhucEEBZ47dEDEh^= zP`0+E?loU;-p~7=(ILjRS#ua6Hi-yM@X ze>2bA_%wd+yS=0TEc#Qev+V%x=L=beV_F00a4&*P{q; z#;I5p6NLMJ9zUz|o6Evol`0si|4xm3T(=Tviw=43sB60(pEc?4s+2w2D6Je7y>OvZ zDeT3Wb6tSrzXW~)q#wTtUDJpYPNK8a5c2z-SJ2T6#JT^E0VR0(ZfpUvdGT`rbx+N{ z_c`DlK=QKxk!LHA?@kwxeUQJ2XaB^1kAQm$@BclZE^Oc1fjo!cd$t|Od;YtCAzXbA z+;jCsh7v;$gdPYz5PIMS@WAv;>Imm?ei@N38o42}m>k}-w`k-?%$zZlOYR*R8BXR4 N<_La|xLnAQ^M4KeP!IqB literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B959A091D6A562E3BB2A4A86D8938E3B.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B959A091D6A562E3BB2A4A86D8938E3B.cso.pdb new file mode 100644 index 00000000..9954a41e --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.B959A091D6A562E3BB2A4A86D8938E3B.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b5f436198323feef33ad9addb7b503c94c14bae7d5750bd07e90571977154e1 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C631C6F1C848D8407BB4550427BFAFE5.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C631C6F1C848D8407BB4550427BFAFE5.cso new file mode 100644 index 0000000000000000000000000000000000000000..31806c2c408996271b43b4bee823451b76df9513 GIT binary patch literal 19104 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C631C6F1C848D8407BB4550427BFAFE5.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C631C6F1C848D8407BB4550427BFAFE5.cso.pdb new file mode 100644 index 00000000..c40975a1 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C631C6F1C848D8407BB4550427BFAFE5.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cff586646a54d8e28e3c10d7238f22dd7cc153a1572ccf5081b574ab36d3aed8 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C7D9E2F6ACF45D7DCA8F8EB92111BCBC.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.C7D9E2F6ACF45D7DCA8F8EB92111BCBC.cso new file mode 100644 index 0000000000000000000000000000000000000000..606a2d1399f379dd23e3b221b6d1b46d23091b1e GIT binary patch literal 19072 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 Jn41IV{{Zyeg9`uv literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F0F89BC5650EEE995AA9D7357378D280.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F0F89BC5650EEE995AA9D7357378D280.cso.pdb new file mode 100644 index 00000000..8cc01ab2 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F0F89BC5650EEE995AA9D7357378D280.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2daf30f176f6226781ec9791e47fb32b2ce9761d029824f048875b06772d36c +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso new file mode 100644 index 0000000000000000000000000000000000000000..97800ed523bbe7bda703af32c30913a420df1d19 GIT binary patch literal 16852 zcmeHOUu;xa89&qVryUC0vIQ!zdO|R^OPSu8X`#TfTiR)%NrBl;A&6b;bmmSw%XIE| z?;W#-K*hC);FOp46eA>iB1c^@s{Qb_oXL>sf zup}T0oe#dAbAIPL-}%mW@A-cxabj?2^1`JL&TjhBKi}(({`A<-KKgb@2yx|r5UUZs z1b!b}0C*F8t3imfjY6D9{&-?|B#XQtQC_UPeJAwxf+{dU z6%l8=5fS1rT@i7{L&zkq%PUzQe-9yv^$}m;hnEnNXan(;emF6FV(946@q|bnpE_>Z zt~o!d;-f{!O&2pJQWuY+4GWN`E|#AKYtlA62Y@(rlZZ3k2!|05wn5poMu@KiCn-6E zl%bxWP06FF(TUNcN5sX87gL9ZPf$3CKLe0^y-9?oP=(#vij)wH#}KDJ#@8cGojOjN zOyD=9C(n2camq73=*MT!RLZa{^LC-xx=h0W0I~2&kay#?(0W#(PS!Kx+tDz9L={2b zN?ljjw~?6b*EzD@vya$!v>gMUl9yppYU04eyGZgGYvOYW677B%((lQ`l&K|~N+t#c zj9ly=Lp?(~cF4o25xF~J7;D3u6DbyibLrnNfPcX>=<{As|N9Jh;KMt0TFxHm#{jvU z+rQk~&h>=^t92DZ`U8QQvzS+>XWIjMUHELbvfjFTdEnhhG_>>2&*!)f{mSKE{wn(O z(%^4i`>pxA(Q7}_WtdmJPW|}Rcr~QO>)})6fkM7$rfr!kSZOyVXH07@m4DNed!^po zMfZi9gF;GX+;Y=y-YN#dZo8NOxTf7XZFGgdsg=z`UEX{nX#I@}jnx*bp)k6uO7xgx+7s5;p_5fQW7Q3S$b?1dYQgGe4CV`kX)A4K z^TnAO#>T4Kl!VugSoU1HaJTf>Cyk=~-H^x~YZQOG6%v0sDa1Q}$DZ#6A^x(yK_tHy z5?6O%2k32epQ1OrZtAD;faBWbj4MmBTI;M}8%p@P?J}($*X;yMA+m16Z#b z!G^4Y#g3+pV6%c!^|7#5F1N8T6R#fTj}H;k0Y#=R0M-xMZx5^7JUj3@O!|ZJTb{E=uXz>7rAz z9JA9~S@c4aj>^txw=}%}UEO}Z>;&TDOFTeSGJmCyPskHhJF@t&4; zOKHJgf57vG2(&^+R5Sckq-r6vUskO3S{>2jBU(cb>vEN4)PCPR5k3|=c8N%3n5>9t zL_LG%d`@=y73ooP|9)wdyTZ*&^r&b4B61?RDkHp6E?{>wLcaz7z;5M0<-a+4uKE#s zCUnj1=Kt@3+t+Si<3{dPUdA2RJDDpN3Oj9cx|}a$ zCnqec;7lg1l9`6j5H^zcD10!JT00zA&2j>ntw7DChcl2~n~ zhgC2De(;tq!0t!1zX5&->X#^>@u2?g0epL)UiN7%-xI~>L>Am52Qcf0|a{hr(eHo&BfV#|gBgp_Cz zYP%R0|G9Bp<6H|gd3cQYxA2+I+6|Ca@15Q^iR;8dz*+=%Fc^KCe9m3xR zi5sdMv8^I-Y81ews2mPuS^qY%as$7^X;Aee0@^Nu$6lghJKNss+1|^tU-fNYp~`aA zsrFSu+ukblhHugS4uvgk1IufBD<1G|W1TAlwsmXU{Ly`#2;npq{)P<4{jlhuH&s7h zCz@KDfNjDkusWav*$&F%ew2R zP#|JVEE`|77{rT7O%+rtYd%w-iJ=fW{o3Oy-P(^+eBp-#6 zx{kUB>K=G(9#}8FsLo#BK@FkGiL6(h9vdE8<#okR+ynR9`q!WT6MsC9-GKXj|9c*_ z_l)I>r}%}Y=qaY>Oh@!McBW_6Gt56(S@9pD(UCAb^B0M^7!-{*9~ z4=d|ML?reK!R!XyP;KQwC5T(!imXC}H{%qoqKWj*%aQAq{F=IOzNyNED!)^qLatj$ zY>N(g|DkJp5}!5b?%n}#Hi3B#u^C+bt^umkBlG}1^RCk}_Q2>^;t2aOZ^Nc{8+*)My>X*A9nToM`*1f9 V?@Q<6#&kN~o8A+Rl(N&5{2vFRlPdrK literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso.pdb new file mode 100644 index 00000000..93e1b17c --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.F2AC0D1822C5C821BF888C0AB7491E5E.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad5c372fbd871ff03fcbce3409180b78123e9c6d43c8134fe6fab8adc8d456a2 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FA071B919FA56A0FB70F4ED2F802D474.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FA071B919FA56A0FB70F4ED2F802D474.cso new file mode 100644 index 0000000000000000000000000000000000000000..5a4c57fb5e208062d6dd60c2033257abeaaf8c2e GIT binary patch literal 16852 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FEE5E6A661D8F4453A0120A78702157A.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FEE5E6A661D8F4453A0120A78702157A.cso.pdb new file mode 100644 index 00000000..d78bdc22 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom_GPU.vert.FEE5E6A661D8F4453A0120A78702157A.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f82fef6707092e656398e7611acf05574ae6e9060d9f3dd8f6837a128c9c7e21 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0323DA1D4D66DFFC422FD195212F40AC.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleVertexBB.vert.0323DA1D4D66DFFC422FD195212F40AC.cso new file mode 100644 index 0000000000000000000000000000000000000000..eb8241f6010123d11e5160cfe1bf818966f7f84d GIT binary patch literal 40848 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

8^ofI}a!dvShQV-{WGVzf8QATaq_ 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%0A-(#7Y>LDhEw#zR zsySrd*sR=nVi@=gIkqTJn#h zF_Qy>2#;8&h%x}443Uo!8AjLb>#1*Xm#Ay!6^JjNc@B$1pB?^t)yV2+ZJLV|6y)GN zKpZ#>FK{}L5dZ}>6^y|0;5sj(ONt-`qcgSXzem+lLs=)#MgHc-OFFjzgR}PLKI9hs;z?hQ)d7p)A%=LUFn^bQVq^lo^ntU5t;9_Fd z#TLP<+aj*rTB@!Y`8>}tnrTQgN`gpc5Lj9|C<{Ymg;i`Ml#m%|TQFpnVP+e4LQu$} zH8^ds8tTKd&5pGbOMn;0Shem>V-z<)g8N7+0U}B9ru!&%nZO%4{h)$d{3N+AABeM5 z=aRGB+S5!lxr$)%H19RQndpm!lWPMrT^xdK z4ho>-@LCoj%F{vvucP*Qt|#%Xmur>*!&=9ElHd^!kVxFr)5W%!CZyPNJOvDB{0)No z?l+blMpvS?rz$dTq^-#8a=#D*(QTV(3Gs5GV9YWeGrna@(=tk;oWSgdWQXps1J96y z(|~IPk_-W{0!oqs1)yDytIR?>ySv1}b9KP&AUTVa#&=ideGWUUq1ZXNnKVR*5Ss|UqoCHWiBL9n+=|1iH*h9#aumX{7znP{sjg!e_P_k3F z9mHzZG)epcno-vNc8Pta1p}k4_V3m4I`42DS|}^WYZv7vgg4NIxA|reL5es}*v1>o zb-VzBYfZKw5qYcvcV96PE|oXGn|sK@Pj`PxpSj*|iPE$8b5H;B2!XJ@k5v3Tm*+>r z;7<)yV*6s-``iVbt0g2(V~5*o{cc0IYs?$}b@71;9G=?NZp7j(O_FR7Zgl;fYaq{e za|#ga3>ivXzD)~lM*J&J?eHZ#l*BQLq(IOhSSNG_@s>qWFhLhTe&Ngf9~bX7tBdQg z&Bo|!C4YPkz}ErDBDlr2QX(Ky1j{w#SHG4i^_F>29=;9;Hde%Hnll1czRJz>yWhjg z^ISVZv?MV{}H2+(lc){@tCp#Z<}b-pF60bOz&1 zhs8+2h}`@m4jWhoK={}L-B=I0g*=xgIT;?A26K-R=G7cEPKK~FYZWc*9b3Qh!%mR_ zVhEzewx=r%r296`Z}|)jZ*k7*a=bq;sa)n;uO4z%%ei7v9&Bjd>|lm0thOmDkEApw zqWIW+6fCz&Otg;C8K%jIUd=0t?f3V>GxyheP1QzQ$tg@4P*bt@XfjpX!P zO9feKAzE^g*0B{qXCU@ue^dKC%`W*2*WzKXQ`dQ(U?0{0V}>C)wut!*qaA2LjgBl{ zajRqTADAR#1|`+Jy;#tGK?tRA-eu19{dnmVy%YntzG4TY$zc4c6P9fre0|f?Jf(;N zK=UK@HP;CA(#28oWDwU)A|UC>;P`7|a)p@}qk$T2_nQp~tq>L+u_(Aqr&@32;M+p1 z-+gr|G5&M^+TS0FsoiR}{H(u6zqf?z|Lw}lE&KG&SKs*lPDqc0`$&NX-{#xB>-3oc zJPy$Q4|n!nuaPq`N3DD3kt{pI-bScCA&~!+li+@Wmu0l4_zdmccFB0rTUjsi~>zo_;k2s8S`Ukbp(M z=0MhMoNk$U_cGo{kpE4Yp2O2jCgw4ijaNJe^a3vsr*%On=1O@Nq#jVt=`7ub13HQU zcG||Y5%l}ryFER8=-Z7hwM|#${?*9$*)FsGl|5(bpJ8Ut!dfOQ`>>TEH$o%(-l(Zl zCEUf$@y5TKtO=KNYUhvX57+)6AbwR9S~*D%9O?jte?iQ~iyr(zqu}HD@yQwkc-^W0 zSz6M{>yaL^@aj)ee*gBBj6~%R?Rw>>3&j-Xc31YYClb^GgF1iYqf6f``l^IA2{<=c z*ni*bfpYTvoR8s0^+Z|$m% z;LVSUL)OXRT+}q3iWS96?%e~$1m*~6-|_zIlj~P1ZqE~K9|2F2@b_-d>|-`XiZ*?X zzNx>-rvuy4FH-H3!t54#CHftwO<)E|g~!anENM9vKWli&4WFX>vXlv7Wx<_XX~#%v zx#X@~N2Lb|=z;o&J=z}T17iffb(9N&fyAXxDD06Jp~-4CO)K6H(u~aq;B(gf^5)`^ zPZ5&(uId+A3iZeVdIMUI{x=tWtyKxN(-nN z8d3N-uxD21IRJ@*%mt!_HjXq0Y%T74Z%^*JNyJeHpPG=qEZ%QHKe#h-Snk5m&5io4 zmpnLLIPKTQSmd{e8`8fBTUxUdWeVLkKV;7j)dF#s{d##4smptaco-xT?~nQzcTq0-rR!su@Y z9A$ftvW3T|zUg-MRDKXoh2~0u7=_I2G>1r*#!L*|xhh_9<>lq0ep2@z?g_oBl_sj0 zX2VNFBk~TyPiv`eT)n#=0tB5!TfwY(0(p5E_n_8+bXzT#8~;f41SLtjQ{AeRJyunq zThN5@>2%?nL97UMmiS$R_w~d_(=ZmH)6fD}7V8Y(>crJpfo=NePDO_n9Ems#CRK*X za{5K)yxHJ(j}V$vxrC3YT=*1;-vCVzM&d@Z!}F)7@z1SqdEyupWD#V6-B+n6YRNYe zH@JV@F!ii?@fqVJh7=#!RLij%#{ORZ{V(}K=1pTOuHh6A*#`OTXgXQOkwTeUzSw)( z(mf27r>&qB_<}8#^gfj%^gU?gUR&ozK<5Fm0@yVkrRNn<+Pd4O14|owdr?{CT-nUD zj5UU)W!6f5*vm6MjA6Ocfo*&RapuX&Prb|eoprt$hkb+bRJ?hbL~`FPzygg8Qdr#@BL*E$GG#BfgDWXZYaq8p&Pypgz#XtfK^rRn{{ecxhP38iEJA^#W zk1ngtZWZqSe3gghN-K%3@G)2Vh;O6OPy95>cuGf>yn8mTqZMDl>LOd*SxL5DcjIdX zfr7r&JQo#QZP{@UWg22Ya^)1s??VNc34-A!2A!*KBFTxeow0y7i(m*g8wKzB>9W5c zw_lV|Xk_agZe>mF@+(6$|3DIKUqLXTlVg6l#-)skFM|b0aH;VUqaO(^a@q6pvh69j z)T`_#q@J0?{2)P15ISx5AXHwMd=*8ceULQkQDFXF*9AI}CYt{WNtWm{Hi(N`qyTmc z?GxQ|kV6pM(_V|y&f7GMWY214z&#eOu67_&WD}c`52RR}WwJ;4Yb2hHc#4!am}121 z!!e&nyep6@UbAHC4&SmW1z*kA%>E3PQ_S@Vw>wl?Ts^#6q=9#T@Mzzvc*c|P8?BbP1vw5~y@dX*GY{JQ=Ba`|QntSnT}6~|mb|ER zCyL=Zqr3Kj{+ii~Z>zS8{5-SzF$>?41qHwMR9-V=L(ZA2{=Ht9xPEt8?bMIi9F=(X zQ^2Yu7P&l`A#Dz4vWSJODHpcRxh(ih2KSc*YG3%%JC9a|dabm~9%+MDm`FS5A;1eI zKS99{Lvu48J&=-`HgR<5w2@b!@4hK)>Y9+_ue-!cgE<@6Lhv&*+W2I3E`~!a8KqpQ z>$7zF?A1AmRLJXQ{kIjlB9uPo>W*xXjB3t#oX787gCric3m7a4zoh)*x{^?K=1pJa zcWUX4Gm=?LI}614_==2E)B=o7$*u?e|4JGY9h3# zdD~oAsxIKz1aqgSZIa=%vKE;>tx*m0=?<!QX5>cpj=dOeGP2dgIik!9Ik)CAe zRmzGe#+P<8HPFbOWPjKh*N)%3Fy9m*tpt2~JrGh0pm-&jGAfkun8fS}fwj+D9UT(n zQZRJ5g=KwykwpB#YY;%em%4L5G;b-TQVLM_bn32K13$!6RVc+O{xLlCSH5}eb#t>K z@O1SAuW5BX8bvh7}}(M*r*Ty+uY!3 z%k~ks*fSZ8-?Z&JM(g(3!r9Tb)^l(WxM`#E){Z)T6UNx!t?Z2Jn)i^Wz#%44j7l+X z@M{vVlu0#1@%?H4VVv-%n{ADvtfKM?1_L+MCuIVdj}Q!5N807gaTWH~zE#s)*l7xJ z2>ot3kq!X=1p1K#yH+E+qu-ID_Ka<=KQphdo15s0k19Eb<&O9>z1_JhUl01 z@^P0TX-`a0E(wp)Kma|44DpovUs~L|uu%Yb4P6e`^CmAcc(`u0X0u;u9(cC_vx|%- zh=#;PaE&d91E<1}Lf)M5jdhibUFK)Jt-wZM{75ZO1Fx1b#*3rzHVK) zCPvyoYQeX{Hnkg}aXK!b*+t+VEO^l&*_$`F@|bjw=8pcB?>h_(O1bc1eCbx-*Bzlu zQ0=YP+!mi}Ju)XfH-}dO6*LS;(lpR(ZO=vrs(wls>0;_vd2)CO-PedWjI`y=La-P9 zwiiPcLX-V|y0)pKZG_J7&_imI3j!%IS&XzzKP{1O0D(15mRHS1RX5U!m{$@sDMn|_ zzH#r?9H9^j-=)vqPlt#rpx}96TK(@X$jE<~b8ygmF1qHIg^8LLLPZwDr|GTcL}fA_b5X&{z$bn+B}@ciQ^7 z4su~q667h)h0E3Z=9PsKP04wf#Jtp(;AD$wxeZVum+ic1o$@6_AycLfe`_?ol3dN7 zDiGdLO7*L=eHs}S9l8H;e5>hIrX?$JF^a>XJO^#<)m4dsf~aQo)6sN;VB0fpG%YGa zab#G!e5VgAsmZt(fxqS*%Gh@aX`<&>J&r3z<|Z?pEp>_pg(UdBm0xGfD`j@&Uir<> zX)m>Ey2+wjq(ht{%Dm3I5G8w&w{9tFTbOIF`)`0KN{<~h?mlUhXU2Dz0zRF^GlNkg zdG)~m8Zq+jV*p@c23zalm2S$u=na%E$eLEt$y_=vh|Y9Ug23nR0~)vsrJqG&5ueH$ z&dpZy-ENg1n$fj0_pdO1m)izM*Zw6S#~yfTI-WLY_SpvwfoK3(nW<{=Snr`>Yh7s{ z)IK@<+n3FX!%%s6;;c`V6W|?S@16PT8YdodhZHiYW&P_;s5nyKv^hN|80u_G;+` zziQ{abRFJdOtE{Z4re0Idqm>(RB`hNd;D_+gg3A=PsQ=^l!*8OV!LR99Xj)Q+k4Vx zv`d6-5$Epex-(+R7NMFDe66gQISKH5a($xrICZGpP%IAa%WbNIX2hi!-ZFCgOK75h zdfhJcrr`~IwgE4^s$%51!Er02C-$mk7fMtOvuO|#v+gH-*Tth)i5LO~lQVghMM z1>LlgrFUT8(cd@=KUuny4mJmz#>Z&8bq9eTFBT9dRrBCOgEoWq>a)&`Icied1;+z- z!G^k|xM7j@@FR7FpXj>gA&%7cY|SaTTd2>RHjMPhgYO0pi`Xu660cIc5fVH4YTho- zhr+HAL_M<}kxLJKT?E6N)UsB$Z`XPe0ua|BIkO^{EGd8GWH~o)_mKPRI`gMfHaD#s zs}?TQPnt7tkFG4Q?C%}#q2$J|vKt_OnaqB=y$k>fIE;3mo)Y>->FMM##T{VM$*LV6 zel+$8`Lp5hvmq{>L#D=V!#$_2;`H)@{-Op4#p;mKMIc%6^dl)XGG4)Y-Q4kB#6NdK zLF$=&I#y!b$7l_@~9{H`3kA;Nh7G&4qd z#aN(ZBScbCfe#xpA-Bo?u~Xs%(TU0&q)2z*}j)Td;F=^Q&3K_}LC$^PfR8NL3y>6MoujB*Ghj2cexvv=@} ze-H^0K{`RIECp;J9;iE6EbRdjDB23deuy6X> zZz&1%^pg;5)X6-))cc!3lfoRysFUm5s0`Z+oXKsqL8wB}h^Sa(8W~?r^q?wr6~GhC z-HKk@Wu@%C`Gi$mS30mfq!EKdp)No zZ91};pCX!|S|p3RI~^BlxiQ;!qARRbX9(k9gUTilus(;Zp50s`#hn;QL2R$n{?P2| zWuS;3!T`PCFf`DXDd>r{gnVr~UOHJZH7xobj?$}L^#g`A63&K>oj9!es|iy_ zF)LB-vj72_4lM#G29PF3niz)Fv~2BjP_{J6cm|tbR!9VdD8y8&JsK z(Db0?=7shATT+r95LK%~py>mQe~xFrT| zi`5UrVwuvWj`DvwX2NsUpXe4v6t7Hs+1?!?ZXxg74H@d!hq1|Yd=RA{atuc7gXXEr zo>H`4B}n%dei=Iovgkj3(ZiM<{Xp}0As+sQy5$+pDJhi_0F*opqbhsc@{Nt301E}b zVkIeP5B^ygkn(jUExBz~agXwhf%~qOGd?)_OFG`Wb&IOQJOGkaS7mqzd z*?1zclu$V(_i%q&zYCQjy0|YQy;|oItw$~rb2XPW%Q~0 zf>?b$w?pW4gCYUnjG;zBH&s%C(QZgZ9w0Tc!fCId4vL~6u@5)kOS>mjr?qCG*)G?_I5 zLWPNTjbHNNx}O!z0$8UFGvZ&Aoq$1UvHS z7sVt<`cuxIc21{=w>;hlxQN4!VFuFrz{0~U!ocB~K!_A!qSH_awwI=$j;YDccN10p zLVHlw8nN-&aJVL9!LVx*T=TcFt+SLrFQCq)@!`W3m%c9f6S>YYfj$Q6nqn)XB;A!> zu4@}m2!|>=XGPuVb1|erK;Xz&(r6_kuw>=V7@-@DwTQ81bnrDRhE3Q4ZFZSm*)c6q z7R4VlF+rea;kbGc<^u+{34c@~<1y-u>=;7ojw=Qq%I_%aM+aWo=OmUoAck;Mf_A7W zYaLa?WN;l>6WvsB_-$y}@d>68W<=>p{Qor3;6&80{}|@&)uU74NudrHm)a?SoK5Wa zg7fe2#iH$}4_<5pd#vqkPXod1(FC`LHv*%F81g4Bd6_B{s_70kv0KP4=w!lo&o;<> zyT#U4#UTgPH3T|>O#Eg=w4bGkFa_wTUquFe(~~PSh_0xV>feGC zW#wq7ydC=&zkBE7pzPGgfM2T?tGdDE7Y~4GD|Ril`L7TmvS_J%?}Bjs2JTN;R^RrV z%v?8mSz6OLxJlMkVHoh7uL&igVS*`0Gu0;uxxU=_Io^TVr#+lz`jT0B19yZzcxEtV zmCML%B1q9z$rO+`6u{#o44rXDk{7FE;$ds^k3biij|R7xL6{YHUhUJSI6lyHNopp|>$_W& z>TX!|crV%paGTteq1fDi@aP&@X)RB+PFf^YdGV1D+>(PlisKm8f)e6QMClsq)G7=A z`{1$(o(yE1l50pp0%XnIznt}q?Y>;KP|7<#R0pU&HJBx*;==UAI4g0MFjSbWZ>Fue zXnd_66xcE})Z5>FjN{MKB7&XG!1W8YTSv;_bHTwEbe~%pK=$s@v#;>U%9v!}X4QUn zZkEDQ4T2U8`C6is3(&}Cl~dPn3&B&fic-hrIL!tf^G$o$=A!>m<2%{STwnSzG$}z0 z6K4%+`iCIG@2$6<*BNxbO}Sne7Fjw(rTbh~PDf+yhL0;PHS4u=K{=G`FwStl$b{6Um`m+&bHo@iBN6QIu%vz&o`eW4$9Bgh>wbJ(hS zSbJlS=`Y}_>cBCy$sQh__^qK~vrDd>K`CGE#x`ZQF(hsvUQ+87`h?6PX^XQq_oGD| z_YY44EuW(OF# zwX%OLs>id#>E5ru1Fyz9Xq^_TCI+eew>J@IH#p1k!e>~_Ap>F(PK8GDZR^5tO*%vN zO!&waQ60*}mP`-=>V_$K3j^X zq{NVz2BPHa)h}zFoAh{+uj8DR23&Y|)nuIFfFz-V1|&Q>_mv(Y+cnh_R$J?g*(!4B z{|fuw4LMr!Ue|8FKdi_N7=Hd4Hrv?fKJh$c^RD$W+?0DyU#3#PNEK#TN!S{YeeIJV zfpCy{55(}t3UEV_7^$<&>^~~)dle9L*vea)7{gCy9pI1b^JY)IKdMW!Y3x8zV7=3BgpK{cGhK1ua%OCJG4x%RAbP z15^$Axh2y$eAD?mYsyf&S*T1bVMzP|c@XslB7OO7R6~hle&Xz=$uX+Ir@bk)F#8kF zS%g{?v-69qe*gd=7JdhFxP!mJ64n2y?tOHoA6Ga;QbCdplL<0%LE!ntqE{CI7{QlduX4z0?)v)Ht2tvPd`rxp^&mONa=`<24^fTk8Sj%{ma3{e;;0-< zI?}DnBW&l$lW_j->89h6mYC-8AP5r3JpzSD(P|$WczS?OyP|~7bRb~pr&JKvIPLv5 zPC*85GYUZuq0E{FlM)%Q>e0l#k=rB+X32)1l^YK_b`bp9%r1Z8OGP11m#m;YZeNU? zhNerISAD_1b(BhBskGB!oTX&08xmFoA`MT;TfX?oUM|YmkU!F2Zg{|jwyxL!;V>rX zsIi+LMPJy(?f|z?j=T^uRT&4J<3!~z_C*ASEn@L9j2;PnWGxa`E?*}e#4~n8u$5BKRaqW8EC}N z+O0cBh(5&vToru;wC$LYzeLYavUw0v_? zqz|1SPBv(YPyC7doAc=a#x3#=R@KXMeNf6*a=9;4{m7_|yF3RM@I5Ymq!?m$knIrn z@=?Ey)!Jgz`6XGyy`jZsq2e6Yt`!`G4*Ez*+YRRLXf8qypcImme7Wz^FYSSW@%$;F_8=H5sQCq! zjIjU4cAAV@17or4_y_}-Ai9j1AcdWo@S04g!0?cMWL;uDoGm(gKZNh7kZo8FCtN|; zn_FjGip*%nm~a7oWD$h1jcu|RPdz=s>`0?HPK^Pyp3y-|PP#ggtaP~VsAMgAOj&b1 zWG(6t6)c}a8;MF-RM^nCW&sfY)<1!N0{;a53H%fIC-6_;pTIwXe**sm{t5gO_$ToH KAt0qBss2B)jUBrH literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.65E266EB404652FA1212BBD1F985A6AC.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.65E266EB404652FA1212BBD1F985A6AC.cso new file mode 100644 index 0000000000000000000000000000000000000000..c6a62f6e630fcfcb30806c0d4c4f39146144065a GIT binary patch literal 17900 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8BD5661BC011A36608F82548C23FB052.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8BD5661BC011A36608F82548C23FB052.cso new file mode 100644 index 0000000000000000000000000000000000000000..b03abaf1d37a6e0251b576bcf8aef845bd0a5d17 GIT binary patch literal 18072 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8BD5661BC011A36608F82548C23FB052.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8BD5661BC011A36608F82548C23FB052.cso.pdb new file mode 100644 index 00000000..8d7c04a3 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8BD5661BC011A36608F82548C23FB052.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f67c9bd4d8cc6a8a3ca2c655b037adb0bd9b8703a9981a943be27fd2275ff8fa +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8D18B0A6A0838F6914203A391288C860.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.8D18B0A6A0838F6914203A391288C860.metallib new file mode 100644 index 0000000000000000000000000000000000000000..5780a09aaf1f83fbb5b8e35a1d023c9e069221e4 GIT binary patch literal 66695 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.ADDF91CE486A3BFBC7564616DE170ABA.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.ADDF91CE486A3BFBC7564616DE170ABA.cso.pdb new file mode 100644 index 00000000..489f9d82 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.ADDF91CE486A3BFBC7564616DE170ABA.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb8aeffde9ee228e627978773d96ddb113a6d99620e82d840bb50416a5a3d9b4 +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.B745EB05721137F2AE8C910D1BE17F25.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.B745EB05721137F2AE8C910D1BE17F25.metallib new file mode 100644 index 0000000000000000000000000000000000000000..0a714dc1b3bf6ce2f7eb95ea9248ba9ae12d3a04 GIT binary patch literal 66854 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 abS6`&j(om5*EZ3a&nG*&;xqXPO8y6ptIBKu literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.C7EED909597A865FF430CA2885C69439.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.C7EED909597A865FF430CA2885C69439.cso.pdb new file mode 100644 index 00000000..3d137b6f --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.C7EED909597A865FF430CA2885C69439.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e744524ae5bfd4191608ed74797e71115e0e1cc556534b62b16951c4914a88f +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso new file mode 100644 index 0000000000000000000000000000000000000000..45b49a7a9b235bf0c471ae8419139eff45a4cfc7 GIT binary patch literal 20156 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 B{nY>f literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso.pdb new file mode 100644 index 00000000..24273205 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.DC15E12AB500EAEE4B0F9A2C8075E8E1.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:865eef130b430cb2b0e2c30dead27082a9653524d56b0e5ec55b59afb2e989cc +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.FDDCD4D907DA9A03ACCD42C140A776A4.metallib b/PopcornFX/PopcornFXInternals/Shaders/DebugParticle.vert.FDDCD4D907DA9A03ACCD42C140A776A4.metallib new file mode 100644 index 0000000000000000000000000000000000000000..dff877a770585a4827be9213aaefd53dcaa262a7 GIT binary patch literal 66863 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 T3H%fIC-6_;|3g4ZNmBiP2Dp<` literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.11A3F59B29869268E24243BE4EABD116.cso b/PopcornFX/PopcornFXInternals/Shaders/DebugParticleGeom.geom.11A3F59B29869268E24243BE4EABD116.cso new file mode 100644 index 0000000000000000000000000000000000000000..135b41cd9d91ef60f7c0bc238539457f7c30cda2 GIT binary patch literal 41928 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 G)&Bt#Iro78 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.227B4305DA369E84D660CF7D0F95A7B1.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.227B4305DA369E84D660CF7D0F95A7B1.cso new file mode 100644 index 0000000000000000000000000000000000000000..5abe83b9d3fc2cc129a22e25cf2e04c0965320a0 GIT binary patch literal 19552 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 uk_UES8Q>q`Le2qBEIsO8y(J-e=bU literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.227B4305DA369E84D660CF7D0F95A7B1.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.227B4305DA369E84D660CF7D0F95A7B1.cso.pdb new file mode 100644 index 00000000..5978da6c --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.227B4305DA369E84D660CF7D0F95A7B1.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:806fd28d92ad07079ec736b38acdb01675f265fdf1bba8efda2106fc1ccbba33 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3041E5075421B7BEDB64891F34806B09.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3041E5075421B7BEDB64891F34806B09.cso new file mode 100644 index 0000000000000000000000000000000000000000..773394c10990dea05b307274e17ac3a8c1ef5e42 GIT binary patch literal 20104 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3041E5075421B7BEDB64891F34806B09.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3041E5075421B7BEDB64891F34806B09.cso.pdb new file mode 100644 index 00000000..f01abf3f --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3041E5075421B7BEDB64891F34806B09.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e119ea1d768c30ae337176b22521b6031dfe0479ccf852a0e0659f2b06ce0f4 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3F9F670175C1E9A2721D86BF200E8992.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.3F9F670175C1E9A2721D86BF200E8992.metallib new file mode 100644 index 0000000000000000000000000000000000000000..60b63a1b29e0df12c8f32cc871aa7e1c9607ade2 GIT binary patch literal 68042 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 V_)p+Jf&T>l6ZroS5SJHI`5&hEq-_8I literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.47AFC4B8F363592BAB2CB2B7450DC6CB.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.47AFC4B8F363592BAB2CB2B7450DC6CB.metallib new file mode 100644 index 0000000000000000000000000000000000000000..c1c33b419a0a2d9060888482ad763027c1959f7d GIT binary patch literal 66746 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�VA8q^sZ= zz_;0)$QL4-!Rifeic4`P#2$x<6RGf$Qya9D!~|RkI2>9|P^i}9+#M8Y}hK zDO=qrI_KUu0@+NKaKe0$UPJD%SE*Xq&t=7s7LaHfl!}R8GrdueN7~+Wtf--vq#L8M z`Yfe$DWt7#qM=v-Yr~n@K9wz9mw)j+`AjvjLhb4;&<5O>sX@f_?igv7IxJ~D?nPsf zv;F3~o|e#4cyFXpBH z3+;~A#UtviJ4Na67fZ%&qL~i2fAMX_x)m{sz5Mj&uOR;n6#fJMM+5)Sz<)IG9}WCR z1OL&$e>CtP4g5y~|Ccp@`V5C~{m+d6Pz(IyMnI3)ECH0Ug1S!oKd1E$vv*BKU(W+f zP6EHVoL&~9$#}1BJ{|#)y(eqmk=gd<3+(FB2b&uD7aucN<*fGaWSP=_88mj@QzGhaDK7%a*pU zHgsgJj$aRsrcZUQc1=lLaTCb~u3ioH?#f*GeQ#ZAe}A=Pw!k2izfy2mcVzx}wV-zBO%H_dT*WpUadR|LozS)|F^!E80@+#17 z&86|kwP59Z^~hhraYqDM@cKpV%Hh+U#}6Lb$xMClsaewWUcI8GY124gK41D=Aab-* z_WE_dSG&uHuI0nFqfWdPr`I#99eW+C=Up?WpFaeHyY5^ax4mgT+dAgWKYl&88u-E0 z-+%ub^Xqfpr!70g5Vp8d*ZA@E*?DGU;H#s9 z!@ck4wWT%B&l~3*5i83k=T0hDMFlSc&Zj;HY#$lS1+uRkOX~=HsBJr6^EW&C@@~O1 z(A(r&*Ed)1w)6aRnyv?DSBB5Lv9CTKNjyIGdhfW>DY>))+<|D;ovr2`%lJDUcj=$M zJh*!Q=)|{CXyuv1f^^q$<8f5UST0OZC74+jgxQm0p-d8OKQ4?NjE{~;E-DnZAHtSJ zeW9eDg*jY~lS;-6!il!T>{nOa1wpNofxip@*T6Yw#TJ;B77EH_8Xz|1FbzROd1O{( zTq@g??zE*dn=+}dki4KJB9$$hZ9)?v8aX4CiYPC)5uRR*uX?Q^9GoT_A`HR=ZuzMR zK!P|Sut+uy47sAxQ{nL}4H!;&HhroFm4=Y6-t~l(cB-ZVX}so%dO_+f>2lS*B6{_l zM9yYWbwRzKx>M7{qz;NqAld0DlBxzvjjD3sR;%}3xd!HFIR@ljc@BQOdO@~EA$yGG zq?LA#I!XDoHJmzEIbKjB={tLQ>XcmRU{zK5^kNo5_%!QYC8SglCuyQknVD6(keW@m zCs#XFIR~M8#+G(gE-XSRNcwDFupp-ZTA;T&LH@He$1inBZ_zeZQ&3Pulg(aJbx$#nF~_Gc5iv2z zRSm+{ROr6U2-pOSjEziLL_m1BJS&?T5kAGnSrH?pOd^0WsZn+Fao5RyUw*m8td&e> z(R9?ojKi6_O5c&9W7o}1bE&6)XmlBds4tZ+v$bIq$}{*fJeoAGYBFfM6U%23!`+{sS#8-1}(ujg+ldyTlF zt8uZ^yvg_uSJh*@jj8v!@f_oY?S+pSx|%w>r?m6-_xkP5ZySDabIqG{Wg^=VeLmAD zeaDYtf4at{xqbHYbgfG~&fa2GbAOf2+r=`8Pet-$ot%3{&-fjcpJtNoNMx+M%i=W= zwo^*=eei5UI9WMKQNq4dK7>vHPVvy2kU_S^i6%6GT+edYVNyL?d*zXMLMNv%RDG%^ z{f@AHv0-Q4N{xyB>7IdRps9vtad*+3zO>6kX2p1>`(iIPUzPv(Hk87w9=%zLATw@^ zCsjNbsdHizOBR&;ruV{?x{GeV#jZ>fH$$VH%(&xehD{~ciq>RvY;|GT;@q*PqGfC- zM=YfJnS7PLfq=FpS9Bs_XbENP0v88IwLoYw+hJ=?h2($oi9>ga^q zsm{!3K%?`!;t*(sZHDV9TbrkkWGpt`yvuIPt;bNKHmTJZq45~IIC;){OReywYS;su zkEU#dyw~wMmOtKWTF!iK%y@l0Q&wFL@p?z@>_PgRTM*rtCr-YBqkvJ4n1DN9O@lOF z@xv6IDwuxPS0y>lit17Q#E3U{WGv+TDR#3q9|IoK7=9{dC|j3x`F({c{R-aD+~>oe zTZ{0+0|^YRdbQDMPq4)S*TV9xo?3!6<49+)RC})PmU0ffDjQZ!HQ4m#O{*bA?R}2; zEMlw=(e-IYKaPb*mD;x|&g^r1@xG5Cea+{?uPGzU3H%!4n(W ztEQ$DfrUR~dWUz+-;+G8Zh5rvHJ5GpL`(@|KTfJnIWd_hVt6?m&=bk{A*|J zS8W4>FEB3AMS4R+Bc@Ez{=WvpJ) z)DLjXZc$np6{+_QV=4*hEiRJlad07aCbzEhePfc-?wYT9|C)0=eG;~IQ&Iin&NmH^ z(LIga-lPZ`6C#;~$7ARZ7Puh&)(@nIt>Z`$fA95FLgLk zYOn9S&r>K!q94Ll#1Bk}Oe>o9+*pPulo(})7|K(>G>OS11aSuoh8OG8A8*cV+(t@d zGw!p+aYXGGl~b{A9#K=f+B9IHv5%>MG^>XpNEHymaaua{^=nnBg|ncUqB7xv)tvHx zfg0_%GN!mZGafQ%IkG0W#OP46XvoOVVdk!1-5+L2au-QyK1b|lFYVnSl_w}p3A$Fo zifHY5c(wAu#9Q_PBZ_fclAdCu1i8%i?&C?&+OyU#Qk_ZA{-;M#cy{6o{NG~C#M54| zjM2?DiM$Hl~D8`OI1`W3@J9cHy4a|v9LDfvf!PaXpH{4E<@7ue5l0$)V)M?g_r5RR;bMG!zNP^{MKlvzkoU4~p6qn(=Wa^Qs`(>Zl-I;Xw?tRUW zJvr$6*S#^VaOwq)eW*TTI4ebAzu^57Cl*-)Xi~c1O@BfqvcN=N;Se94Zjm?&K0R#4 zgEn5z8cikpj6HFeJZtNO7&D5A#*Dh~Act!=Ru1m?t zXITh*#r@bB?e&F?vs}jWtYn^MoJ$~<9}?*|CmISw3fA}4VPFUC5HnD$z*_em*$4Mo zo+x536?89>OUK-*w!h^ZihsQ-6P5z`oP@a;d>TADWH`RE^8@=TFfm_2n9-N2WaP)? zPiby_)81CiNJ>M!jI(sZk(o$68G|3Tef7U67QSXZni~``ATO6VfjL>Fo4jmz_vnzW z?8G@ze8Z8#jVjFF6kkaHg;Suiex!!lbB{G1ha=92>hCc3wn)m=dXG<*7jQ>?>$lYx z+ScXu&IUQ++b{hs(~Zp)M9kiA5AyH_)M_m0=7MSr0$|Mq_r*}bG(osS2I(lz zyv-xM%w|z8HH305mt}}MOV?&-f2hUJ&+q$(efI8{=DHJza#E1@P=KM7g+Q9Ci7+v` zgZrXpc~Gl5f8tc317E?-iseNdwwS6kAzhA6uy0_2+Oi=UABMK;y3DlA-AQM*NLoIZ z9bR81T^oKbrwS%TEH+u?H8ur_5B~QU0$=9qY!=HBdgN-9n;)d+5*7-|5%jR&t?MvM2C`F4=2zh8niL#HzlU!@xsxDEw0Y+? z;yc8xb;V8GIiug|@@&m?;bJn;WnCrd>-OkDMB}XsSj!gMbc#49wsh^<@cdCScA&gS z-?~wsQX$LnT|q(r%#~+3Sg&@RJ@M<+CcU_eqB6?rdyML0qobl3uA(Gu9U@53aoG#rGtEkB@}pE?;-b(zdjanBW_i%q&yAJ+~mDYqCF0Wf5ZOZPK(Ie@%YJ zfpm>fsfHEVJG2tG(FJ@D2adToTa0`1j@0=}@N{LhT?pg*riUx-fgdKWX1@AMZvU#D z9hJRG&@=G%(|G^DIE?8!@%cqC6G0AbHz|2xOZQ#tx|6;UIeh7So(e(&hw<_$c@;aLf zRKd@th7}wd`>o*~sna@^HXdl^d2o3E_1(k)exhG*B~L@%ES;xIKhDrB3ax7}Y<#H) z*}qnAFJTbWweES{(>6Hp{T>@^bSxu?!^T||ad!jaTOXzz@U?(XW!TRswNOFrs55+= zc^xgfw@F_cipCTFDqk^RCy|6&tA@T1*zK6F*xd-x4vY?l7V?gwNp)IlPouM}{IG99 zv^TYseNK;-H*S|r)b2g@MZ1UZaL3bFkf+hMOwlYSb?9J|5_y+s5c(Dm3+vafp|Kq7 zdy-n45M%|p+94!izajZf;?UCkf`ph`#@RBp4Drgo!YBEKS0Ue%5H{Stthd1=H=hqZ z%~*sEUHczsIR22P5p?QwX)0=x`85?mUz7QZS9p(Z_co3=HW#V z^~ZEBWn|eRl95R&X`~Tz0Sex0`6N3ZZ{?b>$$l0OS})~LkYgPcmdf_PBu~M#`kcC) zsZU7c{QPQV~;3R|?kq9J9jHQpGRF;+a@k#bb}0q~ z`s!!JCEt3{i}6FJ{q-}fLK2NprAy-b)!El?tW0EIb>a>Rdwi!FcKFaG~z$`qc#Q2*fBYRw|Zy@2fgJyyclOG9wwtHPZ*=3?Ot7icgID|eX z{1#upY1iC=)to(B;&WxaUk6v&EKT%J5b*wyh#0P%9R4O+)61q|*e}z*saGs_m^nwB zv((?vBiy#u@N{@=;>T5uF=^1R6ur=&JHoCm0wE994jj99;x|AohP{}&L0r_Hw=q4G z-84d%wTgmD9*J-=u{~R-B)HQDv$_bq8}!cTTEC)H8&rD2wM1frK=%p|sHbJ{C6>Qy zDW4ksjHkW?^5x7|?4u!VT2e`V6Jn2-letz?pIkcvTf_^G|L20EA8T(Yfugv|YfHKc zoMZEg;<$WF$yZSV-A9+~L4yg?TN@O&SI4csIBs;4MA!Iuc+c|?lL)-16Qx<>rWd$m zlX7fe^&e`a>M%%_xW>c5xR;Z0plu)_N+cT~sCYMr(BeIIN=_VjCA>>>9+uJ_8UMyx zn{QQk{H#O6-$hh#^F^+^QXZ{wexpF3Dzl>+J^fYbxp`6dbRZQ1*BiG{W5Zceyb{N5 zV&!@*=p>wk+{uTXi1FzF!P>gPRl?#T9^Z-7PtDeDv8z{hEwmhTbl@Ap>V)Q;y#d?) z{Jb!Osa6v4rIYp$JzSmHj~G!cRntYKd$#CF^ethY6b|IN!*ZcCGRRee&pJ6pp0U1s zLHCb}>`iy`sbfwgIi{BVqg=lEma0v;65XZ1K^hV34<)-nhe0>V7@{gSnxQ%t`_R-kCLU-bj*BX&>AUGw#X1pKcS^?MVQ5$1xaRZgGF9s z<&!coF|j@g^JncHb;))>@TPq;(&*=$4?&E1+IzUfA{xKA!JIm}vAo4@LfauRin?B{(R%n1RnKO z@HYvjlHmw-yo$x8jB)u9=1Bg^G;C++NpG0IdzRWzzT17Jx8{aRcs3&?_+ z6Iv=-dJ1Qo%P5Nz&h`+{3`WVw;;x5jpzsp6HA7mp^__u^q)W8ruGTUFNg z;tdjnyzcNFB~1CtL?wSF@aT#vP7~4-Wr8rSV5woN6C&N%Ny+epNi&{;&Fr2xj~+a} zYVRAc+&9)2;S$y=S$k|h!|(;|3GGFaZDX)i!+xF0C6fY3X5igPuq_oci< z=kCzQll)o>UQBsCn}Bp9jYkOmHxSIrxHTF){zhSwpM)K%IU)NC#vKl5Ua~(HG6b*e zH1Xk?Y@R;6VP;=PB|aep_)nV_4o?SlPsB1e^j&zu_(-SZ7V(!ZL?}f^LbdheAKZ#% zQ1QdTiYg>I_!;zM+X9!yaP3=XrfF^iCWT_i%LxjXfu=UO#BObTo_F~Ek1!9z*A2q> zR?X}Xf-N`g84}XU9r1BD_K*`6J3%A4H;2RAXiT4q2>Z~<@UL+h@a*0Ec#UzY``>Sc z$2_NZhdlZ@+UXe_pEuBH@D77zDB>WGXGTO{Ghr_t()$}UbOtG$ruIg zoB2q2e1_QcOyJ}5R{V&0siMc$;B&AkHB72 zV0QGEn@_C5bgIiFQ!Dr6tgfFYu(rR#EraO@7)b$p?mTJ zL#4{qJo`J3{KzUD;CS9ruU#))&ZGoW4jROkSWA@LeRwMQ=-Do3Ib6TlGMh%n+t02j z+duNxf0Sb&Vv@HT|M`_q<>Q-=C!{D`e~*hAN&zlB`gZL+a%LFm>@kx9idyZV_dXssr)V`tX(nUQY|f14I>kk z+698fIz#a?G>>-%^cD((A_%1+tI&706vtTvO7cw5PTKm>EvOgndn)Z-*v;H_?_Hh! ze#wj7y-#aF*{*Zb_-Z4Hh7S|bCvufbF$ppZww~x`JoNz^BQnrFKZ4wUg&{;eHXYU6 zTsx6tMu8b_Wi3wCaUgWNES-xqLwF}cbd`TqsQe8?QQa%PtxwVS$yE=%a@@AI9TGWa z`3!#)hXDgm^Sy+qw)Hw}k-N7VQk?gh5|;~UT*%P6aM!}y7v$E5ag?uKMVhqu7Rg&7 z^-WMU*;1h9;F-R^R1E9)F^RV2g2NY@x+_Rm-1A_y>WYN5mH}bWnRJWST--S$4h4&E z`lFKGXJ4OM%I_P|s%PZNzj=-kqtzCbwBw;NZQWv$A9+u|^0Un9!`AJ9+V11?dxKM& zr#jpeB$P2fM{|CL5aqZJtVg{iNvb+rt6N3$RG_-_v)#$OOyTjZ+HUI>`W)!ZeR%OR zat|@-&&C?P$j36PsQHKvp1>n3YZfw0Tq|*{lEOEeO+W~nao3a3&dsjNV0wcI3ChG| zb3$`3?tUcj)$P|(y0)0|GVf&QdMymUnu#3ZT*#=aPfT|~dc9m&G_{oHKdKn!D^Urq zn0^p6dGTrX=(FBYySW#)FEM3hv^*xul-cYJWz`xI4Y%1v#>3Vn{3_NJVaS;&jn}cb zg5Th`_E=r5L-)N2gMb?Xp{srb*=q@$@y?T!369KMyjgW1{Y3J?E9{s2LF!xXw98S% z1NYB7^#Y&n@TPTi(aPR36>)!!x-Q6JwY=h6TAC^OHtyY2?goX)j%>eX-IHe3DOCdv~L?=3p>M zI474qZ)5XS@=>(*jS{Fpeq~&I!QPvag4&uw4pDd#(pTT@~8ij{F;gJ$Gys>+7H;^6TXb3GyPm%OdF@}=YkOwHyTNgBn^zvum$%CxqA44b=9xF9ugY;dD(An|^MqlIfLin2Fzc6}Do=iy%VI%$%JlJV{aDGJ zU^hos@+I82mcAkRY>ty;=X;~4NErLl0qgZm-hFGQ#A3S!p~-00 zd8QoPXxsO( zHpM*l8NpicT=*OJbH| zdsgJ!2zX+xZf$S0oH`oMF-Myi=F>^7uZ@Yp@}z4QhW;{y&cn=8r$RQfu`BrjhP~?A zTr4S;>Z&-x;W-*C8P;;S<7_%sW|^u2P!&Uvla@|;c$wNv+88TG?mRuw<(imRFE49K zC3OSnbG%r~WI$T`eF9`l@yJ8D-lP<@(AHt@9{zz|(zNh0PJ9KkA`Sh0Bh@iZ0p9IF zH2x57R?pX@UsO~y=s2APCaX>B(@Cq%%2zjaGWS>eOzz|O!*cXgNcEsg%>|`up@u4? z4Jzt5tevXi0w4VwI!Do0l2o+?v?}|mpC#rGmgnv?SJZbEAl^mz9ZM=En(=Pdy*(8- zB4Nc5vvvvny7(?*@kGVfv5COGK{uU~1bh2211C20xzQUN`o<&ryH91VyhXEJfAkFM z=D(MRvzhBwUuVwr=4#UnvI|DE% zMZIj%OYDmP6$oP})1HeI513H3O=s?B`!gernPOcrti*)3Ueiv_q?f{q{oS zKmyO?%jF*5Jcw8SK~d2_NszBA$!yCPi}Z1pFEM|&KkT|IpYgwxBtV`nlg9EL9jAR-+g z={L1=$#!-}p+CmV_*|0DWy_QJFol#fcGBJsHb0nI9Z($S%Hz(xg+`!gkB0;ZY0>7 z(XUs}eoW@0am@*?fx$4omQRMy>)Hn_J%b6Z(6qxH45LbaN86VA#l?o)ESf|6pBSY( zr$vj4CUhH3<6Ek+eFE0L$I)BwbxG{+DHz~UP`AGzE9gEHL!(UyT)QuZb;`Y)2(R^W z!XwbnO2zrI45@A1Rd6CzbkMMQ==b(*bWLi4@3#_1+kBZDkqqXKZvOV`L5Uxb=h>Qi z4Ki(q=n?y7FBRsP`4B2~W_VK8qGeNeo0YNE$CG$Fc%x{4dS^W|{xN1!EMi$h^&+I! zIrar5Hjd(6s7Y`#k4!==q75mbl>PGqdWC>>!@ZYpRD!=G2?y9Mqls{afH=eNScH(d zwWg?KOr2HjA%X>U0tvjCZndzxGYeF1FNmf!L8Sfo?COW0#-WpBc<%E*y-o)1rCUKd z;&qm2sAwNwtz=MT{*38t+x)sRMrWsIcJ}JMZIj2oiZ#YFsuL^ao-KsffzlF>QsyBE z|M8uBvf~QcjmeXjJ7M3RHH@5}IJHR7uI{KtE z-cKC##-H2=NUmZq^C7DQiSGr2q`f{6i@EWP2XwaCdK(u&ItU7BzLc}ghRh7nOup%x znY1E9DP>`4P)K%~HftxsrBT8kOUGYZbFY)jePs|H{q;7!$PGiq)%|Y+a2?3L4S3&Z zU*WSJCGKSA_CvQc)$DC2sS!;5Z_VP8B)(Ydqqkoy96ffZ+o{N^C%TvS?ZqH_=Uen2 zH8U1m-i6E(u~wD^jN|>pT|AR|97_tJFUekBMm_oHYs_@kV@)F!2Xh*;Y-dhr6f)Ee zfAHZ6%j#2GD}$)b_M0o+d)v{jY*kWQ+M=OzIpUPg2L_bina++cKiElU+YT&h=r8Q9 z8x|TiaPbb5@Wj2g^kpr&`*z$`%=FnUmnR)B*Yw77-Y|VJ6aSuPmMGBu(=^00lZ+i3 zf2_Z%dqN}T0OOjP$eCpCWcjLLjLUBQ)A3?j=>t27j}PPMPWXP5dW*6ukM1m8zf@KJ z(ATjGv#4=n7O*oGwW-1Ei+k%R5t>zNzx^i0ByL0Y%T4FWZiAOQI$7v_m5`TA@#>@9 z5j0ny=uO}=T-JO$=$7o9>^+WAyx3jWTD|RI8&ry+x(0PCan(g!HC{dsXrMx~3cfFo zx<9WY(7fXkU+e`Yh>*9OFK<(CU{QDrDc(w-F~2&Z6)WLj4vQj87~+Z3QMqM1f5x4k zUq-MP({<~XBGc+%1KZ*CWl&Qm`y_Z4v};A}tdPLa^c+(Y`x*ibk}T=O-+FtWtfLXC50}pOvuaxppM0Fxkp$rueS4m^ z;nys#?gE1Or7h`Zu68*E1C92vpsp?{hl{DN#wPB1aoDdc1g%sGoGKPLcOtI)y6yOC zGV>p8NDA<>1pHKwf0}!|AX?0N!;NHv?W?;$6gBj(QxoUQvf8u_<*51IWgi5+IWJ?! z6|?(zGNna1KursN%2XPdZge4f!icc|t6D11^iv~Y+7)E(+_Ll=ExaB^tUYq+HXYgX zUWu(IntiPEonPCwy5qYk{yBV)*rX!J_qs6 zs20f-U%ZfRHJ+%kNT%G9{L#pa(AnXx z6*fqh*b}c>p{jvFeXA9Go{rR@gl6hMW#UY2bT5z@_+ogp;D?ywNHeRS{<-T zN$Pew+$n*!L0-r%NKaU?gOpl}^!;QOw18E_oVn<-8`aEKHTH8c_+`ePV)|$WzOS~P z)y6*gz&9ny=Af*5BUnA`7-A)P!aiu({t^UCcb=qR+?lA_lrKJ@jj*-Fk@U!0+>R-4 zdH6I9mNF=xr}=i*e(iot3{moi)A+Q}k?XrUMGRBprRARHF&q_|%&^PNnNPakpSPbJ zg@5F$E1CJ3-|BVrbM%OgXqV;_o<&PD`%+B}^PJ45;?621!_R2Zf{`!qq=_2wHI1Vk zi=Qu&?(XFtGOs+P{`4|bv6>?Yjkhu*aOKtYl zC#v?%=ev0}9i8sa-ABpS7{^TRc#VDa-mb?`!nHfLC?)xFkNW-BMJnspUsN>YN?%Rs z8dfu=faY5CbUz89N4}I#Uppjea%k^Kd-vufrXgb3T8X-e!Xf5?7abygu2nK?@Q(lC z*l~^p*I^9X#3^e$MtRAjF$>Id6^uQ^ssu=eH)d1#dv@G@isd5Zk&x~uGh1CEkMxoo z@2&)6e#^BYxv#pX)plb${%<3^pYVrUQtZRw5XMS9weuBGHvCs($v7m$T<`6^%NrFx zUF1tO#bIfm9>zBb_e|}yUnY~13Yv6~HdO19Va=C_xphUui6F(JX1TFCLsXo-fOv>M zx@T9enSG2z7njlF+wo_5UAoRHntM*!SnI^1i0<||?D-2*o~P7J>s~YSN0LwaK!c{{ z1N%kqj8JwA7XYW1=&-|J^R9I zZ(O%IL5Pn<&SlL@F@~>&yQ$Y-+K|SY{>tXck2I|z`^tFk$k!|K02+$L9m`=Q=2ZT| zv9Bb=vw*uJuhP5iVoLng6ZOL{*}+V{PA@6GPn%RdP`73$Y0H!Oh6%adz%tldG@I2?2lXAgQe&T@rDst zDB`ok;8DoJ1*NqG=Li+(0#tZhmhb49LeN+Jj^?q>S`12#a(zZ0#PV~(Ec7RWj=2xxRm z_U>WF_M?g$M@O~XY4=#S%mlb4&m^x500|>Byj#Ly;3+jcv#Yf4!K)Z%+ zvj_43O$e5HfbGWg{7e6oE)ZK_UBt9b{Xy5g$TLLK;xm5v>M zzk6`OS5rySz0%;rz9%t^zHocYU@=QwSo91f)(XtXB> zCe8j!_sQ+!jST$|p+|2zId)*J`G--VvV8ScHV!TzjT#bu9p&v=7|9|U25BTBfa!?| zl2zBx{{H{-$N$|=_ou=5em<=e+zpB9&Omhqb@b0v>wj$-%z{d{PmQQSq|2q zY9C^y2m^J+UvK8e`@i%1U8h3TNh3{4N`q<8@O%hG1}g>~DHDc<5F3UpJN#;X7a>$t zBhlN)G?%9=bUZ6&Y*FKqv};rJIKF=jbTYMbVosd5IGNYNN|h>LMCSx^!TBtn&S$AJ zdKt66dX4t@f$d?ppQ_yTI(9Hga~QHCkc5Y3KV8}WH9Zerq(V1@gz6P8SN;|fz@7$` z2B(Azn<=r^emSUK*Ga`$2?$H)zl^%0^dPar)x-v}4>fAVMewLo`b^-yLtzf>7@xWC zZC2M4UcYzq{Wm2~D{WdsC|VtOC$2rC0+m*>0)rm-fkU9!E#1$5VmS5@Khq;DKf65@J5%KKduOtr$P-}0S=idHEy-9*{a_MGgNSS+BF zHky)o#9P5Tj`=;!z%0QLG8R zFIS;!a71ztq9ToFPwV4xd#&hD0Te$U0#D@;kwd??`sn{T+Uouzqvq*#;$>pgLA3YY zn@6*F`BHBv55sVRCj2b_-Xj;8s37Q>47PR5He4bO2m+293ILqjO#h(j$h4&WCfIp? zc1-O;3Xj@y-%bfJ7&}wF5{>p=1EQ{rmklhcSb>{i_VNI5X4K?;006uCkNqQEB& zfKExX(+wk%Fdn$Taz!bVFfrx5BG~-QKRha>GJp(BuQiWc40V1TdcYRea#fqR;3AUYuIM{ zAAPC)zsU+F#634D2-zg7+&ooSt}A%A zbebS|W??fSnFcP8Edcn79$W&zm+!yI-Rvg}$rAEqps1fE^@W9$u*(_A-O^TZy^gHU z)}~wPM36V@-24h`Mg5#49UB43yhC%@!ulWmusEa#41Mo$VEa=NvuL6*w9mKyU#|BT zBwR!8$b<6`H7^^0F$>K#*P|Q4ltwQqrKHjP&B;*UJrs!D;Si89=DZ`BOhqHgZBy~( zZ^+bl%&fEOQ6LS`xf~4cuj~x3gsFp$i8yor9VljPE*?vh>6|TBCqWaGv|R|L5=e`3 zNhsQ`s=W}&qFZi#23{_@Lz7AF0%V<04Q{axsg|CZkN`*pN5~x>d1&lf}aG+xy+bzmygL| zhKEb2e?elGu!@Nov#tdXUC)Ar+yGmzq~ikF0Qmrkwm-l5#0txVDkD)LrIp~af`RxN zjpbpW%9GuRt*{Szc_MuO;vo&0$wWj_HXjJqx-!6(#RlZ2cZUEPv0t2aRSrYoyZ6vW zhsLEJ05Ox6S5|KvOQ=ONf_tk4t*H+J}eHxk})u{#%EOd0{nFvH5 zp3Bp8sI@qDGV?!w{jaz>VogHYp}Y#k3K|xS%LYM^Qy|L`G|n`HWMd;E%HVgE&B?Xo zsq>|wIY4Qew4OL=Ks|On*>`>JuAuUD7;M-zOU^4I zG;)j#?FHj{uSDW`j1e4W^h#Esepm(ej0P}?px5aO8t&u5(b#QzJ(Kr+)Z3TyJG?W@ zdjK~gf$vM@s;5~(om<6=c4Vvm`5Tcg0v3fsZCwLkU(SmbSkTxBuCzZhd#PCDW4wn^ zexLT9EBT6c!3I+=8Jh8#KAB{vh{KXbY47p?4lIquyHwaX4#Z$-Qf zLCEz%>;+bR6So&SjY_q2mha`_z9WT7=0nTIByA$%Ga1U1ruTm1?zUt$o;xLUo}D*o zcE;V%A|sv;OB7TCIb#M4+$q9=TM+!PmkpccewYLy-P71C#JD1^@wE z{Za#!&dl|5IpOnjxfBtbYS;B~T{9``hSm8tx>8OgjGcANj&UYZQqQiI)-M=tRA=l*O46XEkMl3VTNEUzSWPtY247fi!7_SABt)vM&R=&9Sxvjd$k9teOrt1N`-dMJV+2!tfL z8+_kC)aL8@+#WhMANF~A&s7I!_*P(6=4qfq05W4O)<6D6z z7INGa7Wtwih@K;&MQ<510kFv&Si$A#zY9p5dr~C0SxY4{nxR^R`g=gokpBQp;e%3x*Y=sVUKgxowt-k~xnFN7ffIpW;7B?}FUR!g&Dj{Z;w+F(){nJKAUw(R8#F&cty^EVhV6c1CHLS%sEqJfqp zi%K=|Vf#}lX(ME8c<6kglc)G8t~J(Ehx|Z~N)KV=zLXT{V}|pBpA47V_?&8gmaL~= zF~_7ZSF+BbmMe9%x1iNx1vkMB#T66emL&z|jol82@Q$PLG`L5jUxonP<> zwBaFOF#|FlL{rITDzgKVJfK4` zHDhz>o-79^7A_|K>E;z);xNCavUac$#+{;Ahev2wu&_{;;`?&zu?e(*0!uUJyw#f> zU=sINdd*mGK|N~fE(3p%JS$Wg4^;k)BX8bN8{>Qd7%qjL1(4E}bu3@g4R z#h*yBy>WBIGI=C$IA&WTVsBajr4$X}@w+|tZt0Ri{Nl0;4(tV^a2*Nn-csYH{&aqw zNu(W-3=)o;8*WGsDF!-F<1KG#{QhI+e-_8Z?|m0G2bMgb#Af&zQQe`ej@fA$^vn!1 zEW04PARUik1yUml-|ODsE>i;BhuQ0P86JuIHZr}I^^iB@2p@p<#k)5hbQjqGi!F;C zUP!Mm))DX)mVAaWFfaJAns&MVw*!P2)S-$B3UhC1?rYW{8Xk0C4C?Q^i6%4+V} zB72l|)G)kspGoLNHn~|%l;f?2pC|mODFx}nAqRAXNMRIS#<~3zyg-PBI4$fMecyRr z!pf3|WQeB%5Y72!KWCNe>>V@=Vd=FS`reGzi!0r&$P4Bn`e!G8dBa?lm?9=B;+&Q; z5lPZ53?NwZ&`U*A_6YL2Y62(+JD-SCjsj#qPquk)&2`{r=X3wt^LKM8c%fO_miwI)?sA`aR5|{2)ve7*2WM<2*Vfg|%Mv-Q z_*n!Z6#Q6<0C^X8X`cRLsgnC7bZb8hc+jFq#_m-rB{v!qg?`qhC`%;tvah{M6>Un@ zWVkSnT9b>RyGTfcp?MZbB(*PY=sdc`psN46hlx8>3DAlXhKmUe_vVTPVS@P ze{De{mF?7|PQl?4(o9KF7=DYY?vll#cfU*pW2Rbhn?`3}0q6CV?a|KMfvOPg3rtd4 zDZ+oBHGSrni5nQk=-}sV9^7Oc60%;B+r*?N$yeJ~Ak*^&#z?OvYTz-E*pZpWruzrU zq4+h3Y_yu*)tq0RB}z3ZtcoS4pvod~I)(_jXCiVWlrX4{mIP|~+Y~&Bgr_jGEa5cM z<4Gq_l@i*O6GQasOr<3PH+sGu$|+Neg>t$|^-K2ehqVO}TLh$JhQ>_9a|L5}z}Ni9F9?*vWp14pyt2gHyH&&czhSoQ~fa zqD7sJqgG#7=LYiyk&XPUHdvT!!uK6fz` z!D2am)6uHs)6~)fk9|#{;OC);8$p@s66J%cyRH7F3k<-qMIyj|r;zn z59l|{(@H*gb{0wDn+yDl?MELV+Vu4nI(q+he%Ag`YiYg4u}rCZjJ>V77@aF!hYb}p z%uvXZ2^Rgx__qJCd}T0Fga3jP**b}&gG5lRq(?3kXd)ivO&GCCGXedfT6v-e`5-fnSP?8&Ng-$LR zAJ`JYeewyab`CD+eAe0-}0RuNY7KcdxH_rIRO=#iG6 z_C3$4H`V`supgIc;G2E947kn>xe>1rWC0o5vD8_8EM2v>DndTX_Y+N^W1sQ&A!B@F zAE-?VY*|ixoHiK~vQ3tif1ie-WxzcMl_q~u7=2`9x?;;>PxmH^^*4@{?;Eg}5fDyJ z%N-Kmdk`(!|kdN=6fqm)L8 z94>>S7m|W~T*#!1c*=>KKt_Ih8`SJ4@ zaQd?^il{%}0B+bXk!=rs?Xe74smj%wa>l%O?_DSY1eRd*zDn5bwvxobFEuI*YhPA7 zQoAoyQJLV66LvQdh}5_kZ|<(Kz1!HV*s&0OZLDf)Ab4n8uI` zFh2MEZZuVRIx5t6m?5mqtL=j#6xK4zQjh1zGfVhbQA=}h`55tZCD1#4Ait3!4V$Z$ z^=VeLtnE7tV#6T1Ug zn@#}zw5+ufs(hsKl0z}NNtP0nU^gSRjo66KAHd8!+3*pTGq1!v1OU#hXtS*Wq}zV{Vwf zCtGYIsiIal^*jjeUCK%dM#8{am7C7YWPw_3P4vt?4Y7hd~K9g7-C3E zRCxnH=KI*l{x{M*lJ+X^D>~=;h@a;UMKk9{?Kd~7H3amX#|DwB@xD0N#CSl*2{i#{*BJo&po_slddtU4TlJd~<{t#mvO|J5^;UK@8|Ep#jD(^}5 zVVecikgdjogBwIHu_9mY?}}p901pQb#mm`pcWX7EeC>C>&;-IiYUzlBhlk#Tu90q zm-AfZj#stE!|B@L%=?~8o3cSF9rpi!!IcX=Fb`;UC+62|&|iQEG$8Ex0fbZQK`1+S z&LxFKmE-P&Ca=HP~{Jp`vfNVndEr1l{i71uIb$@*s-PFfb!HdGq#Ql z8CrILLH`QbF1{Vy?4%m-B%Ixyr1PzWYW|$Ihc0H2`;=8u;wr3?$j4LFKRwKCu z$pYq4Msjx&LtWUDWNH!`wgkWaSz{qB1 z0w{x~@Gt?$1gVb2ujuhsPyIKW)0ChqXGglfroDBvZ}{@*0Wm3@a>jQ7CfGG+x(UZ;DRV{*?kZ(Fc; z8qY=V=%8u_{Ro-6pJ~^UkcSe9xAgj-6GJzt{omQUE!_CFHn@Yu&S9creEz@M^(t6e zwp*se@#Zha09b-XxSk#q2tl3s_VK`a16T^=QHRIN^G=QUn$4))M`g>}$3z6CQ>7Od zsj}>-k|tux8vKP;Lce+Bn)D0+^j0IcEl06(#bn`y`rbFsp``HO7qsLQ?QngwIsp&>sUL| zb29C6|0{=#wtraV#X7MLHdi$ z`b(AObnBZqm?RV`M8ECz{a8J(XpI=8*HSRkSAPzO&C@piHyXa1xJD|^26`of!SAC9 zBP@=?9%iENDJ7&m?V+VL184OV@fsUj?ZHJNZWDA}mdGn)S%*1%v315pBs*H}g@~uX zTTj@?%0&qV_#8czXC{{!{AYIfJfo%NgAyZ304k{2J#G>HQTG%U>E6$3=)wXuIf?*? zNiSOG-Q@5r$aG6=S*Px-J~nrO=AUP3R_SxM+aS!V$#5YhPGC%>rc zeNX-fU`?i?sVhE8>Si7+avg8cW+^ff=uZ|jdD5;n66s#sd_(gB5CL;IxMK)!qFAn| zmNdZI@&g!cAZj8u<~KI66a|Oa z3$z6Nr~5;wkZh)-cM3>{$&8!_`R#w#88SP$}tI98f%5 zhdFVXO5>AUc-ofQg=Rm@qY0;v*42TsA|jDUj>(-yjg=fxS36N{&W2w%PjdaqSz)+` z6@E>vYi13uoq>g0M&EEDw(-57hBCta1~g_%F5q8?b$H9Xh+H$3k z@y!*c6VY=zuup;?f9C34kc#9yAY=m}rw&YKnIIX1rnQrJ3PZNiv!1d>gnSrQ%3nsW zZxPJ^vI2cvu11UN(My)?j0G+*RRMx1kie6NGMAjBD1;aw0}4^Yge4yf3aq=}wMl4`Z-ewkdPAq3_gg$LRHSLg2Eeo1?w~ zg1kkQS^n!uJWJY(ofCq`R(eH6B1ziP)c4_kD%#K#EisAb{#1?e9VS$Lgw~1bKW6x-77}id(DJpcVGou{3Bdq;gVK3@A&)7E7)$Q8{ zCwsjK@eo?`4*SiWL_|bHUT)olb*uH(qc9!bKe6D_CBW&YNNox*NPItm z#NK%`;2iA2UST;_*Q@SI#U)`dGYOe86*?^^@KIY*;B)crk>mBYv}tcx(NW9G%#$6-kJjbkPDflm^mbAobn~*s z7cJ?>yhH35px(azkDB{jcg&WYo(u6XCkLP~YmJ{1l_5I~X6mW(HaMZJQ;i%Ph>K_< zWq&YB#u7xSK*19W+Cl`NRESlGL*o8R!OWzQ!H{JqujFZ}2Rl)eKXW%WV8Z`wWK586 zx00D1oEzzvW$!?7kGtmdCpF3hSyTB=jP!#suIZrNOqmn&ARb5MXx_8D`K6G39k?&m z;@o&3zZd``q|!-+1wpIvGv!HL106Ii)8?WMy?Dg@cZpDt2{cSdhS^yc8M8csV5dso3@!1Q9 z(Qdu|9jv^{hbz-@5gy0<*5s`2u-2B@_PW>a&Kux>!Ur@6Acz7IJ||E`6bxFvB+kV% z!UrtauqJ$13R7Tc!i&Xaw=KsS1**&rO{J!AGg$j{N***_x*|4K=yEHOOEG4pIPT#f z1=S#|(~`}K1Tnff6FwG zjE}&O#eMrD^tUxcLPYu^OyOiZ#`6p*pNEMo7NH6O=u^^SOfXRTSQ}h0uxUXIZr&C+ zw9*pma*eg60+uUJ3zNi<{lE)MC-Z-m*i|}gC*M6zFr)Y*=4ilGqbM_fcLS+NG;EoX zi0B{WZ}S+)eQf}Wb@S~_UpR5hQlah!^kj(-$8+_Q zC(KKkmb(J~0MI~x4ER$oHYb!fZ^%0-a6y!!K<>p)HIO&Gj$FZ@GBR{3i-ft?+UP9c zm;}QQL=ZW%tb`~cDpD#{5~aTw^*rjI#0(;rh-fdlPdsU}e|#S-oZ8f(qNbd5pcARw z`Azq*-S(J3GiWBp#YkC-u?iCB*r4rNfQtZ4B+|e?iJ&>tUXCp1ug_u{=iK(ZP~UGn z=o^{$tw&{~CZ5fYXV>bu{`}7k-z=|sn=^t8F`4^)nRIb_BvfivH4`vV?J6Gr&_?$E z4Ik}wghb3Ruo{d{5~kRSFO%<-PalO;RkxKpjlK>>2>1|qOAo1KvkzaD5_CdtLPBK ze6-+jRwHKQ2rYGcoY(Tuu`&9_ZBGCyAXKEQGHRI5F>Z-Lk7|@MzMAF3vyZpiq6M@_ z+5%w#dJ0qQ31v}~aPh(uUGG6yydU$}T|5_ceC9|MG*rZ12jAev4RZxBDGAfVAPS_N zzm+E|W=rgTbB>w&PX0zOLm8DigF;gpjw^E+PdN&Q<2oB$tE!izr zv{y|k?!GPEJ=?R*rqL(R()^BVMT_PY%k|xIs{jG7W z)&e62q<+sn8-)mN*a&it5I!Wp8tWVJ6V0Dt_IVM3!eU0cRp@xd^2{=cW|GFhYOYQ`KezgHpyUY%DA-1u z4E1WNyRil|C@|Tv;SJC$dF;b@^*pKEcfQ@N50DabQ?^eHt5HSfpL0amcjlalI<3L@ z5%wEBahkV1CAus)mUtNimm&-nx6@0*%xmS~ToOtwRB$afn)zY;G-*Jo*dAq5GV0=M z0M_0(j!~b=%90b|iL(b#p4=^#gRPk0GA1PwH$ayRLC$&f17K8v3TWU2zzW5{$sb$H z(yPmfUR;<&&I2baDwXg{ohq>iY1v~cv*siGt3mzzZr?v=tuz5v(WKI@XslxzjZ*mq z5|$bFWZEF7wdeLI83wZTjh0$m9k?H0ND={%Kh_M4YyUux7i}T(m@F2imoO*w$YuBi zY)I50kpfvFvjt=~<|jDMg0FBa(x*J880BYh*Ay5vqZ?c51mE3fu;1#W$sXXTXC}v2 zARTsdw@2Qo!mh72ZIzZ;bAg19ixnWp<2bs_VAG$5eoS(}{Yx{VUa#Ld=SKZf>FE%) zYSKc5vHElHM+IJeKJumgg5SN=U9p_MqhWfA0D$!sDLWRuai#fi<$b_4s%kZ#Bal%P zC`M5T2AWc-$5Jf~pRVVHw=aBMfefv5LK&U8i5LSYrOBhBlIY^vH6`T%w z1#8zh94@mnpr`9x;#f8+kZC#DYXwd_2RfPX$Z8J`gIv@%uzp~lqS_7e6uzakF;9al zTEvO07oV=jvE=hk{hB9TL1RE(u|K7X82*XEnDnHm6DOYDI=s$;4vRF;M`8!k4xl@> zq{=_t@~(iA)v(AT&6Btd@92^lYXH79@!AFypS6k$yebXu+%e!pUp=ec@)FX``8&0W z)60S;Kt9PWfaFcR<#pS@sxaw0Kut}kQtKm@q&f40&CEx}yi8euS1l%iGBo-O9X2-i z7ohjF)Xj7D)&Y1`h|7z>{EqJPLHsQxc*L)cpAdh9-%nn2uFb7#*Qn2&JD9! zh3OB3jdH{bq?cKWCzyzT)Sn-!ZbLy#JFb=lCsK&MHbI*;Kp9*`kI~m|T}T9=`p8Fw z!!>N50C^~3mnzlQ-Lm6m2z2ATMk^LXIBW9$xJSw|I^eSrh;|A6-7Kz3`H4=x-`GzV zKA2_^HmgyIj-=`VV{1Ni?I}PzoR@gF9QRbKPin*uY9+-aR%Q1$HZW)30-t zS>0;%)UMEPPK1WQ6{v4=)0U5tg?h9dKm!6~OdT^QwTMHMUqb=NgW2Gf9&H z1W9mp*`^^n9BP7SuO|}At#2NP&-z-lEYEUM5oT0}!bwV?vZw6+=v-s;a1}0;NI2OL?J<}0f;ILVkM0o zzwv4j^L7?0b(p~hp+P6JM`}T+?FidBckswO=K*+0EyvFsoq@=Z0rZA4fr8F8ELM3A z4m9|Ldej3G=Xn>5YgG^`oiZE5L>Pf#W0YCqR97jA_aNF#?e&E@%(qPDxeswH9s}Zz zP=PV&9Rq&)`UZ$u-$sqmgHRo5rS~>sM_B(Q#^eaEwV%4apBzV#&HkGH+sc+Bb4N!Y z*XiEbzuDqSe&0MmhtYtF=to)(3i|01rY%P_w9O!n+bK_1#=?d4Ktkj^jDK-qX7%cK z03DY5({y{Uu^ER8N)TwVmq>P_n}4vl#qW~0~R>)2Zs2~yajG15*-)u{RjCf zjX6~w$15)x*!U~nY%T%NRM~O9i9l8u7|1=gtL*0KL4Ad&6+o#ICKL3qAN~FLSC^z! zD%+^kawit~w7V#%L=b^D>6-W(Q(wiMleM2tbo?(L>g$!(?5B+rBC4vU*ZpHQ*}g>A zrj(U`!7bFPhpwg<7N4!z{QO7mdq!8SQ#A5MPPY)v>oIj|27m)J1qULKQDjllsqSvKSCb-})q2mMXsLz@t`u{7)X#RBm`})W~H7r1q1l8Vslp9Bc zd3Q5cn6|x{UHY79?f;VZU;Vn{8HN9s|GPCvjTG;r$^Kr4LT)f>K0SP((ga3qVdh%^ z$r>;FXh;{i9#nPp^g_zm0X!(%xBdNF+7K23HwKsfEPG-YwH`Pk+mY!Wr%Iud5kjaYdQ}xymiHa0yB;eCr_=XF&&7A z)88CkBF3rFpmHNw_^#L(aazoLt&Ow`M^llEPDll3kwrcv<#Dsm{1-0!Tboo6$KG1uH+LmrWS`EQjC;=> z1@wl2^RSb4$*sEFh73nsPU&?W&lwXigLl*C2MgY(Q8>mq-S2zX+*?nC_yNAt&AYKz%sJv$J;L zqX;AL+TqBuK2|65@KbY1U~drIVmE!gLn7oiO8r?OVF1|ygal#OU5Oy~DhE(vxol{-!>0`E zH-u=tdZvB-gQ+EqgqB!cbCW#7y`J4yC7tkok4yRco{#!82T5vC{gbl}p$s904WPmf zNMR!^%rJtdN7y_t!C+TtI^4o4N<$nfG995Ru8mLMkv|jjjd8EZ-MMmlqi=faKSjQ` zp}TcP#hyDBHHa(AxKOqUsIWr8fZ5_qWc{*Pzz{r%LIVFY*JN=>(U63N*4UAejavzR z+YBDQ!34kV**}ID5tD?iK-C`$x4M%1DlS~f^6Vj9bm8!S71-SUpR0P~tyyjH z1cL^x%dr?dFDhrl0sTExU|}76ujQxShvtG1M;j^VdiX0@&F`JgUu1*c-16HjmPRId zy3oV`OeanqgP6*~nctTiXfn9aMZ{+X>&EJfj?PDr1qR zegv1&Ob^BVqHIM%@S)U7O;q2u5pcGhw&CXjmyWUE6(C=@x-e=@*n^#6_zPn!~y} zD>qXB#Zh+h(r|+f&NrmB(LGc+xcnu#4ttAT&{vB^_?d73A&WgLd*aQ8KOO`;^HLb# zT;i$|y2ak5jo)_FufX^mg4LrBkU>+qrR3=?i%e-5UKNYd5Sdu=C!HXZDfJ_zg|}es z+<~_RrrV@XT9^|054Zjfv^TxxRPF@i%0v83Vcf2_y1c4nVYX{{Fo(Uh>}lw950_`T zD{F8(J=z`bFr_{j`_g-TO>-q(4!L$u!v3w$h@mWqmY0tXaA zuigY7>U6t<*J3e7@!LZ_%yRx+5lD_jRhq14Eo-9bb$GRaYKi59eAdG>!Z+ko=6 z27M@6-4A!UeFQjA2%eZalq9XkOQ(Ejg*AIc8KTu+8@@{H_Rk#?9;0^9B~c1tMMLz3 zj5YAFyk;5v8Jh+c-$Lea01(qbfKX}D<4axe8Si`F>@qVh>k#u zG6pkQ)E2X5Mma_lQz1k+m(c_0aUN0%gm7{lBuzrH&6y#Y4|Z|)$VfAnNeda+XJJVW zqo>z8Z873pP;D@POD<*Y25->9tj$vEi<2yU=F5xZ1p}2F(dVoYQvMr!&z?v~WU(~Z zES-Am)7pP36w2fu+hlMe2{W~=(|06boo+J;_ARlnIsgMTBI;@aq_PQVQ!JwXdR zLEu?_U2e;k#{XM94$hz>MPVCpu+hxET!7t>yi~7{kuR>YQ0ct#NH0rCl6Tg|ZRth~ zQDFPiQLM5MK#TGbgHy$f`-C0uy9PLhmPcc+Tf3c~&)pm2Cu{#7k=S|Y@;$ycRTX9) z7&&g8tjrm+X3a^nX3a^nX5>QoTE4Hprq)NnNZH9ct2w&8wD-z*TK{<40_KgozDAmp z_(5l(SL*N=js2g!!u|aqssAVwIROGH0%T?jik*4ZtknLl)L!#KP#5j z*8N1E3Wo=Gbb|8n3>zg~kar{>j1GGOY@3W@et-eKMbPPxgV$&ACFK@ez&@|BZ4ZZ! zJPF0cK}Yd8=?^{ETP4VJ!XSOZ zI$j zc$3wQ;K~`KHOupKEJfu zbCW1}{>TaX^Pb+mfAHI_!AzZ;;N_|E&>v>f`utj3fT6u3xFfzcZF4HrgGwSUKetx_9kpE4!4K@Z zJSc`kW;z5-F6}>cYVFZY_qlzW6N8F)J&so5{onLEFujiZG2h4A6+cW0n=kkeS=R~1 zqmLC2NI}`S1c_DvNry(~5kfB4yk(bKnKh=&mSWg9XXwWCnc($&D=>*8X?mNBl_0TK z_N$K=E9g!o`B03@jYit&7I=|&{N?g}LAL~vjvQ6JUw9Hlqou-!!~}Xzq`PGPkt5(h z5fT!pQQ1B47hT|h;!Y{uRT?_h5iKhCDo0KrG*)G*OWwbS&GzV|)!%8r`2)jAOTDki zLPDSFPL)etu0KI$Oe7K+gp20`hD6;*rii~31SSpW#*c&sq;`&JJWbP;GbMK!G&E68Ay=o zbcdzup<_8pje;IDygFN>;$kS|xne=&G7f?dl@xaTase|OCu;l<1hECghi!>&fRsas zL}#8$5nrQL8e1+S)RC^%Lq zIUrx6&@j2^tO#aQL>(0zbWn(F*dxE0hEof0M|Sg_-1BVhULb05@DL))X6Xwr6cR_Y zf$JO)pVE`r{4P{MK!&v_i;!LNB`-~Nd-(o#8%~-7F4rg4X2pIn6fp2*CUh-e{1AzVNek`55oJ(GwCK2uyWlX!qA|!)3M;4#_Kih#aHfY z1zz=gRa%Z+wY%7V$WG5*Ajksc5fqD(7$UPTz3@kXjlm{@t>vM%K3#b;ONH13@KVx6 z|72d;=q$yjr^!DGe4d%t%`QE7DiNX=;A=IDZ4*d8WLJjnh0n9)7 zy9P=zMf>gE2njJB`Y0nQqlq6vAgsVT+=5OVIB?l!tNxJ&MH_}#vSoMpo+{r^;XEJ4 zDBNtY1nl{5&!aN{zBM`^{XtH-x3O;yR8vZEaOAA;DRF9jux18eZ8(m&ha$Q>Jt3?J zBYxma|K9A|@Oh(P+H6tLa|V~6Gjn?ag9qgo7%&WZ$AZAyS<`PbF;YJZLr`5>Y;TLsXVopD<(5!V4Q+P(`O9g_Ttp_u!v@ zB=Vux9#J(oZ-)=Ge7zsVcOlyWHHZV^D2gJ2qobiAKb!5kakyTe&3jnFaj6b)$_x<02)WFsEx+?8h9e5yV0!Wa-iA@kP zDPQ^mif-#7@f9`zkMeYOgnn5U7c8k2EPXO+6HuJpM;kpCi zIW}fZx?!8-5N7zt-Cn1>?SeMigJ)5ptmkYm&)K+}WZ4~HnIeiPAXx!~kHKx;fqM!5 zzNo27EF|mw*NX{1*>>u>t{)Km`yFRxglYD2(x7oKG1QQD(ieoP5gUgvjFI)+=m>u^ ze$a<;-ha$ni5z}bmQ!>yTi%`xT2)%bnWkrx3oHM$&K69GdQIV!89Vl{o{4nH%r8$d&+9*Hilg0fc9bWD77tR zaBVsZE?Zs2_WKtcj*qwmZo-@<(w$uT&<)cux@sKJHPHd*mcDW!y@o96TA`+d!ZQBt zZhFPJesh)hyl5)HVvT?;*e(c-n3&E2--d`a)s#1iiU0;Lgl~k#5;azqrjEBdcA|Xy z0UM~mb~GN3FdoQcjg9u#klpe5-C=JsW*)Lw+|g78uspE>_C2;NvCtfNfE(=?N`@6T>|XrO^k z6eogFbPFQ{V*!dVk|1CWOUHd{=P%&B1ZvjgUOcW_Mf8=&WhB8}X)ULFuS}Zm#8fvYk1ikK*E$rroV2Y+@I=7kuy>)}> zu=CD$9kAkAFL4}8b0Qmp(QU!27?RL?jVCxw!TfdE2@rAn#yY(F>B z5X(~(t>lW62v|~=Zz4{c>{;TzraVmLp6Hm&0wLBc-U!5&gPo=h#$xyzX_RIN_}{dJ z@Vf8e*kQ`fr(TNvzD5K}A z>zAhNhRvG}%G5Aydy1}nnIeS=H2rFB0+q|0%Z>NC9tZCJ7EhiyQBbjW1i{@l4|w^e z;ybyub#YQN9L*s@9b|D1T~aK@hQSab1VoCroJk*VuZ!JpZ?vC!{70vJFzx~ThFHKu z#T6zF<^&H~1!v_{*GG%%i zqSvO>C9YM=Hm0bdwS>%=RTW|o!_3V+FZ0Im(sDdf zNHatuB(TgTu^*3O1zV&KC&c4ePARYg@9USBroWzf#unP<*bQB_5Z zlQW+j_L-TBW*OVFJ~_&&DyX(epEVd~tjsZH37sy_8^H8mv(!J8*YSK#4>oc?XUk3U zEX+6uOu20`)GBDDmBFZ$fe8i^EUV9}-xY@h7C6+#V-V`*P?1UY{hy7-XZ0WIA^@aP zDWMnm2lp_V%w+3(PX z2?>SkAn8ZlhDuT;M1=K3u-1r*wMO?=eD*Fy95_=nw`eI6>ewigqt)cbU? z->&?g*oTM&;U~)=S>(JxJX`$}v+ zw~e|a{~XY`>0IlNyzM$d9~9#_-`5`*>9;a0{1hGSQX*3ZPreV7SX#a$)BL}_?=j_M z^z@Ar|4UEZa8UJ7o#%dkIWS$TDq==V%qC%(nEI_H<9HB;9fCN$vCo)Xk)lYiEFbNo ziCqF%4K>CYok!}ipOS*oSL>l>oWZg=IOg*6na=ZGhnCx@z{PwYH`5kvsS#^h?S81- zx~z5>m#$Pn4hY-0#L)bhOLot|$YemMBGTF=H+~B@(!)*9odf2e%<1HGuA?byj9*o% z^&45dY3pWxs4h#4QVbdnymA+4FoA{;FwwtUGl#9-Itz|Z+RSDVX<)+tH2XA3dIW8@ zsP2GnR|_vq;X_Nm-tG3_Eah2908UK=L8^r!id2Lyx`0F|g>Mg9Cwz>je}z_V^o1Qa z?yIzyZ)CNlaJDk_Yc}G_OQ<5Cef`;DIdr=mzOOsj(9dMt1kbd-TfUFCyf->{-zE%3 zzUP6i8^K5f4_H9d%6bq^_ygN?q9h1QffBdjzYHhHiq`^!&k~ByvFv_u6!UI8vAB## zxxJILyAh{X^%c9B2Ik+Hq3Slt?JqMRGI{;(1<3FtW-`RCA3p{D8{w6&)6y75$OQoW z3?T;+Rb0zWc-byzUk2k4Wx^ z#c!j;oguH$aq>9+8mfWj)&2&c-v*kL(v-}U;hC}UwbMYdTD>jJ?eBPMX$SiSc7syK z*e|+`Y-JNBU}g+~`$Upoz}0}W({GIP9ofT4ebqn;225Qrs-P&OP>B!ye z+Dw=%zkA;pPJees+LJbDr1yPY{!0dRn*11Q^dpH5`Qnu+5gZgx3~{%dQhx*5r8;;; z{l8Iqdo-Bjh?gsatKxWb54RDel$v?i)aeg6%K=kse#d`^ zH<_YsHg9Rn8e2c~1U(O+KvKuCAIK5g5e=CU``1xfQXMFgGg<)A9$0>0U~#ZZJZc^R z2PAOKFNLTQ-%dpO0Nx4~KLcu>76v?V|LF`l3@}Jw*7*HilZ#`ex(;Ch#v!?HF)PUF z+5x&xMnj8ZewD_^1+EX>J8rmUDc=acf;H_lk?kn})^X#qbgF#To>LIl5O-Z4QS3?K2T!O;H=Drx$S_!>>LweXW99=dx zxKoBTu6vy4J9l0=5fVTPcsnF5^%+^4)Yg2q2SdqEi2(eZRB%k!<5qd_=-U z@@6vuBp?UI+m94;cfKbaap)F8U=39+5}lC0@Y9c&kL8ij@+X}+e-a-=2@n|rVN7ec zuMcG6Q7-pYG`t{TegT7Ipbr34uy{pP42nZQh4b>Kn$NjdccKv_74ZLfH5RNvmm#<) zez*dPAm>FuREB_pzs40ilDJo{1?Z{%%B4b5Br0vnrO=6q2zrCnm5Rt|1R*yc2VmNe zhOW|;RaI40RaHe*RaI40Rae{{ID}e|BDJl?E|9`|mvL#SaxS_gS16lY*mOGh%c~~% z7qTEQST7kpVw@U{4rdrlI`~wz(z^Ae4cl`LDl!xWz+165+H`ckcBet8W!wN!- zjy&-ayfjpFx}GS>w60aARJDi zGGwxxWcf+4=kN9%RLj+N7>f3_=-0XLbDZZq0S!T5+w$r<@a!}tAjypTT zkOSGjJ+u#99K~~v8xFD*5n!{C55$qsfE&Xe0JT7#hnm^Cr?UVYY1RKMifZP)p+#?q z{T_>7pTz9!754mG@pG18gt|b3<0N8;Qp6(CdCJ0QHQE5BbU9tQpSv>~*>2nMr||BT zXw>~k!{gS}{F^c~Yt*-xiZX8TgRQcs#)8}t66O8gotSer8}$On69&ENL1y8OvAc6?JsCZ zvu_6jzcY}BT56pKSXJJF)h;@ST{_HamiE2NTCj0&aB*B3wibP@t$eLmWMf7}!wheW zh3#_HYYof{TVz%(G}W>#bZVRBYdJVLxUeP;7}16pT4FVY1}#+=adBF#99&#n99%#q zxMtK6Nv`aO?BuHiWs#xQ=Q;R={l8D!Y{kGM5Adqqq;@%~&Z}z69-`o)KUn_18i#p8 z5AeXDVUrCS5j?-Bs_=62vz(TWTyQu-C`tw#{0?ZDW$w1L)-ZHjo34BVp_0$U;)asA z2$g6tMJ6C-hGYry#%uu!FoZ5?q7py^=240=flNY<3#P8eY8X>8^uOVa-TW~G@_A$Tl1OBeS&BuQVw7m;E*&es>laa8HhzGDq1Lj+ZUU>Ss|ky6D4b|zW}+{Z&!;bU>%=hp|PeqL_y<)}#@qdDNhXj_*Q z0UjtKA|nHqaYq*Pb;72?Ykh95jncz-+=Rm2w3sjCnPT#OkyD2+>G~n3I{$4?x~(3J zZJi*;sSS`p_zL(6MqcuOEqF2jt%ndOpb8SiVBno_#C5VFaeEzL$U7}wP-et%fCnr) zyPLdQkb0F=-bh%AG6I}U!Ts)Rl6z6LOP*$cgQec;VRpQ}I!TNkRchd#uWd|pL@u($ z8REF=V9V|yipfI3n#-{Tn`e%Do8Pzl8j>}cLTdgRI%o6#@_4=--H)#h*WShSpqc17 zW| zXW;f&Ye?|n~N`}|ZRQ*{no$m{Utw&c(h*JG#bkE4}rYcCAD?%`1KBWj)Uvb&1 zyXc(+PMju2@dN!XSY!rkmwmp$2yH(P)4K0?T<=rm6Y{#OhRPy*+VWypN@+V5k%u=k zmd@U=v0>cRDlv+gug{$Sl&Pj;43TVMy{J&^q!MACj}kVmh~sX<-l-Br!W?{^hKv$e zPzs@t9Zx~oR9)RW9n6l6ELETa+MS%SIO-h=In;E<3yDt@!Oz3Gj<(Trq7N0)2(l=L zrN^G)OX^455o)>8)awgtRJq+lrgWM($d zSEHDmWR{!R*Lqs+Obw6A;#-n^Z^P*LLHIq^_qpmma@yEX+V%x3q7+$KDR$z~axaU- zF1^uAMkx>gn;dBsu!Dh_tAw!S?Lb?_v($`f7(ycH=D7a8ZS9R_h!GR*!O(MRz+g5+ zKE&VN3#b6ic;UaBH-mw*>Ia~QMQ%14aN}TvJiYy%xwqWi=mk{;5PV;2?tj;fr230? zCE|DqB)cL$hTv5ExGCD`^FDV`+0;uZ-s|grAS7mwn@#%by(wwE{J)*uWcyWsFf&8i zQHWWWCjpN0;nuQxEE>V|RCS=cNt4l)wK=|h^l8yw4LR5*M*PUw%?VWA1b4(;qNLDg zbaW*mS`{-_4oLejB0?`Bd>lOgMUi*B5bMNB;?ouT*$a8LLG9jxYm7Q>yV^8Bi71eULr4da zc3YUEf)oRbk>T>xh)DlY)xd!(tDx0<&g+}7g_02$>2^XUtW>-aGv&%A79vRG6;O^i zQjW}+mNPwY{d5w9JZ>?z7#GwPVg=epa0Z|PXuuXp%ntyMOjv<{$EqyxLBPh%A{0YG z2pFN$p;~Q+3|D^aZzJbOwmoVG1h|YuVe&$DZUoSXQJFEltH`S93$os;99S151dKvv zupaB>yR@hh9v(Q#AbT24ttA;5q&>UhKR%T{ZRaI40RaI40RaI40 zRaI40RaIN4d0LR**q11lj4=#D5XU33&R|spMzCJ%l<4s>1sgolShQLYq>)LwDkV+I zLS%8krQLF|m@2(~(J~VldS3T+4cj88kmZ$vs_L51;F3g#FWL0nUlZeKoR8e&Iehkl z9%|$8_fpQp(yMB|r_ZepxB{*pK2}@%WG|~Ty}zXf{PxQza>BuUEoa0%oCSB*?&Wr~ zX7_Q*ySf1r9?k%^0!Y#Djcd%6LS(mkP1{# zB?K4+3c!>QKq&Zmo^s&3peT8ltGGNXiPHSZzl0 zl*g6U{|~LJs}8OeqjyDgg*K)7NiHUMYV=Z}HxQMSgxukEw=Vvfp*5b?=MO~>C*WV( zBis@CZO#vmNO#gYs*i$~RBNs|^2?x_0aq}=xFoUGK=hs6W6y6s{@PB!(u}ma*Tio_ z9{o$;j+-}P2`{bGxDpz9W<*M3G11e!HI7$0M*Z)#BuL>AEQC`K{na8(qq!EROtZ-p zrDGql;Tq&JICmBt=pF@!Ol0>~X_R1QJT3-G(>*jsaGkw~LrISb9mMM$wgkNfdu>oI z$rCV+A?v$-4zLl9q60EMitAWFp(MM){NO}ChKf@I_-4B;;&6-X%54s=$4#{HYEYWX zIjRn|D7x)vvM1+L*!xigK@lxjZHq~f;^-_;B)HQJh=yiN`@F4}o9aZJZMwCR_Q?SU zMFAK!6iG9KMFI}Cj)QbM#`#^^AHwoE_QX0~T#&7~pL$_Za7WTV{v)5xrmq;IDJ?L zmOM9d{lV^4@Bro)QoSPYlmD=HK=EtmZ+EjGi39Fa^rS6SH%Q+GBAS9OyHVfEvbRDd z`NWvOet8I~3Q&s3RmzC&8LzTh$#}tG)}ry2jF#vb$&Xqm9yIF^NKlbZd5`>=<6d7Vlj$e+_}asWuu5t87pK^~7+ zyFYOch%JxL$TH|LryP2tN8J^Xd&zlAUtZO{OIfKWqiXN2PsW@8o5`^>Xt8wX@4#X95eJu0KQtrkPh3()7la^;7n0~Xk+$DEH#7$w#r`J;{`<|8LIDT; zYkLHFgN7S2^;`==J@^a|04#jS&a^NQ{rZL8GlWp|9_Grd<^b2B7K|k&W1L6C{qlM0 z{5N)q9Avoooza085JzSsCI(~Lf*ega_uA^d3nYGCm!#(mjiHvKrk9|~0s#4`En53M zJ#U??o95~43}^@dK!8fkP}Q?BjCWWWPLpkFWVXEDWrh9XXpZfdT72IlCfWWjG3WBZ zsmEp^_B~n#-7eOJj=zk|KyL#K&zWGXV}BOo>QDZvx(vN9(&b%@q8F;D6kHo=98Kvy@U zrMLXMoV$>R+yUO$IbLeL=cE6=zu)1$@bpf0hf%7v7NV@SN=Crdan&w>isSq4nl&0L zh2u?T$PbQMJ*JZDN6tyc>oFg%NK#($?E%tlkmW^)6R+wx z$>_T$8#F{I>*G%LEW;l_B51(*2tc1ZHQRrNiQ}#-;U<7QxR*!3$i@!XcuEVnz`d zV1ps6!&{Y=)=w9e7tba<2zeN&M% zd~yAMhcU7t9z_Z$_bG}Vtz6L6XyXLqsv-C;s%*bf8i%3hdSei3fuXL`H}kU@yGpk3 zwiYioX`Y=W?O1cS{df!?``Z6Xo-^`ya!F3b4WeQaO$fAA8Jy;L%4wr_15y1XCd{bZ z4NrCCa(^${tb_Xj8hohwaVKgcz6?SBzI=Fat62K@j4Q}X$rc%w5#BiSwfk>-f%y8S zsfuU|yzNTC#ERhZ3iPeY8S4OTf&gSnMDvuC@+>{>hcj8Y&S#I>Z3+z*9pbS?MotGI zJfBJ*&%}g_l;=YRtDUsW8YGLFy}-5&D30uf{l6$oB$NRh< z`mKBjbE>OT{-FGWLnxDD?=R6%Kyrw%L3)eOxZ*A6~&C&7+k<-mR1+KkjKS*^W!vD_A^Y9a(W$JF>FUJroMa`JVF7a2YS#x~k zB74>kk@_NvijXO5lxU`^WHa7}Md#|18>2X}Sy;p;>WU46>(R63Ke3EjTet|R7uDL4 ztm>`cg*HneS4UpVGKgTtAxeuK?1g5%{1151HW(!K|wABee4)MPj!FwcBgl}jmG3?da)I_8-F%5 z*H=QWfEk7vFv7hNPi%YQ7*qMKj)Qy(F}m^`b|$KtY{d6bhoy7$$kI3`vMB3bsEK-e z$l@d~#xNM)ij6;vkjW)C8)Ab^8Ivi1+wqtxW3w{!Y~SdDp}o7puWPzN$DoIWUbg1G zqH4sQUxRbq7%e8pSeS#*&*n~Hq= zCnB0=>rX!0XQ(+JrWwgdeceWg&v#;4Cnhus#%K!Hv0ORdS(BtqS|$BD%%{7NHr<#42h-sjjj74Oc*nk}SRpLFdrGBIowB=)D}V zxquujh_m~ukF!nc)|IZpDJtETqRlj_QxV!(9)81vQ`$7{DM?@)8?MK(LidN?2P_dywNCXmo^pO91|PaGww4y1^qScrPEoy#&d zRyE=oRbx>BW)ibSM#C{&@bK{Q@FZu~+0PTU+QVFYx`}%OY+2+fYa4Nw&R)V<^cd2i6s9x_wb~sgc|8H|%<#U+liuXKY`JD1^^qpq`RAC-| zyinDR4jnj{!rZ%L&Lo0JFU|QwHpq7)hezAnggpV9TkoY zeYLB(_h4xBt(z-mL}q_xTgw~g?PDZ5HP5Jf)^EHVLMK83!gPJ^MEN1(dw#RuA&}M_ z{8d+@%W`k!V0Zml~oCP&x6V5swQ|cBwdZR))vGTVJ#nmR*9_>WWZ<-Sp!3t z)x*^ghh&L>mq5UD;{*dCZ&?>;yt9h$ns-*yZiF~;^Gf!V5QdXZ&-xK%Uyn~q`seMICJERXlUbr2-vm)XT3R%7W{{=8p z0Xjs(6A?O2swF~jQc1{f(|;@TJ(JAy|2L|+&h7eX+e?8d+UdELDZneB)Gd0*T|<`y z0i1*?GKv%u(1fU1y+~S#jFu*qap55-OKFaiOSG$LE~bd+2OVvx5J(zF=o5jzBKcB5;P0GXM2v-DjA(@yH zAUzcy1x)@2M0{5oE`>=^hUZ4Pj3S2%6ByIIIyvCOe-$k+APiP!sT0BRCt)Hd3a!aMv75og<)RAs$mU|=PV75a_*_)n?uUBCoe<+dlWd2H*_ci`*@5YPHlPgcm zy>Nq(D9TbaV;?p89_Ej(lJ-YwuKu27|In>hysKH^%Lthe;~TyqlqRl5GXhDsUm)*c zufs)-B^hw&1XO6dqgdOZ4#g)YksXj{w$EkiFL1Ix0OTE5&wxN3gSR}+`yWYgZ?<~1 zsP%fTq=)jzow9yHaVA8quJHi&hJy3n3K;}>lsnTvFEI=zU~RT?IQXgUe2sqtqu^53 z>$JbPOP4}QYXOkEq<9LZ18Txf3H4nEf+Nizrm@RbZTk_1J~z3?<8xWV4ZUF)sKrKf z;qn+hXg4nwFY7>cR2=H_Mnd5on_VzMwtURUmIT?|wI^8&m1&b6g7P^Ykm~XxG(yv2 zf%`%L2i$*_L|O6o4$0(Db8|HhX-Z>@&D8-{mQF4Y%EJj)2?{}*`o z_A5|gG}y^u4j(Du-ttgsd+U1e2l97TvvhyJKUb>fFfrQv{Hd^=qx_w#jZYC9q2|Ov zxUR~|)#On76EuDdBpVv5GU3wt9qO^n62V$VtZeIm7KI=OXuL9s8){dnMdPUksAg+u zYq?q2?p=aC{2^5fNXzQ(eFacUXI9dxt-7UFQnQ-(j>Dz6MnwI$NL~$%$icRbABPxHEdJRM zqpF~oyo%1FS;_5NKLNh;}a#lY{tVoekjZ#ET2Gdl` z&b&IU4Ttvq1y}w!!M1rD?W15fVAPl#Y-}F#`?j>dj~1Mbi>TYkBl?s?%MS@XQ3t6| zA|lTZ5t82ac=L2-pfr+YZUZ#}mU}*yTsly9!4IE^6(~3I$IOKov7v;bT5lG}s^Hm1e@$QL?r&-Ew0$PH zt_(QD3I2WK8)Lh)90Z+A9`jm&}E0Vmcv`q(IovX`eF!;%m>$te#heSt|njttS zX$UQ%k)t-6%4yTeP%(NlqyH@n35{mQnnWmD;-35+#uQ0A0;bO-MZ{t_ZW@owh>-Z) zh)qgJ{vqc!D^&&RJLzd;~`ihyUecyA{Tk({wpe8fX(wp`6BS|DB$V<&1M(fR?7?pt`WAhRx@DR5SvcluDHwgl#>WX(A&)>1=E>ge`4IKe zNeA{oL^Ut+_VPofPw{PY`tZ@F3>xDDYiE@3`5!{iI#w1R(sfwC--xXTt7$h`dMm#A zMjdddpooD%PYHN+pD)~g?H)!M7`%@b3q(UseZDN=PF$@0RFC$o&%I;2*L*f7{il(W zQjIyJg#Tb*W>bwKUv?5*Qdr4aNSpIZkV7v;28GV(kqe-D!G?)3eMY2JvRohl>jhtYE?K>2R~RK2C-w zZcqAWDADALG6kwA z(MBVCmbIw`$Y&HSl&g_$D~3QN&TnBd|Lno;W_MrmBlf~?HJ<0${zyFV6V1Y$eE0pm zF&nor#@`XVuB94cwR^yh=wD&2*^f_(7TCT4z@75 zE%Lui?PkEjYuf08qv^hY_F`VSTb=Ap*Y5y(UB?sAk8sb<&!WKV9>2$UL27VFb0D1<4euy#vKge|k{wdM4##`>*Lu>#z(Spla zYM4m=d(`b)o`CHA8QAriSSvyML(PcJ_Cn$8Ze&_WL%s(qc!9cYY_H%jVS5+-R5NR2 zh8SVFyE!S5H!=XpRbK}$V<;lW@W*k!HS>MlQNY_1q*>Gcu&%@JxFYkO7Pt|Fi(cF3 z)RllEJ_884U6%8nt6P(l?P(R+y?1l6-|#!pUK;yzsLD&#oSu^l2P3!Br*1!>%;C-% znS{*9W~8A}j8-EKbFc3Ex#S2P4}%kw4St59_mgq$&tP5c1PNZPtBsSsS%I6bMV16a zA;4SYB%rL>x2y<@i(nCFUs^h@0A7(t-YMxJxbbyDNhwNFg2aW)Mm`Pp$BL7wv&2Hn z#N@X9*E|9BgCk6nfFzx`ke(cfTuX^@3un7@!T@pnw_^kJpnP->^+3`?*B27v7c$W& zG|Rt8^f;!@rF7w-+0@Bj&?K@2#qr_gO%`x1$T!QeIGnzFf2woO{gpVo-V*ORD?V7! zpT(%+ZrtUGns&FH$r%tv=n#Y;A(rR~q-jCcCr~9+@Ka)!ms&vS<4vzVQ_SnPUzdxI zzO~;@p457l7aqFdV*lUIerLzYP+FTTXyRzW)w+b2;4uR$bn&{cTPD6^18=rJ^Tyd> z7$H;}xP8~o-rBwfStN{>jr^r&tp(lB-u=J0s2`!5kZLUaTu=A(&K$-LO199VAfgAKpxHjm?qtQZtW(PZ+o;{y& zeuySElG{T`VKgVJcCS`a%WK(Hw5Yu_MR2{yrXFuZPa^SU3DAA@2WuCr0G^ z!dC$dG65I%h%6^4%UAYW=G$cgNf2uB;Jy zj{z3K7yXOUMdiiajMQDYL*k5x5b_$!szt&X5}!xU4>=Fai`pB{+L?04^(k!;4S z)&QLTeK$ZGaM;9N^_D`}cFN(OOxga;KOIJc$vC zV^IFHk0XVl(N+Jk*_lscgW6;TkOg21APeZIMzZd0a2VUy`4YG&l!iql%tWwC z(+@?5Z=*la-;QiEGWdHAqMA>o%3*4_0R{d?bkUkAHnNEGVj#pA6BK@f={Y0X`%N9D zMbLxf6#E;{Ls6$$#;{COi8_V)NC1j+uQHW4JcqvZShbW{uWqZ~)zWiqZjWeRC>uUn z`e&VSn7hy++c`1;Up)xi_ADI1qtYO3_5l%RUHWZ2R{iwoaZsmP$)XBt8xiAky!Qd` zYZXsvM}ZBR;t7-yDc@gQG!!JXIDp;_f+gi8q%0k#hQC@)!xeJ|;qN~C` zup>&H4*%_=s`+d?SdGj2a8@s$y|rBJA4z<5XYG;p_UDN~?Rf1c%DMF%?nUL#%KlXk zTkx(rO1uZEts3{7M)edGkOZjWI<-Q;;4u~PUAL^!#Y-rNkh7i6&=Euy!_Pv|19E`5 z>;Vi`T>-7Bp%Cis)aGYJzv03yclC2TaQs@|sY9Q-l{cN1t7)@8bX*Hl*DT##&+(&s z$K%Tg;dPRb_P;GN2MRu#@U^6};zO^ULRL1`s70+IpSeJ*0>t=(<`_8Vsf(Nbz6VfR ztBeO5Co8U)^HW|@JQ@9non!vM~}w4yjt>J zOA4~2b-Jfcc&^z^M0vp9Y^lW(!69Zm{tC+0-_%poNT{6sC}8srq>a0=4-`R^z04O^ zdSg2h2ng6eC{nk10#m87Wp!h4n?YxP~v|k%Q!AN{fuRLeW{N#{bh#4dni82IAB(P1E;*@>VzeABev>-ty5AnkCyH5*& z%9t`5?W{yqtTzM-o&y>+&%a$E+@M4NW3c8KhGW^j)@-xq40_sOMQM~*T$qfL_w_X$ z2M32uOAj#d`jMUzTqLPyI_@WAagdZ5Yp5KQT5?Oa@2|S>H}2Q$!4l7JX17&F%>cNd zf72ma@tjG&UX}*sPV4zQ|2wOIvV2d=A;I*lhVT54?y0|DN#Apk(QnwmpqZOzMS>hh z0!pk*DdUjIkjxF}Mb=BC?msuLocC9AR6|(i9=&&ow*~F&^}WB=w~_8Wac*FM(c2%* z`R=1N=wjsUxf^3S!8ZEWS!>T!C-sKur1}}E@7JLzX zz-6#B_x=6lo^(E?d>YFlU==R>zZG$q`{)e-SLez3h+6WGqcM{Mg9wjUr-(8Do(z$X z5gA6;?dz#;ahIrT=M{)ApLq_8L!TY~d)3J5XKk8`6cps(JwO~d3@>mx#E@Lm?kcFc zaOdj7G1K~X1u%r-?m?mX-efvX{}0^1-F=T8ezgR3N9|&kvC4fI7%Wr>lgh!11%6q| z+T>YSw){=Cv#uaRv3B}Lf_?>v)H1woJ+~b&rlnonfyuNKVnrHT_oo1rJx!X+n(_VDN~Ke z=l?2lnT~nbR^Qw|gIHRI_S=UT&eh}=KzP@%V~#_dI#7B+BWN)il0Az8B(?=zE!^RI z-vgeadN^8okieLe0(qZ>Ys~e0C7V=l6{M>liJE*HTHs=0*2NaVtJ@;3-CC-y8TmZV zF`8*eGfIL;W)N6fIw%W6WQA31B$SXDX z$5^%QPGb}|K!W>7Dgh!%@uvGIcA3B%IsKr5Tl^%sFCU1rROgbj+}hJjG`Wgk@igx> zz?tZag_COoGhFX{dLiv#=s*74m9@R~#1+0)D>2U04cIsnKFVSCHWFU`LKd3VZ$FS| z!$Zns9c7@skj&1$U(XPMq4&~g;l1JP}pXbJIhqF~H29y7jWOVct+qMX3&hh&HDumjJKgVTU(1dwkx0tKL5 zj;qWhmCWJT8g}3=;5J8GKPuRvA%yql~gKJH;AQ5@20(W0A z5iXTCzngo=!cTX9N}svjZ;8^g_j6DG@(6*jy^mDq+oogV^cXJ95>kJu6T)s^UZASbn zPwns}JCwvRilji$AXq1K2Jx0fQZPXmKYroM{2v$ZHmi&4vCYQlYbAet4Zzm{$RfDK zwo)P>QUuF2D8lu#26tmqXK4Wx7j@(6C#{S)%xW!b->)yy;qjU!2O^3xu!HC@aBMuu_20-}O z1Kn5;x`jNKCOH`%nFe!@66Vz$HBN@GG;0+t>>XRb^21J%0b&TE#kQv_4W#=v&Tsh) z4R3MI>T^g&i1qYnS5O`^4Ui6{Blk*WW%pEXF0(W+3yTpj zcfRO9Y)cahL@)2NzO_Hreg9>AfxMq#_-R)q7nehJXtHvnGW@;9Tsg@}b@9orrAn%5 z1m>o!#SI{7QFeAaj@Qio@1FVp$-3hI+j;R(<8><$e!0zmU4^)=TB^wPyq@?`DZ zcFB0rTUjsi~>z zo_^6*6)DKh#&^NCrawb7aEk&7?4Pob;j7Vbi0kRv6iRg+k9If2t9E?d=-ED8KG%0h zqsq5zTHdO9WqMmfE>~4<*_7kXPA2n4RN|?h8-`q#(-N2dc-TVQnG@ zn@qL$Ng|`b;I?#`FnPjfO7gB>&~J;TQZSOH09C346;glEuX&(#8>d@l-h+%c66AkV zrswfAlZkl@=HeAE0KNT}h%>rC6mzA#OHvOg=X92C!$BRz06T4C+6elC?!BHKKJ=YN zm)fT5a{p@NhisQQ|H__o_0KS~XJIW9mIK(zkXxbA18>yS=@RbZ=6K`ZP1c0VI<*TY z^hfJ|5D>qr3ay@|2M%`t!@nSA<3$hspi%Jg{P<*z0le;DSvqT zN=Bmchjyd#(}iLhbEhkN#S;l?kwKk5^2w!d4t-6+ngo;^EbM<^_DDH(@d6$(bHNjB zuP26!&K0C> z44Wi**sqmCJlqD^v;%5ynx#?5%P?j<&tSq>jEA1FbEtlMt>!|c70X{CRg5Eg$TP0Z?~5((#E zD3wNUKITFPWKe0n5$L|=jzs^jY&@U`-JE71BJ+DZ=LC~LZrgzOxYd4HFm(~omFK%~ zlJjeAWT8J_zut>wXZg}Yvk#vbqOfsQd;|acoifc&Bc(;u42>v!9N2TKiyVMNLFOXS zVjD-A1GX0TgSRJl-4x=OgHKIJUl#ATpdZ|sI4t*J=;lTP*2^9oFP!%4<1F&q#PTlJ zyo~(l!~kLPr4CLSC6FQta+bWf`f0V23CT{p3M*&X2Nu?-fh99{rTZ88C5^JoS6o;I zgs`54aL|?ep%{P|ViTMpIb?0N$Tv;?Zsr^GSg3UVoiO^_AxGK%lWgJ1nQywCJ(V8> zxX@fF5TlTpo#qJ1(wK>%J6FXkuDrZ_%unj!!#$x_wbDd2(`;m!XjI-o7`&e9#?`y` zAwbYsv>nWvCy8>XH$FFs?O#IWKM zn`${$!}#B;zyBp)$h>K6$2FV*BHJLp9nU1oI8rEc%NKjkSh|Oy^0XDS_P=0@CB0AQ z2z?J4ebCmq70`J^tmyBWh|=?lC~e(q(}AUpy}PWea;|Jv{HZ8h!$Dz{fl7ru&;3Ad*{%;SzPQ>6J2st)z0&BG>Zd2#s#P}c zBdj$^KqfYO;-_;}^~e5D;AbtxG0Vyrj3hxr$CEs{JELd-AoD>{mtTY?J3@w@_Nx8m znm4FoMU$SQT6n(fbZ$j&6GZZi`ZZmrrCj%`u~w>0P_$DVO{#qJ_u*!nNOVjX1Rc|g z=1^>1MR7@%8A+uTbV|}{v{FWEVjh$fbmr7X15A=f4<5ibEVZp zSNND~eZ;r1XfQvGGM>`0CGWnC>sZBCkh;h=cUF?E*ZstLL7<>7HP2-QS6g-*M45(I zKe=*>n4iVt$aICJ3Fi zdk`uwPQ8jE(mqO>^(ZiZuj>MyN)s)7g(OS#86U#MEm8ovh4zW=JIEmj?rX2dY3FSj zMzUwMGT@#FS64d_DYA)8%Lh^{%`w@d{52BKMm$5x8%iSvY(>k2>uxSFcuV@tvhCPu?&|4WZHg~i<{U^?W0igfR` zar0{OL(aVDR0ko=ggc5y5oTKZNdX}%s_Ez-byAb6~A zO*{iE{6?!~Zb6PiS1+Nz=gfn)uyv;3kCg52L{||doFy+R-HBqj!RW4isK0LZ;@hh2 zBEP__e!{}HY(c@VJ)PGK*^qPYs{f!DCa&LIRy+M;E=MJv{S2@siA63?W=NaEnJi)< zYs!VKb0G^lm%;sIf!Y@ie&^B3P_LDi*(YuA3KMAuJ_dN9WjVQ6l}qX$w_(~>#t6;T1|u&HE){>OVuSDn_%wDj7>6} zR@M^Jr!}f!KHcGUL+5xvP9h4`-uz9lz6rd+dXcmCI}%uiUZt#vVq$qOQv;0*Ec?UG zxOU?9h55D!X*J;6>!FZZ0L3fGv{9jq#}sBy2&{eH+Ssrlmx7_g9W3kfizMO?UV{J% zzSP}^;RQ=6l~RDZr&D*`I_NQ`szNDN@sHt=zw+&CubZ0{A@n#PAmN<7R~b$mSMLTegq5#h%G%;A4iD}*{E2Ke&@K*!XVL|XHN$uGRnuMQ)kFIQ@` zWWK?5y_2&=c7GZbcQ>x;8e|$Is4iOw;AP8J@7$91+7SIRUq0?LB<+a_$|d1Z8VI1r zks-jj|E0yf3mXN1*3so~J#X_OgGcJtYPJTH7W(fuVfK*G1ksSV2yU(9=xFW6QR!BZuCC4`&)2Oh*ThI0OfC3U*rs+XG(pGJ zZ+02@2Mb8_YFrV6I6Tab+@JGT93>r&#jTw zKm`p0k~9tUTHEun!K$AUM!J~#Rh}GPLJu|K4Wn&&a}ex>zwO0Ph0tWbpRI4{Xd9t3 zJob><}*i3TUi_%+CPU{yS|0T!*NvCq@xF9;yNeKd+cSFUI0%y!=^1B_`2d!6t8RZ=5pJ~dl{TU;}+uQe@ z2q=TLhaHm|0$<3F?2m@tH$$!v=Mbc(NQ=1R`4A+Wbl60Ox~p$z6OC4hfa#zfFAo{rd}?vONAT zE5coM38h()V!R`mBZuXp#4GRI4Lu?~GZ&bw7Wu~MJ2=R`RS}8jcv1O#z3y@vP*!@; z{I%Ic-)PTkwUE&p)U5I-J)35`c?YTb1zC3kHid#VOvEJ8unM|qB}?z%fup~17JjmH zCmn1KD2#PO9e7hX!pH?bT<48*|L0whN92?vf34S#i@M?eRzIDnHRp z&0`#??fJS>a<@>QIc*r}u?OER9u~1(<`iC~cq1fs^!0*Wo)3jxBanJ_BO;d``lbkm zIjLp6?!d0~G6W#5Lvn6KE?H9k%E@wJ-tHmy*LC(!r)+LoH&!iNsGl@v-acJfUfJJ! z-XqD)UuC!b{ADr+>Gm=JsQwYOhxC-tH%d<@k7@1zlTKFc`0(TLPspDQN1qLG=^QdO zcAM@wbrokyqk9+nG z*bjc{bvE;`c%sB@6UoQyzwqLNnN_9$(enFp?1l*AgR{&S zE|zD{AG0$SPd%gc$L9xL3YFmO;dWf*t6I4KUN-j8r}YG4wHySdsIR{uPI?eeEm=qj zQ7}0wiqbiDFN034@00y6elvRgchf7cKp5o^NEkJo;%D#T8UG*>B!YB;R9Oz#L_Ab? zvRK|7k@{hsQ7Ph}zpMP3G4)lLHW63tR-Ay!(FmOj?wxaIbrD;0sKE{oHlNnE7u1sZ z{ar-SF-XoHw{@x!W1h=~2TnnlB z?_5-91a%3Xeg|Z%xC%yP4+{d5)UZFI#)otp#hulRKRzp=D*2s5#38e^reA|AZ;uEX z;>(yWl_4)mU8FgT+R@l@AH{=z2cN_-e z`nyx5kdDDE5Ee{jo8Z}u3-D}Rwv%5 zi03&lZjKbga&Cl!6lKSKr`KX+K&PLH7?xj`_mO{d6?-G6Cv7IOn4cn=pjsr0yE`2h zYNavTcd{$2Rc9FEaFfa=5U??ite)LmBE_8;NkMF{)Bf1(>SdsaAHo2==rBCkmMQ3o zwTygYJ5f4SF+C#s9*)whUG)QoH4@H-j-5ELsg_HB)~g9qM=>i=?y~>^nhq_ZUko5k zj5Ij{t7+NV=b&t9l<^EQ!K{!72vLZsR(mp73_^S1XY3}nKv7cCx!i6xJI<7E;#QmT zpRZJY6*>pvvt4bzUl1ji7BdSeP~K6s&%FWob4_+)WQ$)V{%%Pk1&`M0DbJtC@B zhsZBS<;abb*!pVDg~bTIEwAhmZD#=sdM$c3!c9ISgR1@3OVLbZw6&+us(mscYzpWP zq#22N`|~;ySFd~zI-w^_C-@G{DV<(t8EMV9=5Kyn#p0G2xGhyb5{qR@n>xz><(Li6 z*#Ofmi6~y1_OiV@Lfk>#yBjjpZ;W7*>G&W@Kjs*W+6OIAmw{8XUL{Bm7JnH#3bN>f zzvyAhj(wncybzCkL*4ca=aiI63FwzR3!^G~+V+i&p9Bd7zhWgRXb=5a9F+2PB`vvY zRdJ8EmNPLl_Dee66J2)E~UJePFAw>1A(g^tGTVD zl;MU$#879*THLPdBB>Bm!#=|HJnl(G=FUZ+SxZNKwik~*L)k?`-hwFY`GzVav zG0cd6QF;y$xH8yJUUqYJ@!@*vZ3{2+6e{(mP@_k1`x5NPr(YD4An8xJaMn4KBHr@! z5a1#XJB}Gh>jMi9vjhW&X96Kogo#c=A=qA;f;z4yyUkBXVc+^kOjl8 zNpRiY#jKGqWJ7bh?EY>2%n$f}6tQa<78@SbFc5TPBOj#6v*u(^ZnuX))MVJp5 z+#&o?iHygnH@a&GsXL(VO!+Q3>3ormS^T4U@rjWKDEa!Qr=| zWydF&L6{Y#C-MK&M1vDi!~SE0w^xr&g(rnNU_xrQ0CFyIzzfd5!xxKofIfJs5#+JH zzcbShVvi=cJGvDZJHn7Zb;-+Ap-@eCu!-G9c0nf-zJIns=G!Z_wki%etga!@5oF>w zE28}@O@t|s>3L>ml@Sm#$jZLw()cPe}6?9tB;@*X@8@_AY@hLPn(a$wQDerQ!sSK9YsdhPJEVi{1ipgLe5w0=YqYXD=!J! zz>X?yldTrrAqnN!YDG;)$>c}0r&%gOvNRS6em!)3D4WIiS_>DJ18s>XUqxpGvFj)9*rLs zcJHe`Tpqyt*lTy|;q{ zn{7F1e2Isx%|8ZSYCajwdR)#JTr8^CRGQ-)%5 z|G}ecWTmw{(>iUDROQ7-LU2nC@+gjDSPx2wHxZ?4tW&Ej{O^Oy7HBGvaayh+2?>xj z|L}6&Grsq7-9jnv_*fmF3T`ks7FX%qMI*9Duqi0{?la(>Wz|E@t?A$Dcr5Xe+8uGP7DHouT z&nl;`;TD3YW)-E5%W;+sJmH)1u+2sPqsDi-m$|Y0V|Yq}7$(jd()15Ogx_0lJ+CwH zVTW>~Ff6ikm`eA#telR<+6^C9T58T~_mXlr*I|O;sue>UnZL>~`e?GEmFnj$ES0O6 z|H8E&i1>pj`##}Q6g1hY$|gXcCuTVd{rW;b=0=b^YUZ$A^|=1V9y3tDRn>uGXp=oM zGWlCW!)A|MJA+cb+>LG8ZgW`NK)j^ZD-?{(B58}WKL4Xdy#M=FHrY-nmtn1dZEhEy z$p&+zb#Y$Dmmv)>xCbuuc!Ax|4FUoA>sY!>hW2>T?7{5ozy|_+|$fxwW!?Evm<}!|6V#zXz?w zI%u60t0o4i{I@p|XE!Lz^3rES%pn6}3QmPa@@@Ola9uh>_FVYb7Ev9_#Fk7D0_v72 zc^d=olTV;ly@Nyjt3WIay#)S)@J-8^dp4;?z zlCKk-l?GgR_tj*a;(#Qf!v-WgI``EcA=`D;Q&wB+jJYau>HiA*-VHfg@?JM?zdx+V z4H$m@88O@3>^}88V)L%`GTf4TPhX)@z(^HlSxwj;lzr`!Ac1g@c@MYo*c(dW*y{^5HTgWvB}Raca@a5*w#`<_=Cak$PfGQ%|aydxicm8 z%5({yOWLZ5q{B}cip94CY;f{Rk*ZuqW__)DAXHISO4}o7;wL3xQ@K4x4|%at@8a9a zGcotg#AKFBQTmzZ9B}MA1}u@(iV?V2lXyso7Q=aKHYO3YX(q>)F;pB+eGTrzrtB6% z@aC0+^8Bi6NpIg6K4;;D8V!XF$p8oSnw8&=Ph+QL4G2FpbgTsfGFqYH7eLSAMJFFZ zV!;o1OZCEnP8JumGdNw{2PAH0;>=wET;KgQP?0EsYj!_9WO%8Xt+X87P52YK9WIwT zN!|D7oZ4q(r7W9DYGWj(F(H`hvwyALprFM{$3!7PV0lNIaR94Vs?IU^$!35#KP}k zj&|`kS)v9$)xD3;_2UYMNh(OPVKRY6E(kooSoG>503&!1sh@*_=A91L}9%umXx$`WnsC$NzjiFH2Qb9&t<#CLQU{$oj3@7ZDyB0^`)Yar%P7Qp0F=QPD9hB%&WfS-#$*IuvFUZ zFwRmk*9{3P0+NQO>ijE@z;TsNO3?!OZFiPH8#1zM z*)SpoTamlLtlFRxTvPKgy@71id&!^sUmk`~_xhv%_wJWZhrvA_Cn^gKB)H^006sU~ zMopMx@A2h`%PIqOd*+x1bABC=o8K@gy~ceZ)z6OFP6iq=w08U65u#7A09QpH0c|H{ z^e+*&j2(sqM|dz#CTLnwvhBsu)XATr~S!dzAoSb1-`*ka*)c{vevB+i** zHH@^+-_O$v`Xo-~JrV1*DJOxb+O7uu)%@;Gd?GqI0yY&!`^#&{=St0adsc+tVd!ii zIj9<*RZCKe-W3}Y6lhg|iVa>5nQ1^Egj zLTW-F(-}gysA}87~qektQ*E&M%x+<1{$E zIZNE^BTn<6x<+(8unE<{FTUJ&`Iq+K;6(nkP?a8toviJ>-Y!* zm>{~0nIMIoneduSr$O+Leq>!@KAbH&`#*&5sgP}0jwW4!*jwA@T#C$S#+YycePj`Y zv5jrA7~r0sV0NT29H+(rTF>a9WhY&oNLD)BcT}<#J*KSr96+X7pG^H>2wKIRv zB0$SDCV|EnOqDi9r!lSDD!~snF;pRt*jB`ZhJ>_f+JGNyKM<3qp%%352O@i(``&B6 zPMnmX4cf*xIq$jmo^#K+_uTIf$8PKEKYjPhC$~L)^!lextbKRWvE{$?h{(SOMHT{Y z1w?!z+W|uWt5M_yz!}hoV>@^K-7A8BIf+C~nqL;g`#oQqlwX4|9E(ONqYYpILV(qP zW&qt*q@x~)6zVmOe!}h=bVDN^u0dyh3{Rp49mOcqCqQSuXVd@H8gwI@_&fa6aE9lH zHRy&$953eW#F2sQSWb2i-4ah9i6x2&*_lm@X6)4dv9W?(EXZEFFg_3~nBe|WaUh#Y z=j~)Moy&^LZ#V|`$NF>GLNSp=Y9*Zcq`p5GB+3DBQr$a_%BY(N~n$7j)T8u8>gA73n= zI67>9rDPY1;CA%GQ`1p@CD(h?$$YMm8!K9&;dX1!V0_Suk0(-g-s;aCnMh~giAKUv zlxrZqdmq~i9r6BY;rO1NxBV8fhh%~L0`xC8iRX4?eb*xvLQWl+u&Ih4iTGr~vA*$> zX8bgZ@w4szfc$T_z*q5;|1iwh3QLXyGyDYfP6E?U_=(6v=#!IQfBZ^m)ivYU4gy@G z*1sQKLkmDwK=WNA4L;*?_l}<+Q6X9GEm~ zG<}7}wd5Ka<+6;-r-^g(m-DM-k)O7tK0`D5OkU5Ip88gbEHLR!I>>A?WuQ&iX9BR3 zaU(9BCa)&#bs~$(@?5rE;qn_^*sz>;6KCq+SrNaH!?wb_x_Q`_e#*Mm?a0tr=gUx) zgc|_yksTw)!Mhwl8FU77+-6-eOgx)gFbl!RnT0%SG}95{L$N;Dg??P_z5Sj2Yu8$P z7SGmluRl0}hhrk?6k8+U?Y7ZM~#o$R>JYTQhtk@mp70e>l-En3q~ zSq?;d4uN$dk-RIXj)+3ZNcb3J-oGVKmdj(GDtXb0Jl9Fd7OkRu7~)6?1n$nIQ|kDm zRJ8Xd(%F!e&RTJvhah4gi?3xRHCB?7JaMvAekT(7Vmg_z2V&MX%@p39$&Ds5BjY&l zN)5!q$Dr7iBFWPuFk6)aF)KWnOQb@Pb_=ZOF)QSfdIQ8VMSH;S&yRh}E1fTT<&jsg zpT_~m&^J7i0Q|AhCvQf*^5-?!)4qc<87u|{mU`sz7k%>Db0R-~8Jpy@*crMHzAo~< zFdwsDDCSGaVs+azU8l>cZg=Pr@h=^Yr3({@VshNHM%@XztifEe(ncNL-T7Q;Vg{p% zMe|nTbinC3GY0}!lXj0!9BgJXS5AT5owrzfh^am&u1ZiJ{pQK&XBSKPEXIBJXqu{= zgmX-F4fh;NUBj;JzGxupv=-$I!B!~blGtvovAWwWH7w5*MIo*>>vp)`8LTsctTwE59G5IF>kRF$-fzdYGZGY6T<7cCS_#&SeK z&qyE39F8c+ID)B@lVZq96vi^S1UxhBQ?0kQePHnptE%AZERG6vZrh|QS3}NqkeY;D z^@r-CK6PJXtyTVkm>vPGoVr`GIXl-_^n?epSXyOr$-C?n7F8iwqJ}zMqa7%)DtI?C zZse*~Gi?PHju&%zJ7icou&^=92eRLf0v^bgjuh3>p%99$@9nUn_-{YtEK-hebuwdd z;;c>7%0w?()G9_tQ|x@4D=)<|fAro*?{Op7$qR`cn-7kaGMROGd$g3!qz;bca+$)x zq1=R>Iyh_>a;1FIE*x}j_X-D1%V0OJ^c!cR5KdyP8}8|iZS3ml-4WZ>-P0A@v9V|4 z`q;+xy&I#wy&EF^kqzNwAr~Ic6fz=-X{w7#^@LK5{fAavP#24ZgOrYyG`pg!4>_9x zqdG;^iPRWWrxH}1DyvSqRnPAg&{cnpcqUQx&%OGmn|}Pz8=n7mQ%`>04-uQR_rV_m zQ1(sFfAjmjI7}q%UI1xzci~uocbR>%wPlH_zyRv0S^m*yaOHMz?z?@F&9be+t5 zlen`Wkz>7)-bf@Wj2cPg@3f1OEF9i&IHF>9W{dfIgmVuqu|}4t3;Cy+8MtmXD2*3j zf5|&kk36Z^!*WB57jb@ZCL_f-$7i_=wOHyTyFtt8_CA9%ZWG^tml2NqZtt_M_$F8U zX&rwp#V>WmpVIN4gPb;3{G+b;m9F^Xu6WB8|2@RNA$waMK)FxR zX0XRX@q2@77HtoP8k>BpgEuyM@!f}SEEs8Q^xcM-CSP-~sN(w@1HQ>egSR&}_&S1N zL~Zwno15C2#J@Zk@=P9YT<3#03i59V?qm}Gs^A`<<=-3}P@(qVjlMR2TX4{~5^AYH zaZm+#4rrc3psons0a`Mc_br9+0%Tkl?1TE1{_BHZq<*Bo)weR(q0)qd%m?eZ5oHol z=M?nJ=~$P}2-6^^!Rb*irbK$ma;nzQbIKyoEzd%~@JKhTFH*^umUkXWZaK%4oRdmU zC0|u**YilL&etg=4=*U-D*1BcollTEUwpgdkq(t)bJWu5 z%@TEPL2fxGU2?p#uf>a7sSl8x@8LLHE%E&7@bCWhn{@Q;+fV%dFC9Zu-xWEB_>dky z_=bw_iRf6umGHB#ZxNZ)ShW|1*=~U4bxqe;-qK->yHHR`6>qd;#N?r58MA+u+|nVG}jf02|Lrc)5O|TMFm~i~x=S zP5{mT-UT$n<{f~G*)4iC>gij0TVRfNQ&Z0E;CA>4O@KWBx>mVr8T&Ok znuS}{F1b;Bt-)o8Q3kC(JCyg&oi(&(sX8hY6W=EKFi_5&#av5C;we`S-@aBIp(CH3 zR+^vdfq=9*{HW8#(zK)jaaX|a(=_Il^}SfGQ2A~{yTxd6mgyFPhcx<|lwZ7t?@AY6 zz{R&n^R>$IWt^+7g)|_JPfBJ`(2!Zpz`R&Pa@$gx*aDQ$N0`+#D z(RFu`SRmFFi|>gIm-k7vvTcdnQLq16mbv)jaFjH)!rysz2u10@3N?t4jDs0|C!;X^ zgnKl`vkw*Cpz$pluhZ$4>G0n)2ATxS;n=d~cGleF3Y7!Yh3F=oOtGZ!T2AQWe=o4* z`6t@PaNgkDvKkNp;LJenCAqJ@1CRmK-KTGXR{6X-dw&3`J^Dm`mE7FoN26PabpT(3 z^ILg`!{2?m=^jO|T+4GW?52AaeW&}eM8V-{hK^N=>gcJy+7|f&@M*+welw`?6{i&bR5^XN8?)+(&+GtRUOrtmBPG##?C%|)E`y%{y_;myjY$+aT#`i zgD{i@=m0zjFpitPD@{OS8l8@JEtWH#t1v%a+|)k9+JPGf-S9dw;>3L_;3b-1;HbOpjx}^Z_34#E2 zIzNCNauHxL;4%R7U^?sN@LvJoT9NJSD!>Xr-Ti+ofZyBKUEKn83)C%8w?N$jbqmZh y3k(d#_HiA@letLm=q5gwUf(sESZ{CYu~VZxV_iMnqoX~W65Z?V@I-2qoc{s8+QX>; literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.68D7368ADF463DA7672D728718850C05.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.68D7368ADF463DA7672D728718850C05.cso.pdb new file mode 100644 index 00000000..b15284b5 --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.68D7368ADF463DA7672D728718850C05.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a719ae8155fa9ac3a49678f58c7af8c3f897feb95c78c6db4c86288d85816267 +size 17920 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.ADF077D22B698F0058CD269AB3B307F6.cso b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.ADF077D22B698F0058CD269AB3B307F6.cso new file mode 100644 index 0000000000000000000000000000000000000000..7d75314b1af1182591dc31346f53958cbb0ecca8 GIT binary patch literal 17168 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 literal 0 HcmV?d00001 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.ADF077D22B698F0058CD269AB3B307F6.cso.pdb b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.ADF077D22B698F0058CD269AB3B307F6.cso.pdb new file mode 100644 index 00000000..09f0543b --- /dev/null +++ b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.ADF077D22B698F0058CD269AB3B307F6.cso.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cafaf708d212de32af83f922ddc719594dd7a43a48dcd818bb5c4a4c8af01a2d +size 15872 diff --git a/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.E6559EF41DF4A3259DE7762E070648DE.metallib b/PopcornFX/PopcornFXInternals/Shaders/ComputeMeshIndirectionBuffer.comp.E6559EF41DF4A3259DE7762E070648DE.metallib new file mode 100644 index 0000000000000000000000000000000000000000..59b6e5761783c4434f72f2f4aeaeccc617cd4c5e GIT binary patch literal 67050 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