private void CreateFramebuffers()
        {
            this.swapChainFramebuffers = new VkFramebuffer[this.swapChainImageViews.Length];

            for (int i = 0; i < this.swapChainImageViews.Length; i++)
            {
                VkFramebufferCreateInfo framebufferInfo = new VkFramebufferCreateInfo();
                framebufferInfo.sType           = VkStructureType.VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
                framebufferInfo.renderPass      = renderPass;
                framebufferInfo.attachmentCount = 1;

                fixed(VkImageView *attachments = &swapChainImageViews[i])
                {
                    framebufferInfo.pAttachments = attachments;
                }

                framebufferInfo.width  = swapChainExtent.width;
                framebufferInfo.height = swapChainExtent.height;
                framebufferInfo.layers = 1;

                fixed(VkFramebuffer *swapChainFramebufferPtr = &this.swapChainFramebuffers[i])
                {
                    Helpers.CheckErrors(VulkanNative.vkCreateFramebuffer(device, &framebufferInfo, null, swapChainFramebufferPtr));
                }
            }
        }
Пример #2
0
        private void CreateFrameBuffers()
        {
            vkSwapChainFramebuffers = new VkFramebuffer[vkSwapChainImageViews.Length];

            for (int i = 0; i < vkSwapChainImageViews.Length; i++)
            {
                var attachments = stackalloc VkImageView[] { vkSwapChainImageViews[i] };

                var frameBufferInfo = new VkFramebufferCreateInfo()
                {
                    sType           = VkStructureType.VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
                    renderPass      = vkRenderPass,
                    attachmentCount = 1,
                    pAttachments    = attachments,
                    width           = vkSwapChainExtent.width,
                    height          = vkSwapChainExtent.height,
                    layers          = 1,
                };

                VkFramebuffer newFrameBuffer;
                var           result = VulkanNative.vkCreateFramebuffer(vkDevice, &frameBufferInfo, null, &newFrameBuffer);
                vkSwapChainFramebuffers[i] = newFrameBuffer;
                Helpers.CheckErrors(result);
            }
        }
Пример #3
0
        public unsafe Framebuffer(
            RenderPass renderPass,
            uint width, uint height,
            uint layers = 1
            )
        {
            _width      = width;
            _height     = height;
            _device     = renderPass.Device;
            _renderPass = renderPass;

            _images     = new List <Image>();
            _imageViews = new List <ImageView>();
            foreach (var attachment in renderPass.Attachments)
            {
                var img = new Image(
                    _device,
                    width, height,
                    attachment.Format,
                    attachment.ImageUsageFlags,
                    1
                    );
                _images.Add(img);
                _imageViews.Add(new ImageView(
                                    img,
                                    attachment.ImageAspectFlags
                                    ));
            }

            var attachments = new NativeList <VkImageView>();

            foreach (var view in _imageViews)
            {
                attachments.Add(view.Handle);
            }

            var framebufferCreateInfo = new VkFramebufferCreateInfo
            {
                sType           = VkStructureType.FramebufferCreateInfo,
                renderPass      = renderPass.Handle,
                attachmentCount = attachments.Count,
                pAttachments    = (VkImageView *)attachments.Data.ToPointer(),
                width           = width,
                height          = height,
                layers          = layers
            };

            VkFramebuffer framebuffer;

            if (VulkanNative.vkCreateFramebuffer(
                    _device.Handle,
                    &framebufferCreateInfo,
                    null,
                    &framebuffer
                    ) != VkResult.Success)
            {
                throw new Exception("failed to create framebuffer");
            }
            _handle = framebuffer;
        }