9#include "LkEngine/Core/LObject/ObjectPtr.h"
10#include "LkEngine/Core/Memory/Buffer.h"
12#include "BlendingSpecification.h"
14#include "TextureEnum.h"
16#include "LkEngine/Core/Event/AssetEvent.h"
26 bool bGenerateMips =
true;
27 bool bFlipVertical =
false;
29 EImageFormat Format = EImageFormat::RGBA;
30 ETextureWrap SamplerWrap = ETextureWrap::Clamp;
31 ETextureFilter SamplerFilter = ETextureFilter::Linear;
33 ETextureUniformType UniformType = ETextureUniformType::Diffuse;
35 bool bStorage =
false;
36 bool bStoreLocally =
false;
44 std::string DebugName{};
50 uint32_t MipCount = UINT_MAX;
51 uint32_t BaseLayer = 0;
52 uint32_t LayerCount = UINT_MAX;
57 glm::vec4 FloatValues;
59 glm::uvec4 UIntValues;
64 FORCEINLINE uint32_t GetMemorySize(
const EImageFormat ImageFormat,
const uint32_t Width,
const uint32_t Height);
65 FORCEINLINE uint32_t CalculateMipCount(
const uint32_t Width,
const uint32_t Height);
66 FORCEINLINE uint32_t BytesPerPixel(
const EImageFormat ImageFormat);
75 std::string Path =
"";
78 EImageFormat Format = EImageFormat::RGBA;
79 EImageUsage Usage = EImageUsage::Texture;
80 ETextureWrap Wrap = ETextureWrap::Clamp;
81 ETextureFilter Filter = ETextureFilter::Linear;
82 ETextureAnistropicFiltering AnistropicFiltering = ETextureAnistropicFiltering::Trilnear;
84 bool bDeinterleaved =
false;
85 bool bTransfer =
false;
86 bool bFlipVertical =
false;
89 std::string DebugName{};
93 : Width(InSpecification.Width)
94 , Height(InSpecification.Height)
95 , Path(InSpecification.Path)
96 , Format(InSpecification.Format)
97 , Filter(InSpecification.SamplerFilter)
98 , Wrap(InSpecification.SamplerWrap)
99 , Name(InSpecification.Name)
100 , DebugName(InSpecification.DebugName)
102 InSpecification.bGenerateMips
103 ? Mips = ImageUtils::CalculateMipCount(InSpecification.Width, InSpecification.Height)
105 Size = ImageUtils::GetMemorySize(InSpecification.Format, InSpecification.Width, InSpecification.Height);
118 virtual void SetData(
const void* InData) = 0;
119 virtual void Resize(
const uint32_t InWidth,
const uint32_t InHeight) = 0;
121 virtual FBuffer GetBuffer()
const = 0;
122 virtual FBuffer& GetBuffer() = 0;
124 virtual void Invalidate() = 0;
125 virtual void RT_Invalidate() = 0;
130 virtual uint32_t GetWidth()
const = 0;
131 virtual uint32_t GetHeight()
const = 0;
135 virtual void Release() = 0;
136 virtual void AllocateMemory(
const uint64_t InSize) = 0;
152 virtual void Resize(
const uint32_t InWidth,
const uint32_t InHeight) = 0;
162 FORCEINLINE int64_t GetImageFormat(
const EImageFormat ImageFormat)
166 case EImageFormat::RGBA:
return 4;
167 case EImageFormat::RGBA32F:
return 16;
168 case EImageFormat::None:
return 0;
174 FORCEINLINE uint32_t GetFormatBPP(
const EImageFormat ImageFormat)
178 case EImageFormat::RGB:
179 case EImageFormat::RGBA8:
return 4;
180 case EImageFormat::RGBA:
return 4;
181 case EImageFormat::RGBA16F:
return 2 * 4;
182 case EImageFormat::RGBA32F:
return 4 * 4;
185 LK_CORE_ASSERT(
false,
"GetFormatBPP failed, format not recognized");
189 FORCEINLINE uint32_t GetMemorySize(
const EImageFormat ImageFormat,
const uint32_t Width,
const uint32_t Height)
191 return (Width * Height * GetFormatBPP(ImageFormat));
194 FORCEINLINE uint32_t BytesPerPixel(
const EImageFormat ImageFormat)
198 case EImageFormat::RGBA:
return 4;
199 case EImageFormat::RGBA32F:
return 16;
200 case EImageFormat::None:
return 0;
206 FORCEINLINE uint32_t CalculateMipCount(
const uint32_t Width,
const uint32_t Height)
208 return static_cast<uint32_t
>(std::floor(std::log2(glm::min(Width, Height))) + 1);
211 FORCEINLINE
bool IsDepthFormat(
const EImageFormat ImageFormat)
215 case EImageFormat::DEPTH24STENCIL8:
return true;
225 static const char* ToString(
const EImageFormat ImageFormat)
229 case EImageFormat::RG8:
return "RG8";
230 case EImageFormat::RGB:
return "RGB";
231 case EImageFormat::RGBA:
return "RGBA";
232 case EImageFormat::RG16F:
return "RG16F";
233 case EImageFormat::RGBA8:
return "RGBA8";
234 case EImageFormat::RGBA16F:
return "RGBA16F";
235 case EImageFormat::RGBA32F:
return "RGBA32F";
236 case EImageFormat::SRGB:
return "SRGB";
237 case EImageFormat::SRGBA:
return "SRGBA";
238 case EImageFormat::RED32F:
return "RED32F";
239 case EImageFormat::RED8UI:
return "RED8UI";
240 case EImageFormat::RED8UN:
return "RED8UN";
241 case EImageFormat::RED16UI:
return "RED16UI";
242 case EImageFormat::RED32UI:
return "RED32UI";
243 case EImageFormat::B10R11G11UF:
return "B10R11G11UF";
244 case EImageFormat::DEPTH24STENCIL8:
return "DEPTH24STENCIL8";
247 LK_CORE_ASSERT(
false,
"Invalid image format");
static TObjectPtr< LImage2D > Create(const FImageSpecification &InSpecification, FBuffer InBuffer)
Definition Image.cpp:41
static TObjectPtr< LImage > Create(const FImageSpecification &InSpecification, FBuffer InBuffer)
Definition Image.cpp:11
Definition ObjectPtr.h:102
uint32_t LRendererID
Definition CoreTypes.h:30
bool bUseReadDimensions
Definition Image.h:42