protected override string ConcreteSlotValueAsVariable()
 {
     var channelCount = (int)SlotValueHelper.GetMatrixDimension(concreteValueType);
     var values = "";
     bool isFirst = true;
     for (var r = 0; r < channelCount; r++)
     {
         for (var c = 0; c < channelCount; c++)
         {
             if (!isFirst)
                 values += ", ";
             isFirst = false;
             values += value.GetRow(r)[c];
         }
     }
     return string.Format("$precision{0}x{0}({1})", channelCount, values);
 }
Ejemplo n.º 2
0
        protected override string ConcreteSlotValueAsVariable(AbstractMaterialNode.OutputPrecision precision)
        {
            var  channelCount = (int)SlotValueHelper.GetMatrixDimension(concreteValueType);
            var  values       = "";
            bool isFirst      = true;

            for (var r = 0; r < channelCount; r++)
            {
                for (var c = 0; c < channelCount; c++)
                {
                    if (!isFirst)
                    {
                        values += ", ";
                    }
                    isFirst = false;
                    values += value.GetRow(r)[c];
                }
            }
            return(string.Format("{0}{1}x{1}({2})", precision, channelCount, values));
        }
Ejemplo n.º 3
0
        public void GenerateNodeCode(ShaderGenerator visitor, GraphContext graphContext, GenerationMode generationMode)
        {
            var inputValue = GetSlotValue(InputSlotId, generationMode);

            var  inputSlot    = FindInputSlot <MaterialSlot>(InputSlotId);
            var  numInputRows = 0;
            bool useIndentity = false;

            if (inputSlot != null)
            {
                numInputRows = SlotValueHelper.GetMatrixDimension(inputSlot.concreteValueType);
                if (numInputRows > 4)
                {
                    numInputRows = 0;
                }

                if (!owner.GetEdges(inputSlot.slotReference).Any())
                {
                    numInputRows = 0;
                    useIndentity = true;
                }
            }

            int concreteRowCount = useIndentity ? 2 : numInputRows;

            for (var r = 0; r < 4; r++)
            {
                string outputValue;
                if (r >= numInputRows)
                {
                    outputValue = string.Format("{0}{1}(", precision, concreteRowCount);
                    for (int c = 0; c < concreteRowCount; c++)
                    {
                        if (c != 0)
                        {
                            outputValue += ", ";
                        }
                        outputValue += Matrix4x4.identity.GetRow(r)[c];
                    }
                    outputValue += ")";
                }
                else
                {
                    switch (m_Axis)
                    {
                    case MatrixAxis.Column:
                        outputValue = string.Format("{0}{1}(", precision, numInputRows);
                        for (int c = 0; c < numInputRows; c++)
                        {
                            if (c != 0)
                            {
                                outputValue += ", ";
                            }
                            outputValue += string.Format("{0}[{1}].{2}", inputValue, c, s_ComponentList[r]);
                        }
                        outputValue += ")";
                        break;

                    default:
                        outputValue = string.Format("{0}[{1}]", inputValue, r);
                        break;
                    }
                }
                visitor.AddShaderChunk(string.Format("{0}{1} {2} = {3};", precision, concreteRowCount, GetVariableNameForSlot(s_OutputSlots[r]), outputValue), true);
            }
        }