Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-05-05 11:45:15 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-05-05 16:54:36 +0300
commit2094b454474de25e42cd6ec1f63ebc84f50f666a (patch)
tree91331e81b3cef843fa29dfd3883ca60f36b06b30 /source/blender
parent1983eea98ef73e6fe4c9bd187944d122dc1c7b07 (diff)
3D Viewport: make shading and overlay DNA match UI names.
We should use consistent naming between the internal code and UI whenever possible, only reason not to is file compatibility.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_blender_version.h2
-rw-r--r--source/blender/blenloader/intern/versioning_280.c25
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl10
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c52
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h6
-rw-r--r--source/blender/draw/intern/draw_manager.c11
-rw-r--r--source/blender/draw/intern/draw_view.c2
-rw-r--r--source/blender/draw/modes/overlay_mode.c12
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c6
-rw-r--r--source/blender/makesdna/DNA_view3d_types.h72
-rw-r--r--source/blender/makesrna/intern/rna_space.c193
11 files changed, 194 insertions, 197 deletions
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 194757561d7..a49753d331f 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -28,7 +28,7 @@
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 280
-#define BLENDER_SUBVERSION 12
+#define BLENDER_SUBVERSION 13
/* Several breakages with 270, e.g. constraint deg vs rad */
#define BLENDER_MINVERSION 270
#define BLENDER_MINSUBVERSION 6
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 8cd9c13be32..10c2e7cb3fb 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -966,7 +966,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl;
- v3d->drawtype_lighting = V3D_LIGHTING_STUDIO;
+ v3d->shading.light = V3D_LIGHTING_STUDIO;
/* Assume (demo) files written with 2.8 want to show
* Eevee renders in the viewport. */
@@ -1069,22 +1069,31 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
}
}
}
- if (sl->spacetype == SPACE_VIEW3D) {
- View3D *v3d = (View3D *)sl;
- v3d->drawtype_ambient_intensity = 0.5;
- copy_v3_fl(v3d->drawtype_single_color, 1.0f);
- v3d->overlays |= V3D_OVERLAY_HIDE_CURSOR;
- }
}
}
}
}
- {
+ if (!MAIN_VERSION_ATLEAST(main, 280, 13)) {
+ /* Initialize specular factor. */
if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "spec_fac")) {
for (Lamp *la = main->lamp.first; la; la = la->id.next) {
la->spec_fac = 1.0f;
}
}
+
+ /* Initialize new view3D options. */
+ for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ v3d->shading.ambient_intensity = 0.5;
+ copy_v3_fl(v3d->shading.single_color, 1.0f);
+ v3d->overlay.flag |= V3D_OVERLAY_HIDE_CURSOR;
+ }
+ }
+ }
+ }
}
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
index 2a17a508046..bc6125f18b6 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_composite_frag.glsl
@@ -18,12 +18,12 @@ void main()
vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize;
uint object_id = texelFetch(objectId, texel, 0).r;
-#ifndef V3D_DRAWOPTION_OBJECT_OVERLAP
+#ifndef V3D_SHADING_OBJECT_OVERLAP
if (object_id == NO_OBJECT_ID) {
fragColor = vec4(background_color(world_data, uv_viewport.y), 0.0);
return;
}
-#else /* !V3D_DRAWOPTION_OBJECT_OVERLAP */
+#else /* !V3D_SHADING_OBJECT_OVERLAP */
float object_overlap = calculate_object_overlap(objectId, texel, object_id);
if (object_id == NO_OBJECT_ID) {
@@ -35,7 +35,7 @@ void main()
}
return;
}
-#endif /* !V3D_DRAWOPTION_OBJECT_OVERLAP */
+#endif /* !V3D_SHADING_OBJECT_OVERLAP */
#ifdef V3D_LIGHTING_STUDIO
@@ -57,9 +57,9 @@ void main()
#endif /* V3D_LIGHTING_STUDIO */
-#ifdef V3D_DRAWOPTION_OBJECT_OVERLAP
+#ifdef V3D_SHADING_OBJECT_OVERLAP
shaded_color = mix(objectOverlapColor, shaded_color, object_overlap);
-#endif /* V3D_DRAWOPTION_OBJECT_OVERLAP */
+#endif /* V3D_SHADING_OBJECT_OVERLAP */
fragColor = vec4(shaded_color, 1.0);
}
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index 9126ab801c7..1ee4aa88c8d 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -72,18 +72,19 @@ extern char datatoc_workbench_world_light_lib_glsl[];
extern DrawEngineType draw_engine_workbench_solid;
-#define NORMAL_VIEWPORT_PASS_ENABLED(wpd) (wpd->drawtype_lighting & V3D_LIGHTING_STUDIO)
-#define SHADOW_ENABLED(wpd) (wpd->drawtype_options & V3D_DRAWOPTION_SHADOW)
+#define OBJECT_ID_PASS_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_OBJECT_OVERLAP)
+#define NORMAL_VIEWPORT_PASS_ENABLED(wpd) (wpd->shading.light & V3D_LIGHTING_STUDIO)
+#define SHADOW_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_SHADOW)
static char *workbench_build_defines(WORKBENCH_PrivateData *wpd)
{
char *str = NULL;
DynStr *ds = BLI_dynstr_new();
- if (wpd->drawtype_options & V3D_DRAWOPTION_OBJECT_OVERLAP) {
- BLI_dynstr_appendf(ds, "#define V3D_DRAWOPTION_OBJECT_OVERLAP\n");
+ if (wpd->shading.flag & V3D_SHADING_OBJECT_OVERLAP) {
+ BLI_dynstr_appendf(ds, "#define V3D_SHADING_OBJECT_OVERLAP\n");
}
- if (wpd->drawtype_lighting & V3D_LIGHTING_STUDIO) {
+ if (wpd->shading.light & V3D_LIGHTING_STUDIO) {
BLI_dynstr_appendf(ds, "#define V3D_LIGHTING_STUDIO\n");
}
@@ -106,10 +107,10 @@ static char *workbench_build_composite_frag(WORKBENCH_PrivateData *wpd)
BLI_dynstr_append(ds, datatoc_workbench_common_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_background_lib_glsl);
- if (wpd->drawtype_lighting & V3D_LIGHTING_STUDIO) {
+ if (wpd->shading.light & V3D_LIGHTING_STUDIO) {
BLI_dynstr_append(ds, datatoc_workbench_world_light_lib_glsl);
}
- if (wpd->drawtype_options & V3D_DRAWOPTION_OBJECT_OVERLAP) {
+ if (wpd->shading.flag & V3D_SHADING_OBJECT_OVERLAP) {
BLI_dynstr_append(ds, datatoc_workbench_object_overlap_lib_glsl);
}
@@ -136,9 +137,9 @@ static char *workbench_build_prepass_frag(void)
static int get_shader_index(WORKBENCH_PrivateData *wpd)
{
- const int DRAWOPTIONS_MASK = V3D_DRAWOPTION_OBJECT_OVERLAP;
- int index = (wpd->drawtype_options & DRAWOPTIONS_MASK);
- index = (index << 2) + wpd->drawtype_lighting;
+ const int DRAWOPTIONS_MASK = V3D_SHADING_OBJECT_OVERLAP;
+ int index = (wpd->shading.flag & DRAWOPTIONS_MASK);
+ index = (index << 2) + wpd->shading.light;
return index;
}
@@ -183,10 +184,10 @@ static void workbench_init_object_data(ObjectEngineData *engine_data)
static void get_material_solid_color(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, float *color, float hsv_saturation, float hsv_value)
{
static float default_color[] = {1.0f, 1.0f, 1.0f};
- if (DRW_object_is_paint_mode(ob) || wpd->drawtype_options & V3D_DRAWOPTION_SINGLE_COLOR) {
- copy_v3_v3(color, wpd->drawtype_single_color);
+ if (DRW_object_is_paint_mode(ob) || wpd->shading.color_type == V3D_SHADING_SINGLE_COLOR) {
+ copy_v3_v3(color, wpd->shading.single_color);
}
- else if (wpd->drawtype_options & V3D_DRAWOPTION_RANDOMIZE) {
+ else if (wpd->shading.color_type == V3D_SHADING_RANDOM_COLOR) {
uint hash = BLI_ghashutil_strhash_p_murmur(ob->id.name);
if (ob->id.lib) {
hash = (hash * 13) ^ BLI_ghashutil_strhash_p_murmur(ob->id.lib->name);
@@ -196,11 +197,11 @@ static void get_material_solid_color(WORKBENCH_PrivateData *wpd, Object *ob, Mat
float hsv[3] = {offset, hsv_saturation, hsv_value};
hsv_to_rgb_v(hsv, color);
}
- else if (wpd->drawtype_options & V3D_DRAWOPTION_OBJECT_COLOR) {
+ else if (wpd->shading.color_type == V3D_SHADING_OBJECT_COLOR) {
copy_v3_v3(color, ob->col);
}
else {
- /* V3D_DRAWOPTION_MATERIAL_COLOR */
+ /* V3D_SHADING_MATERIAL_COLOR */
if (mat) {
copy_v3_v3(color, &mat->r);
}
@@ -297,18 +298,13 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
View3D *v3d = DCS->v3d;
if (v3d) {
- wpd->drawtype_lighting = v3d->drawtype_lighting;
- wpd->drawtype_options = v3d->drawtype_options;
- wpd->drawtype_studiolight = v3d->drawtype_studiolight;
- wpd->drawtype_ambient_intensity = v3d->drawtype_ambient_intensity;
- copy_v3_v3(wpd->drawtype_single_color, v3d->drawtype_single_color);
+ wpd->shading = v3d->shading;
}
else {
- wpd->drawtype_lighting = V3D_LIGHTING_STUDIO;
- wpd->drawtype_options = 0;
- wpd->drawtype_studiolight = 0;
- wpd->drawtype_ambient_intensity = 0.5;
- copy_v3_fl(wpd->drawtype_single_color, 1.0f);
+ memset(&wpd->shading, 0, sizeof(wpd->shading));
+ wpd->shading.light = V3D_LIGHTING_STUDIO;
+ wpd->shading.ambient_intensity = 0.5;
+ copy_v3_fl(wpd->shading.single_color, 1.0f);
}
select_deferred_shaders(wpd);
@@ -317,7 +313,7 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
WORKBENCH_UBO_World *wd = &wpd->world_data;
UI_GetThemeColor3fv(UI_GetThemeValue(TH_SHOW_BACK_GRAD) ? TH_LOW_GRAD:TH_HIGH_GRAD, wd->background_color_low);
UI_GetThemeColor3fv(TH_HIGH_GRAD, wd->background_color_high);
- studiolight_update_world(wpd->drawtype_studiolight, wd);
+ studiolight_update_world(wpd->shading.studio_light, wd);
wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), NULL);
DRW_uniformbuffer_update(wpd->world_ubo, &wpd->world_data);
@@ -350,7 +346,7 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_shadow_pass);
DRW_shgroup_stencil_mask(grp, 0x00);
workbench_composite_uniforms(wpd, grp);
- DRW_shgroup_uniform_float(grp, "lightMultiplier", &wpd->drawtype_ambient_intensity, 1);
+ DRW_shgroup_uniform_float(grp, "lightMultiplier", &wpd->shading.ambient_intensity, 1);
DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
#endif
}
@@ -446,7 +442,7 @@ void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob
const bool is_active = (ob == draw_ctx->obact);
const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
- if ((vedata->stl->g_data->drawtype_options & V3D_DRAWOPTION_SOLID_COLOR_MASK) != 0 || is_sculpt_mode) {
+ if (vedata->stl->g_data->shading.color_type != V3D_SHADING_MATERIAL_COLOR || is_sculpt_mode) {
/* No material split needed */
struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
if (geom) {
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index c0dfcc4e32f..3c2e6d43ab1 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -75,11 +75,7 @@ typedef struct WORKBENCH_PrivateData {
struct GHash *material_hash;
struct GPUShader *prepass_sh;
struct GPUShader *composite_sh;
- short drawtype_lighting;
- short drawtype_options;
- short drawtype_studiolight;
- float drawtype_ambient_intensity;
- float drawtype_single_color[3];
+ View3DShading shading;
struct GPUUniformBuffer *world_ubo;
struct DRWShadingGroup *shadow_shgrp;
WORKBENCH_UBO_World world_data;
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 6a70a0202b5..7e595d7fcdd 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -983,7 +983,7 @@ static void drw_engines_enable_external(void)
/* TODO revisit this when proper layering is implemented */
/* Gather all draw engines needed and store them in DST.enabled_engines
* That also define the rendering order of engines */
-static void drw_engines_enable_from_engine(RenderEngineType *engine_type, int drawtype, int UNUSED(drawtype_lighting))
+static void drw_engines_enable_from_engine(RenderEngineType *engine_type, int drawtype)
{
switch (drawtype) {
case OB_WIRE:
@@ -1065,9 +1065,9 @@ static void drw_engines_enable_from_mode(int mode)
}
}
-static void drw_engines_enable_from_overlays(int draw_overlays)
+static void drw_engines_enable_from_overlays(int overlay_flag)
{
- if (draw_overlays) {
+ if (overlay_flag) {
use_drw_engine(&draw_engine_overlay_type);
}
}
@@ -1085,12 +1085,11 @@ static void drw_engines_enable(ViewLayer *view_layer, RenderEngineType *engine_t
const int mode = CTX_data_mode_enum_ex(DST.draw_ctx.object_edit, obact, DST.draw_ctx.object_mode);
View3D * v3d = DST.draw_ctx.v3d;
const int drawtype = v3d->drawtype;
- const int drawtype_lighting = v3d->drawtype_lighting;
- drw_engines_enable_from_engine(engine_type, drawtype, drawtype_lighting);
+ drw_engines_enable_from_engine(engine_type, drawtype);
if (DRW_state_draw_support()) {
- drw_engines_enable_from_overlays(v3d->overlays);
+ drw_engines_enable_from_overlays(v3d->overlay.flag);
drw_engines_enable_from_object_mode();
drw_engines_enable_from_mode(mode);
}
diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c
index 5b705a311c9..be43f0d8c0c 100644
--- a/source/blender/draw/intern/draw_view.c
+++ b/source/blender/draw/intern/draw_view.c
@@ -615,7 +615,7 @@ static bool is_cursor_visible(const DRWContextState *draw_ctx, Scene *scene, Vie
{
Object *ob = OBACT(view_layer);
View3D *v3d = draw_ctx->v3d;
- if ((v3d->flag2 & V3D_RENDER_OVERRIDE) > 0 || (v3d->overlays & V3D_OVERLAY_HIDE_CURSOR)) {
+ if ((v3d->flag2 & V3D_RENDER_OVERRIDE) > 0 || (v3d->overlay.flag & V3D_OVERLAY_HIDE_CURSOR)) {
return false;
}
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index 3c31001d4b7..e2b381347ff 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -49,7 +49,7 @@ typedef struct OVERLAY_Data {
typedef struct OVERLAY_PrivateData {
DRWShadingGroup *face_orientation_shgrp;
- int overlays;
+ View3DOverlay overlay;
} OVERLAY_PrivateData; /* Transient data */
/* *********** STATIC *********** */
@@ -90,14 +90,14 @@ static void overlay_cache_init(void *vedata)
View3D *v3d = DCS->v3d;
if (v3d) {
- stl->g_data->overlays = v3d->overlays;
+ stl->g_data->overlay = v3d->overlay;
}
else {
- stl->g_data->overlays = 0;
+ memset(&stl->g_data->overlay, 0, sizeof(stl->g_data->overlay));
}
/* Face Orientation Pass */
- if (stl->g_data->overlays & V3D_OVERLAY_FACE_ORIENTATION) {
+ if (stl->g_data->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) {
int state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND;
psl->face_orientation_pass = DRW_pass_create("Face Orientation", state);
stl->g_data->face_orientation_shgrp = DRW_shgroup_create(e_data.face_orientation_sh, psl->face_orientation_pass);
@@ -116,7 +116,7 @@ static void overlay_cache_populate(void *vedata, Object *ob)
struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
if (geom) {
/* Face Orientation */
- if (stl->g_data->overlays & V3D_OVERLAY_FACE_ORIENTATION) {
+ if (stl->g_data->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) {
DRW_shgroup_call_add(pd->face_orientation_shgrp, geom, ob->obmat);
}
}
@@ -133,7 +133,7 @@ static void overlay_draw_scene(void *vedata)
OVERLAY_StorageList *stl = data->stl;
OVERLAY_PrivateData *pd = stl->g_data;
- if (pd->overlays & V3D_OVERLAY_FACE_ORIENTATION) {
+ if (pd->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) {
DRW_draw_pass(psl->face_orientation_pass);
}
}
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index ee65cc01797..0231858a3f2 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -322,9 +322,9 @@ static SpaceLink *view3d_new(const ScrArea *UNUSED(sa), const Scene *scene)
v3d->gridlines = 16;
v3d->gridsubdiv = 10;
v3d->drawtype = OB_SOLID;
- v3d->drawtype_lighting = V3D_LIGHTING_STUDIO;
- v3d->drawtype_ambient_intensity = 0.5;
- copy_v3_fl(v3d->drawtype_single_color, 1.0f);
+ v3d->shading.light = V3D_LIGHTING_STUDIO;
+ v3d->shading.ambient_intensity = 0.5;
+ copy_v3_fl(v3d->shading.single_color, 1.0f);
v3d->gridflag = V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_FLOOR;
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index ecb5f10be12..8e5deb7133b 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -131,6 +131,24 @@ typedef struct RegionView3D {
float rot_axis[3];
} RegionView3D;
+/* 3D Viewport Shading setings */
+typedef struct View3DShading {
+ short flag;
+ short color_type;
+
+ short light;
+ short studio_light;
+
+ float ambient_intensity;
+ float single_color[3];
+} View3DShading;
+
+/* 3D Viewport Overlay setings */
+typedef struct View3DOverlay {
+ int flag;
+ int pad;
+} View3DOverlay;
+
/* 3D ViewPort Struct */
typedef struct View3D {
struct SpaceLink *next, *prev;
@@ -162,13 +180,9 @@ typedef struct View3D {
unsigned int lay;
int layact;
- /**
- * The drawing mode for the 3d display. Set to OB_BOUNDBOX, OB_WIRE, OB_SOLID,
- * OB_TEXTURE, OB_MATERIAL or OB_RENDER */
- short drawtype;
short ob_centre_cursor; /* optional bool for 3d cursor to define center */
short scenelock, around;
- short flag, flag2;
+ short flag, flag2, pad2;
float lens, grid;
float near, far;
@@ -202,7 +216,7 @@ typedef struct View3D {
/* XXX deprecated? */
struct bGPdata *gpd DNA_DEPRECATED; /* Grease-Pencil Data (annotation layers) */
- /* multiview - stereo 3d */
+ /* Stereoscopy settings */
short stereo3d_flag;
char stereo3d_camera;
char pad4;
@@ -210,19 +224,13 @@ typedef struct View3D {
float stereo3d_volume_alpha;
float stereo3d_convergence_alpha;
- /* Previous viewport draw type.
- * Runtime-only, set in the rendered viewport toggle operator.
- */
- short prev_drawtype;
- /* drawtype options (lighting, random) used for drawtype == OB_SOLID */
- short drawtype_lighting;
- short drawtype_options;
- short drawtype_studiolight;
- float drawtype_ambient_intensity;
- float drawtype_single_color[3];
- int overlays;
-
+ /* Display settings */
+ short drawtype; /* Shading mode (OB_SOLID, OB_TEXTURE, ..) */
+ short prev_drawtype; /* Runtime, for toggle between rendered viewport. */
int pad5;
+
+ View3DShading shading;
+ View3DOverlay overlay;
} View3D;
@@ -299,30 +307,28 @@ typedef struct View3D {
/* View3d->flag3 (short) */
#define V3D_SHOW_WORLD (1 << 0)
-/* View3D->drawtype_lighting */
+/* View3DShading->light */
enum {
V3D_LIGHTING_FLAT = 0,
V3D_LIGHTING_STUDIO = 1,
V3D_LIGHTING_SCENE = 2
};
-/* View3D->drawtype_options */
+/* View3DShading->flag */
+enum {
+ V3D_SHADING_OBJECT_OVERLAP = (1 << 0),
+ V3D_SHADING_SHADOW = (1 << 2),
+};
+
+/* View3DShading->single_color_type */
enum {
- V3D_DRAWOPTION_MATERIAL_COLOR = (0 << 0),
- V3D_DRAWOPTION_RANDOMIZE = (1 << 0),
- V3D_DRAWOPTION_OBJECT_OVERLAP = (1 << 1),
- V3D_DRAWOPTION_SINGLE_COLOR = (1 << 2),
- V3D_DRAWOPTION_OBJECT_COLOR = (1 << 4),
- V3D_DRAWOPTION_SHADOW = (1 << 5),
-
- /* These options are mutually exclusive. */
- V3D_DRAWOPTION_SOLID_COLOR_MASK = (V3D_DRAWOPTION_SINGLE_COLOR |
- V3D_DRAWOPTION_RANDOMIZE |
- V3D_DRAWOPTION_OBJECT_COLOR |
- V3D_DRAWOPTION_MATERIAL_COLOR),
+ V3D_SHADING_MATERIAL_COLOR = 0,
+ V3D_SHADING_RANDOM_COLOR = 1,
+ V3D_SHADING_SINGLE_COLOR = 2,
+ V3D_SHADING_OBJECT_COLOR = 3,
};
-/* View3D->overlays */
+/* View3DOverlay->flag */
enum {
V3D_OVERLAY_FACE_ORIENTATION = (1 << 0),
V3D_OVERLAY_HIDE_CURSOR = (1 << 1),
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 222de73492a..4b726e6b993 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -463,7 +463,7 @@ static void rna_View3D_CursorLocation_set(PointerRNA *ptr, const float *values)
copy_v3_v3(cursor, values);
}
-static float rna_View3D_GridScaleUnit_get(PointerRNA *ptr)
+static float rna_View3DOverlay_GridScaleUnit_get(PointerRNA *ptr)
{
View3D *v3d = (View3D *)(ptr->data);
bScreen *screen = ptr->id.data;
@@ -662,16 +662,6 @@ static void rna_3DViewShading_type_set(PointerRNA *ptr, int value)
v3d->drawtype = value;
}
-static void rna_View3DShading_single_color_mode_set(PointerRNA *ptr, int value) {
- View3D *v3d = (View3D *)ptr->data;
- v3d->drawtype_options = (v3d->drawtype_options &~ V3D_DRAWOPTION_SOLID_COLOR_MASK) + value;
-}
-
-static int rna_View3DShading_single_color_mode_get(PointerRNA *ptr) {
- View3D *v3d = (View3D *)ptr->data;
- return v3d->drawtype_options & V3D_DRAWOPTION_SOLID_COLOR_MASK;
-}
-
static const EnumPropertyItem *rna_3DViewShading_type_itemf(
bContext *C, PointerRNA *UNUSED(ptr),
PropertyRNA *UNUSED(prop), bool *r_free)
@@ -2177,11 +2167,11 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
- static const EnumPropertyItem single_color_mode_items[] = {
- {V3D_DRAWOPTION_SINGLE_COLOR, "SINGLE", 0, "Single", "Show scene in a single color"},
- {V3D_DRAWOPTION_OBJECT_COLOR, "OBJECT", 0, "Object", "Show Object color"},
- {V3D_DRAWOPTION_MATERIAL_COLOR, "MATERIAL", 0, "Material", "Show Material color"},
- {V3D_DRAWOPTION_RANDOMIZE, "RANDOM", 0, "Random", "Show random object color"},
+ static const EnumPropertyItem color_type_items[] = {
+ {V3D_SHADING_SINGLE_COLOR, "SINGLE", 0, "Single", "Show scene in a single color"},
+ {V3D_SHADING_OBJECT_COLOR, "OBJECT", 0, "Object", "Show Object color"},
+ {V3D_SHADING_MATERIAL_COLOR, "MATERIAL", 0, "Material", "Show Material color"},
+ {V3D_SHADING_RANDOM_COLOR, "RANDOM", 0, "Random", "Show random object color"},
{0, NULL, 0, NULL, NULL}
};
static const EnumPropertyItem studio_lighting_items[] = {
@@ -2207,46 +2197,43 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Viewport Shading", "Method to display/shade objects in the 3D View");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
+ RNA_def_struct_sdna(srna, "View3DShading");
+
prop = RNA_def_property(srna, "light", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "drawtype_lighting");
+ RNA_def_property_enum_sdna(prop, NULL, "light");
RNA_def_property_enum_items(prop, rna_enum_viewport_lighting_items);
RNA_def_property_ui_text(prop, "Lighting", "Lighting Method for Solid/Texture Viewport Shading");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "show_object_overlap", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_OBJECT_OVERLAP);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SHADING_OBJECT_OVERLAP);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Object Overlap", "Show Object Overlap");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
- prop = RNA_def_property(srna, "studiolight", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "drawtype_studiolight");
+ prop = RNA_def_property(srna, "studio_light", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, studio_lighting_items);
RNA_def_property_ui_text(prop, "Studiolight", "Studio lighting setup");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
- prop = RNA_def_property(srna, "single_color_mode", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, single_color_mode_items);
- RNA_def_property_enum_funcs(prop, "rna_View3DShading_single_color_mode_get",
- "rna_View3DShading_single_color_mode_set",
- NULL);
- RNA_def_property_ui_text(prop, "Color", "Single Color Mode");
+ prop = RNA_def_property(srna, "color_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, color_type_items);
+ RNA_def_property_ui_text(prop, "Color", "Color Type");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "single_color", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "drawtype_single_color");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Color", "Color for single color mode");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "show_shadows", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_SHADOW);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SHADING_SHADOW);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Shadow", "Show Shadow");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "ambient_light_intensity", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "drawtype_ambient_intensity");
+ RNA_def_property_float_sdna(prop, NULL, "ambient_intensity");
RNA_def_property_float_default(prop, 0.5);
RNA_def_property_ui_text(prop, "Ambient Light", "Intensity of ambient light for shadows");
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -2271,10 +2258,85 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Overlays", "Display overlays like manipulators and outlines");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_FLOOR);
+ RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid in perspective view");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_axis_x", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_X);
+ RNA_def_property_ui_text(prop, "Display X Axis", "Show the X axis line in perspective view");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_axis_y", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Y);
+ RNA_def_property_ui_text(prop, "Display Y Axis", "Show the Y axis line in perspective view");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_axis_z", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Z);
+ RNA_def_property_ui_text(prop, "Display Z Axis", "Show the Z axis line in perspective view");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "grid_scale", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "grid");
+ RNA_def_property_ui_text(prop, "Grid Scale", "Distance between 3D View grid lines");
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.001f, 1000.0f, 0.1f, 3);
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "grid_lines", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "gridlines");
+ RNA_def_property_ui_text(prop, "Grid Lines", "Number of grid lines to display in perspective view");
+ RNA_def_property_range(prop, 0, 1024);
+ RNA_def_property_int_default(prop, 16);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "grid_subdivisions", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "gridsubdiv");
+ RNA_def_property_ui_text(prop, "Grid Subdivisions", "Number of subdivisions between grid lines");
+ RNA_def_property_range(prop, 1, 1024);
+ RNA_def_property_int_default(prop, 10);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "grid_scale_unit", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_float_funcs(prop, "rna_View3DOverlay_GridScaleUnit_get", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Grid Scale Unit", "Grid cell size scaled by scene unit system settings");
+
+ prop = RNA_def_property(srna, "show_outline_selected", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SELECT_OUTLINE);
+ RNA_def_property_ui_text(prop, "Outline Selected",
+ "Show an outline highlight around selected objects in non-wireframe views");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_all_objects_origin", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DRAW_CENTERS);
+ RNA_def_property_ui_text(prop, "All Object Origins",
+ "Show the object origin center dot for all (selected and unselected) objects");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_relationship_lines", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_HIDE_HELPLINES);
+ RNA_def_property_ui_text(prop, "Relationship Lines",
+ "Show dashed lines indicating parent or constraint relationships");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ RNA_def_struct_sdna(srna, "View3DOverlay");
+
prop = RNA_def_property(srna, "show_cursor", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "overlays", V3D_OVERLAY_HIDE_CURSOR);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_OVERLAY_HIDE_CURSOR);
RNA_def_property_ui_text(prop, "Show 3D Cursor", "Display 3D Cursor Overlay");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_face_orientation", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_OVERLAY_FACE_ORIENTATION);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_ui_text(prop, "Face Orientation", "Show the Face Orientation Overlay");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
+
+
}
static void rna_def_space_view3d(BlenderRNA *brna)
@@ -2387,12 +2449,6 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock to Cursor", "3D View center is locked to the cursor's position");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
- prop = RNA_def_property(srna, "show_face_orientation_overlay", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "overlays", V3D_OVERLAY_FACE_ORIENTATION);
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_ui_text(prop, "Face Orientation", "Show the Face Orientation Overlay");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
-
prop = RNA_def_property(srna, "local_view", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "localvd");
RNA_def_property_ui_text(prop, "Local View",
@@ -2428,71 +2484,6 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Clip End", "3D View far clipping distance");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
- prop = RNA_def_property(srna, "grid_scale", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "grid");
- RNA_def_property_ui_text(prop, "Grid Scale", "Distance between 3D View grid lines");
- RNA_def_property_range(prop, 0.0f, FLT_MAX);
- RNA_def_property_ui_range(prop, 0.001f, 1000.0f, 0.1f, 3);
- RNA_def_property_float_default(prop, 1.0f);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "grid_lines", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "gridlines");
- RNA_def_property_ui_text(prop, "Grid Lines", "Number of grid lines to display in perspective view");
- RNA_def_property_range(prop, 0, 1024);
- RNA_def_property_int_default(prop, 16);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "grid_subdivisions", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "gridsubdiv");
- RNA_def_property_ui_text(prop, "Grid Subdivisions", "Number of subdivisions between grid lines");
- RNA_def_property_range(prop, 1, 1024);
- RNA_def_property_int_default(prop, 10);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "grid_scale_unit", PROP_FLOAT, PROP_NONE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_float_funcs(prop, "rna_View3D_GridScaleUnit_get", NULL, NULL);
- RNA_def_property_ui_text(prop, "Grid Scale Unit", "Grid cell size scaled by scene unit system settings");
-
- prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_FLOOR);
- RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid in perspective view");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "show_axis_x", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_X);
- RNA_def_property_ui_text(prop, "Display X Axis", "Show the X axis line in perspective view");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "show_axis_y", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Y);
- RNA_def_property_ui_text(prop, "Display Y Axis", "Show the Y axis line in perspective view");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "show_axis_z", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Z);
- RNA_def_property_ui_text(prop, "Display Z Axis", "Show the Z axis line in perspective view");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "show_outline_selected", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SELECT_OUTLINE);
- RNA_def_property_ui_text(prop, "Outline Selected",
- "Show an outline highlight around selected objects in non-wireframe views");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "show_all_objects_origin", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DRAW_CENTERS);
- RNA_def_property_ui_text(prop, "All Object Origins",
- "Show the object origin center dot for all (selected and unselected) objects");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "show_relationship_lines", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_HIDE_HELPLINES);
- RNA_def_property_ui_text(prop, "Relationship Lines",
- "Show dashed lines indicating parent or constraint relationships");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
prop = RNA_def_property(srna, "show_grease_pencil", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_GPENCIL);
RNA_def_property_ui_text(prop, "Show Grease Pencil",