project-aster/aster/include/aster/core/window.h

48 lines
1.1 KiB
C++

// =============================================
// Aster: window.h
// Copyright (c) 2020-2024 Anish Bhobe
// =============================================
#pragma once
#include "global.h"
#include "size.h"
#include <EASTL/fixed_string.h>
#include <atomic>
struct Window final
{
// fields
GLFWwindow *m_Window = nullptr;
NameString m_Name;
static std::atomic_uint64_t m_WindowCount;
static std::atomic_bool m_IsGlfwInit;
// Methods
[[nodiscard]] bool
Poll() const noexcept
{
glfwPollEvents();
return !glfwWindowShouldClose(m_Window);
}
void RequestExit() const noexcept;
void SetWindowSize(const vk::Extent2D &extent) const noexcept;
void SetWindowSize(u32 width, u32 height) const noexcept;
/// Actual size of the framebuffer being used for the window render.
[[nodiscard]] Size2D GetSize() const;
// Ctor/Dtor
Window(cstr title, Size2D extent, b8 isFullScreen = false);
~Window();
// Move
Window(Window &&other) noexcept;
Window &operator=(Window &&other) noexcept;
DISALLOW_COPY_AND_ASSIGN(Window);
};