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);
            }
        }
Esempio n. 4
0
        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);
        }