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