public static void OnRendererNamesAdded(int rendererGUID, IntPtr effectNames)
    {
        string effectNamesStr = null;

        if (effectNames != IntPtr.Zero)
        {
            effectNamesStr = Marshal.PtrToStringAnsi(effectNames);
        }

        SBatchDesc batchDesc = m_Renderers[rendererGUID].m_BatchDesc;

        Debug.Assert(m_Renderers.Count > rendererGUID);
        batchDesc.m_EffectNames += effectNamesStr;

        string particleMeshGeneratedName = batchDesc.m_GeneratedName;

        PKFxSettings.SParticleMeshDefaultSize meshSizeToUpdate = GetParticleMeshDefaultSizeSettings(particleMeshGeneratedName);

        if (meshSizeToUpdate != null)
        {
            meshSizeToUpdate.m_EffectNames = batchDesc.m_EffectNames;
        }
    }
    public static bool OnRendererResize(int rendererGUID, int vertexCount, int indexCount, int growLarger)
    {
        Debug.Assert(m_Renderers.Count > rendererGUID);
        Debug.Assert(indexCount % 3 == 0);

        SMeshDesc  renderer = m_Renderers[rendererGUID];
        MeshFilter filter   = renderer.m_Slice;

        Debug.Assert(filter != null);

        // Load the default size configuration
        string particleMeshGeneratedName = renderer.m_BatchDesc.m_GeneratedName;

        PKFxSettings.SParticleMeshDefaultSize meshSizeToUpdate = GetParticleMeshDefaultSizeSettings(particleMeshGeneratedName);

        uint usedVertexCount    = (uint)vertexCount;
        uint usedIndexCount     = (uint)indexCount;
        uint reserveVertexCount = usedVertexCount;
        uint reserveIndexCount  = usedIndexCount;

        Bounds initBounds = new Bounds();

        // If we need to grow buffer but did not find a setting for the buffer size
        if (growLarger == 1)
        {
            reserveVertexCount += (uint)(usedVertexCount * PKFxSettings.VertexBufferSizeMultiplicator);
            reserveIndexCount  += (uint)(usedIndexCount * PKFxSettings.IndexBufferSizeMultiplicator);
            reserveIndexCount  += 3 - (reserveIndexCount % 3);

            if (meshSizeToUpdate == null)             // Did not find a setting for this buffer
            {
#if UNITY_EDITOR
                if (PKFxSettings.AutomaticMeshResizing)
                {
                    // If in editor mode, we register the size of the buffers in a new particle mesh default size entry
                    meshSizeToUpdate = new PKFxSettings.SParticleMeshDefaultSize();

                    meshSizeToUpdate.m_GeneratedName           = particleMeshGeneratedName;
                    meshSizeToUpdate.m_EffectNames             = renderer.m_BatchDesc.m_EffectNames;
                    meshSizeToUpdate.m_DefaultVertexBufferSize = (int)reserveVertexCount;
                    meshSizeToUpdate.m_DefaultIndexBufferSize  = (int)reserveIndexCount;
                    PKFxSettings.MeshesDefaultSize.Add(meshSizeToUpdate);
                }
#endif
            }
            else                                                                           // We did find a setting for this buffer
            {
                if (usedVertexCount < meshSizeToUpdate.m_DefaultVertexBufferSize)          // The registered
                {
                    reserveVertexCount = (uint)meshSizeToUpdate.m_DefaultVertexBufferSize; // Otherwise, just update the reserved count
                    usedVertexCount    = reserveVertexCount;                               // Forces the mesh to get resized to this size if we found a config
                }
#if UNITY_EDITOR
                else if (PKFxSettings.AutomaticMeshResizing)
                {
                    meshSizeToUpdate.m_DefaultVertexBufferSize = (int)reserveVertexCount;                     // Update the settings IFN
                }
#endif

                if (usedIndexCount < meshSizeToUpdate.m_DefaultIndexBufferSize)
                {
                    reserveIndexCount = (uint)meshSizeToUpdate.m_DefaultIndexBufferSize; // Otherwise, just update the reserved count
                    usedIndexCount    = reserveIndexCount;                               // Forces the mesh to get resized to this size if we found a config
                }
#if UNITY_EDITOR
                else if (PKFxSettings.AutomaticMeshResizing)
                {
                    meshSizeToUpdate.m_DefaultIndexBufferSize = (int)reserveIndexCount;                     // Update the settings IFN
                }
#endif
                initBounds = meshSizeToUpdate.m_StaticWorldBounds;
            }
        }

        // We choose to use large indices or not here:
        bool useLargeIndices = reserveVertexCount > UInt16.MaxValue;

        Mesh mesh = filter.mesh;

        mesh.bounds = initBounds;

        bool ok = ResizeParticleMeshBuffer(mesh,
                                           renderer,
                                           usedVertexCount,
                                           usedIndexCount,
                                           reserveVertexCount,
                                           reserveIndexCount,
                                           useLargeIndices);
        return(ok);
    }