// Custom Interpolator descriptors indicate how and where code should be generated. // At this entry point, we can process the descriptors on a provided pass and generate // the corresponding splices. internal void ProcessDescriptors(IEnumerable <Descriptor> descriptors) { if (CustomInterpolatorUtils.generatorSkipFlag) { return; } ShaderStringBuilder builder = new ShaderStringBuilder(); foreach (var desc in descriptors) { builder.Clear(); if (!desc.isValid) { continue; } if (desc.hasPreprocessor) { builder.AppendLine($"#ifdef {desc.preprocessor}"); } if (desc.isBlock) { GenCopyBlock(desc.dst, desc.src, builder); } else if (desc.isMacroBlock) { GenCopyMacroBlock(desc.src, desc.dst, builder); } else if (desc.isFunc) { GenCopyFunc(desc.name, desc.dst, desc.src, builder, desc.define); } else if (desc.isStruct) { GenStruct(desc.name, builder, desc.define); } else if (desc.isDefine) { builder.AppendLine($"#define {desc.define}"); } if (desc.hasPreprocessor) { builder.AppendLine("#endif"); } if (!spliceCommandBuffer.ContainsKey(desc.splice)) { spliceCommandBuffer.Add(desc.splice, new ShaderStringBuilder()); } spliceCommandBuffer[desc.splice].Concat(builder); } }