| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- using System;
- using Avalonia;
- using Ryujinx.Ava.Ui.Vulkan.Surfaces;
- using Silk.NET.Vulkan;
- namespace Ryujinx.Ava.Ui.Vulkan
- {
- internal class VulkanSurfaceRenderingSession : IDisposable
- {
- private readonly VulkanDevice _device;
- private readonly VulkanSurfaceRenderTarget _renderTarget;
- private VulkanCommandBufferPool.VulkanCommandBuffer _commandBuffer;
- public VulkanSurfaceRenderingSession(VulkanDisplay display, VulkanDevice device,
- VulkanSurfaceRenderTarget renderTarget, float scaling)
- {
- Display = display;
- _device = device;
- _renderTarget = renderTarget;
- Scaling = scaling;
- Begin();
- }
- public VulkanDisplay Display { get; }
- public PixelSize Size => _renderTarget.Size;
- public Vk Api => _device.Api;
- public float Scaling { get; }
- private void Begin()
- {
- if (!Display.EnsureSwapchainAvailable())
- {
- _renderTarget.Invalidate();
- }
- }
- public void Dispose()
- {
- _commandBuffer = Display.StartPresentation(_renderTarget);
- Display.BlitImageToCurrentImage(_renderTarget, _commandBuffer.InternalHandle);
- Display.EndPresentation(_commandBuffer);
- }
- }
- }
|