public VulkanRenderTarget(VulkanPlatformInterface vulkanPlatformInterface, IVulkanPlatformSurface vulkanPlatformSurface) { _surface = vulkanPlatformInterface.CreateRenderTarget(vulkanPlatformSurface); _vulkanPlatformInterface = vulkanPlatformInterface; _vulkanPlatformSurface = vulkanPlatformSurface; Initialize(); }
public VulkanSurfaceRenderingSession(VulkanDisplay display, VulkanDevice device, VulkanSurfaceRenderTarget renderTarget, float scaling) { Display = display; _device = device; _renderTarget = renderTarget; Scaling = scaling; Begin(); }
internal void BlitImageToCurrentImage(VulkanSurfaceRenderTarget renderTarget, CommandBuffer commandBuffer) { var image = renderTarget.GetImage(); VulkanMemoryHelper.TransitionLayout(_device, commandBuffer, image.InternalHandle.Value, (ImageLayout)image.CurrentLayout, AccessFlags.AccessNoneKhr, ImageLayout.TransferSrcOptimal, AccessFlags.AccessTransferReadBit, renderTarget.MipLevels); var srcBlitRegion = new ImageBlit { SrcOffsets = new ImageBlit.SrcOffsetsBuffer { Element0 = new Offset3D(0, 0, 0), Element1 = new Offset3D(renderTarget.Size.Width, renderTarget.Size.Height, 1), }, DstOffsets = new ImageBlit.DstOffsetsBuffer { Element0 = new Offset3D(0, 0, 0), Element1 = new Offset3D(Size.Width, Size.Height, 1), }, SrcSubresource = new ImageSubresourceLayers { AspectMask = ImageAspectFlags.ImageAspectColorBit, BaseArrayLayer = 0, LayerCount = 1, MipLevel = 0 }, DstSubresource = new ImageSubresourceLayers { AspectMask = ImageAspectFlags.ImageAspectColorBit, BaseArrayLayer = 0, LayerCount = 1, MipLevel = 0 } }; _device.Api.CmdBlitImage(commandBuffer, image.InternalHandle.Value, ImageLayout.TransferSrcOptimal, _swapchainImages[_nextImage], ImageLayout.TransferDstOptimal, 1, srcBlitRegion, Filter.Linear); VulkanMemoryHelper.TransitionLayout(_device, commandBuffer, image.InternalHandle.Value, ImageLayout.TransferSrcOptimal, AccessFlags.AccessTransferReadBit, (ImageLayout)image.CurrentLayout, AccessFlags.AccessNoneKhr, renderTarget.MipLevels); }
public VulkanSurfaceRenderTarget CreateRenderTarget(IVulkanPlatformSurface platformSurface) { var surface = VulkanSurface.CreateSurface(Instance, platformSurface); if (PhysicalDevice == null) { PhysicalDevice = VulkanPhysicalDevice.FindSuitablePhysicalDevice(Instance, surface, _options.PreferDiscreteGpu, _options.PreferredDevice); } var renderTarget = new VulkanSurfaceRenderTarget(this, surface); if (MainSurface == null && surface != null) { MainSurface = renderTarget; } return(renderTarget); }