bd0916c9b7ebd7a668199109ac0111ca64927e01
[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_defs.h"
28 #include "DNA_ID.h"
29 #include "DNA_color_types.h"  /* for color management */
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         /** Listbase indices, for menu browsing or retrieve buffer. */
60         short multi_index, view, layer;
61         short flag;
62 } ImageUser;
63
64 typedef struct ImageAnim {
65         struct ImageAnim *next, *prev;
66         struct anim *anim;
67 } ImageAnim;
68
69 typedef struct ImageView {
70         struct ImageView *next, *prev;
71         /** MAX_NAME. */
72         char name[64];
73         /** 1024 = FILE_MAX. */
74         char filepath[1024];
75 } ImageView;
76
77 typedef struct ImagePackedFile {
78         struct ImagePackedFile *next, *prev;
79         struct PackedFile *packedfile;
80         /** 1024 = FILE_MAX. */
81         char filepath[1024];
82 } ImagePackedFile;
83
84 typedef struct RenderSlot {
85         struct RenderSlot *next, *prev;
86         /** 64 = MAX_NAME. */
87         char name[64];
88         struct RenderResult *render;
89 } RenderSlot;
90
91 /* iuser->flag */
92 #define IMA_ANIM_ALWAYS         (1 << 0)
93 /* #define IMA_DEPRECATED_1     (1 << 1) */
94 /* #define IMA_DEPRECATED_2     (1 << 2) */
95 #define IMA_NEED_FRAME_RECALC   (1 << 3)
96 #define IMA_SHOW_STEREO         (1 << 4)
97
98 enum {
99         TEXTARGET_TEXTURE_2D = 0,
100         TEXTARGET_TEXTURE_CUBE_MAP = 1,
101         TEXTARGET_COUNT = 2,
102 };
103
104 typedef struct Image {
105         ID id;
106
107         /** File path, 1024 = FILE_MAX. */
108         char name[1024];
109
110         /** Not written in file. */
111         struct MovieCache *cache;
112         /** Not written in file 2 = TEXTARGET_COUNT. */
113         struct GPUTexture *gputexture[2];
114
115         /* sources from: */
116         ListBase anims;
117         struct RenderResult *rr;
118
119         ListBase renderslots;
120         short render_slot, last_render_slot;
121
122         int flag;
123         short source, type;
124         int lastframe;
125
126         /* GPU texture flag. */
127         short gpuflag;
128         char _pad2[6];
129
130         /** Deprecated. */
131         struct PackedFile *packedfile DNA_DEPRECATED;
132         struct ListBase packedfiles;
133         struct PreviewImage *preview;
134
135         int lastused;
136         short ok;
137         char _pad4[6];
138
139         /* for generated images */
140         int gen_x, gen_y;
141         char gen_type, gen_flag;
142         short gen_depth;
143         float gen_color[4];
144
145         /* display aspect - for UV editing images resized for faster openGL display */
146         float aspx, aspy;
147
148         /* color management */
149         ColorManagedColorspaceSettings colorspace_settings;
150         char alpha_mode;
151
152         char _pad[5];
153
154         /* Multiview */
155         /** For viewer node stereoscopy. */
156         char eye;
157         char views_format;
158         /** ImageView. */
159         ListBase views;
160         struct Stereo3dFormat *stereo3d_format;
161 } Image;
162
163
164 /* **************** IMAGE ********************* */
165
166 /* Image.flag */
167 enum {
168         IMA_FLAG_DEPRECATED_0   = (1 << 0),  /* cleared */
169         IMA_FLAG_DEPRECATED_1   = (1 << 1),  /* cleared */
170 #ifdef DNA_DEPRECATED
171         IMA_DO_PREMUL           = (1 << 2),
172 #endif
173         IMA_FLAG_DEPRECATED_4   = (1 << 4),  /* cleared */
174         IMA_NOCOLLECT           = (1 << 5),
175         IMA_FLAG_DEPRECATED_6   = (1 << 6),  /* cleared */
176         IMA_OLD_PREMUL          = (1 << 7),
177         IMA_FLAG_DEPRECATED_8   = (1 << 8),  /* cleared */
178         IMA_USED_FOR_RENDER     = (1 << 9),
179         /** For image user, but these flags are mixed. */
180         IMA_USER_FRAME_IN_RANGE = (1 << 10),
181         IMA_VIEW_AS_RENDER      = (1 << 11),
182         IMA_IGNORE_ALPHA        = (1 << 12),
183         IMA_DEINTERLACE         = (1 << 13),
184         IMA_USE_VIEWS           = (1 << 14),
185         IMA_FLAG_DEPRECATED_15  = (1 << 15),  /* cleared */
186         IMA_FLAG_DEPRECATED_16  = (1 << 16),  /* cleared */
187 };
188
189 /* Image.gpuflag */
190 enum {
191         /** GPU texture needs to be refreshed. */
192         IMA_GPU_REFRESH =                 (1 << 0),
193         /** All mipmap levels in OpenGL texture set? */
194         IMA_GPU_MIPMAP_COMPLETE =         (1 << 1),
195         /** OpenGL image texture bound as non-color data. */
196         IMA_GPU_IS_DATA =                 (1 << 2),
197 };
198
199 /* ima->type and ima->source moved to BKE_image.h, for API */
200
201 /* render */
202 #define IMA_MAX_RENDER_TEXT             (1 << 9)
203
204 /* gen_flag */
205 #define IMA_GEN_FLOAT           1
206
207 /* alpha_mode */
208 enum {
209         IMA_ALPHA_STRAIGHT = 0,
210         IMA_ALPHA_PREMUL = 1,
211 };
212
213 #endif