예제 #1
0
 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;
 }
예제 #2
0
        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");
        }
예제 #5
0
 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;
 }
예제 #6
0
        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);
        }
예제 #7
0
 public void MultiParametersVoid(int id, ClassParameter classParameter, StructParameter structParameter)
 {
 }