VulkanSurfaceRenderingSession.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using Avalonia;
  3. using Ryujinx.Ava.Ui.Vulkan.Surfaces;
  4. using Silk.NET.Vulkan;
  5. namespace Ryujinx.Ava.Ui.Vulkan
  6. {
  7. internal class VulkanSurfaceRenderingSession : IDisposable
  8. {
  9. private readonly VulkanDevice _device;
  10. private readonly VulkanSurfaceRenderTarget _renderTarget;
  11. public VulkanSurfaceRenderingSession(VulkanDisplay display, VulkanDevice device,
  12. VulkanSurfaceRenderTarget renderTarget, float scaling)
  13. {
  14. Display = display;
  15. _device = device;
  16. _renderTarget = renderTarget;
  17. Scaling = scaling;
  18. Begin();
  19. }
  20. public VulkanDisplay Display { get; }
  21. public PixelSize Size => _renderTarget.Size;
  22. public Vk Api => _device.Api;
  23. public float Scaling { get; }
  24. private void Begin()
  25. {
  26. if (!Display.EnsureSwapchainAvailable())
  27. {
  28. _renderTarget.RecreateImage();
  29. }
  30. }
  31. public void Dispose()
  32. {
  33. _renderTarget.EndDraw();
  34. }
  35. }
  36. }