Aether3D Game Engine
TextureBase.hpp
1 #ifndef TEXTURE_BASE_H
2 #define TEXTURE_BASE_H
3 
4 #if AETHER3D_METAL
5 #import <Metal/Metal.h>
6 #endif
7 #if AETHER3D_D3D12
8 #include <d3d12.h>
9 #endif
10 #include "Vec3.hpp"
11 
12 #if AETHER3D_D3D12
13 // TODO: Move inside engine
14 struct GpuResource
15 {
16  ID3D12Resource* resource = nullptr;
17  D3D12_RESOURCE_STATES usageState;
18  D3D12_RESOURCE_STATES transitioningState;
19  D3D12_GPU_VIRTUAL_ADDRESS gpuVirtualAddress = 0;
20 };
21 #endif
22 
23 namespace ae3d
24 {
26  enum class TextureWrap
27  {
28  Repeat,
29  Clamp
30  };
31 
33  enum class TextureFilter
34  {
35  Nearest,
36  Linear
37  };
38 
40  enum class Mipmaps
41  {
42  Generate,
43  None
44  };
45 
48  {
49  public:
51  unsigned GetID() const { return handle; }
52 #if AETHER3D_METAL
53  id<MTLTexture> GetMetalTexture() const { return metalTexture; }
54 #endif
55  float GetAnisotropy() const { return anisotropy; }
57 
59  int GetWidth() const { return width; }
60 
62  int GetHeight() const { return height; }
63 
65  TextureWrap GetWrap() const { return wrap; }
66 
68  TextureFilter GetFilter() const { return filter; }
69 
71  Mipmaps GetMipmaps() const { return mipmaps; }
72 
74  const Vec4& GetScaleOffset() const { return scaleOffset; }
75 
77  bool IsOpaque() const { return opaque; }
78 
79  protected:
81  int width = 0;
83  int height = 0;
85  unsigned handle = 0;
87  TextureWrap wrap = TextureWrap::Repeat;
89  TextureFilter filter = TextureFilter::Nearest;
91  Mipmaps mipmaps = Mipmaps::None;
93  Vec4 scaleOffset{ 1, 1, 0, 0 };
95  bool opaque = true;
97  float anisotropy = 1;
98 #if AETHER3D_METAL
99  id<MTLTexture> metalTexture;
100 #endif
101 #if AETHER3D_D3D12
102  GpuResource gpuResource;
103  D3D12_CPU_DESCRIPTOR_HANDLE srv;
104 #endif
105  };
106 }
107 
108 #endif
TextureFilter filter
Filtering mode.
Definition: TextureBase.hpp:89
const Vec4 & GetScaleOffset() const
Definition: TextureBase.hpp:74
TextureWrap wrap
Wrapping controls how coordinates outside 0-1 are interpreted.
Definition: TextureBase.hpp:87
unsigned GetID() const
Definition: TextureBase.hpp:51
Definition: AudioClip.hpp:4
4-component vector.
Definition: Vec3.hpp:351
int width
Width in pixels.
Definition: TextureBase.hpp:81
TextureWrap GetWrap() const
Definition: TextureBase.hpp:65
int GetHeight() const
Definition: TextureBase.hpp:62
bool opaque
Is the texture opaque.
Definition: TextureBase.hpp:95
unsigned handle
Graphics API handle.
Definition: TextureBase.hpp:85
float anisotropy
Anisotropy.
Definition: TextureBase.hpp:97
bool IsOpaque() const
Definition: TextureBase.hpp:77
Vec4 scaleOffset
Scale (tiling) and offset.
Definition: TextureBase.hpp:93
float GetAnisotropy() const
Definition: TextureBase.hpp:56
Mipmaps mipmaps
Mipmaps.
Definition: TextureBase.hpp:91
Mipmaps GetMipmaps() const
Definition: TextureBase.hpp:71
int height
Height in pixels.
Definition: TextureBase.hpp:83
int GetWidth() const
Definition: TextureBase.hpp:59
TextureFilter GetFilter() const
Definition: TextureBase.hpp:68
Base class for textures.
Definition: TextureBase.hpp:47