} // Update() #endregion #region Render /*unused, always specify a technique name * /// <summary> * /// Render * /// </summary> * /// <param name="renderDelegate">Render delegate</param> * public void Render(BaseGame.RenderDelegate renderDelegate) * { * SetParameters(); * * //not supported or bug, no multiple techniques possible yet: * //effect.Technique = "SpecularPerPixel"; * * // Start shader * effect.Begin(EffectStateOptions.Default); * foreach (EffectPass pass in effect.CurrentTechnique.Passes) * { * // Render each pass * pass.Begin(); * renderDelegate(); * pass.End(); * } // foreach (pass) * * // End shader * effect.End(); * } // Render(renderDelegate) */ /*unused, always specify a technique name * /// <summary> * /// Render * /// </summary> * /// <param name="setMat">Set matrix</param> * /// <param name="renderDelegate">Render delegate</param> * public void Render(Material setMat, * BaseGame.RenderDelegate renderDelegate) * { * SetParameters(setMat); * * //not supported or bug, no multiple techniques possible yet: * //effect.Technique = "SpecularPerPixel"; * * // Start shader * effect.Begin(EffectStateOptions.Default); * foreach (EffectPass pass in effect.CurrentTechnique.Passes) * { * // Render each pass * pass.Begin(); * renderDelegate(); * pass.End(); * } // foreach (pass) * * // End shader * effect.End(); * } // Render(setMat, renderDelegate) */ /// <summary> /// Render /// </summary> /// <param name="setMat">Set matrix</param> /// <param name="passName">Pass name</param> /// <param name="renderDelegate">Render delegate</param> public void Render(Material setMat, string techniqueName, BaseGame.RenderDelegate renderDelegate) { SetParameters(setMat); // Can we do the requested technique? // For graphic cards not supporting ps2.0, fall back to ps1.1 if (BaseGame.CanUsePS20 == false && techniqueName.EndsWith("20")) { // Use same technique without the 20 ending! techniqueName = techniqueName.Substring(0, techniqueName.Length - 2); } // Start shader effect.CurrentTechnique = effect.Techniques[techniqueName]; effect.Begin(SaveStateMode.None); // Render all passes (usually just one) //foreach (EffectPass pass in effect.CurrentTechnique.Passes) for (int num = 0; num < effect.CurrentTechnique.Passes.Count; num++) { EffectPass pass = effect.CurrentTechnique.Passes[num]; pass.Begin(); renderDelegate(); pass.End(); } // foreach (pass) // End shader effect.End(); } // Render(setMat, passName, renderDelegate)
} // Render(passName, renderDelegate) #endregion #region Render single pass shader /// <summary> /// Render single pass shader /// </summary> /// <param name="renderDelegate">Render delegate</param> public void RenderSinglePassShader( BaseGame.RenderDelegate renderDelegate) { // Start effect (current technique should be set) effect.Begin(SaveStateMode.None); // Start first pass effect.CurrentTechnique.Passes[0].Begin(); // Render renderDelegate(); // End pass and shader effect.CurrentTechnique.Passes[0].End(); effect.End(); } // RenderSinglePassShader(renderDelegate)
} // Render(setMat, passName, renderDelegate) /// <summary> /// Render /// </summary> /// <param name="techniqueName">Technique name</param> /// <param name="renderDelegate">Render delegate</param> public void Render(string techniqueName, BaseGame.RenderDelegate renderDelegate) { Render(null, techniqueName, renderDelegate); } // Render(passName, renderDelegate)