-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWindow.cpp
More file actions
69 lines (52 loc) · 1.62 KB
/
Copy pathWindow.cpp
File metadata and controls
69 lines (52 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "Window.hpp"
Window::~Window() {
if (m_window) {
glfwDestroyWindow(m_window);
}
glfwTerminate();
}
void Window::create(
uint16_t width,
uint16_t height,
const std::string& title,
const ResizeCallback& resizeCallback
) {
if (m_window) {
return;
}
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
m_window = glfwCreateWindow(width, height, title.c_str(), nullptr, nullptr);
m_resizeCallback = resizeCallback;
glfwSetWindowUserPointer(m_window, this);
glfwSetFramebufferSizeCallback(m_window, onFramebufferResize);
}
bool Window::shouldClose() const { return glfwWindowShouldClose(m_window); }
void Window::pollEvents() { // NOLINT(*-convert-member-functions-to-static)
glfwPollEvents();
}
vk::SurfaceKHR Window::createSurface(const vk::Instance& instance) const {
VkSurfaceKHR surface;
if (glfwCreateWindowSurface(instance, m_window, nullptr, &surface) !=
VK_SUCCESS) {
throw std::runtime_error("Failed to create window surface");
}
return surface;
}
vk::Extent2D Window::getExtent() const {
int width, height;
glfwGetFramebufferSize(m_window, &width, &height);
vk::Extent2D actualExtent = {
static_cast<uint32_t>(width), static_cast<uint32_t>(height)};
return actualExtent;
}
bool Window::isMinimized() const {
return glfwGetWindowAttrib(m_window, GLFW_ICONIFIED) == GLFW_TRUE;
}
void Window::onFramebufferResize(GLFWwindow* window, int width, int height) {
const auto instance =
reinterpret_cast<Window*>(glfwGetWindowUserPointer(window));
if (instance->m_resizeCallback) {
instance->m_resizeCallback(width, height);
}
}