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); }
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)); }
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); } }