Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-05-19 14:31:44 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-05-20 20:14:22 +0300
commit687f09a8ad508b0f736b35337e589935296ecd0f (patch)
tree851b5c79017a8407c4a85f38a2ba5bd08771c9ff /source/blender/draw/intern/draw_cache.c
parent883cb583550596e0c2e3b809ec8de059d0b053ad (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.c21
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);