ParticleSystemShape Property |
Namespace: DigitalRune.Particles
[ContentSerializerAttribute(SharedResource = true, Optional = true)] public Shape Shape { get; set; }
Exception | Condition |
---|---|
ArgumentNullException | value is . |
This property can be used as a bounding shape for frustum culling and similar operations. A suitable bounding shape must be set manually. The default value is Infinite.
Changing this property raises the ShapeChanged event.
Important: The ParticleSystem implements the interface IGeometricObject. An IGeometricObject instance registers event handlers for the Changed event of the contained Shape. Therefore, a Shape will have an indirect reference to the IGeometricObject. This is no problem if the geometric object exclusively owns the shape. However, this could lead to problems ("life extension bugs" a.k.a. "memory leaks") when multiple geometric objects share the same shape: One geometric object is no longer used but it cannot be collected by the garbage collector because the shape still holds a reference to the object.
Therefore, when Shapes are shared between multiple IGeometricObjects: Always set the property Shape to Empty or Infinite when the IGeometricObject is no longer used. Those are special immutable shapes that never raises any Changed events. Setting Shape to Empty or Infinite ensures that the internal event handlers are unregistered and the objects can be garbage-collected properly.