Commit: 3d63b9a88f969f2766cb37c8d3c937e1054a8154 Author: Clément Foucault Date: Thu Feb 16 14:00:37 2017 +0100 Branches: blender2.8 https://developer.blender.org/rB3d63b9a88f969f2766cb37c8d3c937e1054a8154
Clay Engine: Hidden wire =================================================================== M source/blender/draw/engines/clay/clay.c M source/blender/draw/intern/draw_mode_pass.c M source/blender/draw/intern/draw_mode_pass.h =================================================================== diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c index 85fb53f618..1673dd219c 100644 --- a/source/blender/draw/engines/clay/clay.c +++ b/source/blender/draw/engines/clay/clay.c @@ -132,9 +132,11 @@ typedef struct CLAY_PassList{ /* engine specific */ struct DRWPass *depth_pass; struct DRWPass *depth_pass_cull; + struct DRWPass *depth_pass_hidden_wire; struct DRWPass *clay_pass; struct DRWPass *wire_overlay_pass; struct DRWPass *wire_outline_pass; + struct DRWPass *wire_outline_pass_hidden_wire; } CLAY_PassList; //#define GTAO @@ -609,6 +611,7 @@ static void CLAY_create_cache(CLAY_PassList *passes, CLAY_StorageList *stl, cons DRWShadingGroup *clay_shgrp; DRWShadingGroup *depth_shgrp; DRWShadingGroup *depth_shgrp_cull; + DRWShadingGroup *depth_shgrp_hidden_wire; /* Depth Pass */ { @@ -616,6 +619,8 @@ static void CLAY_create_cache(CLAY_PassList *passes, CLAY_StorageList *stl, cons depth_shgrp_cull = DRW_shgroup_create(data.depth_sh, passes->depth_pass_cull); passes->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS); depth_shgrp = DRW_shgroup_create(data.depth_sh, passes->depth_pass); + passes->depth_pass_hidden_wire = DRW_pass_create("Depth Pass Hidden Wire", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK); + depth_shgrp_hidden_wire = DRW_shgroup_create(data.depth_sh, passes->depth_pass_hidden_wire); } /* Clay Pass */ @@ -629,6 +634,7 @@ static void CLAY_create_cache(CLAY_PassList *passes, CLAY_StorageList *stl, cons { DRW_pass_setup_common(&passes->wire_overlay_pass, &passes->wire_outline_pass, + &passes->wire_outline_pass_hidden_wire, &passes->non_meshes_pass, &passes->ob_center_pass); } @@ -641,11 +647,12 @@ static void CLAY_create_cache(CLAY_PassList *passes, CLAY_StorageList *stl, cons } CollectionEngineSettings *ces_mode_ob = BKE_object_collection_engine_get(ob, COLLECTION_MODE_OBJECT, ""); - //CollectionEngineSettings *ces_mode_ed = BKE_object_collection_engine_get(ob, COLLECTION_MODE_EDIT, ""); + CollectionEngineSettings *ces_mode_ed = BKE_object_collection_engine_get(ob, COLLECTION_MODE_EDIT, ""); struct Batch *geom; bool do_wire = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_wire"); bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling"); + bool do_occlude_wire = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "show_occlude_wire"); bool do_outlines = ((ob->base_flag & BASE_SELECTED) != 0) || do_wire; switch (ob->type) { @@ -653,16 +660,26 @@ static void CLAY_create_cache(CLAY_PassList *passes, CLAY_StorageList *stl, cons geom = DRW_cache_surface_get(ob); /* Depth Prepass */ - DRW_shgroup_call_add((do_cull) ? depth_shgrp_cull : depth_shgrp, geom, ob->obmat); + if (do_occlude_wire) + DRW_shgroup_call_add(depth_shgrp_hidden_wire, geom, ob->obmat); + else + DRW_shgroup_call_add((do_cull) ? depth_shgrp_cull : depth_shgrp, geom, ob->obmat); /* Shading */ - clay_shgrp = CLAY_object_shgrp_get(ob, stl, passes); - DRW_shgroup_call_add(clay_shgrp, geom, ob->obmat); + if (!do_occlude_wire) { + clay_shgrp = CLAY_object_shgrp_get(ob, stl, passes); + DRW_shgroup_call_add(clay_shgrp, geom, ob->obmat); + } //DRW_shgroup_wire_overlay(passes->wire_overlay_pass, ob); /* Wires / Outlines */ - DRW_shgroup_wire_outline(passes->wire_outline_pass, ob, do_wire, false, do_outlines); + if (do_occlude_wire) { + DRW_shgroup_wire_outline(passes->wire_outline_pass_hidden_wire, ob, true, false, true); + } + else { + DRW_shgroup_wire_outline(passes->wire_outline_pass, ob, do_wire, false, do_outlines); + } break; case OB_LAMP: @@ -732,6 +749,11 @@ static void CLAY_view_draw(RenderEngine *UNUSED(engine), const bContext *context //DRW_draw_pass(passes->wire_overlay_pass); DRW_draw_pass(passes->wire_outline_pass); DRW_draw_pass(passes->non_meshes_pass); + + /* Hidden Wires */ + DRW_draw_pass(passes->depth_pass_hidden_wire); + DRW_draw_pass(passes->wire_outline_pass_hidden_wire); + DRW_draw_pass(passes->ob_center_pass); DRW_draw_manipulator(); diff --git a/source/blender/draw/intern/draw_mode_pass.c b/source/blender/draw/intern/draw_mode_pass.c index a31ab7c4c1..32a9417735 100644 --- a/source/blender/draw/intern/draw_mode_pass.c +++ b/source/blender/draw/intern/draw_mode_pass.c @@ -161,7 +161,8 @@ static DRWShadingGroup *shgroup_instance(DRWPass *pass, struct Batch *geom) /* This Function setup the passes needed for the mode rendering. * The passes are populated by the rendering engine using the DRW_shgroup_* functions. */ -void DRW_pass_setup_common(DRWPass **wire_overlay, DRWPass **wire_outline, DRWPass **non_meshes, DRWPass **ob_center) +void DRW_pass_setup_common(DRWPass **wire_overlay, DRWPass **wire_outline, DRWPass **wire_outline_pass_hidden_wire, + DRWPass **non_meshes, DRWPass **ob_center) { UI_GetThemeColor4fv(TH_WIRE, colorWire); UI_GetThemeColor4fv(TH_WIRE_EDIT, colorWireEdit); @@ -192,6 +193,14 @@ void DRW_pass_setup_common(DRWPass **wire_overlay, DRWPass **wire_outline, DRWPa *wire_outline = DRW_pass_create("Wire + Outlines Pass", state); } + if (wire_outline_pass_hidden_wire) { + /* This pass can draw mesh outlines and/or fancy wireframe */ + /* Fancy wireframes are not meant to be occluded (without Z offset) */ + /* Outlines and Fancy Wires use the same VBO */ + DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND; + *wire_outline_pass_hidden_wire = DRW_pass_create("Wire + Outlines Pass", state); + } + if (non_meshes) { /* Non Meshes Pass (Camera, empties, lamps ...) */ struct Batch *geom; diff --git a/source/blender/draw/intern/draw_mode_pass.h b/source/blender/draw/intern/draw_mode_pass.h index 6e260dac7a..b0fd3e69bd 100644 --- a/source/blender/draw/intern/draw_mode_pass.h +++ b/source/blender/draw/intern/draw_mode_pass.h @@ -30,7 +30,8 @@ struct DRWPass; struct Batch; struct Object; -void DRW_pass_setup_common(struct DRWPass **wire_overlay, struct DRWPass **wire_outline, struct DRWPass **non_meshes, struct DRWPass **ob_center); +void DRW_pass_setup_common(struct DRWPass **wire_overlay, struct DRWPass **wire_outline, struct DRWPass **wire_outline_pass_hidden_wire, + struct DRWPass **non_meshes, struct DRWPass **ob_center); void DRW_shgroup_wire_overlay(struct DRWPass *wire_overlay, struct Object *ob); void DRW_shgroup_wire_outline( _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs