Я работаю над объектом класса для своего приложения 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_
в заголовке SwapChain
.
Вместо того, чтобы писать мои объекты свои собственные функции createImage
и createImageView
... Я решил сделать Image
как отдельный объект класса. Я уже сделал это со многими несколькими объектами Vulkan, следуя аналогичному шаблону интерфейса для всех моих классов. Когда один объект класса Vulkan содержит другой вместо хранения raw
типов Vulkan, теперь они хранят тип std::shared_ptr<class T>
или std::vector<std::shared_ptr<class T>>
.
Теперь вернемся к моему SwapChain
классу. Его член images_
больше не: std::vector<VkImage>
, теперь это std::vector<std::shared_ptr<Image>>
, где 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()...
Как мне получить соответствующий тип, который vkGetSwapChainImagesKHR()
требует для своего последнего параметра?