代码之家  ›  专栏  ›  技术社区  ›  Francis Cugler

获取指向vkGetSwapChainImagesKHR对象向量的指针

  •  -1
  • Francis Cugler  · 技术社区  · 5 年前

    我正在为我的Vulkan应用程序处理一个类对象,现在正在修改 SwapChain DepthBuffer .

    SwapChain::create(/*...*/) 有人打电话给我 vkGetSwapChainImagesKHR() . 它被称为:

    vkGetSwapChainImagesKHR(*device_, swapChain_, &imageCount_, nullptr);
    images_.resize(imageCount);
    vkGetSwapChainImagesKHR(*device_, swapChain_, &imageCount, images_.data());
    

    在哪里? images_ 声明为 std::vector<VkImage> images_ 交换链 的标题。


    createImage createImageView 功能。。。我决定 Image raw Vulkan类型,它们现在存储 std::shared_ptr<class T> std::vector<std::shared_ptr<class T>> 类型。


    交换链 图像_ 不再是: std::vector<VkImage> 它现在是一个 std::vector<std::shared_ptr<Image>> 图像 是一个围绕 VkImage 具有创建和清理Vulkan资源所需的所有功能。


    至于我的问题:我现在怎么打电话 vkGetSwapChainImagesKHR() ?

    // this is straight forward...
    std::vector<VkImage> images_;
    vkGetSwapChainImagesKHR(*device_, swapChain_, &imageCount, images_.data()); 
    
    // this is where I'm stuck...
    std::vector<std::shared_ptr<Image>> images_;
    vkGetSwapChainImagesKHR(*device_, swapChain_, &imageCount_, ??? ); // &images_.data(), images_.get()...
    

    如何获得合适的类型 需要它的最后一个参数?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Nicol Bolas    5 年前

    VkImage s并将其传递给函数。但是你的代码会“工作”,但不会 事实上

    因为你的 Image 类型无法存储它们。看,交换链图像是特殊的;它们不是 拥有 通过你的申请。这就是为什么你不通过通常的 vkCreateImage 打电话。这也是你 不能 像往常一样摧毁他们 vkDestroyImage 打电话。

    图像 vkDestroyImage公司 在图像上。但是你不允许对swapchain图像这样做,因为你不拥有它们。

    图像 同时接受已存在的 VkImage公司 并在 图像 这样它的析构函数就不会破坏图像。

    所以在得到 VkImage公司 vector 你的堆分配 图像 对象,使用前面提到的专用构造函数。