sealed protected override VFXExpression ConvertExpression(VFXExpression expression, VFXSlot sourceSlot) { if (expression.valueType == VFXValueType.Float2) { return(expression); } if (expression.valueType == VFXValueType.Float) { return(new VFXExpressionCombine(expression, expression)); } if (expression.valueType == VFXValueType.Uint32) { var floatExpression = new VFXExpressionCastUintToFloat(expression); return(new VFXExpressionCombine(floatExpression, floatExpression)); } if (expression.valueType == VFXValueType.Int32) { var floatExpression = new VFXExpressionCastIntToFloat(expression); return(new VFXExpressionCombine(floatExpression, floatExpression)); } if (expression.valueType == VFXValueType.Float3 || expression.valueType == VFXValueType.Float4) { return(new VFXExpressionCombine(expression.x, expression.y)); } throw new Exception("Unexpected type of expression " + expression); }
static public VFXExpression ConvertExpressionToVector3(VFXExpression expression) { if (expression.valueType == VFXValueType.Float3) { return(expression); } if (expression.valueType == VFXValueType.Float) { return(new VFXExpressionCombine(expression, expression, expression)); } if (expression.valueType == VFXValueType.Uint32) { var floatExpression = new VFXExpressionCastUintToFloat(expression); return(new VFXExpressionCombine(floatExpression, floatExpression, floatExpression)); } if (expression.valueType == VFXValueType.Int32) { var floatExpression = new VFXExpressionCastIntToFloat(expression); return(new VFXExpressionCombine(floatExpression, floatExpression, floatExpression)); } if (expression.valueType == VFXValueType.Float4) { return(new VFXExpressionCombine(expression.x, expression.y, expression.z)); } throw new Exception("Unexpected type of expression " + expression + "valueType" + expression.valueType); }
protected override IEnumerable <VFXExpression> ApplyPatchInputExpression(IEnumerable <VFXExpression> inputExpression) { var minIndex = inputExpression.Select(o => Array.IndexOf(kExpectedTypeOrdering, VFXExpression.TypeToType(o.valueType))).Min(); var unifiedType = VFXExpression.GetVFXValueTypeFromType(kExpectedTypeOrdering[minIndex]); foreach (var expression in inputExpression) { if (expression.valueType == unifiedType) { yield return(expression); continue; } var currentExpression = expression; if (VFXExpression.IsFloatValueType(unifiedType)) { if (VFXExpression.IsUIntValueType(expression.valueType)) { currentExpression = new VFXExpressionCastUintToFloat(currentExpression); } else if (VFXExpression.IsIntValueType(expression.valueType)) { currentExpression = new VFXExpressionCastIntToFloat(currentExpression); } currentExpression = VFXOperatorUtility.CastFloat(currentExpression, unifiedType, identityValueFloat); } else if (VFXExpression.IsIntValueType(unifiedType)) { if (VFXExpression.IsUIntValueType(currentExpression.valueType)) { currentExpression = new VFXExpressionCastUintToInt(currentExpression); } else if (VFXExpression.IsFloatValueType(currentExpression.valueType)) { currentExpression = new VFXExpressionCastFloatToInt(VFXOperatorUtility.ExtractComponents(currentExpression).First()); } } else if (VFXExpression.IsUIntValueType(unifiedType)) { if (VFXExpression.IsIntValueType(currentExpression.valueType)) { currentExpression = new VFXExpressionCastIntToUint(currentExpression); } else if (VFXExpression.IsFloatValueType(expression.valueType)) { currentExpression = new VFXExpressionCastFloatToUint(VFXOperatorUtility.ExtractComponents(expression).First()); } } yield return(currentExpression); } }
sealed protected override VFXExpression ConvertExpression(VFXExpression expression, VFXSlot sourceSlot) { if (expression.valueType == VFXValueType.Uint32) { var floatExpression = new VFXExpressionCastUintToFloat(expression); return(floatExpression); } if (expression.valueType == VFXValueType.Int32) { var floatExpression = new VFXExpressionCastIntToFloat(expression); return(floatExpression); } return(expression); }