Beispiel #1
0
        public VulkanRenderTarget(VulkanPlatformInterface vulkanPlatformInterface, IVulkanPlatformSurface vulkanPlatformSurface)
        {
            _surface = vulkanPlatformInterface.CreateRenderTarget(vulkanPlatformSurface);
            _vulkanPlatformInterface = vulkanPlatformInterface;
            _vulkanPlatformSurface   = vulkanPlatformSurface;

            Initialize();
        }
Beispiel #2
0
 public VulkanSurfaceRenderingSession(VulkanDisplay display, VulkanDevice device,
                                      VulkanSurfaceRenderTarget renderTarget, float scaling)
 {
     Display       = display;
     _device       = device;
     _renderTarget = renderTarget;
     Scaling       = scaling;
     Begin();
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }