static void GenerateCPP(List<Setting> settings, string outputName, string outputPath,
List<Type> enumTypes)
{
List<string> lines = new List<string>();
lines.Add("#include \"PCH.h\"");
lines.Add("#include \"" + outputName + ".h\"");
lines.Add("");
lines.Add("using namespace SampleFramework11;");
lines.Add("");
WriteEnumLabels(lines, enumTypes);
lines.Add("namespace " + outputName);
lines.Add("{");
uint numCBSettings = 0;
foreach(Setting setting in settings)
{
setting.WriteDefinition(lines);
if(setting.UseAsShaderConstant)
++numCBSettings;
}
if(numCBSettings > 0)
{
lines.Add("");
lines.Add(string.Format(" ConstantBuffer<{0}CBuffer> CBuffer;", outputName));
}
lines.Add("");
lines.Add(" void Initialize(ID3D11Device* device)");
lines.Add(" {");
lines.Add(" TwBar* tweakBar = Settings.TweakBar();");
lines.Add("");
foreach(Setting setting in settings)
setting.WriteInitialization(lines);
if(numCBSettings > 0)
lines.Add(" CBuffer.Initialize(device);");
lines.Add(" }");
lines.Add("");
lines.Add(" void UpdateCBuffer(ID3D11DeviceContext* context)");
lines.Add(" {");
foreach(Setting setting in settings)
setting.WriteCBufferUpdate(lines);
if(numCBSettings > 0)
{
lines.Add("");
lines.Add(" CBuffer.ApplyChanges(context);");
lines.Add(" CBuffer.SetVS(context, 7);");
lines.Add(" CBuffer.SetHS(context, 7);");
lines.Add(" CBuffer.SetDS(context, 7);");
lines.Add(" CBuffer.SetGS(context, 7);");
lines.Add(" CBuffer.SetPS(context, 7);");
lines.Add(" CBuffer.SetCS(context, 7);");
}
lines.Add(" }");
lines.Add("}");
WriteIfChanged(lines, outputPath);
}