Files
love/src/modules/graphics/vulkan/Texture.h
T
niki 0ae81091d1 vulkan: use dynamic rendering
This vulkan 1.3 feature will make the code simpler when dealing
with off screen render targets (i.e. löve canvases)
2022-07-14 18:01:46 +02:00

58 lines
1.9 KiB
C++

#ifndef LOVE_GRAPHICS_VULKAN_TEXTURE_H
#define LOVE_GRAPHICS_VULKAN_TEXTURE_H
#include "graphics/Texture.h"
#include "graphics/Volatile.h"
#include "vk_mem_alloc.h"
#include <iostream>
namespace love {
namespace graphics {
namespace vulkan {
class Texture : public graphics::Texture, public Volatile {
public:
Texture(love::graphics::Graphics* gfx, const Settings& settings, const Slices* data);
~Texture();
virtual bool loadVolatile() override;
virtual void unloadVolatile() override;
void copyFromBuffer(graphics::Buffer* source, size_t sourceoffset, int sourcewidth, size_t size, int slice, int mipmap, const Rect& rect) override { };
void copyToBuffer(graphics::Buffer* dest, int slice, int mipmap, const Rect& rect, size_t destoffset, int destwidth, size_t size) override { };
ptrdiff_t getRenderTargetHandle() const override { return (ptrdiff_t)textureImage; };
ptrdiff_t getSamplerHandle() const override { return (ptrdiff_t)textureSampler; };
void uploadByteData(PixelFormat pixelformat, const void* data, size_t size, int level, int slice, const Rect& r) override;
void generateMipmapsInternal() override { };
int getMSAA() const override { return 0; };
ptrdiff_t getHandle() const override { return (ptrdiff_t)textureImage; }
VkImageView getImageView() const { return textureImageView; }
VkSampler getSampler() const { return textureSampler; }
private:
void transitionImageLayout(VkImage, VkImageLayout oldLayout, VkImageLayout newLayout);
void copyBufferToImage(VkBuffer, VkImage, const Rect&);
void createTextureImageView();
void createTextureSampler();
graphics::Graphics* gfx;
VkDevice device;
VmaAllocator allocator;
VkImage textureImage = VK_NULL_HANDLE;
VmaAllocation textureImageAllocation;
VkImageView textureImageView;
VkSampler textureSampler;
const Slices* data;
};
}
}
}
#endif