#ifndef DELETIONQUEUE_HPP #define DELETIONQUEUE_HPP #include #include #include #include #include "Constants.hpp" class DeletionQueue { private: // une queue par frame + une queue immédiate std::array>, MAX_FRAMES_IN_FLIGHT> m_frameQueues; std::deque> m_immediateQueue; public: // destruction différée - attendre MAX_FRAMES_IN_FLIGHT frames void push(uint32_t currentFrame, std::function&& func) { // on enfile dans la frame "opposée" pour attendre un cycle complet uint32_t targetFrame = (currentFrame + MAX_FRAMES_IN_FLIGHT - 1) % MAX_FRAMES_IN_FLIGHT; m_frameQueues[targetFrame].push_back(std::move(func)); } // destruction immédiate - device.waitIdle() doit avoir été appelé avant void pushImmediate(std::function&& func) { m_immediateQueue.push_back(std::move(func)); } // appelé au début de chaque frame - détruit les ressources de cette frame void flush(uint32_t frameIndex) { auto& queue = m_frameQueues[frameIndex]; while (!queue.empty()) { queue.front()(); queue.pop_front(); } } // appelé à la fermeture - détruit tout void flushAll() { // vider toutes les frame queues for (auto& queue : m_frameQueues) { while (!queue.empty()) { queue.front()(); queue.pop_front(); } } // vider la queue immédiate while (!m_immediateQueue.empty()) { m_immediateQueue.front()(); m_immediateQueue.pop_front(); } } }; #endif