Upgrading pool pattern
This commit is contained in:
@@ -1,44 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <sophia/handles.hpp>
|
||||
#include <vector>
|
||||
|
||||
#include "device.hpp"
|
||||
#include "render_target.hpp"
|
||||
#include "resources/pools/pool.hpp"
|
||||
|
||||
namespace sophia {
|
||||
|
||||
class RenderTargetPool {
|
||||
public:
|
||||
RenderTargetPool(Device& device, vk::Format format);
|
||||
~RenderTargetPool();
|
||||
|
||||
RenderTargetPool(const RenderTargetPool&) = delete;
|
||||
RenderTargetPool& operator=(const RenderTargetPool&) = delete;
|
||||
|
||||
RenderTargetHandle create(u32 width, u32 height);
|
||||
RenderTarget& get(RenderTargetHandle handle);
|
||||
const RenderTarget& get(RenderTargetHandle handle) const;
|
||||
RenderTarget& get(RenderTargetHandle handle) { return pool.get(handle); }
|
||||
const RenderTarget& get(RenderTargetHandle handle) const {
|
||||
return pool.get(handle);
|
||||
}
|
||||
void release(RenderTargetHandle handle);
|
||||
|
||||
bool isAlive(RenderTargetHandle handle) const;
|
||||
bool isAlive(RenderTargetHandle handle) const { return pool.isAlive(handle); }
|
||||
|
||||
void applyPendingResizes();
|
||||
|
||||
private:
|
||||
struct Slot {
|
||||
std::unique_ptr<RenderTarget> target;
|
||||
u32 generation = 0;
|
||||
};
|
||||
|
||||
const Slot& validate(RenderTargetHandle handle) const;
|
||||
|
||||
Device& device;
|
||||
vk::Format format;
|
||||
|
||||
std::vector<Slot> slots;
|
||||
std::vector<u32> freeList;
|
||||
Pool<RenderTarget, RenderTargetHandle> pool{"RenderTarget"};
|
||||
};
|
||||
|
||||
} // namespace sophia
|
||||
|
||||
Reference in New Issue
Block a user