LkEngine 0.1.2
 
Loading...
Searching...
No Matches
Texture.h
1#pragma once
2
4
5#include "LkEngine/Asset/Asset.h"
6
7#include "Image.h"
8
9
10namespace LkEngine {
11
15 class LTexture : public LAsset
16 {
17 public:
18 virtual ~LTexture() = default;
19
20 virtual void Bind(const uint32_t Slot = 0) const = 0;
21
22 virtual EImageFormat GetFormat() const = 0;
23 virtual uint32_t GetWidth() const = 0;
24 virtual uint32_t GetHeight() const = 0;
25 virtual uint32_t GetMipLevelCount() const = 0;
26
27 virtual ETextureType GetType() const = 0;
28
29 virtual LRendererID GetRendererID() const = 0;
30 virtual LRendererID& GetRendererID() = 0;
31
32 virtual const FTextureSpecification& GetSpecification() const = 0;
33
34 virtual std::string_view GetName() const = 0;
35 virtual const std::filesystem::path& GetPath() const = 0;
36 virtual std::string_view GetFilename() const = 0;
37
38 virtual bool IsValid() const override
39 {
40 return ((GetRendererID() > 0) && (GetWidth() > 0) && (GetHeight() > 0));
41 }
42
44 static TObjectPtr<LTexture> Create(const FTextureSpecification& Specification);
45
46 private:
48 };
49
53 class LTexture2D : public LTexture
54 {
55 public:
56 virtual ~LTexture2D() = default;
57
58 virtual void SetData(void* InData, const uint32_t InSize) = 0;
59 virtual void Invalidate() = 0;
60 virtual void Resize(const uint32_t NewWidth, const uint32_t NewWeight) = 0;
61
62 virtual TObjectPtr<LImage2D> GetImage() = 0;
63 virtual const TObjectPtr<LImage2D>& GetImage() const = 0;
64 virtual FBuffer GetImageBuffer() = 0;
65
66 virtual void Bind(const uint32_t Slot = 0) const = 0;
67 virtual void Unbind(const uint32_t Slot = 0) const = 0;
68
69 virtual void Lock() = 0;
70 virtual void Unlock() = 0;
71 virtual void Load() = 0;
72 virtual void Unload() = 0;
73 virtual bool Loaded() const = 0;
74
75 FORCEINLINE virtual ETextureType GetType() const override { return ETextureType::Texture2D; }
76 FORCEINLINE static EAssetType GetStaticType() { return EAssetType::Texture; }
77
78 virtual bool IsValid() const override
79 {
80 return ((GetRendererID() > 0) && (GetImage() != nullptr));
81 }
82
83 static TObjectPtr<LTexture2D> Create(const FTextureSpecification& Specification);
84 static TObjectPtr<LTexture2D> Create(const FTextureSpecification& Specification, FBuffer ImageData);
85
86 private:
88 };
89
93 class LTextureCube : public LTexture
94 {
95 public:
96 static TObjectPtr<LTextureCube> Create(const FTextureSpecification& Specification,
97 const std::vector<std::filesystem::path>& InFacePaths);
98
99 FORCEINLINE virtual ETextureType GetType() const override
100 {
101 return ETextureType::TextureCube;
102 }
103
104 FORCEINLINE static EAssetType GetStaticType() { return EAssetType::EnvMap; }
105
106 private:
108 };
109
110}
Core header.
Definition Asset.h:21
Definition Texture.h:54
Definition Texture.h:94
Definition Texture.h:16
static TObjectPtr< LTexture > Create(const FTextureSpecification &Specification)
Definition Texture.cpp:10
Definition ObjectPtr.h:102
#define LASSET(Class)
Definition CoreMacros.h:316
#define LCLASS(Class)
Definition CoreMacros.h:226
uint32_t LRendererID
Definition CoreTypes.h:30
Definition Asset.h:11
EAssetType
Definition AssetTypes.h:24
Definition Buffer.h:9
Definition Image.h:21