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.
This commit is contained in:
parent
0cc514ec84
commit
309f26014b
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue