in tools/codegen/exe/OutputEffectType.cs [375:496]
public static void OutputEffectCpp(Effects.Effect effect, Formatter output)
{
OutputDataTypes.OutputLeadingComment(output);
bool isInputSizeFixed = !EffectHasVariableNumberOfInputs(effect);
int inputsCount = isInputSizeFixed ? effect.Inputs.InputsList.Count : 0;
output.WriteLine("#include \"pch.h\"");
output.WriteLine("#include \"" + effect.ClassName + ".h\"");
output.WriteLine();
OutputVersionConditional(effect, output);
output.WriteLine("namespace ABI { namespace Microsoft { namespace Graphics { namespace Canvas { namespace Effects");
output.WriteLine("{");
output.Indent();
output.WriteLine(effect.ClassName + "::" + effect.ClassName + "(ICanvasDevice* device, ID2D1Effect* effect)");
output.WriteIndent();
output.WriteLine(": CanvasEffect(EffectId(), "
+ (effect.Properties.Count(p => (!p.IsHandCoded && !p.IsHdrAlias)) - 4) + ", "
+ inputsCount + ", "
+ isInputSizeFixed.ToString().ToLower() + ", "
+ "device, effect, static_cast<" + effect.InterfaceName + "*>(this))");
output.WriteLine("{");
output.Indent();
if (effect.Overrides != null && !string.IsNullOrEmpty(effect.Overrides.IsSupportedCheck))
{
output.WriteLine("if (!SharedDeviceState::GetInstance()->Is" + effect.Overrides.IsSupportedCheck + "Supported())");
output.Indent();
output.WriteLine("ThrowHR(E_NOTIMPL, Strings::NotSupportedOnThisVersionOfWindows);");
output.Unindent();
output.WriteLine();
}
output.WriteLine("if (!effect)");
output.WriteLine("{");
output.Indent();
output.WriteLine("// Set default values");
foreach (var property in effect.Properties)
{
WritePropertyInitialization(output, property);
}
output.Unindent();
output.WriteLine("}");
output.Unindent();
output.WriteLine("}");
output.WriteLine();
foreach (var property in effect.Properties)
{
WritePropertyImplementation(effect, output, property);
}
if (EffectHasVariableNumberOfInputs(effect))
{
output.WriteLine("IMPLEMENT_EFFECT_SOURCES_PROPERTY(" + effect.ClassName + ")");
output.WriteLine();
}
else
{
for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
{
var input = effect.Inputs.InputsList[i];
output.WriteLine("IMPLEMENT_EFFECT_SOURCE_PROPERTY(" + effect.ClassName + ",");
output.Indent();
output.WriteLine(input.Name + ",");
output.WriteLine(i.ToString() + ")");
output.Unindent();
output.WriteLine();
}
}
WritePropertyMapping(effect, output);
if (HasStatics(effect))
{
output.WriteLine("IFACEMETHODIMP " + effect.ClassName + "Factory::ActivateInstance(IInspectable** instance)");
output.WriteLine("{");
output.Indent();
output.WriteLine("return ExceptionBoundary([&]");
output.WriteLine("{");
output.Indent();
output.WriteLine("auto effect = Make<" + effect.ClassName + ">();");
output.WriteLine("CheckMakeResult(effect);");
output.WriteLine();
output.WriteLine("ThrowIfFailed(effect.CopyTo(instance));");
output.Unindent();
output.WriteLine("});");
output.Unindent();
output.WriteLine("}");
output.WriteLine();
if (!string.IsNullOrEmpty(effect.Overrides.IsSupportedCheck))
{
output.WriteLine("IFACEMETHODIMP " + effect.ClassName + "Factory::get_IsSupported(_Out_ boolean* result)");
output.WriteLine("{");
output.Indent();
output.WriteLine("return ExceptionBoundary([&]");
output.WriteLine("{");
output.Indent();
output.WriteLine("CheckInPointer(result);");
output.WriteLine("*result = SharedDeviceState::GetInstance()->Is" + effect.Overrides.IsSupportedCheck + "Supported();");
output.Unindent();
output.WriteLine("});");
output.Unindent();
output.WriteLine("}");
output.WriteLine();
}
output.WriteLine("ActivatableClassWithFactory(" + effect.ClassName + ", " + effect.ClassName + "Factory);");
}
else
{
output.WriteLine("ActivatableClassWithFactory(" + effect.ClassName + ", ::SimpleAgileActivationFactory<" + effect.ClassName + ">);");
}
output.Unindent();
output.WriteLine("}}}}}");
EndVersionConditional(effect, output);
}