Использование уникального дескриптора Vulkan в структуре приводит к ошибке «неявно удалено» - PullRequest
0 голосов
/ 11 июня 2019

У меня есть это в моем коде:

struct Buffer
        {
            vk::UniqueBuffer buffer;
            vk::UniqueDeviceMemory memory;
            unsigned int top{0};
        };

        struct Image
        {
            vk::UniqueImage textureImage;
            vk::UniqueDeviceMemory textureImageMemory;
        };

        struct Texture
        {
            Image image;
            vk::UniqueImageView imageView;
            vk::UniqueSampler sampler;
        };

        struct SwapChainFrame
        {
            vk::Image image;
            vk::UniqueImageView imageView;
            vk::UniqueFramebuffer frameBuffer;
            vk::UniqueCommandBuffer commandBuffer;
            Buffer uniformVpMatrix;
            vk::UniqueDescriptorSet descriptorSet;
        };

Хранение уникальных ручек в Vulkan работало хорошо, пока я не добавил изображения и текстуры. Теперь я получаю это:

   In file included from .../gpuVulkan.h:50:16: note: ‘GpuVulkan::Texture::Texture(const GpuVulkan::Texture&)’ is implicitly deleted because the default definition would be ill-formed:
             struct Texture
                    ^~~~~~~
    .../gpuVulkan.h:50:16: error: use of deleted function ‘GpuVulkan::Image::Image(const GpuVulkan::Image&)’
    .../gpuVulkan.h:44:16: note: ‘GpuVulkan::Image::Image(const GpuVulkan::Image&)’ is implicitly deleted because the default definition would be ill-formed:
             struct Image
                    ^~~~~
    .../gpuVulkan.h:44:16: error: use of deleted function ‘vk::UniqueHandle<Type, Dispatch>::UniqueHandle(const vk::UniqueHandle<Type, Dispatch>&) [with Type = vk::Image; Dispatch = vk::DispatchLoaderStatic]’
    In file included from .../gpuVulkan.h:1,
                     from .../src/gpuVulkan.cpp:5:
    /usr/include/vulkan/vulkan.hpp:392:5: note: declared here
         UniqueHandle( UniqueHandle const& ) = delete;
         ^~~~~~~~~~~~
    In file included from ...gpuVulkan.cpp:5:
    .../gpuVulkan.h:44:16: error: use of deleted function ‘vk::UniqueHandle<Type, Dispatch>::UniqueHandle(const vk::UniqueHandle<Type, Dispatch>&) [with Type = vk::DeviceMemory; Dispatch = vk::DispatchLoaderStatic]’
             struct Image

Есть идеи, что случилось? Buffer и SwapChainFrame работают хорошо. Похоже, о подобной проблеме сообщалось здесь , но я не уверен, что это та же проблема. Любая помощь приветствуется! Спасибо

1 Ответ

3 голосов
/ 11 июня 2019

Ваш класс Image не имеет конструктора копирования (потому что vk::UniqueImage не имеет конструктора копирования). Это означает, что Texture также не имеет конструктора копирования.

Другие классы также не имеют конструктора копирования, но это нормально, если вы не попытаетесь их скопировать. (В данном случае из комментариев, создав std::vector<Texture>.)

...