void AddOutputSlot(AbstractShaderProperty property) { switch (property.concreteShaderValueType) { case ConcreteSlotValueType.Boolean: AddSlot(new BooleanMaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output, false)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Vector1: AddSlot(new Vector1MaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output, 0)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Vector2: AddSlot(new Vector2MaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output, Vector4.zero)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Vector3: AddSlot(new Vector3MaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output, Vector4.zero)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Vector4: AddSlot(new Vector4MaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output, Vector4.zero)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Matrix2: AddSlot(new Matrix2MaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Matrix3: AddSlot(new Matrix3MaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Matrix4: AddSlot(new Matrix4MaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Texture2D: AddSlot(new Texture2DMaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Texture2DArray: AddSlot(new Texture2DArrayMaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Texture3D: AddSlot(new Texture3DMaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Cubemap: AddSlot(new CubemapMaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.SamplerState: AddSlot(new SamplerStateMaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; case ConcreteSlotValueType.Gradient: AddSlot(new GradientMaterialSlot(OutputSlotId, property.displayName, "Out", SlotType.Output)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); break; default: throw new ArgumentOutOfRangeException(); } }