[Bf-blender-cvs] [c88dcfb] strand_gpu: Fix crash when adding a strands modifier and the fiber vertex/edge buffer is NULL.

Lukas Tönne noreply at git.blender.org
Wed Jul 13 18:39:09 CEST 2016


Commit: c88dcfbdf13c34bef8bf0c1660ea71b396f75521
Author: Lukas Tönne
Date:   Wed Jul 13 18:27:54 2016 +0200
Branches: strand_gpu
https://developer.blender.org/rBc88dcfbdf13c34bef8bf0c1660ea71b396f75521

Fix crash when adding a strands modifier and the fiber vertex/edge buffer is NULL.

The NULL buffer pointer is expected, just needs a sanity check.

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

M	source/blender/editors/space_view3d/drawstrands.c

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

diff --git a/source/blender/editors/space_view3d/drawstrands.c b/source/blender/editors/space_view3d/drawstrands.c
index 531a2e1..35ae160 100644
--- a/source/blender/editors/space_view3d/drawstrands.c
+++ b/source/blender/editors/space_view3d/drawstrands.c
@@ -153,17 +153,19 @@ void draw_strands(Scene *scene, View3D *UNUSED(v3d), RegionView3D *rv3d,
 			}
 		}
 		else {
-			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);
-			
-			GPU_buffer_draw_elements(buffer->fiber_edges, GL_LINES, 0,
-			                         buffer->fiber_totedges * 2);
-			
-			GPU_interleaved_attrib_unbind();
+			if (buffer->fiber_points && buffer->fiber_edges) {
+				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);
+				
+				GPU_buffer_draw_elements(buffer->fiber_edges, GL_LINES, 0,
+				                         buffer->fiber_totedges * 2);
+				
+				GPU_interleaved_attrib_unbind();
+			}
 		}
 		GPU_strands_buffer_unbind();
 		
@@ -535,17 +537,19 @@ void draw_strands_edit(Scene *scene, View3D *UNUSED(v3d), RegionView3D *rv3d,
 			}
 		}
 		else {
-			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);
-			
-			GPU_buffer_draw_elements(buffer->fiber_edges, GL_LINES, 0,
-			                         buffer->fiber_totedges * 2);
-			
-			GPU_interleaved_attrib_unbind();
+			if (buffer->fiber_points && buffer->fiber_edges) {
+				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);
+				
+				GPU_buffer_draw_elements(buffer->fiber_edges, GL_LINES, 0,
+				                         buffer->fiber_totedges * 2);
+				
+				GPU_interleaved_attrib_unbind();
+			}
 		}
 		GPU_strands_buffer_unbind();




More information about the Bf-blender-cvs mailing list