Пример #1
0
        public Vector2Type(Scope scope, string scalar)
            : base(scalar + "2")
        {
            Colums      = 2;
            _scalarType = scope.GetType(scalar);

            scope.AddFunction(new StdFunctionDeclaration(Name, this,
                                                         new ParameterDeclaration(_scalarType, "x"),
                                                         new ParameterDeclaration(_scalarType, "y")));

            Members = new MemberDeclaration[]
            {
                ShaderRuntime.DeclareMember(this, "x", 0, _scalarType),
                ShaderRuntime.DeclareMember(this, "y", 1, _scalarType),
            };
            ReflectionType = new Graphics.ShaderReflectionType
            {
                Class    = Graphics.TypeClass.Vector,
                Columns  = 2,
                Name     = Name,
                Register = Graphics.RegisterSet.Float4,
                Elements = 1,
                Type     = ShaderRuntime.GetShaderType(scalar)
            };
        }
Пример #2
0
 public StringType()
     : base("string")
 {
     Size           = -1;
     ReflectionType = new Graphics.ShaderReflectionType
     {
         Class    = Graphics.TypeClass.Object,
         Type     = Graphics.ShaderType.String,
         Name     = "string",
         Register = Graphics.RegisterSet.Undefined
     };
 }
Пример #3
0
 public BoolType()
     : base("bool")
 {
     Size           = sizeof(int);
     ReflectionType = new Graphics.ShaderReflectionType
     {
         Class    = Graphics.TypeClass.Scalar,
         Columns  = 1,
         Elements = 1,
         Name     = this.Name,
         Register = Graphics.RegisterSet.Float4,
         Type     = Graphics.ShaderType.Bool
     };
 }
        public override void CheckSemantic(Scope scope, ErrorLog log)
        {
            base.CheckSemantic(scope, log);

            if (Members != null)
            {
                int offset = 0;
                foreach (var item in Members)
                {
                    item.DeclaringType = this;
                    item.CheckSemantic(scope, log);
                    item.Offset = offset;
                    offset     += item.Type.Size;
                }
                Size = offset;
            }

            ReflectionType = new Graphics.ShaderReflectionType
            {
                Name     = Name,
                Columns  = 0,
                Rows     = 0,
                Class    = Graphics.TypeClass.Struct,
                Register = Graphics.RegisterSet.Float4,
                Type     = Graphics.ShaderType.UserDefined,
            };

            ReflectionType.Members = new Graphics.ShaderReflectionVariable[Members.Length];
            for (int i = 0; i < Members.Length; i++)
            {
                Graphics.ShaderReflectionVariable v = new Graphics.ShaderReflectionVariable
                {
                    Name     = Members[i].Name,
                    Size     = Members[i].Type.Size,
                    Location = Members[i].Offset,
                    Semantic = Members[i].Semantic,
                    Type     = Members[i].Type.ReflectionType
                };
            }
        }