public Variable(StructParameter param, ShaderGpuProgramType programType) { ShaderType = new ShaderType(param, programType); Name = param.Name ?? throw new Exception("Variable name cannot be null"); NameIndex = param.NameIndex; Index = param.Index; ArraySize = param.ArraySize; }
public void CanGetParameterValuesForMultiParametersVoidMethod() { var classParameter = new ClassParameter(); var structParameter = new StructParameter(); Expression <Action <Component> > expression = c => c.MultiParametersVoid(3, classParameter, structParameter); var parameterValues = expression.GetParameterValues().ToList(); parameterValues.Should().HaveCount(3); parameterValues[0].Should().Be(3); parameterValues[1].Should().Be(classParameter); parameterValues[2].Should().Be(structParameter); }
void Amend_Explicit_By_Ref <TEntity>(ref TEntity entity) { if (entity is ClassParameter) { (entity as ClassParameter).Print += " World"; } else if (entity is StructParameter) { StructParameter parameter = ((StructParameter)(object)entity); parameter.Print += " World"; } }
public void TestAmend_ExplicitRef() { ClassParameter p1 = new ClassParameter { Print = "Hello" }; StructParameter p2 = new StructParameter { Print = "Hello" }; Amend_Explicit_By_Ref(ref p1); Amend_Explicit_By_Ref(ref p2); Assert.AreEqual("Hello World", p1.Print); Assert.AreEqual("Hello", p2.Print, "Structs are always passed-by-value"); }
public ShaderType(StructParameter structParameter, ShaderGpuProgramType programType) { Members.AddRange(structParameter.VectorMembers.Select(p => new ShaderTypeMember(p, programType))); Members.AddRange(structParameter.MatrixMembers.Select(p => new ShaderTypeMember(p, programType))); Members = Members .OrderBy(v => v.Index) .ToList(); ShaderVariableClass = ShaderVariableClass.Struct; //TODO: matrix colums or rows? ShaderVariableType = ShaderVariableType.Void; Rows = 0; Columns = 0; ElementCount = 0; MemberCount = (ushort)Members.Count(); MemberOffset = 0; m_programType = programType; }
public bool Validate(LogWriter log) { if (_valid) { return(true); } if (_element == null) { return(false); } for (var i = _firstIsInstance ? 1 : 0; i < _element.ChildNodes.Count; i++) { var elementChildNode = _element.ChildNodes[i] as XmlElement; if (elementChildNode == null || elementChildNode.Name != "parameter") { continue; } var parameter = new Parameter(elementChildNode); if (parameter.IsEllipsis) { log.Warn("Ellipsis parameter: hide and bind manually if no alternative exists."); Clear(); return(false); } if (parameter.CsType == "" || parameter.Name == "" || parameter.MarshalType == "" || SymbolTable.Table.CallByName(parameter.CType, parameter.Name) == "") { log.Warn($"Unknown type {parameter.Name} on parameter {parameter.CType}"); Clear(); return(false); } if (parameter.IsOptional && parameter.PassAs == string.Empty && parameter.IsUserData == false) { HasOptional = true; } var generatable = parameter.Generatable; if (parameter.IsArray) { parameter = new ArrayParameter(elementChildNode); if (i < _element.ChildNodes.Count - 1) { if (_element.ChildNodes[i + 1] is XmlElement nextElement && nextElement.Name == "parameter") { var nextElementParam = new Parameter(nextElement); if (nextElementParam.IsCount) { parameter = new ArrayCountPair(elementChildNode, nextElement, false); i++; } } } } else if (parameter.IsCount) { parameter.IsCount = false; if (i < _element.ChildNodes.Count - 1) { if (_element.ChildNodes[i + 1] is XmlElement nextElement && nextElement.Name == "parameter") { var nextElementParam = new Parameter(nextElement); if (nextElementParam.IsArray) { parameter = new ArrayCountPair(nextElement, elementChildNode, true); i++; } } } } else if (parameter.CType == "GError**" && Throws) { parameter = new ErrorParameter(elementChildNode); } else { switch (generatable) { case StructBase _: case ByRefGen _: parameter = new StructParameter(elementChildNode); break; case CallbackGen _: HasCallback = true; break; } } _paramList.Add(parameter); } if (Parser.GetVersion(_element.OwnerDocument.DocumentElement) < 3 && HasCallback && Count > 2 && this[Count - 3].Generatable is CallbackGen && this[Count - 2].IsUserData && this[Count - 1].IsDestroyNotify) { this[Count - 3].Scope = "notified"; } _valid = true; return(_valid); }
public void MultiParametersVoid(int id, ClassParameter classParameter, StructParameter structParameter) { }