/// <summary> /// Presents a texture on the queue. /// If the queue is empty, then no texture is presented. /// </summary> /// <param name="swapBuffersCallback">Callback method to call when a new texture should be presented on the screen</param> public void Present(Action swapBuffersCallback) { _context.AdvanceSequence(); if (_frameQueue.TryDequeue(out PresentationTexture pt)) { pt.AcquireCallback(_context, pt.UserObj); Texture texture = pt.Cache.FindOrCreateTexture(null, TextureSearchFlags.WithUpscale, pt.Info, 0, null, pt.Range); texture.SynchronizeMemory(); _context.Renderer.Window.Present(texture.HostTexture, pt.Crop, swapBuffersCallback); pt.ReleaseCallback(pt.UserObj); } }
/// <summary> /// Presents a texture on the queue. /// If the queue is empty, then no texture is presented. /// </summary> /// <param name="swapBuffersCallback">Callback method to call when a new texture should be presented on the screen</param> public void Present(Action swapBuffersCallback) { _context.AdvanceSequence(); if (_frameQueue.TryDequeue(out PresentationTexture pt)) { Texture texture = _context.Methods.TextureManager.FindOrCreateTexture(pt.Info); texture.SynchronizeMemory(); _context.Renderer.Window.Present(texture.HostTexture, pt.Crop); swapBuffersCallback(); pt.Callback(pt.UserObj); } }
/// <summary> /// Presents a texture on the queue. /// If the queue is empty, then no texture is presented. /// </summary> /// <param name="swapBuffersCallback">Callback method to call when a new texture should be presented on the screen</param> public void Present(Action <object> swapBuffersCallback) { _context.AdvanceSequence(); if (_frameQueue.TryDequeue(out PresentationTexture pt)) { pt.AcquireCallback(_context, pt.UserObj); Texture texture = pt.Cache.FindOrCreateTexture(null, TextureSearchFlags.WithUpscale, pt.Info, 0, null, pt.Range); texture.SynchronizeMemory(); ImageCrop crop = pt.Crop; if (texture.Info.Width > pt.Info.Width || texture.Info.Height > pt.Info.Height) { int top = crop.Top; int bottom = crop.Bottom; int left = crop.Left; int right = crop.Right; if (top == 0 && bottom == 0) { bottom = Math.Min(texture.Info.Height, pt.Info.Height); } if (left == 0 && right == 0) { right = Math.Min(texture.Info.Width, pt.Info.Width); } crop = new ImageCrop(left, right, top, bottom, crop.FlipX, crop.FlipY, crop.IsStretched, crop.AspectRatioX, crop.AspectRatioY); } _context.Renderer.Window.Present(texture.HostTexture, crop, swapBuffersCallback); pt.ReleaseCallback(pt.UserObj); } }