Files
XCEngine/engine/include/XCEngine/Resources/Texture.h
ssdfasd 4710e6ba60 feat: Implement resource system Phase 2 - Concrete resource types
- Add Material class with shader/texture bindings and property system
- Add MaterialLoader for .mat/.json format
- Add Shader class (Vertex/Fragment/Geometry/Compute)
- Add ShaderLoader for .vert/.frag/.glsl/.hlsl
- Add AudioClip class (WAV/OGG/MP3/FLAC support)
- Add AudioLoader for audio files
- Add Texture/Mesh classes and loaders (from design doc)
- Fix HashMap iterator and String API usage
- Fix Mutex compatibility with std::lock_guard
- Update CMakeLists.txt with new resource files
- All tests pass: 11 Resources + 51 Containers
2026-03-17 22:32:27 +08:00

74 lines
2.6 KiB
C++

#pragma once
#include "IResource.h"
#include "../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);
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