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;
}