[Bf-blender-cvs] [6700ee98551] blender2.8: DRW: Make the lamp widgets lines stippled.

Clément Foucault noreply at git.blender.org
Mon Jan 22 00:14:46 CET 2018


Commit: 6700ee98551d40cdc40a83051ae8200e22a71fb2
Author: Clément Foucault
Date:   Sun Jan 21 18:32:40 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB6700ee98551d40cdc40a83051ae8200e22a71fb2

DRW: Make the lamp widgets lines stippled.

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

M	source/blender/draw/intern/draw_cache.c
M	source/blender/draw/intern/draw_cache.h
M	source/blender/draw/modes/object_mode.c

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

diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index e02f6bd6306..5ef1e0de1c7 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -65,6 +65,7 @@ static struct DRWShapeCache {
 	Gwn_Batch *drw_field_tube_limit;
 	Gwn_Batch *drw_field_cone_limit;
 	Gwn_Batch *drw_lamp;
+	Gwn_Batch *drw_lamp_shadows;
 	Gwn_Batch *drw_lamp_sunrays;
 	Gwn_Batch *drw_lamp_area;
 	Gwn_Batch *drw_lamp_hemi;
@@ -1013,14 +1014,14 @@ Gwn_Batch *DRW_cache_lamp_get(void)
 		Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
 		GWN_vertbuf_data_alloc(vbo, NSEGMENTS * 2);
 
-		for (int a = 0; a < NSEGMENTS; a++) {
-			v[0] = sinf((2.0f * M_PI * a) / ((float)NSEGMENTS));
-			v[1] = cosf((2.0f * M_PI * a) / ((float)NSEGMENTS));
-			GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 2, v);
+		for (int a = 0; a < NSEGMENTS * 2; a += 2) {
+			v[0] = sinf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+			v[1] = cosf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+			GWN_vertbuf_attr_set(vbo, attr_id.pos, a, v);
 
-			v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS));
-			v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS));
-			GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 2 + 1, v);
+			v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+			v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+			GWN_vertbuf_attr_set(vbo, attr_id.pos, a + 1, v);
 		}
 
 		SHC.drw_lamp = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
@@ -1029,6 +1030,38 @@ Gwn_Batch *DRW_cache_lamp_get(void)
 #undef NSEGMENTS
 }
 
+Gwn_Batch *DRW_cache_lamp_shadows_get(void)
+{
+#define NSEGMENTS 10
+	if (!SHC.drw_lamp_shadows) {
+		float v[2];
+
+		/* Position Only 3D format */
+		static Gwn_VertFormat format = { 0 };
+		static struct { uint pos; } attr_id;
+		if (format.attrib_ct == 0) {
+			attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+		}
+
+		Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+		GWN_vertbuf_data_alloc(vbo, NSEGMENTS * 2);
+
+		for (int a = 0; a < NSEGMENTS * 2; a += 2) {
+			v[0] = sinf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+			v[1] = cosf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+			GWN_vertbuf_attr_set(vbo, attr_id.pos, a, v);
+
+			v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+			v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+			GWN_vertbuf_attr_set(vbo, attr_id.pos, a + 1, v);
+		}
+
+		SHC.drw_lamp_shadows = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+	}
+	return SHC.drw_lamp_shadows;
+#undef NSEGMENTS
+}
+
 Gwn_Batch *DRW_cache_lamp_sunrays_get(void)
 {
 	if (!SHC.drw_lamp_sunrays) {
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index 3564178dba9..148171a966a 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -70,6 +70,7 @@ struct Gwn_Batch *DRW_cache_field_cone_limit_get(void);
 
 /* Lamps */
 struct Gwn_Batch *DRW_cache_lamp_get(void);
+struct Gwn_Batch *DRW_cache_lamp_shadows_get(void);
 struct Gwn_Batch *DRW_cache_lamp_sunrays_get(void);
 struct Gwn_Batch *DRW_cache_lamp_area_get(void);
 struct Gwn_Batch *DRW_cache_lamp_hemi_get(void);
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 1d4d82bf900..175eb172cd1 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -986,6 +986,7 @@ static void OBJECT_cache_init(void *vedata)
 
 		geom = DRW_cache_lamp_get();
 		stl->g_data->lamp_circle = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircle);
+		geom = DRW_cache_lamp_shadows_get();
 		stl->g_data->lamp_circle_shadow = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircleShadow);
 
 		geom = DRW_cache_lamp_sunrays_get();



More information about the Bf-blender-cvs mailing list