Workbench: Matcaps T55291
[blender.git] / source / blender / makesdna / DNA_view3d_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_view3d_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_VIEW3D_TYPES_H__
33 #define __DNA_VIEW3D_TYPES_H__
34
35 struct ViewDepths;
36 struct Object;
37 struct Image;
38 struct SpaceLink;
39 struct BoundBox;
40 struct MovieClip;
41 struct MovieClipUser;
42 struct RenderEngine;
43 struct bGPdata;
44 struct SmoothView3DStore;
45 struct wmTimer;
46 struct Material;
47 struct GPUViewport;
48
49 #include "DNA_defs.h"
50 #include "DNA_listBase.h"
51 #include "DNA_image_types.h"
52 #include "DNA_movieclip_types.h"
53 #include "DNA_gpu_types.h"
54
55 /* ******************************** */
56
57 /* The near/far thing is a Win EXCEPTION, caused by indirect includes from <windows.h>.
58  * Thus, leave near/far in the code, and undef for windows. */
59 #ifdef _WIN32
60 #  undef near
61 #  undef far
62 #endif
63
64 typedef struct RegionView3D {
65         
66         float winmat[4][4];                     /* GL_PROJECTION matrix */
67         float viewmat[4][4];            /* GL_MODELVIEW matrix */
68         float viewinv[4][4];            /* inverse of viewmat */
69         float persmat[4][4];            /* viewmat*winmat */
70         float persinv[4][4];            /* inverse of persmat */
71         float viewcamtexcofac[4];       /* offset/scale for camera glsl texcoords */
72
73         /* viewmat/persmat multiplied with object matrix, while drawing and selection */
74         float viewmatob[4][4];
75         float persmatob[4][4];
76
77         /* user defined clipping planes */
78         float clip[6][4];
79         float clip_local[6][4]; /* clip in object space, means we can test for clipping in editmode without first going into worldspace */
80         struct BoundBox *clipbb;
81
82         struct RegionView3D *localvd; /* allocated backup of its self while in localview */
83         struct RenderEngine *render_engine;
84         struct ViewDepths *depths;
85         void *gpuoffscreen;
86
87         /* animated smooth view */
88         struct SmoothView3DStore *sms;
89         struct wmTimer *smooth_timer;
90
91
92         /* transform manipulator matrix */
93         float twmat[4][4];
94         /* min/max dot product on twmat xyz axis. */
95         float tw_axis_min[3], tw_axis_max[3];
96         float tw_axis_matrix[3][3];
97
98         float gridview;
99
100         float viewquat[4];                      /* view rotation, must be kept normalized */
101         float dist;                                     /* distance from 'ofs' along -viewinv[2] vector, where result is negative as is 'ofs' */
102         float camdx, camdy;                     /* camera view offsets, 1.0 = viewplane moves entire width/height */
103         float pixsize;                          /* runtime only */
104         float ofs[3];                           /* view center & orbit pivot, negative of worldspace location,
105                                                                  * also matches -viewinv[3][0:3] in ortho mode.*/
106         float camzoom;                          /* viewport zoom on the camera frame, see BKE_screen_view3d_zoom_to_fac */
107         char is_persp;                          /* check if persp/ortho view, since 'persp' cant be used for this since
108                                                                  * it can have cameras assigned as well. (only set in view3d_winmatrix_set) */
109         char persp;
110         char view;
111         char viewlock;
112         char viewlock_quad;                     /* options for quadview (store while out of quad view) */
113         char pad[3];
114         float ofs_lock[2];                      /* normalized offset for locked view: (-1, -1) bottom left, (1, 1) upper right */
115
116         short twdrawflag; /* XXX can easily get rid of this (Julian) */
117         short rflag;
118
119
120         /* last view (use when switching out of camera view) */
121         float lviewquat[4];
122         short lpersp, lview; /* lpersp can never be set to 'RV3D_CAMOB' */
123
124         /* active rotation from NDOF or elsewhere */
125         float rot_angle;
126         float rot_axis[3];
127 } RegionView3D;
128
129 typedef struct View3DCursor {
130         float location[3];
131         float rotation[4];
132         char _pad[4];
133 } View3DCursor;
134
135 /* 3D Viewport Shading setings */
136 typedef struct View3DShading {
137         short flag;
138         short color_type;
139
140         short light;
141         char pad[2];
142         char studio_light[256]; /* FILE_MAXFILE */
143         char matcap[256]; /* FILE_MAXFILE */
144
145         float shadow_intensity;
146         float single_color[3];
147
148         float studiolight_rot_z;
149         float studiolight_background;
150
151         float object_outline_color[3];
152         float xray_alpha;
153 } View3DShading;
154
155 /* 3D Viewport Overlay setings */
156 typedef struct View3DOverlay {
157         int flag;
158
159         /* Edit mode settings */
160         int edit_flag;
161         float normals_length;
162         float backwire_opacity;
163
164         /* Paint mode settings */
165         int paint_flag;
166
167         /* Armature edit/pose mode settings */
168         int arm_flag;
169 } View3DOverlay;
170
171 /* 3D ViewPort Struct */
172 typedef struct View3D {
173         struct SpaceLink *next, *prev;
174         ListBase regionbase;            /* storage of regions for inactive spaces */
175         char spacetype;
176         char link_flag;
177         char _pad0[6];
178         /* End 'SpaceLink' header. */
179
180         float viewquat[4]  DNA_DEPRECATED;
181         float dist         DNA_DEPRECATED;
182
183         float bundle_size;                      /* size of bundles in reconstructed data */
184         char bundle_drawtype;           /* display style for bundle */
185         char pad[3];
186
187         unsigned int lay_prev; /* for active layer toggle */
188         unsigned int lay_used; /* used while drawing */
189         
190         short persp  DNA_DEPRECATED;
191         short view   DNA_DEPRECATED;
192         
193         struct Object *camera, *ob_centre;
194         rctf render_border;
195
196         struct View3D *localvd; /* allocated backup of its self while in localview */
197         
198         char ob_centre_bone[64];                /* optional string for armature bone to define center, MAXBONENAME */
199         
200         unsigned int lay;
201         int layact;
202         
203         short ob_centre_cursor;         /* optional bool for 3d cursor to define center */
204         short scenelock, _pad1;
205         short flag, flag2, pad2;
206         
207         float lens, grid;
208         float near, far;
209         float ofs[3]  DNA_DEPRECATED;                   /* XXX deprecated */
210
211         View3DCursor cursor;
212
213         char _pad[4];
214
215         short matcap_icon;                      /* icon id */
216
217         short gridlines;
218         short gridsubdiv;       /* Number of subdivisions in the grid between each highlighted grid line */
219         char gridflag;
220
221         /* transform manipulator info */
222         char twtype, _pad5, twflag;
223         
224         short flag3;
225
226         /* drawflags, denoting state */
227         char zbuf, transp, xray;
228
229         char multiview_eye;                             /* multiview current eye - for internal use */
230
231         char pad3[4];
232
233         /* note, 'fx_settings.dof' is currently _not_ allocated,
234          * instead set (temporarily) from camera */
235         struct GPUFXSettings fx_settings;
236
237         void *properties_storage;               /* Nkey panel stores stuff here (runtime only!) */
238
239         /* XXX deprecated? */
240         struct bGPdata *gpd  DNA_DEPRECATED;            /* Grease-Pencil Data (annotation layers) */
241
242         /* Stereoscopy settings */
243         short stereo3d_flag;
244         char stereo3d_camera;
245         char pad4;
246         float stereo3d_convergence_factor;
247         float stereo3d_volume_alpha;
248         float stereo3d_convergence_alpha;
249
250         /* Display settings */
251         short drawtype;         /* Shading mode (OB_SOLID, OB_TEXTURE, ..) */
252         short prev_drawtype;    /* Runtime, for toggle between rendered viewport. */
253         int pad5;
254
255         View3DShading shading;
256         View3DOverlay overlay;
257 } View3D;
258
259
260 /* View3D->stereo_flag (short) */
261 #define V3D_S3D_DISPCAMERAS             (1 << 0)
262 #define V3D_S3D_DISPPLANE               (1 << 1)
263 #define V3D_S3D_DISPVOLUME              (1 << 2)
264
265 /* View3D->flag (short) */
266 /*#define V3D_FLAG_DEPRECATED_1 (1 << 0) */ /*UNUSED */
267 /*#define V3D_FLAG_DEPRECATED_2 (1 << 1) */ /* UNUSED */
268 #define V3D_HIDE_HELPLINES      4
269 #define V3D_INVALID_BACKBUF     8
270
271 /* #define V3D_FLAG_DEPRECATED_10 (1 << 10) */ /* UNUSED */
272 #define V3D_SELECT_OUTLINE      2048
273 #define V3D_ZBUF_SELECT         4096
274 #define V3D_GLOBAL_STATS        8192
275 #define V3D_DRAW_CENTERS        32768
276
277 /* RegionView3d->persp */
278 #define RV3D_ORTHO                              0
279 #define RV3D_PERSP                              1
280 #define RV3D_CAMOB                              2
281
282 /* RegionView3d->rflag */
283 #define RV3D_CLIPPING                           4
284 #define RV3D_NAVIGATING                         8
285 #define RV3D_GPULIGHT_UPDATE            16
286 /*#define RV3D_IS_GAME_ENGINE                   32 *//* UNUSED */
287 /**
288  * Disable zbuffer offset, skip calls to #ED_view3d_polygon_offset.
289  * Use when precise surface depth is needed and picking bias isn't, see T45434).
290  */
291 #define RV3D_ZOFFSET_DISABLED           64
292
293 /* RegionView3d->viewlock */
294 #define RV3D_LOCKED                     (1 << 0)
295 #define RV3D_BOXVIEW            (1 << 1)
296 #define RV3D_BOXCLIP            (1 << 2)
297 /* RegionView3d->viewlock_quad */
298 #define RV3D_VIEWLOCK_INIT      (1 << 7)
299
300 /* RegionView3d->view */
301 #define RV3D_VIEW_USER                   0
302 #define RV3D_VIEW_FRONT                  1
303 #define RV3D_VIEW_BACK                   2
304 #define RV3D_VIEW_LEFT                   3
305 #define RV3D_VIEW_RIGHT                  4
306 #define RV3D_VIEW_TOP                    5
307 #define RV3D_VIEW_BOTTOM                 6
308 #define RV3D_VIEW_CAMERA                 8
309
310 #define RV3D_VIEW_IS_AXIS(view) \
311         (((view) >= RV3D_VIEW_FRONT) && ((view) <= RV3D_VIEW_BOTTOM))
312
313 /* View3d->flag2 (short) */
314 #define V3D_RENDER_OVERRIDE             (1 << 2)
315 #define V3D_SOLID_TEX                   (1 << 3)
316 #define V3D_SHOW_GPENCIL                (1 << 4)
317 #define V3D_LOCK_CAMERA                 (1 << 5)
318 #define V3D_RENDER_SHADOW               (1 << 6)                /* This is a runtime only flag that's used to tell draw_mesh_object() that we're doing a shadow pass instead of a regular draw */
319 #define V3D_SHOW_RECONSTRUCTION (1 << 7)
320 #define V3D_SHOW_CAMERAPATH             (1 << 8)
321 #define V3D_SHOW_BUNDLENAME             (1 << 9)
322 #define V3D_BACKFACE_CULLING    (1 << 10)
323 #define V3D_RENDER_BORDER               (1 << 11)
324 #define V3D_SOLID_MATCAP                (1 << 12)       /* user flag */
325 #define V3D_SHOW_SOLID_MATCAP   (1 << 13)       /* runtime flag */
326 #define V3D_OCCLUDE_WIRE                (1 << 14)
327 #define V3D_SHOW_MODE_SHADE_OVERRIDE    (1 << 15)
328
329
330 /* View3d->flag3 (short) */
331 #define V3D_SHOW_WORLD                  (1 << 0)
332
333 /* View3DShading->light */
334 enum {
335         V3D_LIGHTING_FLAT   = 0,
336         V3D_LIGHTING_STUDIO = 1,
337         V3D_LIGHTING_MATCAP = 2,
338 };
339
340 /* View3DShading->flag */
341 enum {
342         V3D_SHADING_OBJECT_OUTLINE      = (1 << 0),
343         V3D_SHADING_XRAY                = (1 << 1),
344         V3D_SHADING_SHADOW              = (1 << 2),
345         V3D_SHADING_SCENE_LIGHT         = (1 << 3),
346         V3D_SHADING_SPECULAR_HIGHLIGHT  = (1 << 4),
347 };
348
349 /* View3DShading->single_color_type */
350 enum {
351         V3D_SHADING_MATERIAL_COLOR = 0,
352         V3D_SHADING_RANDOM_COLOR   = 1,
353         V3D_SHADING_SINGLE_COLOR   = 2,
354 };
355
356 /* View3DOverlay->flag */
357 enum {
358         V3D_OVERLAY_FACE_ORIENTATION  = (1 << 0),
359         V3D_OVERLAY_HIDE_CURSOR       = (1 << 1),
360         V3D_OVERLAY_BONE_SELECTION    = (1 << 2),
361         V3D_OVERLAY_LOOK_DEV          = (1 << 3),
362         V3D_OVERLAY_WIREFRAMES        = (1 << 4),
363         V3D_OVERLAY_HIDE_TEXT         = (1 << 5),
364         V3D_OVERLAY_HIDE_MOTION_PATHS = (1 << 6),
365 };
366
367 /* View3DOverlay->edit_flag */
368 enum {
369         V3D_OVERLAY_EDIT_VERT_NORMALS = (1 << 0),
370         V3D_OVERLAY_EDIT_LOOP_NORMALS = (1 << 1),
371         V3D_OVERLAY_EDIT_FACE_NORMALS = (1 << 2),
372
373         V3D_OVERLAY_EDIT_OCCLUDE_WIRE = (1 << 3),
374
375         V3D_OVERLAY_EDIT_WEIGHT       = (1 << 4),
376 };
377
378 /* View3DOverlay->arm_flag */
379 enum {
380         V3D_OVERLAY_ARM_TRANSP_BONES  = (1 << 0),
381 };
382
383 /* View3DOverlay->paint_flag */
384 enum {
385         V3D_OVERLAY_PAINT_WIRE        = (1 << 0),
386 };
387
388 /* View3D->around */
389 enum {
390         /* center of the bounding box */
391         V3D_AROUND_CENTER_BOUNDS        = 0,
392         /* center from the sum of all points divided by the total */
393         V3D_AROUND_CENTER_MEAN          = 3,
394         /* pivot around the 2D/3D cursor */
395         V3D_AROUND_CURSOR                       = 1,
396         /* pivot around each items own origin */
397         V3D_AROUND_LOCAL_ORIGINS        = 2,
398         /* pivot around the active items origin */
399         V3D_AROUND_ACTIVE                       = 4,
400 };
401
402 /*View3D types (only used in tools, not actually saved)*/
403 #define V3D_VIEW_STEPLEFT                1
404 #define V3D_VIEW_STEPRIGHT               2
405 #define V3D_VIEW_STEPDOWN                3
406 #define V3D_VIEW_STEPUP          4
407 #define V3D_VIEW_PANLEFT                 5
408 #define V3D_VIEW_PANRIGHT                6
409 #define V3D_VIEW_PANDOWN                 7
410 #define V3D_VIEW_PANUP                   8
411
412 /* View3d->gridflag */
413 #define V3D_SHOW_FLOOR                  1
414 #define V3D_SHOW_X                              2
415 #define V3D_SHOW_Y                              4
416 #define V3D_SHOW_Z                              8
417
418 /* Scene.orientation_type */
419 #define V3D_MANIP_GLOBAL                0
420 #define V3D_MANIP_LOCAL                 1
421 #define V3D_MANIP_NORMAL                2
422 #define V3D_MANIP_VIEW                  3
423 #define V3D_MANIP_GIMBAL                4
424 #define V3D_MANIP_CURSOR                5
425 #define V3D_MANIP_CUSTOM                1024
426
427 /* View3d->twflag (also) */
428 enum {
429         V3D_MANIPULATOR_DRAW        = (1 << 0),
430 };
431
432 #define RV3D_CAMZOOM_MIN -30
433 #define RV3D_CAMZOOM_MAX 600
434
435 /* #BKE_screen_view3d_zoom_to_fac() values above */
436 #define RV3D_CAMZOOM_MIN_FACTOR  0.1657359312880714853f
437 #define RV3D_CAMZOOM_MAX_FACTOR 44.9852813742385702928f
438
439 #endif
440