diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-08-15 16:31:54 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-08-15 16:31:54 +0300 |
commit | 4d320f43133b02a43212b017eecdb390476189f2 (patch) | |
tree | 33ce479a4f9185724dcce31f4b70b335161c2b32 /source/blender/draw/engines/select/select_private.h | |
parent | 261a02fc596db0e91667d4e3af9204b165ec4006 (diff) |
Edit Mesh Selection: Refactor: Redraw idmap buffer at runtime with only objects inside the rect
But in the future the selection code may also be used in object mode (eg for snapping).
So to avoid using too much VRAM resources, it is good to avoid drawing all objects in the viewport.
The solution was to create an array with only objects that are detected within the selection area.
If the selection operator is modal, objects already detected are not removed from the array until view3d is moved or orbited.
To detect the object, its BoundBox is tested.
Since the Select Engine does not have a dedicated depth texture, whenever a new object is "found" the depth of the objects in the array already drawn is redrawn.
Reviewers: campbellbarton, fclem
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5435
Diffstat (limited to 'source/blender/draw/engines/select/select_private.h')
-rw-r--r-- | source/blender/draw/engines/select/select_private.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/source/blender/draw/engines/select/select_private.h b/source/blender/draw/engines/select/select_private.h index d95b14ff2b6..e48ce4314ae 100644 --- a/source/blender/draw/engines/select/select_private.h +++ b/source/blender/draw/engines/select/select_private.h @@ -32,6 +32,7 @@ typedef struct SELECTID_StorageList { } SELECTID_StorageList; typedef struct SELECTID_PassList { + struct DRWPass *depth_only_pass; struct DRWPass *select_id_face_pass; struct DRWPass *select_id_edge_pass; struct DRWPass *select_id_vert_pass; @@ -52,18 +53,21 @@ typedef struct SELECTID_Shaders { } SELECTID_Shaders; typedef struct SELECTID_PrivateData { + DRWShadingGroup *shgrp_depth_only; DRWShadingGroup *shgrp_face_unif; DRWShadingGroup *shgrp_face_flat; DRWShadingGroup *shgrp_edge; DRWShadingGroup *shgrp_vert; + DRWView *view_subregion; DRWView *view_faces; DRWView *view_edges; DRWView *view_verts; } SELECTID_PrivateData; /* Transient data */ /* select_draw_utils.c */ -void draw_select_framebuffer_select_id_setup(struct SELECTID_Context *r_select_ctx); +void select_id_context_clear(struct SELECTID_Context *select_ctx); +void select_id_object_min_max(struct Object *obj, float r_min[3], float r_max[3]); short select_id_get_object_select_mode(Scene *scene, Object *ob); void select_id_draw_object(void *vedata, View3D *v3d, |