[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13014] trunk/blender/source/blender: == Sculpt ==

Nicholas Bishop nicholasbishop at gmail.com
Thu Dec 27 00:08:00 CET 2007


Revision: 13014
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13014
Author:   nicholasbishop
Date:     2007-12-27 00:08:00 +0100 (Thu, 27 Dec 2007)

Log Message:
-----------
== Sculpt ==

Fixed a memory leak when using the interactive brush resize tool.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sculpt.h
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/include/BDR_sculptmode.h
    trunk/blender/source/blender/src/sculptmode.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sculpt.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sculpt.h	2007-12-26 22:40:56 UTC (rev 13013)
+++ trunk/blender/source/blender/blenkernel/BKE_sculpt.h	2007-12-26 23:08:00 UTC (rev 13014)
@@ -27,6 +27,34 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#ifndef BKE_SCULPT_H
+#define BKE_SCULPT_H
+
+struct NumInput;
+struct Scene;
+struct SculptData;
+struct SculptSession;
+
+typedef enum PropsetMode {
+	PropsetNone = 0,
+	PropsetSize,
+	PropsetStrength,
+	PropsetTexRot
+} PropsetMode;
+
+typedef struct PropsetData {
+	PropsetMode mode;
+	unsigned int tex;
+	short origloc[2];
+	float *texdata;
+	
+	short origsize;
+	char origstrength;
+	float origtexrot;
+	
+	struct NumInput *num;
+} PropsetData;
+
 typedef struct SculptSession {
 	struct ProjVert *projverts;
 
@@ -62,3 +90,4 @@
 void sculpt_vertexusers_free(struct SculptSession *ss);
 void sculpt_reset_curve(struct SculptData *sd);
 
+#endif

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2007-12-26 22:40:56 UTC (rev 13013)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2007-12-26 23:08:00 UTC (rev 13014)
@@ -659,6 +659,15 @@
 			MEM_freeN(ss->projverts);
 		if(ss->mats)
 			MEM_freeN(ss->mats);
+
+		if(ss->propset) {
+			if(ss->propset->texdata)
+				MEM_freeN(ss->propset->texdata);
+			if(ss->propset->num)
+				MEM_freeN(ss->propset->num);
+			MEM_freeN(ss->propset);
+		}
+
 		sculpt_vertexusers_free(ss);
 		if(ss->texcache)
 			MEM_freeN(ss->texcache);

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-26 22:40:56 UTC (rev 13013)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2007-12-26 23:08:00 UTC (rev 13014)
@@ -136,6 +136,7 @@
 #include "BKE_sca.h" // for init_actuator
 #include "BKE_scene.h"
 #include "BKE_softbody.h"	// sbNew()
+#include "BKE_sculpt.h"
 #include "BKE_texture.h" // for open_plugin_tex
 #include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND
 #include "BKE_idprop.h"

Modified: trunk/blender/source/blender/include/BDR_sculptmode.h
===================================================================
--- trunk/blender/source/blender/include/BDR_sculptmode.h	2007-12-26 22:40:56 UTC (rev 13013)
+++ trunk/blender/source/blender/include/BDR_sculptmode.h	2007-12-26 23:08:00 UTC (rev 13014)
@@ -32,6 +32,7 @@
 
 #include "DNA_listBase.h"
 #include "DNA_vec_types.h"
+#include "BKE_sculpt.h"
 #include "transform.h"
 
 struct uiBlock;
@@ -47,26 +48,6 @@
 struct SculptData;
 struct SculptStroke;
 
-typedef enum PropsetMode {
-	PropsetNone = 0,
-	PropsetSize,
-	PropsetStrength,
-	PropsetTexRot
-} PropsetMode;
-
-typedef struct PropsetData {
-	PropsetMode mode;
-	unsigned int tex;
-	short origloc[2];
-	float *texdata;
-	
-	short origsize;
-	char origstrength;
-	float origtexrot;
-	
-	NumInput num;
-} PropsetData;
-
 struct SculptSession *sculpt_session(void);
 struct SculptData *sculpt_data(void);
 

Modified: trunk/blender/source/blender/src/sculptmode.c
===================================================================
--- trunk/blender/source/blender/src/sculptmode.c	2007-12-26 22:40:56 UTC (rev 13013)
+++ trunk/blender/source/blender/src/sculptmode.c	2007-12-26 23:08:00 UTC (rev 13014)
@@ -1313,6 +1313,7 @@
 				set_tex_angle(pd->origtexrot);
 		}
 		glDeleteTextures(1, &pd->tex);
+		MEM_freeN(pd->num);
 		MEM_freeN(pd->texdata);
 		MEM_freeN(pd);
 		ss->propset= NULL;
@@ -1353,7 +1354,9 @@
 		
 		sculptmode_propset_calctex();
 		
-		pd->num.idx_max= 0;
+		if(!pd->num)
+			pd->num = MEM_callocN(sizeof(NumInput), "propset numinput");
+		pd->num->idx_max= 0;
 	}
 
 	pd->mode= mode;
@@ -1391,11 +1394,11 @@
 	BrushData *brush= sculptmode_brush();
 	char valset= 0;
 	
-	handleNumInput(&pd->num, event);
+	handleNumInput(pd->num, event);
 	
-	if(hasNumInput(&pd->num)) {
+	if(hasNumInput(pd->num)) {
 		float val;
-		applyNumInput(&pd->num, &val);
+		applyNumInput(pd->num, &val);
 		if(pd->mode==PropsetSize)
 			brush->size= val;
 		else if(pd->mode==PropsetStrength)
@@ -1409,7 +1412,7 @@
 	switch(event) {
 	case MOUSEX:
 	case MOUSEY:
-		if(!hasNumInput(&pd->num)) {
+		if(!hasNumInput(pd->num)) {
 			char ctrl= G.qual & LR_CTRLKEY;
 			getmouseco_areawin(mouse);
 			tmp[0]= pd->origloc[0]-mouse[0];





More information about the Bf-blender-cvs mailing list