svn merge -r40124:40140 https://svn.blender.org/svnroot/bf-blender/trunk/blender
[blender.git] / source / blender / blenkernel / nla_private.h
1 /*
2  * $Id: nla_private.h 21537 2009-07-11 22:22:53Z gsrb3d $
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): Joshua Leung (full recode)
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 /** \file blender/blenkernel/nla_private.h
31  *  \ingroup bke
32  */
33
34
35 #ifndef NLA_PRIVATE
36 #define NLA_PRIVATE
37
38 /* --------------- NLA Evaluation DataTypes ----------------------- */
39
40 /* used for list of strips to accumulate at current time */
41 typedef struct NlaEvalStrip {
42         struct NlaEvalStrip *next, *prev;
43         
44         NlaTrack *track;                        /* track that this strip belongs to */
45         NlaStrip *strip;                        /* strip that's being used */
46         
47         short track_index;                      /* the index of the track within the list */
48         short strip_mode;                       /* which end of the strip are we looking at */
49         
50         float strip_time;                       /* time at which which strip is being evaluated */
51 } NlaEvalStrip;
52
53 /* NlaEvalStrip->strip_mode */
54 enum {
55                 /* standard evaluation */
56         NES_TIME_BEFORE = -1,
57         NES_TIME_WITHIN,
58         NES_TIME_AFTER,
59         
60                 /* transition-strip evaluations */
61         NES_TIME_TRANSITION_START,
62         NES_TIME_TRANSITION_END,
63 } eNlaEvalStrip_StripMode;
64
65
66 /* temp channel for accumulating data from NLA (avoids needing to clear all values first) */
67 // TODO: maybe this will be used as the 'cache' stuff needed for editable values too?
68 typedef struct NlaEvalChannel {
69         struct NlaEvalChannel *next, *prev;
70         
71         PointerRNA ptr;                 /* pointer to struct containing property to use */
72         PropertyRNA *prop;              /* RNA-property type to use (should be in the struct given) */
73         int index;                              /* array index (where applicable) */
74         
75         float value;                    /* value of this channel */
76 } NlaEvalChannel;
77
78 /* --------------- NLA Functions (not to be used as a proper API) ----------------------- */
79
80 /* convert from strip time <-> global time */
81 float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode);
82
83 /* --------------- NLA Evaluation (very-private stuff) ----------------------- */
84 /* these functions are only defined here to avoid problems with the order in which they get defined... */
85
86 NlaEvalStrip *nlastrips_ctime_get_strip(ListBase *list, ListBase *strips, short index, float ctime);
87 void nlastrip_evaluate(PointerRNA *ptr, ListBase *channels, ListBase *modifiers, NlaEvalStrip *nes);
88 void nladata_flush_channels(ListBase *channels);
89
90 #endif // NLA_PRIVATE