Buffer.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "graphics/Buffer.h"
  2. #include <vulkan/vulkan.h>
  3. #include "vk_mem_alloc.h"
  4. #include "graphics/Volatile.h"
  5. namespace love {
  6. namespace graphics {
  7. namespace vulkan {
  8. class Buffer : public love::graphics::Buffer, public Volatile {
  9. public:
  10. Buffer(VmaAllocator allocator, love::graphics::Graphics* gfx, const Settings& settings, const std::vector<DataDeclaration>& format, const void* data, size_t size, size_t arraylength);
  11. virtual ~Buffer();
  12. virtual bool loadVolatile() override;
  13. virtual void unloadVolatile() override;
  14. void* map(MapType map, size_t offset, size_t size) override;
  15. void unmap(size_t usedoffset, size_t usedsize) override;
  16. bool fill(size_t offset, size_t size, const void* data) override;
  17. void copyTo(love::graphics::Buffer* dest, size_t sourceoffset, size_t destoffset, size_t size) override;
  18. ptrdiff_t getHandle() const override {
  19. return (ptrdiff_t) buffer; // todo ?
  20. }
  21. ptrdiff_t getTexelBufferHandle() const override {
  22. throw love::Exception("unimplemented Buffer::getTexelBufferHandle");
  23. return (ptrdiff_t) nullptr; // todo ?
  24. }
  25. private:
  26. // todo use a staging buffer for improved performance
  27. VkBuffer buffer = VK_NULL_HANDLE;
  28. VmaAllocator allocator;
  29. VmaAllocation allocation;
  30. VmaAllocationInfo allocInfo;
  31. BufferUsageFlags usageFlags;
  32. };
  33. }
  34. }
  35. }