view src/semicongine/vulkan/framebuffer.nim @ 110:3bbc94a83404

add: multiple pipelines per subpass
author Sam <sam@basx.dev>
date Thu, 30 Mar 2023 00:00:54 +0700
parents 9c3e3dcb0328
children 5871acc2977e
line wrap: on
line source

import ./api
import ./device
import ./utils
import ./image
import ./renderpass

import ../math

type
  Framebuffer* = object
    device*: Device
    vk*: VkFramebuffer
    dimension*: Vec2I

proc createFramebuffer*(device: Device, renderPass: RenderPass, attachments: openArray[ImageView], dimension: Vec2I): Framebuffer =
  assert device.vk.valid
  assert renderpass.vk.valid

  result.device = device
  result.dimension = dimension

  var theattachments: seq[VkImageView]
  for a in attachments:
    assert a.vk.valid
    theattachments.add a.vk
  var framebufferInfo = VkFramebufferCreateInfo(
    sType: VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
    renderPass: renderPass.vk,
    attachmentCount: uint32(theattachments.len),
    pAttachments: theattachments.toCPointer,
    width: dimension[0],
    height: dimension[1],
    layers: 1,
  )
  checkVkResult device.vk.vkCreateFramebuffer(addr(framebufferInfo), nil, addr(result.vk))

proc destroy*(framebuffer: var Framebuffer) =
  assert framebuffer.device.vk.valid
  assert framebuffer.vk.valid
  framebuffer.device.vk.vkDestroyFramebuffer(framebuffer.vk, nil)
  framebuffer.vk.reset