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 ();
 }
示例#2
0
 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 ();
 }