Ejemplo n.º 1
0
        // 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);
            }
        }