74 lines
2.6 KiB
C++
74 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#include <XCEngine/Core/Asset/IResource.h>
|
|
#include <XCEngine/Core/Types.h>
|
|
|
|
namespace XCEngine {
|
|
namespace Resources {
|
|
|
|
enum class TextureType {
|
|
Texture2D, Texture3D, TextureCube, Texture2DArray, TextureCubeArray
|
|
};
|
|
|
|
enum class TextureFormat {
|
|
Unknown, R8_UNORM, RG8_UNORM, RGBA8_UNORM, RGBA8_SRGB,
|
|
R16_FLOAT, RG16_FLOAT, RGBA16_FLOAT,
|
|
R32_FLOAT, RG32_FLOAT, RGBA32_FLOAT,
|
|
D16_UNORM, D24_UNORM_S8_UINT, D32_FLOAT, D32_FLOAT_S8_X24_UINT,
|
|
BC1_UNORM, BC1_UNORM_SRGB, BC2_UNORM, BC2_UNORM_SRGB,
|
|
BC3_UNORM, BC3_UNORM_SRGB, BC4_UNORM, BC5_UNORM, BC6H_UF16,
|
|
BC7_UNORM, BC7_UNORM_SRGB
|
|
};
|
|
|
|
enum class TextureUsage : Core::uint8 {
|
|
None = 0, ShaderResource = 1 << 0, RenderTarget = 1 << 1,
|
|
DepthStencil = 1 << 2, UnorderedAccess = 1 << 3,
|
|
TransferSrc = 1 << 4, TransferDst = 1 << 5
|
|
};
|
|
|
|
class Texture : public IResource {
|
|
public:
|
|
Texture();
|
|
virtual ~Texture() override;
|
|
|
|
ResourceType GetType() const override { return ResourceType::Texture; }
|
|
const Containers::String& GetName() const override { return m_name; }
|
|
const Containers::String& GetPath() const override { return m_path; }
|
|
ResourceGUID GetGUID() const override { return m_guid; }
|
|
bool IsValid() const override { return m_isValid; }
|
|
size_t GetMemorySize() const override { return m_memorySize; }
|
|
void Release() override;
|
|
|
|
Core::uint32 GetWidth() const { return m_width; }
|
|
Core::uint32 GetHeight() const { return m_height; }
|
|
Core::uint32 GetDepth() const { return m_depth; }
|
|
Core::uint32 GetMipLevels() const { return m_mipLevels; }
|
|
Core::uint32 GetArraySize() const { return m_arraySize; }
|
|
TextureType GetTextureType() const { return m_textureType; }
|
|
TextureFormat GetFormat() const { return m_format; }
|
|
TextureUsage GetUsage() const { return m_usage; }
|
|
|
|
const void* GetPixelData() const { return m_pixelData.Data(); }
|
|
size_t GetPixelDataSize() const { return m_pixelData.Size(); }
|
|
|
|
bool Create(Core::uint32 width, Core::uint32 height, Core::uint32 depth,
|
|
Core::uint32 mipLevels, TextureType type, TextureFormat format,
|
|
const void* data, size_t dataSize, Core::uint32 arraySize = 1);
|
|
bool GenerateMipmaps();
|
|
|
|
private:
|
|
Core::uint32 m_width = 0;
|
|
Core::uint32 m_height = 0;
|
|
Core::uint32 m_depth = 1;
|
|
Core::uint32 m_mipLevels = 1;
|
|
Core::uint32 m_arraySize = 1;
|
|
TextureType m_textureType = TextureType::Texture2D;
|
|
TextureFormat m_format = TextureFormat::RGBA8_UNORM;
|
|
TextureUsage m_usage = TextureUsage::ShaderResource;
|
|
|
|
Containers::Array<Core::uint8> m_pixelData;
|
|
};
|
|
|
|
} // namespace Resources
|
|
} // namespace XCEngine
|