Flush() public method

public Flush ( ) : void
return void
Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 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;
     }
 }
Beispiel #3
0
            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();
                }
            }
Beispiel #4
0
        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();
            }
        }
Beispiel #5
0
 public override void Flush()
 {
     BaseMaterial.Flush();
     base.Flush();
 }