### Get Composition Display Start Time Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the displayed start time of a composition. Requires a valid AEGP_CompH handle. ```cpp AEGP_GetCompDisplayStartTime( AEGP_CompH compH, const A_Time *start_timePT); ``` -------------------------------- ### Example: Generating a Cache Key Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/compute-cache-api.md This example demonstrates how to use AEGP_HashSuite1 within a `generate_key` callback to create a unique cache key by mixing in effect parameters. ```APIDOC ## Example Usage of AEGP_HashSuite1 Here's an example of using the `AEGP_HashSuite1` where `Levels2Histo_generate_key_cb` is a callback called for `generate_key()`: ```cpp A_Err Levels2Histo_generate_key_cb(AEGP_CCComputeOptionsRefconP opaque_optionsP, AEGP_CCComputeKeyP out_keyP) { try { const Levels2Histo_options& histo_op( *reinterpret_cast(opaque_optionsP)); A_Err err = Err_NONE; AEFX_SuiteScoper hash_suite = AEFX_SuiteScoper( in_dataP, kAEGPHashSuite, kAEGPHashSuiteVersion1, out_dataP); // define a simple buffer that is easy to recognize as a starting hash const char* hash_buffer = "Level2Histo"; err = hash_suite->AEGP_CreateHashFromPtr(sizeof(hash_buffer), hash_buffer, out_keyP); // Mix in effect parameters that would create a different compute result and should generate a different cache entry and key. if (!err) { err = hash_suite->AEGP_HashMixInPtr(sizeof(histo_op.depthL), &histo_op.depthL, out_keyP); } if (!err) { err = hash_suite->AEGP_HashMixInPtr(sizeof(histo_op.bB), &histo_op.bB, out_keyP); } // mix in any other effect parameters that should affect the cache key // ... // out_keyP is returned as the generated key for use as the cache key. } catch (...) { /* return most appropriate PF_Err */ } } ``` ``` -------------------------------- ### AEGP_GetCompDisplayStartTime Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Gets the displayed start time of a composition. ```APIDOC ## AEGP_GetCompDisplayStartTime ### Description Gets the displayed start time of a composition. ### Method AEGP_GetCompDisplayStartTime ### Parameters #### Path Parameters - **compH** (AEGP_CompH) - Required - Handle to the composition. - **start_timePT** (const A_Time *) - Required - Pointer to store the start time. ### Response #### Success Response - **A_Time** - The start time of the composition. ``` -------------------------------- ### Get Next Installed Effect Key Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the key for the next installed effect. This is useful for iterating through installed effects. ```cpp AEGP_GetNextInstalledEffect( AEGP_InstalledEffectKey key, AEGP_InstalledEffectKey *next_keyPH); ``` -------------------------------- ### Example Static/Global Variable Output Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/multi-frame-rendering-in-ae.md This is an example of the output format for symbols, showing the symbol name, type, data kind, and memory location. Refer to Microsoft's documentation for detailed explanations of each component. ```cpp [Symbol name], [Symbol type], [Datakind], ([Section type of data location], [Binary Address][Binary Address Offset]) ``` ```cpp menuBuf, Type: char[0x1000], File Static, (static, [0008FCD0][0003:00001CD0]) ``` -------------------------------- ### PR_FrameSetupFunc for Frame Rendering Setup Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md This function is called immediately before rendering a frame to perform any necessary setup. It receives context and data pointers for rendering. ```cpp 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); ``` -------------------------------- ### frame_setup_func0 Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Perform any setup necessary to render a frame. This function is called immediately before rendering. ```APIDOC ## frame_setup_func0 ### Description Performs necessary setup operations just before a frame is rendered. ### Method C++ Function Call ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example None ### Response #### Success Response (void) None #### Response Example None ``` -------------------------------- ### Get Render Guide Layers - AEGP_RenderOptionsSuite4 Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Checks if the render guide layers setting is enabled for the given render options. Returns true if the setting is on. ```cpp AEGP_GetRenderGuideLayers)( AEGP_RenderOptionsH optionsH, A_Boolean *will_renderPB); ``` -------------------------------- ### macOS Installer Paths for After Effects Plug-ins Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/intro/whats-new.md Developers can access default plug-in, script, and preset locations on macOS via a plist file. Use these paths to guide your installers, similar to using Windows registry keys. ```plaintext /Library/Preferences/ com.Adobe.After Effects.paths.plist ``` -------------------------------- ### Safely Get 16-bpc Pixel Pointer Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-basics/PF_EffectWorld.md This example demonstrates how to safely retrieve a PF_Pixel16 pointer from an output PF_EffectWorld. The pointer will be NULL if the world does not contain deep pixels. The second parameter is typically NULL. ```cpp { PF_Pixel16 *deep_pixelP = NULL; PF_Err err = PF_Err_NONE; err = PF_GET_PIXEL_DATA16(output, NULL, &deep_pixelP); } ``` -------------------------------- ### Static Analyzer Output Example Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/multi-frame-rendering-in-ae.md This is an example of the output format from the static analyzer tool. The 'b' indicates the symbol is in an uninitialized data section, suggesting it might be a static variable. The symbol name provides details about its location within namespaces and functions. ```cpp b; Deform::FindSilEdges()::new_kInfinite ``` -------------------------------- ### Get Platform Window Reference Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Retrieves a reference to the platform-specific window for a given render context. ```cpp AEGP_GetPlatformWindowRef( const PR_RenderContextH contextH, AEGP_PlatformWindowRef *window_refP); ``` -------------------------------- ### PR_GlobalSetdownFunc Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Dispose of any global data you allocated during the global setup phase. ```APIDOC ## PR_GlobalSetdownFunc ### Description Dispose of any global data you allocated. ### Method C Function ### Endpoint N/A ### Parameters #### Path Parameters N/A #### Query Parameters N/A #### Request Body N/A ### Request Example ```cpp PR_GlobalSetdownFunc( const PR_InData *in_dataP, PR_GlobalContextH global_contextH, PR_GlobalDataH global_dataH); ``` ### Response #### Success Response (void) N/A #### Response Example N/A ``` -------------------------------- ### AEGP_GetCompWorkAreaStart Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the start time of the current work area for a given composition. ```APIDOC ## AEGP_GetCompWorkAreaStart ### Description Get the time where the current work area starts. ### Method AEGP_GetCompWorkAreaStart ### Parameters #### Path Parameters - **compH** (AEGP_CompH) - Required - Handle to the composition. - **startPT** (A_Time *) - Output - Pointer to store the start time of the work area. ``` -------------------------------- ### PR_Draw_MoveToFunc Signature Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Use this function to set the starting point for subsequent drawing operations. ```cpp PR_Draw_MoveToFunc( short x, short y); ``` -------------------------------- ### Initialize and Copy Output in C++ Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/tips-tricks.md Demonstrates how to prepare an output buffer by filling it with a default color and then copying the input data into a specified region. This is useful for ensuring a clean slate before rendering. ```cpp src_rect.left = in_data>output_origin_x; src_rect.right = src_rect.left + input>width; src_rect.top = in_data>output_origin_y; src_rect.bottom = src_rect.top + input>height; err = PF_FILL(NULL, NULL, output); if (!err) { err = PF_COPY(¶ms[0]>u.ld, output, NULL, &src_rect); } ``` -------------------------------- ### AEGP_GetRenderGuideLayers Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Passes back a boolean that is true if the render guide layers setting is on. ```APIDOC ## AEGP_GetRenderGuideLayers ### Description Checks if the render guide layers setting is enabled. ### Method AEGP Function ### Parameters #### Path Parameters - **optionsH** (AEGP_RenderOptionsH) - Required - The render options handle. - **will_renderPB** (A_Boolean *) - Required - Pointer to store the boolean indicating if guide layers will be rendered. ``` -------------------------------- ### Get Composition Work Area Start Time Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the start time of the current work area for a given composition. The start time is returned via a pointer. ```cpp AEGP_GetCompWorkAreaStart( AEGP_CompH compH, A_Time *startPT); ``` -------------------------------- ### Implement Instance Setup Function Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Use PR_InstanceSetupFunc to allocate and instantiate data specific to this Artisan instance. It requires input data, global and instance contexts, global data, flags, flat data handle, and an instance data handle. ```cpp 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); ``` -------------------------------- ### AEGP_SetInSpecNativeStartTime Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Assigns a native start time to the footage. New in CC. ```APIDOC ## AEGP_SetInSpecNativeStartTime ### Description Assigns a native start time to the footage. New in CC. ### Method AEGP_SetInSpecNativeStartTime ### Parameters #### Path Parameters - **inH** (AEIO_InSpecH) - Description not available - **startTimeP** (const A_Time *) - Description not available ### Request Example ```cpp AEGP_SetInSpecNativeStartTime( AEIO_InSpecH inH, const A_Time *startTimeP); ``` ``` -------------------------------- ### setup_instance_func0 Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md This function is responsible for allocating and instantiating data specific to each instance of the Artisan. ```APIDOC ## setup_instance_func0 ### Description Allocate and instantiate any data specific to this instance of your Artisan. ### Method C++ Function ### Endpoint N/A ### Parameters #### Path Parameters N/A #### Query Parameters N/A #### Request Body N/A ### Request Example ```cpp 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); ``` ### Response #### Success Response (void) N/A #### Response Example N/A ``` -------------------------------- ### Get Preferences Directory Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the After Effects preferences directory path. Ensure AEGP_MemHandle is properly managed. ```cpp AEGP_GetPrefsDirectory( AEGP_MemHandle *unicode_pathPH); ``` -------------------------------- ### Define Windows on Arm Entry Point in Resource File Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/intro/windows-on-arm-support.md Specify the main entry point for Windows on Arm builds within your plugin's resource file. This ensures After Effects can correctly load the ARM64 binary. If different entry points are needed for Intel and Arm, provide distinct names. ```cpp #if defined(AE_OS_WIN) CodeWinARM64 {"EffectMain"}, CodeWin64X86 {"EffectMain"}, #endif ``` -------------------------------- ### Get Rendered Frame Receipt GUID (AEGP) Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieve a GUID for a rendered frame using AEGP_GetReceiptGuid, available from CS6. The memory handle for the GUID must be disposed after use. ```cpp AEGP_GetReceiptGuid( AEGP_FrameReceiptH receiptH, AEGP_MemHandle *guidMH) ``` -------------------------------- ### Define Apple Silicon Entry Point in Resource File Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/intro/apple-silicon-support.md Add this line to your plugin's .r resource file to specify the entry point for Apple Silicon builds. Ensure it's placed alongside the Intel entry point definition. ```cpp #if defined(AE_OS_MAC) CodeMacARM64 {"EffectMain"}, CodeMacIntel64 {"EffectMain"}, #endif ``` -------------------------------- ### AEIO_StartAdding Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Prepares to add frames to the output file. This is an opportune time to create output files on disk, write header information, and allocate pixel buffers. ```APIDOC ## AEIO_StartAdding ### Description Prepare to add frames to the output file. This is a good time to create the output file(s) on disk, and to write any header information to such files. This is also your first opportunity to allocate pixel buffers based on valid output spec values. ### Usage Yes, for writing formats that support multiple frames. ``` -------------------------------- ### Get Installed Key From Layer Effect - AEGP Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Obtain the AEGP_InstalledEffectKey associated with a given AEGP_EffectRefH. This is useful for identifying specific installed effects. ```cpp AEGP_GetInstalledKeyFromLayerEffect( AEGP_EffectRefH effect_refH, AEGP_InstalledEffectKey *installed_keyP); ``` -------------------------------- ### do_instance_dialog_func0 Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md If your Artisan has additional parameters accessed through its Options dialog, this function will be called to get and set them. ```APIDOC ## do_instance_dialog_func0 ### Description Handles the retrieval and setting of additional parameters for an Artisan's Options dialog. ### Method C++ Function Call ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example None ### Response #### Success Response (PR_DialogResult) - **PR_DialogResult** (enum) - Indicates if changes were made. Can be `PR_DialogResult_NO_CHANGE` or `PR_DialogResult_CHANGE_MADE`. #### Response Example None ``` -------------------------------- ### Example: Generating a Cache Key with AEGP_HashSuite1 Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/compute-cache-api.md Demonstrates using AEGP_HashSuite1 to generate a cache key by mixing in a buffer and effect parameters. Ensure all parameters that affect the cache result are mixed in. ```cpp A_Err Levels2Histo_generate_key_cb(AEGP_CCComputeOptionsRefconP opaque_optionsP, AEGP_CCComputeKeyP out_keyP) { try { const Levels2Histo_options& histo_op( *reinterpret_cast(opaque_optionsP)); A_Err err = Err_NONE; AEFX_SuiteScoper hash_suite = AEFX_SuiteScoper( in_dataP, kAEGPHashSuite, kAEGPHashSuiteVersion1, out_dataP); // define a simple buffer that is easy to recognize as a starting hash const char* hash_buffer = "Level2Histo"; err = hash_suite->AEGP_CreateHashFromPtr(sizeof(hash_buffer), hash_buffer, out_keyP); // Mix in effect parameters that would create a different compute result and should generate a different cache entry and key. if (!err) { err = hash_suite->AEGP_HashMixInPtr(sizeof(histo_op.depthL), &histo_op.depthL, out_keyP); } if (!err) { err = hash_suite->AEGP_HashMixInPtr(sizeof(histo_op.bB), &histo_op.bB, out_keyP); } // mix in any other effect parameters that should affect the cache key // ... // out_keyP is returned as the generated key for use as the cache key. } catch (...) { /* return most appropriate PF_Err */ } } ``` -------------------------------- ### Get Next Installed Effect Key Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Obtains the key for the next installed effect in the sequence. Pass AEGP_InstalledEffectKey_NONE to retrieve the first effect key. ```cpp Pass AEGP_InstalledEffectKey as the first parameter to obtain the first AEGP_InstalledEffectKey. ``` -------------------------------- ### Get Number of Installed Effects Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the total count of effects that are currently installed in After Effects. The result is stored in the provided long integer pointer. ```cpp AEGP_GetNumInstalledEffects( A_long *num_installed_effectsPL); ``` -------------------------------- ### Global Setup Function for Artisan Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Called once after GP_Main. Use this for global data initialization. Any memory allocated here must be freed in the global teardown function. ```cpp PR_GlobalSetupFunc( const PR_InData *in_dataP, PR_GlobalContextH global_contextH, PR_GlobalDataH *global_dataPH); ``` -------------------------------- ### AEGP_GetLayerOffset Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Gets the offset from the start of the composition to layer time 0, in composition time. ```APIDOC ## AEGP_GetLayerOffset ### Description Get the offset from the start of the composition to layer time 0, in composition time. ### Method AEGP_GetLayerOffset ### Parameters - **layerH** (AEGP_LayerH) - Handle to the layer. - **offsetPT** (A_Time *) - Pointer to store the offset value. ``` -------------------------------- ### Get Start Frame Time Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Obtains the time of the first frame within the AEIO_OutSpecH. ```cpp AEGP_GetOutSpecStartFrame( AEIO_OutSpecH outH, A_long *start_frameP); ``` -------------------------------- ### Demonstrate OpenGL Context Management with GLator Sample Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/intro/whats-new.md The updated GLator sample project demonstrates correct OpenGL context management for effect plug-ins, essential for GPU-accelerated effects. ```c GLator sample ``` -------------------------------- ### Get Layer Offset - AEGP Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the offset from the start of the composition to layer time 0, in composition time. ```cpp AEGP_GetLayerOffset( AEGP_LayerH layerH, A_Time *offsetPT); ``` -------------------------------- ### Start Adding Frames with AEIO_StartAdding Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Initiates the process of adding frames to an output file. Requires basic data, output specification handle, and flags. ```cpp AEIO_StartAdding( AEIO_BasicData *basic_dataP, AEIO_OutSpecH outH, A_long flags); ``` -------------------------------- ### AEIO_StartAdding Function Usage Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Prepares to add frames to the output file. This is the appropriate time to create output files, write header information, and allocate pixel buffers. ```cpp AEIO_StartAdding ``` -------------------------------- ### Get First Project Item - AEGP Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the first item in a given project. Use this to start iterating through project items. ```cpp AEGP_GetFirstProjItem( AEGP_ProjectH projectH, AEGP_ItemH *itemPH); ``` -------------------------------- ### Initialize Input Specification from File Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Use this function to initialize an input specification by providing a file path. This is the standard method when the input file is known. ```cpp AEIO_InitInSpecFromFile( AEIO_BasicData *basic_dataP, const A_UTF16Char *file_pathZ, AEIO_InSpecH inH); ``` -------------------------------- ### Plugin Entry Point Function with DllExport Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/intro/symbol-export.md An example of a plugin's entry point function that utilizes the DllExport macro to ensure it is correctly exported from the dynamic library. ```cpp extern "C" DllExport PF_Err PluginDataEntryFunction( PF_PluginDataPtr inPtr, PF_PluginDataCB inPluginDataCallBackPtr, SPBasicSuite* inSPBasicSuitePtr, const char* inHostName, const char* inHostVersion) { PF_Err result = PF_Err_INVALID_CALLBACK; result = PF_REGISTER_EFFECT( inPtr, inPluginDataCallBackPtr, "ColorGrid", // Name "ADBE ColorGrid", // Match Name "Sample Plug-ins", // Category AE_RESERVED_INFO); // Reserved Info return result; } ``` -------------------------------- ### Get Item Comment with AEGP_GetItemComment Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves an item's comment. This function was updated to support Unicode in ItemSuite9 and is available starting in version 14.1. ```cpp AEGP_GetItemComment( AEGP_ItemH itemH, AEGP_MemHandle *unicode_namePH); ``` -------------------------------- ### Get Effect Name Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the display name of an installed effect. The name can be up to AEGP_MAX_EFFECT_NAME_SIZE + 1 characters long. Use AEGP_SetStreamName to change the display name. ```cpp AEGP_GetEffectName( AEGP_InstalledEffectKey installed_key, A_char *nameZ); ``` -------------------------------- ### PR_GlobalSetupFunc Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Called only once, right after GP_Main. The global data is common across all instances of the plug-in. If you allocate memory during Global Setup, you must free it during your global_setdown_func. ```APIDOC ## PR_GlobalSetupFunc ### Description Called only once, right after `GP_Main`. The global data is common across all instances of the plug-in. If you allocate memory during Global Setup, you must free it during your `global_setdown_func`. ### Method C Function ### Endpoint N/A ### Parameters #### Path Parameters N/A #### Query Parameters N/A #### Request Body N/A ### Request Example ```cpp PR_GlobalSetupFunc( const PR_InData *in_dataP, PR_GlobalContextH global_contextH, PR_GlobalDataH *global_dataPH); ``` ### Response #### Success Response (void) N/A #### Response Example N/A ``` -------------------------------- ### Get Stream Reference for Layer - AEGP Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the stream reference for a layer, used to start a recursive walk of its streams. Requires the plugin ID and layer handle. ```cpp AEGP_GetNewStreamRefForLayer( AEGP_PluginID aegp_plugin_id, AEGP_LayerH layerH, AEGP_StreamRefH *streamPH); ``` -------------------------------- ### Begin Batch Sampling Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/graphics-utility-suites.md Call `begin_sampling` to inform After Effects that your effect will perform batch sampling. This allows After Effects to perform necessary setup tasks for optimizing the sampling process. ```cpp PF_Err (*begin_sampling)( PF_ProgPtr effect_ref, PF_Quality qual, PF_ModeFlags mf, PF_SampPB *params); ``` -------------------------------- ### AEGP_GetReceiptGuid Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves a GUID for a rendered frame. The memory handle for the GUID must be disposed of after use. New in CS6. ```APIDOC ## AEGP_GetReceiptGuid ### Description Retrieves a GUID for a rendered frame. The memory handle for the GUID must be disposed of after use. New in CS6. ### Method AEGP_GetReceiptGuid ### Parameters #### Path Parameters - **receiptH** (AEGP_FrameReceiptH) - Input - Handle to the frame receipt. - **guidMH** (AEGP_MemHandle *) - Output - Pointer to a memory handle that will contain the GUID. ``` -------------------------------- ### List Binaries and Source Files Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/multi-frame-rendering-in-ae.md If you are unsure about the binaries your effect is outputting, use this command to get a list of binaries and the source files they pull data from. Files you have recently changed are likely to appear near the top of the output. ```bat CheckThreadSafeSymbols.exe -sf [absolute path to .pdb] ``` -------------------------------- ### Get Instance Context from Query Context Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md This function allows you to get the instance context handle when you have a query context. ```cpp AEGP_GetInstanceContextFromQueryContext( const PR_QueryContextH query_contextH, PR_InstanceContextH *instnce_contextPH); ``` -------------------------------- ### AEIO_StartAdding Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Initializes the process of adding frames to an output file. This function is part of the AEIO_FunctionBlock4. ```APIDOC ## AEIO_StartAdding ### Description Initializes the process of adding frames to an output file. ### Method AEIO_StartAdding ### Parameters - **basic_dataP** (AEIO_BasicData *) - Pointer to basic data structure. - **outH** (AEIO_OutSpecH) - Handle to the output specification. - **flags** (A_long) - Flags to control the operation. ``` -------------------------------- ### AEGP_ClearInSpecNativeStartTime Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Clears the native start time setting for an input specification. This is used when the default native start time is not desired. ```APIDOC ## AEGP_ClearInSpecNativeStartTime ### Description Clears the native start time setting for an input specification. ### Method AEGP_ClearInSpecNativeStartTime ### Parameters #### Path Parameters - **inH** (AEIO_InSpecH) - Description: Handle to the input specification. ### Request Example ```cpp AEGP_ClearInSpecNativeStartTime(inH); ``` ``` -------------------------------- ### Initialize Input Specification Interactively Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Use this function to initialize an input specification through user interaction, allowing the user to describe the audio and video content. This is useful when the input media is generated interactively. ```cpp AEIO_InitInSpecInteractive( AEIO_BasicData *basic_dataP, AEIO_InSpecH inH); ``` -------------------------------- ### Specify Whether to Render Guide Layers Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Use AEGP_SetRenderGuideLayers to control the rendering of guide layers within render options. ```cpp AEGP_SetRenderGuideLayers)( AEGP_RenderOptionsH optionsH, A_Boolean render_themB); ``` -------------------------------- ### Set Composition Work Area Start and Duration Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Sets the work area start time and duration for a composition, in seconds. This operation is undo-able. ```cpp AEGP_SetCompWorkAreaStartAndDuration( AEGP_CompH compH, A_Time startT, A_Time durationT); ``` -------------------------------- ### Orthographic Camera Matrix Setup Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md This C++ code snippet demonstrates how to set up an orthographic projection matrix using composition width and height, following the OpenGL specification. ```cpp glOrtho(-width/2, width/2, -height/2, height/2, -1, 100); ``` -------------------------------- ### AEGP_ComputeCacheCallbacks compute function example Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/compute-cache-api.md Example of how to set the computed cache value within the `compute` callback. The result is cast to `AEGP_CCComputeValueRefconP` and assigned to `out_valuePP`. ```cpp *out_valuePP = reinterpret_cast(myComputedResultP); ``` -------------------------------- ### Exception Handling for Apple Silicon Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/intro/apple-silicon-support.md Wrap your plugin's main entry point code in a try/catch block to prevent termination on Apple Silicon when exceptions propagate through C functions. This is crucial due to ABI changes on Apple Silicon. ```cpp PF_Err EffectMain ( PF_Cmd cmd, PF_InData *in_data, PF_OutData *out_data, PF_ParamDef *params[], PF_LayerDef *output ) { try { /* Your code here */ } catch { /* return most appropriate PF_Err */ } } ``` -------------------------------- ### AEIO_InitInSpecInteractive Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Initializes an input specification interactively, allowing the user to describe the media. ```APIDOC ## AEIO_InitInSpecInteractive ### Description Initializes an input specification through user interaction, without relying on a file path. This is useful for describing media generated interactively. ### Method AEIO_InitInSpecInteractive ### Parameters #### Path Parameters - **basic_dataP** (AEIO_BasicData *) - Description not available. - **inH** (AEIO_InSpecH) - Handle to the input specification. ### Request Example ```cpp AEIO_InitInSpecInteractive( AEIO_BasicData *basic_dataP, AEIO_InSpecH inH); ``` ``` -------------------------------- ### Create Placeholder Footage with Path Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Use AEGP_NewPlaceholderFootageWithPath to create footage from a path. The file_type parameter has changed behavior between CS6 and CC. For CC and later, AEIO_FileType_NONE is a warning. Use AEIO_FileType_ANY if the path must exist, or AEIO_FileType_DIR/AEIO_FileType_GENERIC if the path may not exist. ```cpp AEGP_NewPlaceholderFootageWithPath( AEGP_PluginID plugin_id, const A_UTF16Char *pathZ, AEGP_Platform path_platform, AEIO_FileType file_type, A_long widthL, A_long heightL, const A_Time *durationPT, AEGP_FootageH *footagePH); ``` -------------------------------- ### Acquire PF_GPUDeviceSuite1 with AEFX_SuiteScoper Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/effect-details/accessing-function-suites.md Use AEFX_SuiteScoper to automatically acquire and manage the PF_GPUDeviceSuite1. Ensure proper error handling with try/catch if ALLOW_NO_SUITE is false, or check for NULL if it's true. ```cpp AEFX_SuiteScoper gpu_suite = AEFX_SuiteScoper( in_dataP, kPFGPUDeviceSuite, kPFGPUDeviceSuiteVersion1, out_dataP); ``` -------------------------------- ### Set Composition Display Start Time Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Sets the displayed start time of a composition. This operation is not undoable and does not affect the composition's duration. Requires a valid AEGP_CompH handle. ```cpp AEGP_SetCompDisplayStartTime( AEGP_CompH compH, const A_Time *start_timePT); ``` -------------------------------- ### Registering Parameters (ParamSetup) Source: https://context7.com/docsforadobe/after-effects-plugin-guide/llms.txt Registers user-facing parameters for an effect plug-in during PF_Cmd_PARAM_SETUP. Each call adds a control to the Effect Controls panel. ```cpp // Register a float slider, a color picker, and a popup menu static PF_Err ParamSetup(PF_InData *in_data, PF_OutData *out_data) { PF_Err err = PF_Err_NONE; PF_ParamDef def; // Always clear the struct first to avoid garbage values AEFX_CLR_STRUCT(def); // --- Float Slider: "Radius" (0.0 – 100.0, default 10.0) --- PF_ADD_FLOAT_SLIDERX("Radius", 0.0, // valid_min 100.0, // valid_max 0.0, // slider_min (UI range) 50.0, // slider_max 10.0, // default value PF_Precision_TENTHS, 0, // display_flags 0, // param_flags RADIUS_DISK_ID); // unique ID (defined in header) // --- Color Picker: "Tint Color" (default white) --- AEFX_CLR_STRUCT(def); def.param_type = PF_Param_COLOR; PF_STRCPY(def.name, "Tint Color"); def.u.cd.value.alpha = 255; def.u.cd.value.red = 255; def.u.cd.value.green = 255; def.u.cd.value.blue = 255; ERR(PF_ADD_PARAM(in_data, -1, &def)); // --- Popup Menu: "Blend Mode" --- AEFX_CLR_STRUCT(def); PF_ADD_POPUPX("Blend Mode", 3, // number of choices 1, // default (1-based) "Normal|Add|Screen", 0, BLEND_MODE_DISK_ID); out_data->num_params = NUM_PARAMS; // total params including input layer return err; } ``` -------------------------------- ### Get Next Render Queue Item for Iteration Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Iterate through the render queue by obtaining a reference to the next item. Pass `RQ_ITEM_INDEX_NONE` to get the first item's reference. ```cpp AEGP_GetNextRQItem( AEGP_RQItemRefH current_rq_itemH, AEGP_RQItemRefH *next_rq_itemPH); ``` -------------------------------- ### Implement Instance Flatten Function Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Use the instance flatten function to prepare your data for disk writing, ensuring OS independence if necessary. ```cpp PR_InstanceFlattenFunc( const PR_InData *in_dataP, PR_GlobalContextH global_contextH, PR_InstanceContextH instance_contextH, PR_GlobalDataH global_dataH, PR_InstanceDataH instance_dataH); ``` -------------------------------- ### Get Flat Output Options Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Retrieves the flat output options for a given basic data and output specification. Requires AEIO_BasicData and AEIO_OutSpecH to be provided. ```cpp AEIO_GetFlatOutputOptions( AEIO_BasicData *basic_dataP, AEIO_OutSpecH outH, AEIO_Handle *optionsH); ``` -------------------------------- ### AEGP_GetLayerName Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Get the name of a layer. ```APIDOC ## AEGP_GetLayerName ### Description Get the name of a layer. ### Method AEGP_GetLayerName ### Parameters #### Path Parameters - **layerH** (AEGP_LayerH) - Description not provided - **namePL** (A_char *) - Description not provided ### Response #### Success Response - **namePL** (A_char *) - The name of the layer. ``` -------------------------------- ### AEGP_GetLayerLabel Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Gets a layer's AEGP_LabelID. ```APIDOC ## AEGP_GetLayerLabel ### Description Gets a layer's `AEGP_LabelID`. ### Method AEGP_GetLayerLabel ### Parameters #### Path Parameters - **layerH** (AEGP_LayerH) - Required - The layer handle. #### Return Value - **labelP** (AEGP_LabelID *) - Output - Pointer to the label ID. ``` -------------------------------- ### AEIO_InitInSpecFromFile Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Initializes an input specification from a file path provided by After Effects. ```APIDOC ## AEIO_InitInSpecFromFile ### Description Initializes an input specification by reading data from a file path. ### Method AEIO_InitInSpecFromFile ### Parameters #### Path Parameters - **basic_dataP** (AEIO_BasicData *) - Description not available. - **file_pathZ** (const A_UTF16Char *) - The UTF-16 encoded file path to the input specification file. - **inH** (AEIO_InSpecH) - Handle to the input specification. ### Request Example ```cpp AEIO_InitInSpecFromFile( AEIO_BasicData *basic_dataP, const A_UTF16Char *file_pathZ, AEIO_InSpecH inH); ``` ``` -------------------------------- ### AEGP_GetItemDimensions Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Gets the width and height of an item. ```APIDOC ## AEGP_GetItemDimensions ### Description Gets the width and height of an item. ### Method AEGP_GetItemDimensions ### Parameters #### Path Parameters - **itemH** (AEGP_ItemH) - Input - Handle to the item. - **widthPL** (A_long *) - Output - Pointer to the long integer for the width. - **heightPL** (A_long *) - Output - Pointer to the long integer for the height. ### Response #### Success Response Returns the width and height of the item. ``` -------------------------------- ### Get OCIO Display and View Color Spaces (C++) Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Retrieves the project's Display and View transforms used in OCIO mode. The caller must dispose of the returned UTF16 string handles. ```cpp AEGPD_GetOCIODisplayColorSpace( AEGP_PluginID aegp_plugin_id, AEGP_MemHandle *ocio_displayH, AEGP_MemHandle *ocio_viewH); ``` -------------------------------- ### AEGP_GetItemDuration Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Gets the duration of an item in seconds. ```APIDOC ## AEGP_GetItemDuration ### Description Gets the duration of an item in seconds. ### Method AEGP_GetItemDuration ### Parameters #### Path Parameters - **itemH** (AEGP_ItemH) - Input - Handle to the item. - **durationPT** (A_Time *) - Output - Pointer to the time value for the duration. ### Response #### Success Response Returns the duration of the item in seconds. ``` -------------------------------- ### AEGP_GetTypeName Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Gets the name of an item type. ```APIDOC ## AEGP_GetTypeName ### Description Get name of type. (name length up to `AEGP_MAX_TYPE_NAME_LEN + 1`). ### Method AEGP_GetTypeName ### Parameters - **itemType** (AEGP_ItemType) - The type of the item. - **typeNamePB** (A_Char *) - Pointer to a character buffer to store the type name. The buffer must be large enough to hold `AEGP_MAX_TYPE_NAME_LEN + 1` characters. ``` -------------------------------- ### Create Placeholder Footage with Path AEGP_NewPlaceholderFootageWithPath Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md This function adds references to footage that is currently unavailable. The file path should be a NULL-terminated UTF-16 string using platform-specific separators. ```cpp AEGP_NewPlaceholderFootageWithPath ``` -------------------------------- ### AEGP_GetNextInstalledEffect Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Returns the AEGP_InstalledEffectKey of the next installed effect. Pass AEGP_InstalledEffectKey_NONE as the first parameter to obtain the first AEGP_InstalledEffectKey. ```APIDOC ## AEGP_GetNextInstalledEffect ### Description Returns the `AEGP_InstalledEffectKey` of the next installed effect. Pass `AEGP_InstalledEffectKey_NONE` as the first parameter to obtain the first `AEGP_InstalledEffectKey`. ### Method AEGP ### Signature
AEGP_GetNextInstalledEffect(
  AEGP_InstalledEffectKey  previous_key,
  AEGP_InstalledEffectKey  *next_keyPL
);
``` -------------------------------- ### AEGP_GetNumInstalledEffects Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Returns the count of effects installed in After Effects. ```APIDOC ## AEGP_GetNumInstalledEffects ### Description Returns the count of effects installed in After Effects. ### Method AEGP ### Signature
AEGP_GetNumInstalledEffects(
  A_long  *num_installed_effectsPL
);
``` -------------------------------- ### Dispose Setup Data with PR_FrameSetdownFunc Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/artisans/artisan-data-types.md Use this function to clean up any data allocated during the `frame_setup` phase. It is called immediately after rendering is complete. ```cpp 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); ``` -------------------------------- ### AEGP_GetInstalledKeyFromLayerEffect Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Obtains the installed key for an effect reference. ```APIDOC ## AEGP_GetInstalledKeyFromLayerEffect ### Description Given an `AEGP_EffectRefH`, retrieves its associated `AEGP_InstalledEffectKey`. ### Method AEGP_GetInstalledKeyFromLayerEffect ### Parameters - **effect_refH** (AEGP_EffectRefH) - Handle to the effect. - **installed_keyP** (AEGP_InstalledEffectKey *) - Pointer to store the installed effect key. ### Code Example
AEGP_GetInstalledKeyFromLayerEffect(
  AEGP_EffectRefH          effect_refH,
  AEGP_InstalledEffectKey  *installed_keyP);
``` -------------------------------- ### AEGP_SetRenderGuideLayers Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Specify whether or not to render guide layers. ```APIDOC ## AEGP_SetRenderGuideLayers ### Description Specify whether or not to render guide layers. ### Method AEGP_SetRenderGuideLayers ### Parameters #### Path Parameters - **optionsH** (AEGP_RenderOptionsH) - Required - The render options handle. - **render_themB** (A_Boolean) - Required - Boolean indicating whether to render guide layers. ### Response #### Success Response (void) This function does not return a value. ``` -------------------------------- ### AEGP_GetLayerQuality Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Gets the current quality setting of a layer. ```APIDOC ## AEGP_GetLayerQuality ### Description Gets the current quality setting of a layer. ### Method AEGP_GetLayerQuality ### Parameters - **layerH** (AEGP_LayerH) - Handle to the layer. - **qualityP** (AEGP_LayerQuality *) - Pointer to a variable that will receive the layer's quality. ### Layer Quality Flags - `AEGP_LayerQual_NONE` - `AEGP_LayerQual_WIREFRAME` - `AEGP_LayerQual_DRAFT` - `AEGP_LayerQual_BEST` ``` -------------------------------- ### Create New Sound Data - AEGP_SoundDataSuite1 Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Creates a new AEGP_SoundDataH. Remember to dispose of the created handle when no longer needed. ```cpp AEGP_NewSoundData( const AEGP_SoundDataFormat *formatP, AEGP_SoundDataH *new_dataPH); ``` -------------------------------- ### AEGP_GetLayerParentComp Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Get the AEGP_CompH of the composition containing the layer. ```APIDOC ## AEGP_GetLayerParentComp ### Description Get the AEGP_CompH of the composition containing the layer. ### Method AEGP_GetLayerParentComp ### Parameters #### Path Parameters - **layerH** (AEGP_LayerH) - Description not provided - **compPH** (AEGP_CompH *) - Description not provided ### Response #### Success Response - **compPH** (AEGP_CompH *) - The AEGP_CompH of the parent composition. ``` -------------------------------- ### Enable Multi-Frame Rendering (MFR) Support Source: https://context7.com/docsforadobe/after-effects-plugin-guide/llms.txt Declare MFR support in your plugin's GLOBAL_SETUP command. Set PF_OutFlag2_SUPPORTS_THREADED_RENDERING to enable concurrent frame rendering. Use PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWER only if sequence_data must be written at render time, as this is less performant. ```cpp // GlobalSetup: declare MFR support case PF_Cmd_GLOBAL_SETUP: out_data->out_flags2 |= PF_OutFlag2_SUPPORTS_THREADED_RENDERING; // If sequence_data must be written at render time (rare): // out_data->out_flags2 |= PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWER; break; ``` -------------------------------- ### Iterate Pixels with Per-Pixel Callback Source: https://context7.com/docsforadobe/after-effects-plugin-guide/llms.txt Use PF_Iterate8Suite (or 16/Float variants) to dispatch a per-pixel callback across multiple CPU cores. The callback function must be thread-safe and re-entrant. ```cpp // The per-pixel callback — must be thread-safe static PF_Err InvertPixel( void *refcon, A_long x, A_long y, PF_Pixel *inP, // source pixel (ARGB, 0-255 per channel) PF_Pixel *outP) // destination pixel { // Invert RGB, preserve alpha outP->alpha = inP->alpha; outP->red = 255 - inP->red; outP->green = 255 - inP->green; outP->blue = 255 - inP->blue; return PF_Err_NONE; } ``` ```cpp static PF_Err Render(PF_InData *in_data, PF_OutData *out_data, PF_ParamDef *params[], PF_LayerDef *output) { PF_Err err = PF_Err_NONE; // Acquire the 8-bpc iteration suite AEGP_SuiteHandler suites(in_data->pica_basicP); ERR(suites.Iterate8Suite1()->iterate( in_data, 0, // progress_base output->extent_hint.bottom, // progress_final (total scanlines) ¶ms[INPUT_INDEX]->u.ld, // source PF_EffectWorld &output->extent_hint, // restrict to this rect (or NULL = all) NULL, // refcon (user data passed to callback) InvertPixel, // per-pixel function pointer output)); // destination PF_EffectWorld return err; } ``` -------------------------------- ### Initialize Output Specification - AEIO_InitOutputSpec Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aeios/new-kids-on-the-function-block.md Call AEIO_InitOutputSpec to prepare a new AEIO_OutSpecH for output. It can indicate if the user interacted with the process. ```cpp AEIO_InitOutputSpec( AEIO_BasicData *basic_dataP, AEIO_OutSpecH outH, A_Boolean *user_interacted); ``` -------------------------------- ### AEGP_GetRenderQuality Source: https://github.com/docsforadobe/after-effects-plugin-guide/blob/master/docs/aegps/aegp-suites.md Get the render quality of the render queue item. ```APIDOC ## AEGP_GetRenderQuality ### Description Get the render quality of the render queue item. Quality can be either `AEGP_ItemQuality_DRAFT` or `AEGP_ItemQuality_BEST`. ### Method AEGP_GetRenderQuality ### Parameters #### Path Parameters - **optionsH** (AEGP_RenderOptionsH) - Required - The render options handle. - **qualityP** (AEGP_ItemQuality *) - Required - Pointer to store the render quality. ### Response #### Success Response (void) This function does not return a value, but populates the qualityP parameter. ```