[Bf-blender-cvs] [58f7322] strand_gpu: Deduplication of strand drawing functions.

Lukas Tönne noreply at git.blender.org
Fri Jul 15 13:01:31 CEST 2016


Commit: 58f732231ff1e3766fff058b5376d853e4aea2fa
Author: Lukas Tönne
Date:   Fri Jul 15 12:51:07 2016 +0200
Branches: strand_gpu
https://developer.blender.org/rB58f732231ff1e3766fff058b5376d853e4aea2fa

Deduplication of strand drawing functions.

The two variants for object and edit mode are the same, except for
setting the edit data in the parameters.

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

M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/editors/space_view3d/drawstrands.c
M	source/blender/editors/space_view3d/view3d_intern.h

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

diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 3a98c03..ffbb8bc 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -7979,7 +7979,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
 			
 			if (ob->mode & OB_MODE_HAIR_EDIT && is_obact) {
 				if (!(dflag & DRAW_PICKING) && scene->obedit == NULL) {
-					draw_strands_edit(scene, v3d, rv3d, ob, smd);
+					draw_strands(scene, v3d, rv3d, ob, smd);
 				}
 			}
 			else {
diff --git a/source/blender/editors/space_view3d/drawstrands.c b/source/blender/editors/space_view3d/drawstrands.c
index 3ebe5dd..cf54776 100644
--- a/source/blender/editors/space_view3d/drawstrands.c
+++ b/source/blender/editors/space_view3d/drawstrands.c
@@ -116,6 +116,7 @@ void draw_strands(Scene *scene, View3D *UNUSED(v3d), RegionView3D *rv3d,
                   Object *ob, StrandsModifierData *smd)
 {
 	Strands *strands = smd->strands;
+	BMEditStrands *edit = smd->edit;
 	bool show_controls = smd->flag & MOD_STRANDS_SHOW_STRANDS;
 	bool show_strands = smd->flag & MOD_STRANDS_SHOW_FIBERS;
 	bool use_geomshader = smd->flag & MOD_STRANDS_USE_GEOMSHADER;
@@ -125,6 +126,7 @@ void draw_strands(Scene *scene, View3D *UNUSED(v3d), RegionView3D *rv3d,
 	
 	GPUDrawStrandsParams params = {0};
 	params.strands = smd->strands;
+	params.edit = edit;
 	params.root_dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
 	params.subdiv = smd->subdiv;
 	params.fiber_primitive = get_fiber_primitive(smd->fiber_primitive);
@@ -192,87 +194,3 @@ void draw_strands(Scene *scene, View3D *UNUSED(v3d), RegionView3D *rv3d,
 		GPU_strand_shader_unbind(shader);
 	}
 }
-
-/*************************/
-/*** Edit Mode Drawing ***/
-
-void draw_strands_edit(Scene *scene, View3D *UNUSED(v3d), RegionView3D *rv3d,
-                       Object *ob, StrandsModifierData *smd)
-{
-	BMEditStrands *edit = smd->edit;
-	bool show_controls = smd->flag & MOD_STRANDS_SHOW_STRANDS;
-	bool show_strands = smd->flag & MOD_STRANDS_SHOW_FIBERS;
-	bool use_geomshader = smd->flag & MOD_STRANDS_USE_GEOMSHADER;
-	
-	if (smd->strands == NULL || edit == NULL)
-		return;
-	
-	GPUDrawStrandsParams params = {0};
-	params.strands = smd->strands;
-	params.edit = edit;
-	params.root_dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
-	params.subdiv = smd->subdiv;
-	params.fiber_primitive = get_fiber_primitive(smd->fiber_primitive);
-	params.effects = get_effects(smd->effects);
-	params.use_geomshader = use_geomshader;
-	params.shader_model = get_shader_model(smd->shader_model);
-	
-	if (smd->gpu_buffer == NULL)
-		smd->gpu_buffer = GPU_strands_buffer_create(&params);
-	GPUDrawStrands *buffer = smd->gpu_buffer;
-	GPUStrandsShader *shader = GPU_strand_shader_get(&params);
-	
-	if (show_controls) {
-		GPU_strands_setup_edges(buffer, &params);
-		if (buffer->strand_points && buffer->strand_edges) {
-			GPU_buffer_draw_elements(buffer->strand_edges, GL_LINES, 0, buffer->strand_totedges * 2);
-		}
-		GPU_buffers_unbind();
-	}
-	
-	if (show_strands) {
-		bind_strands_shader(shader, rv3d, ob, smd);
-		
-		GPU_strands_setup_fibers(buffer, &params);
-		if (use_geomshader) {
-			if (buffer->fibers) {
-				struct GPUAttrib *attrib;
-				int num_attrib;
-				GPU_strand_shader_get_fiber_attributes(shader, &attrib, &num_attrib);
-				
-				int elemsize = GPU_attrib_element_size(attrib, num_attrib);
-				GPU_interleaved_attrib_setup(buffer->fibers, attrib, num_attrib, elemsize, false);
-				
-				glDrawArrays(GL_POINTS, 0, buffer->totfibers * elemsize);
-				
-				GPU_interleaved_attrib_unbind();
-			}
-		}
-		else {
-			if (buffer->fiber_points && buffer->fiber_indices) {
-				struct GPUAttrib *attrib;
-				int num_attrib;
-				GPU_strand_shader_get_fiber_attributes(shader, &attrib, &num_attrib);
-				
-				int elemsize = GPU_attrib_element_size(attrib, num_attrib);
-				GPU_interleaved_attrib_setup(buffer->fiber_points, attrib, num_attrib, elemsize, false);
-				
-				switch (params.fiber_primitive) {
-					case GPU_STRANDS_FIBER_LINE:
-						GPU_buffer_draw_elements(buffer->fiber_indices, GL_LINES, 0,
-						                         buffer->fiber_totelems);
-						break;
-					case GPU_STRANDS_FIBER_RIBBON:
-						GPU_buffer_draw_elements(buffer->fiber_indices, GL_TRIANGLE_STRIP, 0,
-						                         buffer->fiber_totelems);
-						break;
-				}
-				
-				GPU_interleaved_attrib_unbind();
-			}
-		}
-		GPU_strands_buffer_unbind();
-		
-		GPU_strand_shader_unbind(shader);
-	}
-}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index ced1b9b..2cd2d72 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -289,8 +289,6 @@ extern const char *view3d_context_dir[]; /* doc access */
 /* drawstrands.c */
 void draw_strands(struct Scene *scene, struct View3D *v3d, struct RegionView3D *rv3d,
                   struct Object *ob, struct StrandsModifierData *smd);
-void draw_strands_edit(struct Scene *scene, struct View3D *v3d, struct RegionView3D *rv3d,
-                       struct Object *ob, struct StrandsModifierData *smd);
 
 /* drawvolume.c */
 void draw_smoke_volume(struct SmokeDomainSettings *sds, struct Object *ob,




More information about the Bf-blender-cvs mailing list