diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-05-19 14:31:44 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-05-20 20:14:22 +0300 |
commit | 687f09a8ad508b0f736b35337e589935296ecd0f (patch) | |
tree | 851b5c79017a8407c4a85f38a2ba5bd08771c9ff /source/blender/draw/intern/draw_cache.c | |
parent | 883cb583550596e0c2e3b809ec8de059d0b053ad (diff) |
Workbench: Optimize Shadows.
This makes the shadows ~10 times faster in the general case.
This only create extrusion geometry on the outline edges. Also we increment
or decrement the stencil buffer by 2 for each manifold edge and only by 1
for non manifold. This make the algorithm robust yet less heavy than creating
one prism for each triangles.
Diffstat (limited to 'source/blender/draw/intern/draw_cache.c')
-rw-r--r-- | source/blender/draw/intern/draw_cache.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c index 96a6a616072..3197ba799be 100644 --- a/source/blender/draw/intern/draw_cache.c +++ b/source/blender/draw/intern/draw_cache.c @@ -501,6 +501,19 @@ Gwn_Batch *DRW_cache_object_wire_outline_get(Object *ob) } } +/* Returns a buffer texture. */ +Gwn_Batch *DRW_cache_object_edge_detection_get(Object *ob) +{ + switch (ob->type) { + case OB_MESH: + return DRW_cache_mesh_edge_detection_get(ob); + + /* TODO, should match 'DRW_cache_object_surface_get' */ + default: + return NULL; + } +} + Gwn_Batch *DRW_cache_object_surface_get(Object *ob) { switch (ob->type) { @@ -2493,6 +2506,14 @@ Gwn_Batch *DRW_cache_mesh_wire_outline_get(Object *ob) return DRW_mesh_batch_cache_get_fancy_edges(me); } +Gwn_Batch *DRW_cache_mesh_edge_detection_get(Object *ob) +{ + BLI_assert(ob->type == OB_MESH); + + Mesh *me = ob->data; + return DRW_mesh_batch_cache_get_edge_detection(me); +} + Gwn_Batch *DRW_cache_mesh_surface_get(Object *ob) { BLI_assert(ob->type == OB_MESH); |