public static void Set(DeviceManager deviceManager, Material material, ref MaterialParameterValues parameters) { if (deviceManager.CurrentMaterial != material) { Set_Slow(deviceManager, material, ref parameters); } else { material.Flush(deviceManager, ref parameters); } }
public static void Set(DeviceManager deviceManager, Material material) { try { if (deviceManager.CurrentMaterial != material) { Set_Slow(deviceManager, material); } else { material.Flush(deviceManager); } } catch (Exception exc) { Debug.WriteLine($"Exception setting material '{material.Name}', technique: '{material.Effect?.CurrentTechnique?.Name ?? material.Effect?.Name}' {exc}"); throw; } }
public ActiveMaterial(DeviceManager deviceManager, Material material) { DeviceManager = deviceManager; Material = material; if (deviceManager.CurrentMaterial != material) { if (deviceManager.CurrentMaterial != null) { deviceManager.CurrentMaterial.End(deviceManager); } deviceManager.CurrentMaterial = material; if (material != null) { material.Begin(deviceManager); } } else { material.Flush(); } }
public override void Issue(DeviceManager manager) { manager.BatchGroupStack.Push(this); base.Issue(manager); // HACK: If the user set a material on us explicitly, apply our parameters to it if (Material != null) { Material.Flush(manager, ref MaterialParameters); } if (OcclusionQuery != null) { OcclusionQuery.Begin(); } bool pop = false; if (ViewTransform.HasValue || ViewTransformModifier != null) { if (MaterialSet == null) { throw new NullReferenceException("MaterialSet must be set if ViewTransform or ViewTransformModifier are set"); } var vt = ViewTransform ?? MaterialSet.ViewTransform; if (ViewTransformModifier != null) { ViewTransformModifier(ref vt, _UserData); } // FIXME: We shouldn't need force: true MaterialSet.PushViewTransform(in vt, force: true); pop = true; } if (_Before != null) { _Before(manager, _UserData); } try { // manager.Device.SetStringMarkerEXT(this.ToString()); using (var b = _DrawCalls.GetBuffer(false)) { for (int i = 0; i < b.Count; i++) { if (b[i] != null) { b[i].IssueAndWrapExceptions(manager); } } } } finally { if (_After != null) { _After(manager, _UserData); } if (OcclusionQuery != null) { OcclusionQuery.End(); } if (pop) { MaterialSet.PopViewTransform(force: true); } manager.BatchGroupStack.Pop(); } }
public override void Flush() { BaseMaterial.Flush(); base.Flush(); }