public override void Issue(DeviceManager manager) { manager.Device.SetRenderTarget(RenderTarget); base.Issue(manager); }
private IEnumerator <object> PreloadShadersAsyncImpl(RenderCoordinator coordinator, DeviceManager dm, IndexBuffer tempIb, List <Material> materials, Action <float> onProgress, int speed) { var sw = Stopwatch.StartNew(); var wfns = new Task.WaitForNextStep(); for (int i = 0; i < materials.Count; i++) { var m = materials[i]; if (onProgress != null) { onProgress(i / (float)materials.Count); } coordinator.BeforeIssue(() => m.Preload(coordinator, dm, tempIb)); if ((i % speed) == 0) { yield return(wfns); } } onProgress(1f); coordinator.DisposeResource(tempIb); var elapsed = sw.Elapsed.TotalMilliseconds; Debug.WriteLine($"Async shader preload took {elapsed:000.00}ms"); }
// This is where you send commands to the video card to render your batch. public virtual void Issue(DeviceManager manager) { Container = null; }
public override void Issue(DeviceManager manager) { if (IsCombined) { throw new InvalidOperationException("Batch was combined into another batch"); } if (_DrawCalls.Count == 0) { return; } if (_Prepared == false) { throw new InvalidOperationException("Not prepared"); } if (_BufferGenerator == null) { throw new InvalidOperationException("Already issued"); } var device = manager.Device; IHardwareBuffer previousHardwareBuffer = null; // if (RenderTrace.EnableTracing) // RenderTrace.ImmediateMarker("BitmapBatch.Issue(layer={0}, count={1})", Layer, _DrawCalls.Count); using (manager.ApplyMaterial(Material)) { TextureSet currentTexture = new TextureSet(); var paramSize = manager.CurrentParameters.BitmapTextureSize; var paramHalfTexel = manager.CurrentParameters.HalfTexel; foreach (var nb in _NativeBatches) { if (nb.TextureSet != currentTexture) { currentTexture = nb.TextureSet; var tex1 = currentTexture.Texture1; device.Textures[0] = tex1; device.Textures[1] = currentTexture.Texture2; device.SamplerStates[0] = SamplerState; device.SamplerStates[1] = SamplerState2; var vSize = new Vector2(tex1.Width, tex1.Height); paramSize.SetValue(vSize); #if !SDL2 // This is only ever used by Blur, which is never used -flibit paramHalfTexel.SetValue(new Vector2(1.0f / vSize.X, 1.0f / vSize.Y) * 0.5f); #endif manager.CurrentMaterial.Flush(); } if (UseZBuffer) { var dss = device.DepthStencilState; if (dss.DepthBufferEnable == false) { throw new InvalidOperationException("UseZBuffer set to true but depth buffer is disabled"); } } var swb = nb.SoftwareBuffer; var hwb = swb.HardwareBuffer; if (previousHardwareBuffer != hwb) { if (previousHardwareBuffer != null) { previousHardwareBuffer.SetInactive(device); } hwb.SetActive(device); previousHardwareBuffer = hwb; } #if PSM // MonoGame and PSM are both retarded. device.ApplyState(false); device.Textures.SetTextures(device); device.SamplerStates.SetSamplers(device); device._graphics.DrawArrays( Sce.PlayStation.Core.Graphics.DrawMode.Triangles, nb.IndexOffset, (nb.VertexCount / 4) * 6 ); #else device.DrawIndexedPrimitives( PrimitiveType.TriangleList, 0, swb.HardwareVertexOffset + nb.LocalVertexOffset, nb.VertexCount, swb.HardwareIndexOffset + nb.LocalIndexOffset, nb.VertexCount / 2 ); #endif } if (previousHardwareBuffer != null) { previousHardwareBuffer.SetInactive(device); } } _BufferGenerator = null; base.Issue(manager); }
public virtual void End(DeviceManager deviceManager) { }
public virtual void Begin(DeviceManager deviceManager) { }
public override void End(DeviceManager deviceManager) { }
public override void Begin(DeviceManager deviceManager) { }