[Bf-blender-cvs] [9db4e44961d] master: DRW: overlay engine support for drawing isolated points

Campbell Barton noreply at git.blender.org
Mon Jul 20 01:25:44 CEST 2020


Commit: 9db4e44961d3ae46b1a9a2dd2ff4c0743e8263f5
Author: Campbell Barton
Date:   Mon Jul 20 09:19:09 2020 +1000
Branches: master
https://developer.blender.org/rB9db4e44961d3ae46b1a9a2dd2ff4c0743e8263f5

DRW: overlay engine support for drawing isolated points

This matches similar functionality for drawing lines.

===================================================================

M	source/blender/draw/engines/overlay/overlay_armature.c
M	source/blender/draw/engines/overlay/overlay_extra.c
M	source/blender/draw/engines/overlay/overlay_private.h
M	source/blender/draw/engines/overlay/overlay_shader.c

===================================================================

diff --git a/source/blender/draw/engines/overlay/overlay_armature.c b/source/blender/draw/engines/overlay/overlay_armature.c
index daf83e11e17..0144fac76ab 100644
--- a/source/blender/draw/engines/overlay/overlay_armature.c
+++ b/source/blender/draw/engines/overlay/overlay_armature.c
@@ -178,6 +178,7 @@ void OVERLAY_armature_cache_init(OVERLAY_Data *vedata)
 
 #define BUF_INSTANCE DRW_shgroup_call_buffer_instance
 #define BUF_LINE(grp, format) DRW_shgroup_call_buffer(grp, format, GPU_PRIM_LINES)
+#define BUF_POINT(grp, format) DRW_shgroup_call_buffer(grp, format, GPU_PRIM_POINTS)
 
     {
       format = formats->instance_bone;
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index f096c9657c7..fc1ced43832 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -199,6 +199,9 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
 
       cb->extra_loose_points = grp = DRW_shgroup_create(sh, extra_ps);
       DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+
+      /* Buffer access for drawing isolated points, matching `extra_lines`. */
+      cb->extra_points = BUF_POINT(grp, formats->point_extra);
     }
     {
       format = formats->pos;
@@ -230,6 +233,11 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
   }
 }
 
+void OVERLAY_extra_point(OVERLAY_ExtraCallBuffers *cb, const float point[3], const float color[4])
+{
+  DRW_buffer_add_entry(cb->extra_points, point, color);
+}
+
 void OVERLAY_extra_line_dashed(OVERLAY_ExtraCallBuffers *cb,
                                const float start[3],
                                const float end[3],
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index 027478c3e3c..efb9594f499 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -149,6 +149,7 @@ typedef struct OVERLAY_ExtraCallBuffers {
 
   DRWCallBuffer *extra_dashed_lines;
   DRWCallBuffer *extra_lines;
+  DRWCallBuffer *extra_points;
 
   DRWCallBuffer *field_curve;
   DRWCallBuffer *field_force;
@@ -388,6 +389,7 @@ typedef struct OVERLAY_InstanceFormats {
   struct GPUVertFormat *pos;
   struct GPUVertFormat *pos_color;
   struct GPUVertFormat *wire_extra;
+  struct GPUVertFormat *point_extra;
 } OVERLAY_InstanceFormats;
 
 /* Pack data into the last row of the 4x4 matrix. It will be decoded by the vertex shader. */
@@ -481,6 +483,7 @@ void OVERLAY_lightprobe_cache_populate(OVERLAY_Data *vedata, Object *ob);
 void OVERLAY_speaker_cache_populate(OVERLAY_Data *vedata, Object *ob);
 
 OVERLAY_ExtraCallBuffers *OVERLAY_extra_call_buffer_get(OVERLAY_Data *vedata, Object *ob);
+void OVERLAY_extra_point(OVERLAY_ExtraCallBuffers *cb, const float point[3], const float color[4]);
 void OVERLAY_extra_line_dashed(OVERLAY_ExtraCallBuffers *cb,
                                const float start[3],
                                const float end[3],
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index 87f4642809b..e3cb052890b 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -1476,6 +1476,11 @@ OVERLAY_InstanceFormats *OVERLAY_shader_instance_formats_get(void)
                                   {"pos", DRW_ATTR_FLOAT, 3},
                                   {"colorid", DRW_ATTR_INT, 1},
                               });
+  DRW_shgroup_instance_format(g_formats.point_extra,
+                              {
+                                  {"pos", DRW_ATTR_FLOAT, 3},
+                                  {"colorid", DRW_ATTR_INT, 1},
+                              });
   DRW_shgroup_instance_format(g_formats.instance_bone,
                               {
                                   {"inst_obmat", DRW_ATTR_FLOAT, 16},



More information about the Bf-blender-cvs mailing list