3D View: add opacity for sculpt mask display
[blender.git] / source / blender / makesdna / DNA_view3d_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_VIEW3D_TYPES_H__
25 #define __DNA_VIEW3D_TYPES_H__
26
27 struct BoundBox;
28 struct GPUViewport;
29 struct Image;
30 struct Material;
31 struct MovieClip;
32 struct MovieClipUser;
33 struct Object;
34 struct RenderEngine;
35 struct SmoothView3DStore;
36 struct SpaceLink;
37 struct ViewDepths;
38 struct bGPdata;
39 struct wmTimer;
40
41 #include "DNA_defs.h"
42 #include "DNA_listBase.h"
43 #include "DNA_image_types.h"
44 #include "DNA_object_types.h"
45 #include "DNA_movieclip_types.h"
46 #include "DNA_gpu_types.h"
47
48 typedef struct RegionView3D {
49
50   /** GL_PROJECTION matrix. */
51   float winmat[4][4];
52   /** GL_MODELVIEW matrix. */
53   float viewmat[4][4];
54   /** Inverse of viewmat. */
55   float viewinv[4][4];
56   /** Viewmat*winmat. */
57   float persmat[4][4];
58   /** Inverse of persmat. */
59   float persinv[4][4];
60   /** Offset/scale for camera glsl texcoords. */
61   float viewcamtexcofac[4];
62
63   /** viewmat/persmat multiplied with object matrix, while drawing and selection. */
64   float viewmatob[4][4];
65   float persmatob[4][4];
66
67   /** User defined clipping planes. */
68   float clip[6][4];
69   /** Clip in object space,
70    * means we can test for clipping in editmode without first going into worldspace. */
71   float clip_local[6][4];
72   struct BoundBox *clipbb;
73
74   /** Allocated backup of its self while in localview. */
75   struct RegionView3D *localvd;
76   struct RenderEngine *render_engine;
77   struct ViewDepths *depths;
78
79   /** Animated smooth view. */
80   struct SmoothView3DStore *sms;
81   struct wmTimer *smooth_timer;
82
83   /** Transform gizmo matrix. */
84   float twmat[4][4];
85   /** min/max dot product on twmat xyz axis. */
86   float tw_axis_min[3], tw_axis_max[3];
87   float tw_axis_matrix[3][3];
88
89   float gridview DNA_DEPRECATED;
90
91   /** View rotation, must be kept normalized. */
92   float viewquat[4];
93   /** Distance from 'ofs' along -viewinv[2] vector, where result is negative as is 'ofs'. */
94   float dist;
95   /** Camera view offsets, 1.0 = viewplane moves entire width/height. */
96   float camdx, camdy;
97   /** Runtime only. */
98   float pixsize;
99   /**
100    * View center & orbit pivot, negative of worldspace location,
101    * also matches -viewinv[3][0:3] in ortho mode.
102    */
103   float ofs[3];
104   /** Viewport zoom on the camera frame, see BKE_screen_view3d_zoom_to_fac. */
105   float camzoom;
106   /**
107    * 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    */
110   char is_persp;
111   char persp;
112   char view;
113   char viewlock;
114   /** Options for quadview (store while out of quad view). */
115   char viewlock_quad;
116   char _pad[3];
117   /** Normalized offset for locked view: (-1, -1) bottom left, (1, 1) upper right. */
118   float ofs_lock[2];
119
120   /** XXX can easily get rid of this (Julian). */
121   short twdrawflag;
122   short rflag;
123
124   /** Last view (use when switching out of camera view). */
125   float lviewquat[4];
126   /** Lpersp can never be set to 'RV3D_CAMOB'. */
127   short lpersp, lview;
128
129   /** Active rotation from NDOF or elsewhere. */
130   float rot_angle;
131   float rot_axis[3];
132 } RegionView3D;
133
134 typedef struct View3DCursor {
135   float location[3];
136
137   float rotation_quaternion[4];
138   float rotation_euler[3];
139   float rotation_axis[3], rotation_angle;
140   short rotation_mode;
141
142   char _pad[6];
143 } View3DCursor;
144
145 /** 3D Viewport Shading settings. */
146 typedef struct View3DShading {
147   /** Shading type (VIEW3D_SHADE_SOLID, ..). */
148   char type;
149   /** Runtime, for toggle between rendered viewport. */
150   char prev_type;
151   char prev_type_wire;
152
153   char color_type;
154   short flag;
155
156   char light;
157   char background_type;
158   char cavity_type;
159   char wire_color_type;
160   char _pad[6];
161
162   /** FILE_MAXFILE. */
163   char studio_light[256];
164   /** FILE_MAXFILE. */
165   char lookdev_light[256];
166   /** FILE_MAXFILE. */
167   char matcap[256];
168
169   float shadow_intensity;
170   float single_color[3];
171
172   float studiolight_rot_z;
173   float studiolight_background;
174
175   float object_outline_color[3];
176   float xray_alpha;
177   float xray_alpha_wire;
178
179   float cavity_valley_factor;
180   float cavity_ridge_factor;
181
182   float background_color[3];
183
184   float curvature_ridge_factor;
185   float curvature_valley_factor;
186
187 } View3DShading;
188
189 /** 3D Viewport Overlay settings. */
190 typedef struct View3DOverlay {
191   int flag;
192
193   /** Edit mode settings. */
194   int edit_flag;
195   float normals_length;
196   float backwire_opacity;
197
198   /** Paint mode settings. */
199   int paint_flag;
200
201   /** Weight paint mode settings. */
202   int wpaint_flag;
203
204   /** Alpha for texture, weight, vertex paint overlay. */
205   float texture_paint_mode_opacity;
206   float vertex_paint_mode_opacity;
207   float weight_paint_mode_opacity;
208   float sculpt_mode_mask_opacity;
209
210   /** Armature edit/pose mode settings. */
211   int _pad3;
212   float xray_alpha_bone;
213
214   /** Other settings. */
215   float wireframe_threshold;
216
217   /** Grease pencil settings. */
218   float gpencil_paper_opacity;
219   float gpencil_grid_opacity;
220   float gpencil_fade_layer;
221
222 } View3DOverlay;
223
224 typedef struct View3D_Runtime {
225   /** Nkey panel stores stuff here. */
226   void *properties_storage;
227 } View3D_Runtime;
228
229 /** 3D ViewPort Struct. */
230 typedef struct View3D {
231   struct SpaceLink *next, *prev;
232   /** Storage of regions for inactive spaces. */
233   ListBase regionbase;
234   char spacetype;
235   char link_flag;
236   char _pad0[6];
237   /* End 'SpaceLink' header. */
238
239   float viewquat[4] DNA_DEPRECATED;
240   float dist DNA_DEPRECATED;
241
242   /** Size of bundles in reconstructed data. */
243   float bundle_size;
244   /** Display style for bundle. */
245   char bundle_drawtype;
246
247   char drawtype DNA_DEPRECATED;
248
249   char _pad3[1];
250
251   /** Multiview current eye - for internal use. */
252   char multiview_eye;
253
254   int object_type_exclude_viewport;
255   int object_type_exclude_select;
256
257   short persp DNA_DEPRECATED;
258   short view DNA_DEPRECATED;
259
260   struct Object *camera, *ob_centre;
261   rctf render_border;
262
263   /** Allocated backup of its self while in localview. */
264   struct View3D *localvd;
265
266   /** Optional string for armature bone to define center, MAXBONENAME. */
267   char ob_centre_bone[64];
268
269   unsigned short local_view_uuid;
270   char _pad6[2];
271   int layact DNA_DEPRECATED;
272
273   /** Optional bool for 3d cursor to define center. */
274   short ob_centre_cursor;
275   short scenelock;
276   short gp_flag;
277   short flag;
278   int flag2;
279
280   float lens, grid;
281   float clip_start, clip_end;
282   float ofs[3] DNA_DEPRECATED;
283
284   char _pad[1];
285
286   /** Transform gizmo info. */
287   /** #V3D_GIZMO_SHOW_* */
288   char gizmo_flag;
289
290   char gizmo_show_object;
291   char gizmo_show_armature;
292   char gizmo_show_empty;
293   char gizmo_show_light;
294   char gizmo_show_camera;
295
296   char gridflag;
297
298   short gridlines;
299   /** Number of subdivisions in the grid between each highlighted grid line. */
300   short gridsubdiv;
301
302   /** Actually only used to define the opacity of the grease pencil vertex in edit mode. */
303   float vertex_opacity;
304
305   /* note, 'fx_settings.dof' is currently _not_ allocated,
306    * instead set (temporarily) from camera */
307   struct GPUFXSettings fx_settings;
308
309   /* XXX deprecated? */
310   /** Grease-Pencil Data (annotation layers). */
311   struct bGPdata *gpd DNA_DEPRECATED;
312
313   /** Stereoscopy settings. */
314   short stereo3d_flag;
315   char stereo3d_camera;
316   char _pad4;
317   float stereo3d_convergence_factor;
318   float stereo3d_volume_alpha;
319   float stereo3d_convergence_alpha;
320
321   /** Display settings. */
322   View3DShading shading;
323   View3DOverlay overlay;
324
325   /** Runtime evaluation data (keep last). */
326   View3D_Runtime runtime;
327 } View3D;
328
329 /** #View3D.stereo3d_flag */
330 #define V3D_S3D_DISPCAMERAS (1 << 0)
331 #define V3D_S3D_DISPPLANE (1 << 1)
332 #define V3D_S3D_DISPVOLUME (1 << 2)
333
334 /** #View3D.flag */
335 #define V3D_FLAG_UNUSED_0 (1 << 0) /* cleared */
336 #define V3D_FLAG_UNUSED_1 (1 << 1) /* cleared */
337 #define V3D_HIDE_HELPLINES (1 << 2)
338 #define V3D_INVALID_BACKBUF (1 << 3)
339
340 #define V3D_FLAG_UNUSED_10 (1 << 10) /* cleared */
341 #define V3D_SELECT_OUTLINE (1 << 11)
342 #define V3D_FLAG_UNUSED_12 (1 << 12) /* cleared */
343 #define V3D_GLOBAL_STATS (1 << 13)
344 #define V3D_DRAW_CENTERS (1 << 15)
345
346 /** #RegionView3D.persp */
347 #define RV3D_ORTHO 0
348 #define RV3D_PERSP 1
349 #define RV3D_CAMOB 2
350
351 /** #RegionView3D.rflag */
352 #define RV3D_CLIPPING (1 << 2)
353 #define RV3D_NAVIGATING (1 << 3)
354 #define RV3D_GPULIGHT_UPDATE (1 << 4)
355 /*#define RV3D_IS_GAME_ENGINE       (1 << 5) */ /* UNUSED */
356 /**
357  * Disable zbuffer offset, skip calls to #ED_view3d_polygon_offset.
358  * Use when precise surface depth is needed and picking bias isn't, see T45434).
359  */
360 #define RV3D_ZOFFSET_DISABLED 64
361
362 /** #RegionView3D.viewlock */
363 #define RV3D_LOCKED (1 << 0)
364 #define RV3D_BOXVIEW (1 << 1)
365 #define RV3D_BOXCLIP (1 << 2)
366 /** #RegionView3D.viewlock_quad */
367 #define RV3D_VIEWLOCK_INIT (1 << 7)
368
369 /** #RegionView3D.view */
370 #define RV3D_VIEW_USER 0
371 #define RV3D_VIEW_FRONT 1
372 #define RV3D_VIEW_BACK 2
373 #define RV3D_VIEW_LEFT 3
374 #define RV3D_VIEW_RIGHT 4
375 #define RV3D_VIEW_TOP 5
376 #define RV3D_VIEW_BOTTOM 6
377 #define RV3D_VIEW_CAMERA 8
378
379 #define RV3D_VIEW_IS_AXIS(view) (((view) >= RV3D_VIEW_FRONT) && ((view) <= RV3D_VIEW_BOTTOM))
380
381 /** #View3D.flag2 (int) */
382 #define V3D_HIDE_OVERLAYS (1 << 2)
383 #define V3D_FLAG2_UNUSED_3 (1 << 3) /* cleared */
384 #define V3D_SHOW_ANNOTATION (1 << 4)
385 #define V3D_LOCK_CAMERA (1 << 5)
386 #define V3D_FLAG2_UNUSED_6 (1 << 6) /* cleared */
387 #define V3D_SHOW_RECONSTRUCTION (1 << 7)
388 #define V3D_SHOW_CAMERAPATH (1 << 8)
389 #define V3D_SHOW_BUNDLENAME (1 << 9)
390 #define V3D_FLAG2_UNUSED_10 (1 << 10) /* cleared */
391 #define V3D_RENDER_BORDER (1 << 11)
392 #define V3D_FLAG2_UNUSED_12 (1 << 12) /* cleared */
393 #define V3D_FLAG2_UNUSED_13 (1 << 13) /* cleared */
394 #define V3D_FLAG2_UNUSED_14 (1 << 14) /* cleared */
395 #define V3D_FLAG2_UNUSED_15 (1 << 15) /* cleared */
396
397 /** #View3D.gp_flag (short) */
398 #define V3D_GP_SHOW_PAPER (1 << 0) /* Activate paper to cover all viewport */
399 #define V3D_GP_SHOW_GRID (1 << 1)  /* Activate paper grid */
400 #define V3D_GP_SHOW_EDIT_LINES (1 << 2)
401 #define V3D_GP_SHOW_MULTIEDIT_LINES (1 << 3)
402 #define V3D_GP_SHOW_ONION_SKIN (1 << 4)      /* main switch at view level */
403 #define V3D_GP_FADE_NOACTIVE_LAYERS (1 << 5) /* fade layers not active */
404
405 /** #View3DShading.light */
406 enum {
407   V3D_LIGHTING_FLAT = 0,
408   V3D_LIGHTING_STUDIO = 1,
409   V3D_LIGHTING_MATCAP = 2,
410 };
411
412 /** #View3DShading.flag */
413 enum {
414   V3D_SHADING_OBJECT_OUTLINE = (1 << 0),
415   V3D_SHADING_XRAY = (1 << 1),
416   V3D_SHADING_SHADOW = (1 << 2),
417   V3D_SHADING_SCENE_LIGHTS = (1 << 3),
418   V3D_SHADING_SPECULAR_HIGHLIGHT = (1 << 4),
419   V3D_SHADING_CAVITY = (1 << 5),
420   V3D_SHADING_MATCAP_FLIP_X = (1 << 6),
421   V3D_SHADING_SCENE_WORLD = (1 << 7),
422   V3D_SHADING_XRAY_BONE = (1 << 8),
423   V3D_SHADING_WORLD_ORIENTATION = (1 << 9),
424   V3D_SHADING_BACKFACE_CULLING = (1 << 10),
425   V3D_SHADING_DEPTH_OF_FIELD = (1 << 11),
426 };
427
428 /** #View3DShading.color_type */
429 enum {
430   V3D_SHADING_MATERIAL_COLOR = 0,
431   V3D_SHADING_RANDOM_COLOR = 1,
432   V3D_SHADING_SINGLE_COLOR = 2,
433   V3D_SHADING_TEXTURE_COLOR = 3,
434   V3D_SHADING_OBJECT_COLOR = 4,
435 };
436
437 /** #View3DShading.background_type */
438 enum {
439   V3D_SHADING_BACKGROUND_THEME = 0,
440   V3D_SHADING_BACKGROUND_WORLD = 1,
441   V3D_SHADING_BACKGROUND_VIEWPORT = 2,
442 };
443
444 /** #View3DShading.cavity_type */
445 enum {
446   V3D_SHADING_CAVITY_SSAO = 0,
447   V3D_SHADING_CAVITY_CURVATURE = 1,
448   V3D_SHADING_CAVITY_BOTH = 2,
449 };
450
451 /** #View3DOverlay.flag */
452 enum {
453   V3D_OVERLAY_FACE_ORIENTATION = (1 << 0),
454   V3D_OVERLAY_HIDE_CURSOR = (1 << 1),
455   V3D_OVERLAY_BONE_SELECT = (1 << 2),
456   V3D_OVERLAY_LOOK_DEV = (1 << 3),
457   V3D_OVERLAY_WIREFRAMES = (1 << 4),
458   V3D_OVERLAY_HIDE_TEXT = (1 << 5),
459   V3D_OVERLAY_HIDE_MOTION_PATHS = (1 << 6),
460   V3D_OVERLAY_ONION_SKINS = (1 << 7),
461   V3D_OVERLAY_HIDE_BONES = (1 << 8),
462   V3D_OVERLAY_HIDE_OBJECT_XTRAS = (1 << 9),
463   V3D_OVERLAY_HIDE_OBJECT_ORIGINS = (1 << 10),
464 };
465
466 /** #View3DOverlay.edit_flag */
467 enum {
468   V3D_OVERLAY_EDIT_VERT_NORMALS = (1 << 0),
469   V3D_OVERLAY_EDIT_LOOP_NORMALS = (1 << 1),
470   V3D_OVERLAY_EDIT_FACE_NORMALS = (1 << 2),
471
472   V3D_OVERLAY_EDIT_OCCLUDE_WIRE = (1 << 3),
473
474   V3D_OVERLAY_EDIT_WEIGHT = (1 << 4),
475
476   V3D_OVERLAY_EDIT_EDGES = (1 << 5),
477   V3D_OVERLAY_EDIT_FACES = (1 << 6),
478   V3D_OVERLAY_EDIT_FACE_DOT = (1 << 7),
479
480   V3D_OVERLAY_EDIT_SEAMS = (1 << 8),
481   V3D_OVERLAY_EDIT_SHARP = (1 << 9),
482   V3D_OVERLAY_EDIT_CREASES = (1 << 10),
483   V3D_OVERLAY_EDIT_BWEIGHTS = (1 << 11),
484
485   V3D_OVERLAY_EDIT_FREESTYLE_EDGE = (1 << 12),
486   V3D_OVERLAY_EDIT_FREESTYLE_FACE = (1 << 13),
487
488   V3D_OVERLAY_EDIT_STATVIS = (1 << 14),
489   V3D_OVERLAY_EDIT_EDGE_LEN = (1 << 15),
490   V3D_OVERLAY_EDIT_EDGE_ANG = (1 << 16),
491   V3D_OVERLAY_EDIT_FACE_ANG = (1 << 17),
492   V3D_OVERLAY_EDIT_FACE_AREA = (1 << 18),
493   V3D_OVERLAY_EDIT_INDICES = (1 << 19),
494
495   V3D_OVERLAY_EDIT_CU_HANDLES = (1 << 20),
496   V3D_OVERLAY_EDIT_CU_NORMALS = (1 << 21),
497 };
498
499 /** #View3DOverlay.paint_flag */
500 enum {
501   V3D_OVERLAY_PAINT_WIRE = (1 << 0),
502 };
503
504 /** #View3DOverlay.wpaint_flag */
505 enum {
506   V3D_OVERLAY_WPAINT_CONTOURS = (1 << 0),
507 };
508
509 /** #View3D.around */
510 enum {
511   /* center of the bounding box */
512   V3D_AROUND_CENTER_BOUNDS = 0,
513   /* center from the sum of all points divided by the total */
514   V3D_AROUND_CENTER_MEDIAN = 3,
515   /* pivot around the 2D/3D cursor */
516   V3D_AROUND_CURSOR = 1,
517   /* pivot around each items own origin */
518   V3D_AROUND_LOCAL_ORIGINS = 2,
519   /* pivot around the active items origin */
520   V3D_AROUND_ACTIVE = 4,
521 };
522
523 /** #View3d.gridflag */
524 #define V3D_SHOW_FLOOR (1 << 0)
525 #define V3D_SHOW_X (1 << 1)
526 #define V3D_SHOW_Y (1 << 2)
527 #define V3D_SHOW_Z (1 << 3)
528 #define V3D_SHOW_ORTHO_GRID (1 << 4)
529
530 /** #TransformOrientationSlot.type */
531 enum {
532   V3D_ORIENT_GLOBAL = 0,
533   V3D_ORIENT_LOCAL = 1,
534   V3D_ORIENT_NORMAL = 2,
535   V3D_ORIENT_VIEW = 3,
536   V3D_ORIENT_GIMBAL = 4,
537   V3D_ORIENT_CURSOR = 5,
538   V3D_ORIENT_CUSTOM = 1024,
539   /** Runtime only, never saved to DNA. */
540   V3D_ORIENT_CUSTOM_MATRIX = (V3D_ORIENT_CUSTOM - 1),
541 };
542
543 /** #View3d.gizmo_flag */
544 enum {
545   /** All gizmos. */
546   V3D_GIZMO_HIDE = (1 << 0),
547   V3D_GIZMO_HIDE_NAVIGATE = (1 << 1),
548   V3D_GIZMO_HIDE_CONTEXT = (1 << 2),
549   V3D_GIZMO_HIDE_TOOL = (1 << 3),
550 };
551
552 /** #View3d.gizmo_show_object */
553 enum {
554   V3D_GIZMO_SHOW_OBJECT_TRANSLATE = (1 << 0),
555   V3D_GIZMO_SHOW_OBJECT_ROTATE = (1 << 1),
556   V3D_GIZMO_SHOW_OBJECT_SCALE = (1 << 2),
557 };
558 /** #View3d.gizmo_show_armature */
559 enum {
560   /** Currently unused (WIP gizmo). */
561   V3D_GIZMO_SHOW_ARMATURE_BBONE = (1 << 0),
562   /** Not yet implemented. */
563   V3D_GIZMO_SHOW_ARMATURE_ROLL = (1 << 1),
564 };
565 /** #View3d.gizmo_show_empty */
566 enum {
567   V3D_GIZMO_SHOW_EMPTY_IMAGE = (1 << 0),
568   V3D_GIZMO_SHOW_EMPTY_FORCE_FIELD = (1 << 1),
569 };
570 /** #View3d.gizmo_show_light */
571 enum {
572   /** Use for both spot & area size. */
573   V3D_GIZMO_SHOW_LIGHT_SIZE = (1 << 0),
574   V3D_GIZMO_SHOW_LIGHT_LOOK_AT = (1 << 1),
575 };
576 /** #View3d.gizmo_show_camera */
577 enum {
578   /** Also used for ortho size. */
579   V3D_GIZMO_SHOW_CAMERA_LENS = (1 << 0),
580   V3D_GIZMO_SHOW_CAMERA_DOF_DIST = (1 << 2),
581 };
582
583 #define RV3D_CAMZOOM_MIN -30
584 #define RV3D_CAMZOOM_MAX 600
585
586 /** #BKE_screen_view3d_zoom_to_fac() values above */
587 #define RV3D_CAMZOOM_MIN_FACTOR 0.1657359312880714853f
588 #define RV3D_CAMZOOM_MAX_FACTOR 44.9852813742385702928f
589
590 #endif