LkEngine 0.1.2
 
Loading...
Searching...
No Matches
OpenGLArrayTexture.h
1#pragma once
2
3#include "LkEngine/Renderer/ArrayTexture.h"
4
5#include "OpenGLTexture.h"
6
7
8namespace LkEngine {
9
11 {
12 public:
13 LOpenGLArrayTexture(const FArrayTextureSpecification& InSpecification);
14 LOpenGLArrayTexture() = delete;
16
17 virtual void Bind() override;
18 virtual void Unbind() override;
19
20 virtual void AddTextureToArray(const TObjectPtr<LTexture> Texture) override;
21 virtual bool RemoveTextureFromArray(const LRendererID TextureID) override;
22
23 FORCEINLINE virtual const LRendererID GetRendererID() const override
24 {
25 return m_RendererID;
26 }
27
28 FORCEINLINE virtual LRendererID& GetRendererID() override
29 {
30 return m_RendererID;
31 }
32
33 FORCEINLINE virtual int GetTextureSlot() const override
34 {
35 return Specification.TextureSlot;
36 }
37
38 FORCEINLINE virtual const FArrayTextureSpecification& GetSpecification() const override
39 {
40 return Specification;
41 }
42
43 FORCEINLINE virtual const EArrayTextureDimension GetDimension() const override
44 {
45 return Specification.Dimension;
46 }
47
48 FORCEINLINE virtual int GetWidth() const override { return m_Width; }
49 FORCEINLINE virtual int GetHeight() const override { return m_Height; }
50 FORCEINLINE virtual void SetWidth(const int NewWidth) override { m_Width = NewWidth; }
51 FORCEINLINE virtual void SetHeight(const int NewHeight) override { m_Height = NewHeight; }
52
53 FORCEINLINE virtual bool HasTexture(const TObjectPtr<LTexture>& Texture) override
54 {
55 return (TextureIDSet.find(Texture->GetRendererID()) != TextureIDSet.end());
56 }
57
58 FORCEINLINE virtual TObjectPtr<LTexture> GetTextureWithID(LRendererID TextureID) override
59 {
60 if (auto Iter = IndexCache.find(TextureID); Iter != IndexCache.end())
61 {
62 return (Textures.at((*Iter).second));
63 }
64
65 LK_ASSERT(false, "GetTextureWithID failed with ID: {}", TextureID);
66 return nullptr;
67 }
68
69 FORCEINLINE virtual int GetIndexOfTexture(const TObjectPtr<LTexture>& Texture) override
70 {
71 for (int i = 0; i < Textures.size(); i++)
72 {
73 if (Textures[i]->GetRendererID() == Texture->GetRendererID())
74 {
75 return i;
76 }
77 }
78
79 return 0;
80 }
81
82 public:
83 static constexpr int MaxTexturesPerArray = 32;
84 public:
85 LRendererID m_RendererID = 0;
86 FArrayTextureSpecification Specification{};
87
88 int m_Width = 0;
89 int m_Height = 0;
90
91 std::deque<TObjectPtr<LTexture>> Textures{};
92 std::unordered_map<LRendererID, int> IndexCache{};
93 std::unordered_set<LRendererID> TextureIDSet{};
94
95 private:
97 };
98
99}
Definition ArrayTexture.h:10
Definition OpenGLArrayTexture.h:11
Definition ObjectPtr.h:102
#define LCLASS(Class)
Definition CoreMacros.h:226
uint32_t LRendererID
Definition CoreTypes.h:30
Definition Asset.h:11
Definition ArrayTextureSpecification.h:15