pub struct OutFlags2(/* private fields */);Implementations§
source§impl OutFlags2
impl OutFlags2
pub const None: Self = _
sourcepub const SupportsQueryDynamicFlags: Self = _
pub const SupportsQueryDynamicFlags: Self = _
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)
sourcepub const IUse3DCamera: Self = _
pub const IUse3DCamera: Self = _
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.
sourcepub const IUse3DLights: Self = _
pub const IUse3DLights: Self = _
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.
sourcepub const ParamGroupStartCollapsedFlag: Self = _
pub const ParamGroupStartCollapsedFlag: Self = _
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.
pub const IAmThreadsafe: Self = _
pub const CanCombineWithDestination: Self = _
sourcepub const DoesntNeedEmptyPixels: Self = _
pub const DoesntNeedEmptyPixels: Self = _
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.
sourcepub const RevealsZeroAlpha: Self = _
pub const RevealsZeroAlpha: Self = _
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.
pub const PreservesFullyOpaquePixels: Self = _
pub const SupportsSmartRender: Self = _
pub const FloatColorAware: Self = _
pub const IUseColorspaceEnumeration: Self = _
sourcepub const IAmDeprecated: Self = _
pub const IAmDeprecated: Self = _
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
pub const PproDoNotCloneSequenceDataForRender: Self = _
sourcepub const AutomaticWideTimeInput: Self = _
pub const AutomaticWideTimeInput: Self = _
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.
sourcepub const IUseTimecode: Self = _
pub const IUseTimecode: Self = _
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.
sourcepub const DependsOnUnreferencedMasks: Self = _
pub const DependsOnUnreferencedMasks: Self = _
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.
sourcepub const OutputIsWatermarked: Self = _
pub const OutputIsWatermarked: Self = _
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.)
sourcepub const IMixGuidDependencies: Self = _
pub const IMixGuidDependencies: Self = _
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).
pub const Ae135Threadsafe: Self = _
pub const SupportsGetFlattenedSequenceData: Self = _
sourcepub const CustomUIAsyncManager: Self = _
pub const CustomUIAsyncManager: Self = _
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
pub const SupportsGpuRenderF32: Self = _
sourcepub const SupportsThreadedRendering: Self = _
pub const SupportsThreadedRendering: Self = _
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.
sourcepub const MutableRenderSequenceDataSlower: Self = _
pub const MutableRenderSequenceDataSlower: Self = _
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.
source§impl OutFlags2
impl OutFlags2
sourcepub const fn bits(&self) -> u32
pub const fn bits(&self) -> u32
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
sourcepub const fn from_bits(bits: u32) -> Option<Self>
pub const fn from_bits(bits: u32) -> Option<Self>
Convert from a bits value.
This method will return None if any unknown bits are set.
sourcepub const fn from_bits_truncate(bits: u32) -> Self
pub const fn from_bits_truncate(bits: u32) -> Self
Convert from a bits value, unsetting any unknown bits.
sourcepub const fn from_bits_retain(bits: u32) -> Self
pub const fn from_bits_retain(bits: u32) -> Self
Convert from a bits value exactly.
sourcepub fn from_name(name: &str) -> Option<Self>
pub fn from_name(name: &str) -> Option<Self>
Get a flags value with the bits of a flag with the given name set.
This method will return None if name is empty or doesn’t
correspond to any named flag.
sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Whether any set bits in a source flags value are also set in a target flags value.
sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Whether all set bits in a source flags value are also set in a target flags value.
sourcepub fn remove(&mut self, other: Self)
pub fn remove(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
remove won’t truncate other, but the ! operator will.
sourcepub fn toggle(&mut self, other: Self)
pub fn toggle(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in two flags values.
sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Call insert when value is true or remove when value is false.
sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
The bitwise and (&) of the bits in two flags values.
sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
The bitwise or (|) of the bits in two flags values.
sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
The bitwise exclusive-or (^) of the bits in two flags values.
sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
The bitwise negation (!) of the bits in a flags value, truncating the result.
source§impl OutFlags2
impl OutFlags2
sourcepub const fn iter(&self) -> Iter<OutFlags2>
pub const fn iter(&self) -> Iter<OutFlags2>
Yield a set of contained flags values.
Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.
sourcepub const fn iter_names(&self) -> IterNames<OutFlags2>
pub const fn iter_names(&self) -> IterNames<OutFlags2>
Yield a set of contained named flags values.
This method is like iter, except only yields bits in contained named flags.
Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
Trait Implementations§
source§impl BitAndAssign for OutFlags2
impl BitAndAssign for OutFlags2
source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
The bitwise and (&) of the bits in two flags values.
source§impl BitOrAssign for OutFlags2
impl BitOrAssign for OutFlags2
source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
The bitwise or (|) of the bits in two flags values.
source§impl BitXorAssign for OutFlags2
impl BitXorAssign for OutFlags2
source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in two flags values.
source§impl Extend<OutFlags2> for OutFlags2
impl Extend<OutFlags2> for OutFlags2
source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
The bitwise or (|) of the bits in each flags value.
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)source§impl Flags for OutFlags2
impl Flags for OutFlags2
source§fn from_bits_retain(bits: u32) -> OutFlags2
fn from_bits_retain(bits: u32) -> OutFlags2
source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|) of the bits in two flags values.source§fn remove(&mut self, other: Self)where
Self: Sized,
fn remove(&mut self, other: Self)where
Self: Sized,
&!). Read moresource§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^) of the bits in two flags values.source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&) of the bits in two flags values.source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
&!). Read moresource§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^) of the bits in two flags values.source§fn complement(self) -> Self
fn complement(self) -> Self
!) of the bits in a flags value, truncating the result.source§impl FromIterator<OutFlags2> for OutFlags2
impl FromIterator<OutFlags2> for OutFlags2
source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
The bitwise or (|) of the bits in each flags value.
source§impl IntoIterator for OutFlags2
impl IntoIterator for OutFlags2
source§impl Sub for OutFlags2
impl Sub for OutFlags2
source§impl SubAssign for OutFlags2
impl SubAssign for OutFlags2
source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.