/// <summary>
        ///     アノテーション名の大文字小文字を無視して取得する
        /// </summary>
        /// <param name="variable">取得対象のエフェクト変数</param>
        /// <param name="target">アノテーション名</param>
        /// <param name="typeName">期待する型</param>
        /// <returns>アノテーション</returns>
        public static EffectVariable アノテーションを取得する(EffectVariable variable, string target, string typeName)
        {
            string name = target.ToLower();

            string[] valid = name.Split('/');
            for (int i = 0; i < variable.Description.AnnotationCount; i++)
            {
                EffectVariable val        = variable.GetAnnotationByIndex(i);
                string         typeString = val.Description.Name.ToLower();
                if (typeString == name)
                {
                    if (!valid.Contains(typeString) && !String.IsNullOrWhiteSpace(typeString))
                    {
                        throw new InvalidMMEEffectShader例外(
                                  string.Format(
                                      "変数「{0} {1}:{2}」に適用されたアノテーション「{3} {4}」はアノテーションの型が正しくありません。期待した型は{5}でした。",
                                      variable.TypeInfo.Description.TypeName, variable.Description.Name,
                                      variable.Description.Semantic, val.TypeInfo.Description.TypeName,
                                      val.Description.Name, _期待される型の一覧を返す(valid, val.Description.Name)));
                    }
                    return(val);
                }
            }
            return(null);
        }
示例#2
0
        public static List <EffectVariable> GetAnnotations(EffectVariable reflectionVariable)
        {
            var result = new List <EffectVariable>();

            for (int i = 0; i < reflectionVariable.Description.AnnotationCount; i++)
            {
                var annotation = reflectionVariable.GetAnnotationByIndex(i);
                result.Add(annotation);
            }
            return(result);
        }
示例#3
0
        public static void CompareVariable(EffectVariable reflectionVariable, object variable)
        {
            EffectTypeDescription typeDesc = reflectionVariable.TypeInfo.Description;

            Assert.AreEqual(typeDesc.TypeName, typeDesc.TypeName);
            Assert.AreEqual(typeDesc.Class, typeDesc.Class);
            Assert.AreEqual(typeDesc.Type, typeDesc.Type);
            Assert.AreEqual(typeDesc.Elements, typeDesc.Elements);
            Assert.AreEqual(typeDesc.Members, typeDesc.Members);
            Assert.AreEqual(typeDesc.Rows, typeDesc.Rows);
            Assert.AreEqual(typeDesc.Columns, typeDesc.Columns);
            Assert.AreEqual(typeDesc.PackedSize, typeDesc.PackedSize);
            Assert.AreEqual(typeDesc.UnpackedSize, typeDesc.UnpackedSize);
            Assert.AreEqual(typeDesc.Stride, typeDesc.Stride);
            EffectVariableDescription variableDesc = reflectionVariable.Description;

            Assert.AreEqual(variableDesc.Name, variableDesc.Name);
            Assert.AreEqual(variableDesc.Semantic, variableDesc.Semantic);
            Assert.AreEqual(variableDesc.Flags, variableDesc.Flags);
            Assert.AreEqual(variableDesc.AnnotationCount, variableDesc.AnnotationCount);
            Assert.AreEqual(variableDesc.BufferOffset, variableDesc.BufferOffset);
            Assert.AreEqual(variableDesc.ExplicitBindPoint, variableDesc.ExplicitBindPoint);

            if (variable is EffectNumericVariable v1)
            {
                Assert.AreEqual(variableDesc.Name, v1.Name);
                Assert.AreEqual(0, v1.ExplicitBindPoint);
            }
            if (variable is EffectObjectVariable v2)
            {
                Assert.AreEqual(variableDesc.Name, v2.Name);
            }

            for (int i = 0; i < variableDesc.AnnotationCount; i++)
            {
                var annotation = reflectionVariable.GetAnnotationByIndex(i);
            }
            if (typeDesc.Type == ShaderVariableType.Sampler)
            {
                EffectSamplerVariable sampVariable = reflectionVariable.AsSampler();
                SamplerState          samplerState = sampVariable.GetSampler();
                var sampDesc = samplerState.Description;
            }
        }
示例#4
0
 public static List <EffectVariable> GetAnnotations(this EffectVariable variable)
 {
     return(GetAsList(
                variable.Description.AnnotationCount,
                (i) => variable.GetAnnotationByIndex(i)));
 }