2525#include " core/hpp_image.h"
2626#include " core/hpp_image_view.h"
2727#include " core/image.h"
28- #include < vulkan/vulkan_hash.hpp> // provides std::hash specializations for Vulkan handle types, used in std::unordered_map and std::unordered_set
2928
3029namespace vkb
3130{
@@ -233,24 +232,21 @@ inline RenderTarget<bindingType>::RenderTarget(std::vector<ImageType> &&images)
233232template <vkb::BindingType bindingType>
234233inline void RenderTarget<bindingType>::init(std::vector<vkb::core::HPPImage> &&images_)
235234{
235+ assert (!images_.empty ());
236+
236237 device = &images_.back ().get_device ();
237238 images = std::move (images_);
238239
239240 // Returns the image extent as a vk::Extent2D structure from a vk::Extent3D
240241 auto get_image_extent = [](const vkb::core::HPPImage &image) { return vk::Extent2D{image.get_extent ().width , image.get_extent ().height }; };
241242
242- // Constructs a set of unique image extents given a vector of images
243- std::unordered_set<vk::Extent2D> unique_extent;
244- std::ranges::transform (images, std::inserter (unique_extent, unique_extent.end ()), get_image_extent);
245-
246- // Allow only one extent size for a render target
247- if (unique_extent.size () != 1 )
243+ extent = get_image_extent (images.front ());
244+ if (std::ranges::find_if (images,
245+ [extent = this ->extent , &get_image_extent](const vkb::core::HPPImage &image) { return get_image_extent (image) != extent; }) != images.end ())
248246 {
249247 throw vkb::common::HPPVulkanException{vk::Result::eErrorInitializationFailed, " Extent size is not unique" };
250248 }
251249
252- extent = *unique_extent.begin ();
253-
254250 for (auto &image : images)
255251 {
256252 if (image.get_type () != vk::ImageType::e2D)
@@ -282,6 +278,8 @@ inline RenderTarget<bindingType>::RenderTarget(std::vector<ImageViewType> &&imag
282278template <vkb::BindingType bindingType>
283279inline void RenderTarget<bindingType>::init(std::vector<vkb::core::HPPImageView> &&image_views)
284280{
281+ assert (!image_views.empty ());
282+
285283 device = &image_views.back ().get_image ().get_device ();
286284 views = std::move (image_views);
287285
@@ -292,15 +290,13 @@ inline void RenderTarget<bindingType>::init(std::vector<vkb::core::HPPImageView>
292290 return vk::Extent2D{mip0_extent.width >> mip_level, mip0_extent.height >> mip_level};
293291 };
294292
295- // Constructs a set of unique image extents given a vector of image views;
296293 // allow only one extent size for a render target
297- std::unordered_set<vk::Extent2D> unique_extent ;
298- std::ranges::transform (views, std::inserter (unique_extent, unique_extent. end ()), get_view_extent);
299- if (unique_extent. size ( ) != 1 )
294+ extent = get_view_extent (views. front ()) ;
295+ if ( std::ranges::find_if (views,
296+ [extent = this -> extent , &get_view_extent]( const vkb::core::HPPImageView &view) { return get_view_extent (view ) != extent; }) != views. end () )
300297 {
301298 throw vkb::common::HPPVulkanException{vk::Result::eErrorInitializationFailed, " Extent size is not unique" };
302299 }
303- extent = *unique_extent.begin ();
304300
305301 for (auto &view : views)
306302 {
0 commit comments