in tools/codegen/exe/OutputEffectType.cs [133:261]
public static void OutputEffectIdl(Effects.Effect effect, Formatter output)
{
OutputDataTypes.OutputLeadingComment(output);
OutputVersionConditional(effect, output);
output.WriteLine("namespace Microsoft.Graphics.Canvas.Effects");
output.WriteLine("{");
output.Indent();
// Output all enums specific to this effect
foreach (var property in effect.Properties)
{
if (property.Type == "enum" &&
property.EnumFields.Usage == Effects.EnumValues.UsageType.UsedByOneEffect &&
property.ShouldProject)
{
OutputEnum(property, output);
output.WriteLine();
}
}
output.WriteLine("runtimeclass " + effect.ClassName + ";");
output.WriteLine();
output.WriteLine("[version(VERSION), uuid(" + effect.Uuid + "), exclusiveto(" + effect.ClassName + ")]");
output.WriteLine("interface " + effect.InterfaceName + " : IInspectable");
output.WriteIndent();
output.WriteLine("requires ICanvasEffect");
output.WriteLine("{");
output.Indent();
foreach (var property in effect.Properties)
{
// Property with type string describes
// name/author/category/description of effect but not input type
if (property.Type == "string" || property.IsHidden)
continue;
output.WriteLine("[propget]");
if (property.IsArray)
{
output.WriteLine("HRESULT " + property.Name + "([out] UINT32* valueCount, [out, size_is(, *valueCount), retval] " + property.TypeNameIdl + "** valueElements);");
}
else
{
output.WriteLine("HRESULT " + property.Name + "([out, retval] " + property.TypeNameIdl + "* value);");
}
output.WriteLine();
output.WriteLine("[propput]");
if (property.IsArray)
{
output.WriteLine("HRESULT " + property.Name + "([in] UINT32 valueCount, [in, size_is(valueCount)] " + property.TypeNameIdl + "* valueElements);");
}
else
{
output.WriteLine("HRESULT " + property.Name + "([in] " + property.TypeNameIdl + " value);");
}
output.WriteLine();
}
if (EffectHasVariableNumberOfInputs(effect))
{
output.WriteLine("[propget]");
output.WriteLine("HRESULT Sources([out, retval] Windows.Foundation.Collections.IVector<IGRAPHICSEFFECTSOURCE*>** value);");
output.WriteLine();
}
else
{
for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
{
var input = effect.Inputs.InputsList[i];
output.WriteLine("[propget]");
output.WriteLine("HRESULT " + input.Name + "([out, retval] IGRAPHICSEFFECTSOURCE** source);");
output.WriteLine();
output.WriteLine("[propput]");
output.WriteLine("HRESULT " + input.Name + "([in] IGRAPHICSEFFECTSOURCE* source);");
output.WriteLine();
}
}
output.Unindent();
output.WriteLine("};");
output.WriteLine();
string staticAttribute = "";
if (HasStatics(effect))
{
string staticsInterfaceName = effect.InterfaceName + "Statics";
string staticsUuid = EffectGenerator.GenerateUuid(staticsInterfaceName);
staticAttribute = ", static(" + staticsInterfaceName + ", VERSION)";
output.WriteLine("[version(VERSION), uuid(" + staticsUuid + "), exclusiveto(" + effect.ClassName + ")]");
output.WriteLine("interface " + staticsInterfaceName + " : IInspectable");
output.WriteLine("{");
output.Indent();
foreach (var customIdl in effect.Overrides.CustomStaticMethodIdl)
{
output.WriteLine(customIdl.Trim());
}
if (!string.IsNullOrEmpty(effect.Overrides.IsSupportedCheck))
{
output.WriteLine("[propget] HRESULT IsSupported([out, retval] boolean* value);");
}
output.Unindent();
output.WriteLine("}");
output.WriteLine();
}
output.WriteLine("[STANDARD_ATTRIBUTES, activatable(VERSION)" + staticAttribute + "]");
output.WriteLine("runtimeclass " + effect.ClassName);
output.WriteLine("{");
output.Indent();
output.WriteLine("[default] interface " + effect.InterfaceName + ";");
output.Unindent();
output.WriteLine("}");
output.Unindent();
output.WriteLine("}");
EndVersionConditional(effect, output);
}