Managing plugin state with chunks and serialization
iPlug2 provides flexible state management through parameter serialization and custom chunk-based state. Learn how to save and restore complex plugin state beyond simple parameters.
By default, iPlug2 serializes all parameters automatically. For complex state (custom data, UI settings, step sequencer patterns), override the serialization methods:
SerializeState() - Save state to a byte chunk
UnserializeState() - Restore state from a byte chunk
CompareState() - (Optional) Compare two states for equality
The IPlugChunks example shows how to save custom state alongside parameters:
IPlugChunks.h
class IPlugChunks final : public Plugin{public: bool SerializeState(IByteChunk &chunk) const override; int UnserializeState(const IByteChunk &chunk, int startPos) override;private: double mSteps[kNumSteps] = {};};
bool IPlugChunks::SerializeState(IByteChunk &chunk) const{ // Serialize custom data BEFORE parameters for (int i = 0; i < kNumSteps; i++) { chunk.Put(&mSteps[i]); } // Must call SerializeParams at the end return SerializeParams(chunk);}
Always call SerializeParams(chunk) at the end to save parameter values.
int IPlugChunks::UnserializeState(const IByteChunk &chunk, int startPos){ double v = 0.; // Unserialize custom data in the SAME ORDER as serialization for (int i = 0; i < kNumSteps; i++) { startPos = chunk.Get(&v, startPos); mSteps[i] = v; } // Update UI if it exists#if IPLUG_EDITOR if(GetUI()) UpdateUIControls();#endif // Must call UnserializeParams at the end return UnserializeParams(chunk, startPos);}