Build: use TBB as Embree tasking system
[blender.git] / source / blender / makesdna / DNA_image_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_IMAGE_TYPES_H__
25 #define __DNA_IMAGE_TYPES_H__
26
27 #include "DNA_ID.h"
28 #include "DNA_color_types.h" /* for color management */
29 #include "DNA_defs.h"
30
31 struct GPUTexture;
32 struct MovieCache;
33 struct PackedFile;
34 struct RenderResult;
35 struct Scene;
36 struct anim;
37
38 /* ImageUser is in Texture, in Nodes, Background Image, Image Window, .... */
39 /* should be used in conjunction with an ID * to Image. */
40 typedef struct ImageUser {
41   /** To retrieve render result. */
42   struct Scene *scene;
43
44   /** Movies, sequences: current to display. */
45   int framenr;
46   /** Total amount of frames to use. */
47   int frames;
48   /** Offset within movie, start frame in global time. */
49   int offset, sfra;
50   /** Cyclic flag. */
51   char _pad0, cycl;
52   char ok;
53
54   /** Multiview current eye - for internal use of drawing routines. */
55   char multiview_eye;
56   short pass;
57   char _pad1[2];
58
59   int tile;
60   int _pad2;
61
62   /** Listbase indices, for menu browsing or retrieve buffer. */
63   short multi_index, view, layer;
64   short flag;
65 } ImageUser;
66
67 typedef struct ImageAnim {
68   struct ImageAnim *next, *prev;
69   struct anim *anim;
70 } ImageAnim;
71
72 typedef struct ImageView {
73   struct ImageView *next, *prev;
74   /** MAX_NAME. */
75   char name[64];
76   /** 1024 = FILE_MAX. */
77   char filepath[1024];
78 } ImageView;
79
80 typedef struct ImagePackedFile {
81   struct ImagePackedFile *next, *prev;
82   struct PackedFile *packedfile;
83   /** 1024 = FILE_MAX. */
84   char filepath[1024];
85 } ImagePackedFile;
86
87 typedef struct RenderSlot {
88   struct RenderSlot *next, *prev;
89   /** 64 = MAX_NAME. */
90   char name[64];
91   struct RenderResult *render;
92 } RenderSlot;
93
94 typedef struct ImageTile_Runtime {
95   int tilearray_layer;
96   int _pad;
97   int tilearray_offset[2];
98   int tilearray_size[2];
99 } ImageTile_Runtime;
100
101 typedef struct ImageTile {
102   struct ImageTile *next, *prev;
103
104   struct ImageTile_Runtime runtime;
105
106   char ok;
107   char _pad[3];
108
109   int tile_number;
110   char label[64];
111 } ImageTile;
112
113 /* iuser->flag */
114 #define IMA_ANIM_ALWAYS (1 << 0)
115 /* #define IMA_UNUSED_1         (1 << 1) */
116 /* #define IMA_UNUSED_2         (1 << 2) */
117 #define IMA_NEED_FRAME_RECALC (1 << 3)
118 #define IMA_SHOW_STEREO (1 << 4)
119
120 enum {
121   TEXTARGET_TEXTURE_2D = 0,
122   TEXTARGET_TEXTURE_CUBE_MAP = 1,
123   TEXTARGET_TEXTURE_2D_ARRAY = 2,
124   TEXTARGET_TEXTURE_TILE_MAPPING = 3,
125   TEXTARGET_COUNT = 4,
126 };
127
128 typedef struct Image {
129   ID id;
130
131   /** File path, 1024 = FILE_MAX. */
132   char name[1024];
133
134   /** Not written in file. */
135   struct MovieCache *cache;
136   /** Not written in file 4 = TEXTARGET_COUNT, 2 = stereo eyes. */
137   struct GPUTexture *gputexture[4][2];
138
139   /* sources from: */
140   ListBase anims;
141   struct RenderResult *rr;
142
143   ListBase renderslots;
144   short render_slot, last_render_slot;
145
146   int flag;
147   short source, type;
148   int lastframe;
149
150   /* GPU texture flag. */
151   short gpuflag;
152   char _pad2[2];
153   int gpuframenr;
154
155   /** Deprecated. */
156   struct PackedFile *packedfile DNA_DEPRECATED;
157   struct ListBase packedfiles;
158   struct PreviewImage *preview;
159
160   int lastused;
161
162   /* for generated images */
163   int gen_x, gen_y;
164   char gen_type, gen_flag;
165   short gen_depth;
166   float gen_color[4];
167
168   /* display aspect - for UV editing images resized for faster openGL display */
169   float aspx, aspy;
170
171   /* color management */
172   ColorManagedColorspaceSettings colorspace_settings;
173   char alpha_mode;
174
175   char _pad;
176
177   /* Multiview */
178   /** For viewer node stereoscopy. */
179   char eye;
180   char views_format;
181
182   /* ImageTile list for UDIMs. */
183   int active_tile_index;
184   ListBase tiles;
185
186   /** ImageView. */
187   ListBase views;
188   struct Stereo3dFormat *stereo3d_format;
189 } Image;
190
191 /* **************** IMAGE ********************* */
192
193 /* Image.flag */
194 enum {
195   IMA_HIGH_BITDEPTH = (1 << 0),
196   IMA_FLAG_UNUSED_1 = (1 << 1), /* cleared */
197 #ifdef DNA_DEPRECATED_ALLOW
198   IMA_DO_PREMUL = (1 << 2),
199 #endif
200   IMA_FLAG_UNUSED_4 = (1 << 4), /* cleared */
201   IMA_NOCOLLECT = (1 << 5),
202   IMA_FLAG_UNUSED_6 = (1 << 6), /* cleared */
203   IMA_OLD_PREMUL = (1 << 7),
204   IMA_FLAG_UNUSED_8 = (1 << 8), /* cleared */
205   IMA_USED_FOR_RENDER = (1 << 9),
206   /** For image user, but these flags are mixed. */
207   IMA_USER_FRAME_IN_RANGE = (1 << 10),
208   IMA_VIEW_AS_RENDER = (1 << 11),
209   IMA_FLAG_UNUSED_12 = (1 << 12), /* cleared */
210   IMA_DEINTERLACE = (1 << 13),
211   IMA_USE_VIEWS = (1 << 14),
212   IMA_FLAG_UNUSED_15 = (1 << 15), /* cleared */
213   IMA_FLAG_UNUSED_16 = (1 << 16), /* cleared */
214 };
215
216 /* Image.gpuflag */
217 enum {
218   /** GPU texture needs to be refreshed. */
219   IMA_GPU_REFRESH = (1 << 0),
220   /** All mipmap levels in OpenGL texture set? */
221   IMA_GPU_MIPMAP_COMPLETE = (1 << 1),
222 };
223
224 /* Image.source, where the image comes from */
225 enum {
226   /* IMA_SRC_CHECK = 0, */ /* UNUSED */
227   IMA_SRC_FILE = 1,
228   IMA_SRC_SEQUENCE = 2,
229   IMA_SRC_MOVIE = 3,
230   IMA_SRC_GENERATED = 4,
231   IMA_SRC_VIEWER = 5,
232   IMA_SRC_TILED = 6,
233 };
234
235 /* Image.type, how to handle or generate the image */
236 enum {
237   IMA_TYPE_IMAGE = 0,
238   IMA_TYPE_MULTILAYER = 1,
239   /* generated */
240   IMA_TYPE_UV_TEST = 2,
241   /* viewers */
242   IMA_TYPE_R_RESULT = 4,
243   IMA_TYPE_COMPOSITE = 5,
244 };
245
246 /* Image.gen_type */
247 enum {
248   IMA_GENTYPE_BLANK = 0,
249   IMA_GENTYPE_GRID = 1,
250   IMA_GENTYPE_GRID_COLOR = 2,
251 };
252
253 /* render */
254 #define IMA_MAX_RENDER_TEXT (1 << 9)
255
256 /* Image.gen_flag */
257 enum {
258   IMA_GEN_FLOAT = 1,
259 };
260
261 /* Image.alpha_mode */
262 enum {
263   IMA_ALPHA_STRAIGHT = 0,
264   IMA_ALPHA_PREMUL = 1,
265   IMA_ALPHA_CHANNEL_PACKED = 2,
266   IMA_ALPHA_IGNORE = 3,
267 };
268
269 #endif