internal static void Preprocess(MyStringId material, MyStringId pass, MyVertexLayoutInfo vertexLayout, out string vsSource, out string psSource) { ProfilerShort.Begin("MyShaders.MaterialPreprocess"); Debug.Assert(m_vertexTemplateBase != null); Debug.Assert(m_pixelTemplateBase != null); PrefetchMaterialSources(material); PrefetchPassSources(pass); StringBuilder source = new StringBuilder(); // vertex shader source.Append(m_vertexTemplateBase); source.Replace("__VERTEXINPUT_DECLARATIONS__", vertexLayout.SourceDeclarations); source.Replace("__VERTEXINPUT_TRANSFER__", vertexLayout.SourceDataMove); source.Replace("__MATERIAL_DECLARATIONS__", MaterialSources[material].Declarations); source.Replace("__MATERIAL_VERTEXPROGRAM__", MaterialSources[material].VertexShaderSource); source.AppendLine(); source.AppendLine(MaterialPassSources[pass].VertexStageTemplate); vsSource = source.ToString(); source.Clear(); // pixel shader source.Append(m_pixelTemplateBase); source.Replace("__MATERIAL_DECLARATIONS__", MaterialSources[material].Declarations); source.Replace("__MATERIAL_PIXELPROGRAM__", MaterialSources[material].PixelShaderSource); source.AppendLine(); source.AppendLine(MaterialPassSources[pass].PixelStageTemplate); psSource = source.ToString(); ProfilerShort.End(); }