Как реализовать правило трех/пяти/ноля с массивами производных объектов?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать правило трех/пяти/ноля с массивами производных объектов?

Сообщение Anonymous »


Я пытаюсь создать массив производных объектов, но мое приложение вызывает несколько ошибок проверки при закрытии программы:

vkDestroyDescriptorPool(): неверный объект VkDescriptorPool 0x625f640000000058 Не удалось найти объект VkDescriptorPool 0x625f640000000058. Не удалось найти объект VkDescriptorPool 0x625f640000000058. Эти три строки также возвращаются для каждого производного объекта для их переменных vkDescriptorSetLayout и вызова функции vkDestroyDescriptorSetLayout.

У меня была похожая проблема при использовании VkShaderModule с объектом std::vector, но мне удалось обойти эту проблему, используя базовый массив моего code>Класс шейдера:

vk::Shader planeShaders[] = { {"plane.vert", VK_SHADER_STAGE_VERTEX_BIT}, {"plane.frag", VK_SHADER_STAGE_FRAGMENT_BIT} }; К сожалению, это решение не работает с производными объектами моего объекта Descriptor:

vk::Descriptor descriptors[] = { vk::UBO{ униформа, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_COMPUTE_BIT }, vk::Sampler{ planks.mipLevels }, vk::Texture{ "textures/planks.png" } }; Если объекты определены в пространстве имен vk как:

struct Descriptor { VkDescriptorSetLayout SetLayout; std::vector Наборы; Дескриптор (тип VkDescriptorType, флаг VkShaderStageFlags, uint32_tbindingCount = 1) { /* создание и размещение дескрипторов VkDescriptorSetLayout и VkDescriptorPool */ } ~Дескриптор() { vkDestroyDescriptorPool (GPU::device, Pool, nullptr); vkDestroyDescriptorSetLayout (GPU::device, SetLayout, nullptr); } защищено: Пул VkDescriptorPool; } struct Sampler: Дескриптор { Сэмплер VkSampler; Sampler(uint32_t mipLevels = 1, VkShaderStageFlagBitsshaderFlags = VK_SHADER_STAGE_FRAGMENT_BIT): Дескриптор(VK_DESCRIPTOR_TYPE_SAMPLER,shaderFlags) { /* конструкция производного объекта */ } ~Сэмплер() { vkDestroySampler(GPU::device, sampler, nullptr); } }; Я ожидал, что унаследованные переменные из объекта Descriptor будут равны определенным переменным-членам производных классов, хранящимся в массиве vk::Descriptor descriptors[] , но, похоже, это не так. Переменная-член VkSampler не вызывает ошибку уровня проверки при вызове vkDestroySampler, равно как и VkBuffer и VkDeviceMember переменные объекта UBO, когда деструктор UBO вызывает функции vkDestroyBuffer и vkFreeMemory.

Я подозреваю, что это связано с наследованием объекта Descriptor объектами UBO, Sampler и Texture< /код> объекты. Я думаю, это можно исправить, реализовав правило трех/пяти/нуля, но я понятия не имею, как решение, основанное на этих правилах, будет реализовано для производных объектов, хранящихся в массиве их общего наследника.

Это случай правила трех/пяти/ноля или здесь происходит нечто большее? Как бы я реализовал эти правила для описанного выше или аналогичного сценария, где унаследованные переменные не «равны» переменным, определенным в производных объектах?

Изменить:

Этот вопрос не касается нарезки объектов.

VkDescriptorPool и VkDescriptorSetLayout определены в vk::Descriptor.

vk::Descriptor наследуется от vk::Sampler, vk::Texture и vk::UBO< /код>.

Если бы это была проблема с нарезкой, то VkDescriptorPool и VkDescriptorSetLayout не были бы вырезаны из vk::Sampler, vk: :Texture и vk::UBO.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Алгоритм оценки всех композиций трех двумерных функций на подмножествах из пяти различных точек данных?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Виртуальный деструктор базового класса – правило пяти?
    Гость » » в форуме C++
    0 Ответы
    52 Просмотры
    Последнее сообщение Гость
  • Нужно ли мне уважать правило пяти здесь?
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Полярные значения: заполните нуль, используя «правило трех» на основе отфильтрованного набора.
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Что такое правило трех?
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»