Unity3D2Babylon.SceneBuilder.GetShaderProgramSection C# (CSharp) Method

GetShaderProgramSection() private method

private GetShaderProgramSection ( string name, string program, BabylonProgramSection section ) : string
name string
program string
section BabylonProgramSection
return string
        private string GetShaderProgramSection(string name, string program, BabylonProgramSection section)
        {
            string result = String.Empty;
            string[] lines = program.Split('\n');
            int babylonIndexStart = -1, babylonIndexEnd = -1;
            int vertextIndexStart = -1, vertextIndexEnd = -1;
            int fragmentIndexStart = -1, fragmentIndexEnd = -1;
            for (int ii = 0; ii < lines.Length; ii++)
            {
                string line = lines[ii];
                if (babylonIndexStart < 0 && line.IndexOf("#ifdef BABYLON", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    babylonIndexStart = ii;
                }
                if (babylonIndexEnd < 0 && line.IndexOf("#endif //BABYLON-END", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    babylonIndexEnd = ii;
                }
                if (vertextIndexStart < 0 && line.IndexOf("#ifdef VERTEX", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    vertextIndexStart = ii;
                }
                if (vertextIndexEnd < 0 && line.IndexOf("#endif //VERTEX-END", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    vertextIndexEnd = ii;
                }
                if (fragmentIndexStart < 0 && line.IndexOf("#ifdef FRAGMENT", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    fragmentIndexStart = ii;
                }
                if (fragmentIndexEnd < 0 && line.IndexOf("#endif //FRAGMENT-END", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    fragmentIndexEnd = ii;
                }
            }
            // Note: All Babylon Shader Blocks Are Required
            if (babylonIndexStart >= 0 && babylonIndexEnd >= 0 && vertextIndexStart >= 0 && vertextIndexEnd >= 0 && fragmentIndexStart >= 0 && fragmentIndexEnd >= 0)
            {
                int lineStart = -1, lineEnd = -1;
                switch (section)
                {
                    case BabylonProgramSection.Babylon:
                        lineStart = babylonIndexStart;
                        lineEnd = babylonIndexEnd;
                        break;
                    case BabylonProgramSection.Vertex:
                        lineStart = vertextIndexStart;
                        lineEnd = vertextIndexEnd;
                        break;
                    case BabylonProgramSection.Fragment:
                        lineStart = fragmentIndexStart;
                        lineEnd = fragmentIndexEnd;
                        break;
                }
                if (lineStart >= 0 && lineEnd >= 0)
                {
                    lineStart++;
                    for (int xx = lineStart; xx < lineEnd; xx++)
                    {
                        string buffer = lines[xx];
                        buffer = buffer.TrimEnd('\n').TrimEnd('\r');
                        result += (buffer + "\r\n");
                    }
                }
                else
                {
                    Debug.LogError("Invalid Babylon Shader Block Lines: " + name);
                }
            }
            else
            {
                Debug.LogError("Invalid Babylon Shader Block Format: " + name);
            }
            return result;
        }