<!--
{
  "availability" : [
    "FxPlug: 4.0.0 -",
    "macOS: 10.7.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "professional_video_applications",
  "identifier" : "/documentation/professional_video_applications/FxTileableEffect/pluginState(_:at:quality:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Professional Video Applications"
    ],
    "preciseIdentifier" : "c:objc(pl)FxTileableEffect(im)pluginState:atTime:quality:error:"
  },
  "title" : "pluginState(_:at:quality:)"
}
-->

# pluginState(_:at:quality:)

Retrieves the plug-in’s parameter values, performs any calculations it needs to from those values, and packages up the result to be used later with rendering.

```
func pluginState(_ pluginState: AutoreleasingUnsafeMutablePointer<NSData>?, at renderTime: CMTime, quality qualityLevel: FxQuality) throws
```

## Parameters

`pluginState`

The state of the plug-in. Your plug-in should return an autoreleased <doc://com.apple.documentation/documentation/Foundation/NSData> that the host retains. Once created, your plug-in should not hold on to this pointer. The host returns this data (or a copy of it) to your plug-in during other methods, such as the [`renderDestinationImage(_:sourceImages:pluginState:at:)`](/documentation/professional_video_applications/FxTileableEffect/renderDestinationImage(_:sourceImages:pluginState:at:)) method and [`scheduleInputs(_:withPluginState:at:)`](/documentation/professional_video_applications/FxTileableEffect/scheduleInputs(_:withPluginState:at:)) methods.

`renderTime`

The rational time at which your plug-in is being asked to gather its rendering state.

`qualityLevel`

The requested render quality (`kFxQuality_LOW`, `kFxQuality_MEDIUM`, or `kFxQuality_HIGH`).

## Discussion

The host application calls this method before rendering. The `FxParameterRetrievalAPI*` is valid during this call. Use it to get the values of your plug-in’s parameters, then put those values or the results of any calculations you need to do with those parameters to render into an `NSData` that you return to the host application. The host passes it back to you during subsequent calls. Do not re-use the `NSData`; always create a new one, as this method may be called on multiple threads at the same time.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)