Commit: 309f26014b6beb5aaebc0ddc51396647141d417a
Author: Sergey Sharybin
Date:   Sun May 22 16:23:26 2016 +0200
Branches: master
https://developer.blender.org/rB309f26014b6beb5aaebc0ddc51396647141d417a

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.

===================================================================

M       source/blender/editors/space_view3d/drawmesh.c
M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/editors/space_view3d/view3d_draw.c
M       source/blender/editors/space_view3d/view3d_intern.h
M       source/blender/makesrna/intern/rna_space.c

===================================================================

diff --git a/source/blender/editors/space_view3d/drawmesh.c 
b/source/blender/editors/space_view3d/drawmesh.c
index a73a055..86f3edf 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 65f1f37..8487726 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 184b9ff..01e23f2 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 45918ed..6d831c6 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 f4db027..2c9ebdd 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");

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to