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)); } } }
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); } }
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; }