36 std::string Title =
"LkEngine";
37 uint32_t Width = 1600;
38 uint32_t Height = 1080;
39 bool bDecorated =
true;
40 bool bFullscreen =
false;
42 bool bStartMaximized =
false;
43 std::filesystem::path IconPath{};
47 : Title(ApplicationSpec.Title)
48 , Width(ApplicationSpec.Width)
49 , Height(ApplicationSpec.Height)
50 , bFullscreen(ApplicationSpec.Fullscreen)
52 , bVSync(ApplicationSpec.VSync)
53 , bStartMaximized(ApplicationSpec.StartMaximized)
89 LK_DECLARE_MULTICAST_DELEGATE(FOnWindowSizeUpdated,
const uint16_t,
const uint16_t);
90 LK_DECLARE_MULTICAST_DELEGATE(FOnWindowScalersUpdated,
const float,
const float);
91 LK_DECLARE_MULTICAST_DELEGATE(FOnViewportSizeUpdated,
const uint16_t,
const uint16_t);
92 LK_DECLARE_MULTICAST_DELEGATE(FOnViewportScalersUpdated,
const float,
const float);
99 virtual void Destroy()
override;
102 void ProcessEvents();
111 bool IsMaximized()
const;
113 bool IsMinimized()
const;
114 bool IsFullscreen()
const;
115 void SetFullscreen(
const bool Fullscreen);
116 void SetTitle(
const std::string& NewTitle);
118 FORCEINLINE std::string GetTitle()
const {
return Title; }
119 FORCEINLINE
LVector2 GetSize()
const {
return Size; }
120 FORCEINLINE uint16_t GetWidth()
const {
return static_cast<uint16_t
>(Size.X); }
121 FORCEINLINE uint16_t GetHeight()
const {
return static_cast<uint16_t
>(Size.Y); }
122 FORCEINLINE uint16_t GetViewportWidth()
const {
return static_cast<uint16_t
>(ViewportSize.X); }
123 FORCEINLINE uint16_t GetViewportHeight()
const {
return static_cast<uint16_t
>(ViewportSize.Y); }
125 FORCEINLINE
LVector2 GetPosition()
const {
return Pos; }
126 FORCEINLINE
LVector2 GetViewportSize()
const {
return ViewportSize; }
128 FORCEINLINE
bool IsVSyncEnabled()
const {
return Data.bVSync; }
130 FORCEINLINE TObjectPtr<LRenderContext> GetRenderContext()
132 LK_CORE_ASSERT(RenderContext);
133 return RenderContext;
136 void SetDepthEnabled(
const bool InEnabled)
140 RenderContext->SetDepthEnabled(InEnabled);
144 void SetBlendingEnabled(
const bool InEnabled)
148 RenderContext->SetBlendingEnabled(InEnabled);
152 FORCEINLINE
void SetSize(
const LVector2& InSize)
154 if ((Size.X != InSize.X) || (Size.Y != InSize.X))
156 Size.X =
static_cast<uint16_t
>(InSize.X);
157 Size.Y =
static_cast<uint16_t
>(InSize.Y);
159 OnWindowSizeUpdated.Broadcast((uint16_t)Size.X, (uint16_t)Size.Y);
163 FORCEINLINE
void SetViewportWidth(
const uint16_t NewWidth)
165 if (ViewportSize.X != NewWidth)
167 ViewportSize.X =
static_cast<float>(NewWidth);
168 OnViewportSizeUpdated.Broadcast(
static_cast<uint16_t
>(ViewportSize.X),
static_cast<uint16_t
>(ViewportSize.Y));
172 FORCEINLINE
void SetViewportHeight(
const uint16_t NewHeight)
174 if (ViewportSize.Y != NewHeight)
176 ViewportSize.Y =
static_cast<float>(NewHeight);
177 OnViewportSizeUpdated.Broadcast(
static_cast<uint16_t
>(ViewportSize.X),
static_cast<uint16_t
>(ViewportSize.Y));
181 void SetVSync(
const bool InEnabled);
183 FORCEINLINE LSwapChain& GetSwapChain()
185 LK_CORE_ASSERT(m_SwapChain);
189 TObjectPtr<LRenderPass> GetRenderPass();
191 FORCEINLINE
void SetWidth(
const uint16_t NewWidth)
193 if (Size.X != NewWidth)
195 Size.X =
static_cast<decltype(Size.X)
>(NewWidth);
196 OnWindowSizeUpdated.Broadcast(
static_cast<uint16_t
>(Size.X),
static_cast<uint16_t
>(Size.Y));
200 FORCEINLINE
void SetHeight(
const uint16_t NewHeight)
202 if (Size.Y != NewHeight)
204 Size.Y =
static_cast<decltype(Size.Y)
>(NewHeight);
205 OnWindowSizeUpdated.Broadcast(
static_cast<uint16_t
>(Size.X),
static_cast<uint16_t
>(Size.Y));
212 FORCEINLINE
float GetScalerX()
const {
return ViewportScalers.X; }
213 FORCEINLINE
float GetScalerY()
const {
return ViewportScalers.Y; }
214 FORCEINLINE
LVector2 GetScalers()
const {
return ViewportScalers; }
216 FORCEINLINE
void SetScalerX(
const float InX) { ViewportScalers.X = InX; }
217 FORCEINLINE
void SetScalerY(
const float InY) { ViewportScalers.Y = InY; }
218 FORCEINLINE
void SetScalers(
const float InX,
const float InY)
220 ViewportScalers.X = InX;
221 ViewportScalers.Y = InY;
224 FORCEINLINE FWindowData& GetData() {
return Data; }
225 FORCEINLINE
const FWindowData& GetData()
const {
return Data; }
227 std::string GetShaderVersion()
const {
return GlslVersion; }
228 FORCEINLINE
const FWindowSpecification& GetSpecification()
const {
return Specification; }
230 FORCEINLINE
static LWindow& Get() {
return *Instance; }
233 FOnWindowSizeUpdated OnWindowSizeUpdated{};
234 FOnViewportSizeUpdated OnViewportSizeUpdated{};
236 static constexpr uint16_t DEFAULT_WIDTH = 1600;
237 static constexpr uint16_t DEFAULT_HEIGHT = 1080;
240 FWindowSpecification Specification{};
243 bool bGlfwInitialized =
false;
244 GLFWwindow* GlfwWindow{};
250 LVector2 ViewportScalers = { 1.0f, 1.0f };
252 std::string GlslVersion{};
254 TObjectPtr<LPipeline> m_Pipeline =
nullptr;
255 TObjectPtr<LSwapChain> m_SwapChain =
nullptr;
256 TObjectPtr<LRenderContext> RenderContext =
nullptr;
258 inline static LWindow* Instance =
nullptr;
260 friend class LEditorLayer;