2023-10-26 18:37:29 +02:00
|
|
|
#pragma once
|
|
|
|
|
#include "Resources.h"
|
|
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
namespace Seele {
|
|
|
|
|
namespace Gfx {
|
|
|
|
|
class Texture : public QueueOwnedResource {
|
|
|
|
|
public:
|
2024-06-13 15:43:03 +02:00
|
|
|
Texture(QueueFamilyMapping mapping);
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual ~Texture();
|
|
|
|
|
|
|
|
|
|
virtual SeFormat getFormat() const = 0;
|
2023-11-15 00:06:00 +01:00
|
|
|
virtual uint32 getWidth() const = 0;
|
|
|
|
|
virtual uint32 getHeight() const = 0;
|
|
|
|
|
virtual uint32 getDepth() const = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual uint32 getNumFaces() const { return 1; }
|
|
|
|
|
virtual SeSampleCountFlags getNumSamples() const = 0;
|
|
|
|
|
virtual uint32 getMipLevels() const = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void changeLayout(SeImageLayout newLayout, SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual void download(uint32 mipLevel, uint32 arrayLayer, uint32 face, Array<uint8>& buffer) = 0;
|
2024-06-11 14:15:29 +02:00
|
|
|
virtual void generateMipmaps() = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
protected:
|
2023-10-26 18:37:29 +02:00
|
|
|
// Inherited via QueueOwnedResource
|
|
|
|
|
virtual void executeOwnershipBarrier(QueueType newOwner) = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void executePipelineBarrier(SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
};
|
|
|
|
|
DEFINE_REF(Texture)
|
|
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
class Texture2D : public Texture {
|
|
|
|
|
public:
|
2024-06-13 15:43:03 +02:00
|
|
|
Texture2D(QueueFamilyMapping mapping);
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual ~Texture2D();
|
|
|
|
|
|
|
|
|
|
virtual SeFormat getFormat() const = 0;
|
2023-11-15 00:06:00 +01:00
|
|
|
virtual uint32 getWidth() const = 0;
|
|
|
|
|
virtual uint32 getHeight() const = 0;
|
|
|
|
|
virtual uint32 getDepth() const = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual SeSampleCountFlags getNumSamples() const = 0;
|
|
|
|
|
virtual uint32 getMipLevels() const = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void changeLayout(SeImageLayout newLayout, SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2024-06-11 14:15:29 +02:00
|
|
|
virtual void generateMipmaps() = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
// Inherited via QueueOwnedResource
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual void executeOwnershipBarrier(QueueType newOwner) = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void executePipelineBarrier(SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
};
|
|
|
|
|
DEFINE_REF(Texture2D)
|
|
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
class Texture3D : public Texture {
|
|
|
|
|
public:
|
2024-06-13 15:43:03 +02:00
|
|
|
Texture3D(QueueFamilyMapping mapping);
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual ~Texture3D();
|
|
|
|
|
|
|
|
|
|
virtual SeFormat getFormat() const = 0;
|
2023-11-15 00:06:00 +01:00
|
|
|
virtual uint32 getWidth() const = 0;
|
|
|
|
|
virtual uint32 getHeight() const = 0;
|
|
|
|
|
virtual uint32 getDepth() const = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual SeSampleCountFlags getNumSamples() const = 0;
|
|
|
|
|
virtual uint32 getMipLevels() const = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void changeLayout(SeImageLayout newLayout, SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2024-06-11 14:15:29 +02:00
|
|
|
virtual void generateMipmaps() = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
// Inherited via QueueOwnedResource
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual void executeOwnershipBarrier(QueueType newOwner) = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void executePipelineBarrier(SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
};
|
|
|
|
|
DEFINE_REF(Texture3D)
|
|
|
|
|
|
2024-06-09 12:20:04 +02:00
|
|
|
class TextureCube : public Texture {
|
|
|
|
|
public:
|
2024-06-13 15:43:03 +02:00
|
|
|
TextureCube(QueueFamilyMapping mapping);
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual ~TextureCube();
|
|
|
|
|
|
|
|
|
|
virtual SeFormat getFormat() const = 0;
|
2023-11-15 00:06:00 +01:00
|
|
|
virtual uint32 getWidth() const = 0;
|
|
|
|
|
virtual uint32 getHeight() const = 0;
|
|
|
|
|
virtual uint32 getDepth() const = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual uint32 getNumFaces() const { return 6; }
|
|
|
|
|
virtual SeSampleCountFlags getNumSamples() const = 0;
|
|
|
|
|
virtual uint32 getMipLevels() const = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void changeLayout(SeImageLayout newLayout, SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2024-06-11 14:15:29 +02:00
|
|
|
virtual void generateMipmaps() = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
// Inherited via QueueOwnedResource
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual void executeOwnershipBarrier(QueueType newOwner) = 0;
|
2024-06-09 12:20:04 +02:00
|
|
|
virtual void executePipelineBarrier(SeAccessFlags srcAccess, SePipelineStageFlags srcStage, SeAccessFlags dstAccess,
|
|
|
|
|
SePipelineStageFlags dstStage) = 0;
|
2023-10-26 18:37:29 +02:00
|
|
|
};
|
|
|
|
|
DEFINE_REF(TextureCube)
|
2024-06-09 12:20:04 +02:00
|
|
|
} // namespace Gfx
|
|
|
|
|
} // namespace Seele
|