public override void DrawPrimitive(GamePrimitive primitive, GameTime time) { string key = primitive.GameObjectCategory; InstancedPrimitive instancedPrimitive; if (!cacheInstancedPrimitives.ContainsKey (key)) { cacheInstancedPrimitives [key] = instancedPrimitive = new InstancedPrimitive () { Primitive = primitive.Primitive, World = primitive.World, Texture = GetTexture (primitive), Instances = new InstanceInfo [100], InstanceCount = 0, InstanceUniqueHash = 0, IsSkyObject = primitive.IsSkyObject }; } else { instancedPrimitive = cacheInstancedPrimitives [key]; } if (instancedPrimitive.InstanceCount + 1 >= instancedPrimitive.Instances.Length) { Array.Resize (ref instancedPrimitive.Instances, instancedPrimitive.Instances.Length + 200); } InstanceInfo instanceInfo = new InstanceInfo { WorldMatrix = primitive.WorldMatrix * primitive.World.Camera.WorldMatrix, TransposeInverseWorldMatrix = primitive.WorldMatrixInverseTranspose * primitive.World.Camera.WorldMatrix, Alpha = primitive.Coloring.Alpha, IsLightingEnabled = primitive.IsLightingEnabled ? 1 : 0, SingleColor = primitive.IsSingleColored ? primitive.Coloring.MixedColor.ToVector4 () : Vector4.Zero }; instancedPrimitive.Instances [instancedPrimitive.InstanceCount++] = instanceInfo; instancedPrimitive.InstanceUniqueHash += primitive.Position.LengthSquared (); }
public override void DrawPrimitive(GamePrimitive primitive, GameTime time) { string key = primitive.GameObjectCategory; InstancedPrimitive instancedPrimitive; if (!cacheInstancedPrimitives.ContainsKey (key)) { cacheInstancedPrimitives [key] = instancedPrimitive = new InstancedPrimitive () { Primitive = primitive.Primitive, World = primitive.World, Texture = GetTexture (primitive), Instances = new InstanceInfo [100], InstanceCount = 0, InstanceUniqueHash = 0 }; } else { instancedPrimitive = cacheInstancedPrimitives [key]; } if (instancedPrimitive.InstanceCount + 1 >= instancedPrimitive.Instances.Length) { Array.Resize (ref instancedPrimitive.Instances, instancedPrimitive.Instances.Length + 200); } InstanceInfo instanceInfo = new InstanceInfo { WorldMatrix = primitive.WorldMatrix * primitive.World.Camera.WorldMatrix, TransposeInverseWorldMatrix = primitive.WorldMatrixInverseTranspose * primitive.World.Camera.WorldMatrix }; instancedPrimitive.Instances [instancedPrimitive.InstanceCount++] = instanceInfo; instancedPrimitive.InstanceUniqueHash += primitive.Position.LengthSquared (); }