diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-05-22 17:23:26 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-05-22 17:23:26 +0300 |
commit | 309f26014b6beb5aaebc0ddc51396647141d417a (patch) | |
tree | 0f9c8e6e4383fa7b4cc05cf96450f395de9150a5 /source/blender | |
parent | 0cc514ec845e3170a63ad837360842219e951e85 (diff) |
Use previous shading mode for border render in viewport
This way we can have border rendered part in the viewport and have
everything else material/texture shaded.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/space_view3d/drawmesh.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 22 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 11 |
5 files changed, 36 insertions, 13 deletions
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index a73a055c5c8..86f3edfff28 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -1194,7 +1194,8 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, set_face_cb = NULL; /* test if we can use glsl */ - bool glsl = (v3d->drawtype == OB_MATERIAL) && !picking; + const int drawtype = view3d_effective_drawtype(v3d); + bool glsl = (drawtype == OB_MATERIAL) && !picking; GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 65f1f375443..848772600ba 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -227,16 +227,25 @@ static void ob_wire_color_blend_theme_id(const unsigned char ob_wire_col[4], con glColor3fv(col); } +int view3d_effective_drawtype(const struct View3D *v3d) +{ + if (v3d->drawtype == OB_RENDER) { + return v3d->prev_drawtype; + } + return v3d->drawtype; +} + /* this condition has been made more complex since editmode can draw textures */ bool check_object_draw_texture(Scene *scene, View3D *v3d, const char drawtype) { + const int v3d_drawtype = view3d_effective_drawtype(v3d); /* texture and material draw modes */ - if (ELEM(v3d->drawtype, OB_TEXTURE, OB_MATERIAL) && drawtype > OB_SOLID) { + if (ELEM(v3d_drawtype, OB_TEXTURE, OB_MATERIAL) && drawtype > OB_SOLID) { return true; } /* textured solid */ - if ((v3d->drawtype == OB_SOLID) && + if ((v3d_drawtype == OB_SOLID) && (v3d->flag2 & V3D_SOLID_TEX) && (BKE_scene_use_new_shading_nodes(scene) == false)) { @@ -298,7 +307,7 @@ bool draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, const char dt) if (v3d->flag2 & V3D_SHOW_SOLID_MATCAP) return true; - + if (v3d->drawtype == OB_TEXTURE) return (scene->gm.matmode == GAME_MAT_GLSL && !BKE_scene_use_new_shading_nodes(scene)); else if (v3d->drawtype == OB_MATERIAL && dt > OB_SOLID) @@ -1661,7 +1670,8 @@ static void draw_viewport_object_reconstruction( v3d->bundle_size / 0.05f / camera_size[1], v3d->bundle_size / 0.05f / camera_size[2]); - if (v3d->drawtype == OB_WIRE) { + const int v3d_drawtype = view3d_effective_drawtype(v3d); + if (v3d_drawtype == OB_WIRE) { if ((dflag & DRAW_CONSTCOLOR) == 0) { if (selected && (track->flag & TRACK_CUSTOMCOLOR) == 0) { glColor3ubv(ob_wire_col); @@ -1673,7 +1683,7 @@ static void draw_viewport_object_reconstruction( drawaxes(rv3d->viewmatob, 0.05f, v3d->bundle_drawtype); } - else if (v3d->drawtype > OB_WIRE) { + else if (v3d_drawtype > OB_WIRE) { if (v3d->bundle_drawtype == OB_EMPTY_SPHERE) { /* selection outline */ if (selected) { @@ -7597,7 +7607,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short /* maximum drawtype */ char dt = v3d->drawtype; - if (dt == OB_RENDER) dt = OB_SOLID; + if (dt == OB_RENDER) dt = v3d->prev_drawtype; dt = MIN2(dt, ob->dt); if (v3d->zbuf == 0 && dt > OB_WIRE) dt = OB_WIRE; short dtx = 0; diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 184b9ff5b15..01e23f26568 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2608,19 +2608,20 @@ static void gpu_update_lamps_shadows_world(Scene *scene, View3D *v3d) CustomDataMask ED_view3d_datamask(const Scene *scene, const View3D *v3d) { CustomDataMask mask = 0; + const int drawtype = view3d_effective_drawtype(v3d); - if (ELEM(v3d->drawtype, OB_TEXTURE, OB_MATERIAL) || - ((v3d->drawtype == OB_SOLID) && (v3d->flag2 & V3D_SOLID_TEX))) + if (ELEM(drawtype, OB_TEXTURE, OB_MATERIAL) || + ((drawtype == OB_SOLID) && (v3d->flag2 & V3D_SOLID_TEX))) { mask |= CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL; if (BKE_scene_use_new_shading_nodes(scene)) { - if (v3d->drawtype == OB_MATERIAL) + if (drawtype == OB_MATERIAL) mask |= CD_MASK_ORCO; } else { - if ((scene->gm.matmode == GAME_MAT_GLSL && v3d->drawtype == OB_TEXTURE) || - (v3d->drawtype == OB_MATERIAL)) + if ((scene->gm.matmode == GAME_MAT_GLSL && drawtype == OB_TEXTURE) || + (drawtype == OB_MATERIAL)) { mask |= CD_MASK_ORCO; } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 45918ed8bed..6d831c667a8 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -159,6 +159,8 @@ enum { V3D_CACHE_TEXT_LOCALCLIP = (1 << 4) }; +int view3d_effective_drawtype(const struct View3D *v3d); + /* drawarmature.c */ bool draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, const short dt, const short dflag, const unsigned char ob_wire_col[4], diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index f4db0277660..2c9ebdd27fe 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -689,6 +689,15 @@ static int rna_SpaceView3D_viewport_shade_get(PointerRNA *ptr) return drawtype; } +static void rna_SpaceView3D_viewport_shade_set(PointerRNA *ptr, int value) +{ + View3D *v3d = (View3D *)ptr->data; + if (value != v3d->drawtype && value == OB_RENDER) { + v3d->prev_drawtype = v3d->drawtype; + } + v3d->drawtype = value; +} + static EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free) { @@ -2412,7 +2421,7 @@ static void rna_def_space_view3d(BlenderRNA *brna) prop = RNA_def_property(srna, "viewport_shade", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "drawtype"); RNA_def_property_enum_items(prop, rna_enum_viewport_shade_items); - RNA_def_property_enum_funcs(prop, "rna_SpaceView3D_viewport_shade_get", NULL, + RNA_def_property_enum_funcs(prop, "rna_SpaceView3D_viewport_shade_get", "rna_SpaceView3D_viewport_shade_set", "rna_SpaceView3D_viewport_shade_itemf"); 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_SpaceView3D_viewport_shade_update"); |