Browse Source

Fix issues with Shape retention in Fixture:getShape()

Bill Meltsner 13 years ago
parent
commit
2a88ed1fa5

+ 6 - 1
src/modules/physics/box2d/Fixture.cpp

@@ -128,7 +128,12 @@ namespace box2d
 			return NULL;
 		Shape * s = (Shape *)Memoizer::find(fixture->GetShape());
 		if (!s)
-			s = new Shape(fixture->GetShape());
+		{
+			b2BlockAllocator a;
+			s = new Shape(fixture->GetShape()->Clone(&a));
+		}
+		else
+			s->retain();
 		return s;
 	}
 

+ 0 - 1
src/modules/physics/box2d/wrap_Fixture.cpp

@@ -121,7 +121,6 @@ namespace box2d
 		Shape * shape = t->getShape();
 		if (shape == 0)
 			return 0;
-		shape->retain();
 		switch (shape->getType()) {
 			case Shape::SHAPE_EDGE:
 				luax_newtype(L, "EdgeShape", PHYSICS_EDGE_SHAPE_T, (void*)shape);