Blender V5.0
nla_private.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2009 Blender Authors, Joshua Leung. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "BLI_bitmap.h"
12#include "BLI_ghash.h"
13
14#include "DNA_anim_types.h"
15#include "DNA_listBase.h"
16
17#include "RNA_types.hh"
18
20
21/* --------------- NLA Evaluation DataTypes ----------------------- */
22
40
43 /* standard evaluation */
47
48 /* transition-strip evaluations */
51};
52
53struct NlaEvalChannel;
54struct NlaEvalData;
55
61
67
69typedef struct NlaEvalChannelSnapshot {
71
74
80
81 int length; /* Number of values in the property. */
82 bool is_base; /* Base snapshot of the channel. */
83
84 float values[]; /* Item values. */
85 /* Memory over-allocated to provide space for values. */
87
95
100typedef struct NlaEvalChannel {
103
104 /* Original RNA path string and property key. */
105 const char *rna_path;
107
108 int index;
111
112 /* Associated with the RNA property's value(s), marks which elements are affected by NLA. */
114
115 /* Base set of values. */
117 /* Memory over-allocated to provide space for base_snapshot.values. */
119
121typedef struct NlaEvalSnapshot {
122 /* Snapshot this one defaults to. */
124
125 int size;
128
130typedef struct NlaEvalData {
132
133 /* Mapping of paths and NlaEvalChannelKeys to channels. */
136
137 /* Base snapshot. */
140
141 /* Evaluation result snapshot. */
144
146typedef struct NlaKeyframingContext {
148
149 /* AnimData for which this context was built. */
150 struct AnimData *adt;
151
152 /* Data of the currently edited strip (copy, or fake strip for the main action). */
155 /* Storage for the action track as a strip. */
157
158 /* Strips above tweaked strip. */
160 /* Evaluated NLA stack below the tweak strip. */
163
164/* --------------- NLA Functions (not to be used as a proper API) ----------------------- */
165
173float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode);
174
175/* --------------- NLA Evaluation (very-private stuff) ----------------------- */
176/* these functions are only defined here to avoid problems with the order
177 * in which they get defined. */
178
183 ListBase *strips,
184 short index,
185 const struct AnimationEvalContext *anim_eval_context,
186 bool flush_to_original);
190
204
205void nlastrip_evaluate(const int evaluation_mode,
207 NlaEvalData *channels,
208 ListBase *modifiers,
209 NlaEvalStrip *nes,
210 NlaEvalSnapshot *snapshot,
211 const struct AnimationEvalContext *anim_eval_context,
212 bool flush_to_original);
217 NlaEvalData *channels,
218 NlaEvalSnapshot *snapshot,
219 bool flush_to_original);
220
222
224
233void nlasnapshot_blend(NlaEvalData *eval_data,
234 NlaEvalSnapshot *lower_snapshot,
235 NlaEvalSnapshot *upper_snapshot,
236 short upper_blendmode,
237 float upper_influence,
238 NlaEvalSnapshot *r_blended_snapshot);
239
249 NlaEvalSnapshot *lower_snapshot,
250 NlaEvalSnapshot *blended_snapshot,
251 short upper_blendmode,
252 float upper_influence,
253 NlaEvalSnapshot *r_upper_snapshot);
254
267 NlaEvalSnapshot *blended_snapshot,
268 NlaEvalSnapshot *upper_snapshot,
269 const short upper_blendmode,
270 const float upper_influence,
271 NlaEvalSnapshot *r_lower_snapshot);
272
274 NlaEvalData *channels,
275 ListBase *modifiers,
276 NlaEvalStrip *nes,
277 NlaEvalSnapshot *snapshot,
278 const struct AnimationEvalContext *anim_eval_context,
279 const bool flush_to_original);
280
283 NlaEvalData *channels,
284 ListBase *modifiers,
285 NlaEvalStrip *nes,
286 NlaEvalSnapshot *snapshot,
287 const struct AnimationEvalContext *anim_eval_context);
288
290 NlaEvalData *channels,
291 ListBase *modifiers,
292 NlaEvalStrip *nes,
293 NlaEvalSnapshot *snapshot,
294 const struct AnimationEvalContext *anim_eval_context);
unsigned int BLI_bitmap
Definition BLI_bitmap.h:13
These structs are the foundation for all linked lists in the library system.
unsigned long long int uint64_t
float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode)
eNlaStripEvaluate_Mode
@ STRIP_EVAL_NOBLEND
@ STRIP_EVAL_BLEND_GET_INVERTED_LOWER_SNAPSHOT
@ STRIP_EVAL_BLEND
void nlasnapshot_enable_all_blend_domain(NlaEvalSnapshot *snapshot)
Definition anim_sys.cc:3619
void nlasnapshot_ensure_channels(NlaEvalData *eval_data, NlaEvalSnapshot *snapshot)
Definition anim_sys.cc:3631
NlaEvalStrip * nlastrips_ctime_get_strip(ListBase *list, ListBase *strips, short index, const struct AnimationEvalContext *anim_eval_context, bool flush_to_original)
void nlasnapshot_blend_strip_get_inverted_lower_snapshot(PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const struct AnimationEvalContext *anim_eval_context)
void nlasnapshot_blend(NlaEvalData *eval_data, NlaEvalSnapshot *lower_snapshot, NlaEvalSnapshot *upper_snapshot, short upper_blendmode, float upper_influence, NlaEvalSnapshot *r_blended_snapshot)
Definition anim_sys.cc:3638
void nlastrip_evaluate(const int evaluation_mode, PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const struct AnimationEvalContext *anim_eval_context, bool flush_to_original)
eNlaEvalChannel_MixMode
Definition nla_private.h:89
@ NEC_MIX_AXIS_ANGLE
Definition nla_private.h:93
@ NEC_MIX_ADD
Definition nla_private.h:90
@ NEC_MIX_MULTIPLY
Definition nla_private.h:91
@ NEC_MIX_QUATERNION
Definition nla_private.h:92
eNlaEvalStrip_StripMode
Definition nla_private.h:42
@ NES_TIME_TRANSITION_END
Definition nla_private.h:50
@ NES_TIME_TRANSITION_START
Definition nla_private.h:49
@ NES_TIME_AFTER
Definition nla_private.h:46
@ NES_TIME_BEFORE
Definition nla_private.h:44
@ NES_TIME_WITHIN
Definition nla_private.h:45
void nlasnapshot_blend_get_inverted_lower_snapshot(NlaEvalData *eval_data, NlaEvalSnapshot *blended_snapshot, NlaEvalSnapshot *upper_snapshot, const short upper_blendmode, const float upper_influence, NlaEvalSnapshot *r_lower_snapshot)
Definition anim_sys.cc:3693
void nladata_flush_channels(PointerRNA *ptr, NlaEvalData *channels, NlaEvalSnapshot *snapshot, bool flush_to_original)
Definition anim_sys.cc:3099
void nlasnapshot_blend_get_inverted_upper_snapshot(NlaEvalData *eval_data, NlaEvalSnapshot *lower_snapshot, NlaEvalSnapshot *blended_snapshot, short upper_blendmode, float upper_influence, NlaEvalSnapshot *r_upper_snapshot)
Definition anim_sys.cc:3665
void nlasnapshot_blend_strip_no_blend(PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const struct AnimationEvalContext *anim_eval_context)
void nlasnapshot_blend_strip(PointerRNA *ptr, NlaEvalData *channels, ListBase *modifiers, NlaEvalStrip *nes, NlaEvalSnapshot *snapshot, const struct AnimationEvalContext *anim_eval_context, const bool flush_to_original)
struct PropertyRNA * prop
Definition nla_private.h:59
struct PointerRNA ptr
Definition nla_private.h:58
NlaValidMask remap_domain
Definition nla_private.h:79
NlaValidMask blend_domain
Definition nla_private.h:73
struct NlaEvalChannel * channel
Definition nla_private.h:70
struct NlaEvalData * owner
struct NlaEvalChannel * next
NlaEvalChannelSnapshot base_snapshot
const char * rna_path
NlaEvalChannelKey key
struct NlaEvalChannel * prev
NlaValidMask domain
NlaEvalSnapshot eval_snapshot
GHash * path_hash
NlaEvalSnapshot base_snapshot
ListBase channels
GHash * key_hash
struct NlaEvalSnapshot * base
NlaEvalChannelSnapshot ** channels
struct NlaEvalStrip * next
Definition nla_private.h:25
NlaStrip * strip
Definition nla_private.h:30
short track_index
Definition nla_private.h:33
NlaTrack * track
Definition nla_private.h:28
short strip_mode
Definition nla_private.h:35
float strip_time
Definition nla_private.h:38
struct NlaEvalStrip * prev
Definition nla_private.h:25
NlaStrip action_track_strip
struct NlaKeyframingContext * next
struct AnimData * adt
NlaEvalData lower_eval_data
struct NlaKeyframingContext * prev
NlaEvalStrip * eval_strip
BLI_bitmap * ptr
Definition nla_private.h:64
BLI_bitmap buffer[sizeof(uint64_t)/sizeof(BLI_bitmap)]
Definition nla_private.h:65
PointerRNA * ptr
Definition wm_files.cc:4238