/// <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); }
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); }
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; } }
public static List <EffectVariable> GetAnnotations(this EffectVariable variable) { return(GetAsList( variable.Description.AnnotationCount, (i) => variable.GetAnnotationByIndex(i))); }