pipl

Struct OutFlags2

source
pub struct OutFlags2(/* private fields */);

Implementations§

source§

impl OutFlags2

source

pub const None: Self = _

source

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)

source

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.

source

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.

source

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.

source

pub const IAmThreadsafe: Self = _

source

pub const CanCombineWithDestination: Self = _

source

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.

source

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.

source

pub const PreservesFullyOpaquePixels: Self = _

source

pub const SupportsSmartRender: Self = _

source

pub const FloatColorAware: Self = _

source

pub const IUseColorspaceEnumeration: Self = _

source

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

source

pub const PproDoNotCloneSequenceDataForRender: Self = _

source

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.

source

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.

source

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.

source

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.)

source

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).

source

pub const Ae135Threadsafe: Self = _

source

pub const SupportsGetFlattenedSequenceData: Self = _

source

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

source

pub const SupportsGpuRenderF32: Self = _

source

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.

source

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

source

pub const fn empty() -> Self

Get a flags value with all bits unset.

source

pub const fn all() -> Self

Get a flags value with all known bits set.

source

pub const fn bits(&self) -> u32

Get the underlying bits value.

The returned value is exactly the bits set in this flags value.

source

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.

source

pub const fn from_bits_truncate(bits: u32) -> Self

Convert from a bits value, unsetting any unknown bits.

source

pub const fn from_bits_retain(bits: u32) -> Self

Convert from a bits value exactly.

source

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.

source

pub const fn is_empty(&self) -> bool

Whether all bits in this flags value are unset.

source

pub const fn is_all(&self) -> bool

Whether all known bits in this flags value are set.

source

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.

source

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.

source

pub fn insert(&mut self, other: Self)

The bitwise or (|) of the bits in two flags values.

source

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.

source

pub fn toggle(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in two flags values.

source

pub fn set(&mut self, other: Self, value: bool)

Call insert when value is true or remove when value is false.

source

pub const fn intersection(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.

source

pub const fn union(self, other: Self) -> Self

The bitwise or (|) of the bits in two flags values.

source

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.

source

pub const fn symmetric_difference(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.

source

pub const fn complement(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.

source§

impl OutFlags2

source

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.

source

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 Binary for OutFlags2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl BitAnd for OutFlags2

source§

fn bitand(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.

source§

type Output = OutFlags2

The resulting type after applying the & operator.
source§

impl BitAndAssign for OutFlags2

source§

fn bitand_assign(&mut self, other: Self)

The bitwise and (&) of the bits in two flags values.

source§

impl BitOr for OutFlags2

source§

fn bitor(self, other: OutFlags2) -> Self

The bitwise or (|) of the bits in two flags values.

source§

type Output = OutFlags2

The resulting type after applying the | operator.
source§

impl BitOrAssign for OutFlags2

source§

fn bitor_assign(&mut self, other: Self)

The bitwise or (|) of the bits in two flags values.

source§

impl BitXor for OutFlags2

source§

fn bitxor(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.

source§

type Output = OutFlags2

The resulting type after applying the ^ operator.
source§

impl BitXorAssign for OutFlags2

source§

fn bitxor_assign(&mut self, other: Self)

The bitwise exclusive-or (^) of the bits in two flags values.

source§

impl Debug for OutFlags2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Extend<OutFlags2> for OutFlags2

source§

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)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl Flags for OutFlags2

source§

const FLAGS: &'static [Flag<OutFlags2>] = _

The set of defined flags.
source§

type Bits = u32

The underlying bits type.
source§

fn bits(&self) -> u32

Get the underlying bits value. Read more
source§

fn from_bits_retain(bits: u32) -> OutFlags2

Convert from a bits value exactly.
source§

fn empty() -> Self

Get a flags value with all bits unset.
source§

fn all() -> Self

Get a flags value with all known bits set.
source§

fn from_bits(bits: Self::Bits) -> Option<Self>

Convert from a bits value. Read more
source§

fn from_bits_truncate(bits: Self::Bits) -> Self

Convert from a bits value, unsetting any unknown bits.
source§

fn from_name(name: &str) -> Option<Self>

Get a flags value with the bits of a flag with the given name set. Read more
source§

fn iter(&self) -> Iter<Self>

Yield a set of contained flags values. Read more
source§

fn iter_names(&self) -> IterNames<Self>

Yield a set of contained named flags values. Read more
source§

fn is_empty(&self) -> bool

Whether all bits in this flags value are unset.
source§

fn is_all(&self) -> bool

Whether all known bits in this flags value are set.
source§

fn intersects(&self, other: Self) -> bool
where Self: Sized,

Whether any set bits in a source flags value are also set in a target flags value.
source§

fn contains(&self, other: Self) -> bool
where Self: Sized,

Whether all set bits in a source flags value are also set in a target flags value.
source§

fn insert(&mut self, other: Self)
where Self: Sized,

The bitwise or (|) of the bits in two flags values.
source§

fn remove(&mut self, other: Self)
where Self: Sized,

The intersection of a source flags value with the complement of a target flags value (&!). Read more
source§

fn toggle(&mut self, other: Self)
where Self: Sized,

The bitwise exclusive-or (^) of the bits in two flags values.
source§

fn set(&mut self, other: Self, value: bool)
where Self: Sized,

Call Flags::insert when value is true or Flags::remove when value is false.
source§

fn intersection(self, other: Self) -> Self

The bitwise and (&) of the bits in two flags values.
source§

fn union(self, other: Self) -> Self

The bitwise or (|) of the bits in two flags values.
source§

fn difference(self, other: Self) -> Self

The intersection of a source flags value with the complement of a target flags value (&!). Read more
source§

fn symmetric_difference(self, other: Self) -> Self

The bitwise exclusive-or (^) of the bits in two flags values.
source§

fn complement(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.
source§

impl FromIterator<OutFlags2> for OutFlags2

source§

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

source§

type Item = OutFlags2

The type of the elements being iterated over.
source§

type IntoIter = Iter<OutFlags2>

Which kind of iterator are we turning this into?
source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
source§

impl LowerHex for OutFlags2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Not for OutFlags2

source§

fn not(self) -> Self

The bitwise negation (!) of the bits in a flags value, truncating the result.

source§

type Output = OutFlags2

The resulting type after applying the ! operator.
source§

impl Octal for OutFlags2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PublicFlags for OutFlags2

source§

type Primitive = u32

The type of the underlying storage.
source§

type Internal = InternalBitFlags

The type of the internal field on the generated flags type.
source§

impl Sub for OutFlags2

source§

fn sub(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.

source§

type Output = OutFlags2

The resulting type after applying the - operator.
source§

impl SubAssign for OutFlags2

source§

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.

source§

impl UpperHex for OutFlags2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.