[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49202] trunk/blender/source/blender/ editors/space_view3d/drawobject.c: Fix [#32177] 'Display Pivot' segfaults blender (Rigid Body Constraint + 3dview)

Bastien Montagne montagne29 at wanadoo.fr
Wed Jul 25 14:55:55 CEST 2012


Revision: 49202
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49202
Author:   mont29
Date:     2012-07-25 12:55:55 +0000 (Wed, 25 Jul 2012)
Log Message:
-----------
Fix [#32177] 'Display Pivot' segfaults blender (Rigid Body Constraint + 3dview)

draw_rigid_body_pivot() didn't check it could actualy use the given ob_wire_col...

Also silenced a compiler warning, and removed (replaced) a potential dengerous pointer cast (char *[4] -> int* is not safe on 64bit machines!).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/drawobject.c

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-07-25 12:15:22 UTC (rev 49201)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-07-25 12:55:55 UTC (rev 49202)
@@ -849,7 +849,7 @@
 
 	BLI_addtail(strings, vos);
 	copy_v3_v3(vos->vec, co);
-	vos->col.pack = *((int *)col);
+	copy_v4_v4_char((char *)vos->col.ub, (const char *)col);
 	vos->xoffs = xoffs;
 	vos->flag = flag;
 	vos->str_len = alloc_len - 1;
@@ -4287,7 +4287,7 @@
 	ParticleDrawData *pdd = psys->pdd;
 	Material *ma;
 	float vel[3], imat[4][4];
-	float timestep, pixsize_scale, pa_size, r_tilt, r_length;
+	float timestep, pixsize_scale = 1.0f, pa_size, r_tilt, r_length;
 	float pa_time, pa_birthtime, pa_dietime, pa_health, intensity;
 	float cfra;
 	float ma_col[3] = {0.0f, 0.0f, 0.0f};
@@ -6442,13 +6442,24 @@
 	}
 }
 
-static void draw_rigid_body_pivot(bRigidBodyJointConstraint *data, const unsigned char ob_wire_col[4])
+static void draw_rigid_body_pivot(bRigidBodyJointConstraint *data, const short dflag, unsigned char ob_wire_col[4])
 {
 	const char *axis_str[3] = {"px", "py", "pz"};
 	int axis;
 	float mat[4][4];
+	unsigned char _col[4], *col;
 
 	/* color */
+	if (dflag & DRAW_CONSTCOLOR) {
+		/* so we can draw pivot point in current const color */
+		float tcol[4];
+		col = _col;
+		glGetFloatv(GL_CURRENT_COLOR, tcol);
+		rgb_float_to_uchar(col, tcol);
+	}
+	else {
+		col = ob_wire_col;
+	}
 
 	eul_to_mat4(mat, &data->axX);
 	glLineWidth(4.0f);
@@ -6467,7 +6478,7 @@
 		glVertex3fv(v);
 		glEnd();
 
-		view3d_cached_text_draw_add(v, axis_str[axis], 0, V3D_CACHE_TEXT_ASCII, ob_wire_col);
+		view3d_cached_text_draw_add(v, axis_str[axis], 0, V3D_CACHE_TEXT_ASCII, col);
 	}
 	glLineWidth(1.0f);
 	setlinestyle(0);
@@ -7067,7 +7078,7 @@
 			if (con->type == CONSTRAINT_TYPE_RIGIDBODYJOINT) {
 				bRigidBodyJointConstraint *data = (bRigidBodyJointConstraint *)con->data;
 				if (data->flag & CONSTRAINT_DRAW_PIVOT)
-					draw_rigid_body_pivot(data, ob_wire_col);
+					draw_rigid_body_pivot(data, dflag, ob_wire_col);
 			}
 		}
 




More information about the Bf-blender-cvs mailing list