vulkan instance 까지 생성 완료

This commit is contained in:
2025-03-31 06:09:11 +09:00
parent ddd36f7a95
commit fa5f31e034
11 changed files with 234 additions and 17 deletions

View File

@@ -0,0 +1,14 @@
#include "glfw/glfw_initialization.h"
#include <GLFW/glfw3.h>
#include <cstdlib>
#include "precomp.h"
namespace veng {
GlfwInitialization::GlfwInitialization() {
if (glfwInit() != GLFW_TRUE) std::exit(EXIT_FAILURE);
}
GlfwInitialization::~GlfwInitialization() { glfwTerminate(); }
} // namespace veng

34
src/glfw/glfw_moniotr.cpp Normal file
View File

@@ -0,0 +1,34 @@
#include <GLFW/glfw3.h>
#include "glfw/glfw_monitor.h"
#include "precomp.h"
namespace veng {
gsl::span<GLFWmonitor *> GetMonitors() {
std::int32_t monitor_count = 0;
GLFWmonitor **monitor_pointers = glfwGetMonitors(&monitor_count);
return gsl::span<GLFWmonitor *>(monitor_pointers, monitor_count);
}
glm::ivec2 GetMonitorPosition(gsl::not_null<GLFWmonitor *> monitor) {
glm::ivec2 monitor_position;
glfwGetMonitorPos(monitor, &monitor_position.x, &monitor_position.y);
return monitor_position;
}
glm::ivec2 GetMonitorWorkAreaSize(gsl::not_null<GLFWmonitor *> monitor) {
glm::ivec2 monitor_size;
glfwGetMonitorWorkarea(monitor, nullptr, nullptr, &monitor_size.x,
&monitor_size.y);
return monitor_size;
}
void MoveWindowToMonitor(gsl::not_null<GLFWwindow *> window,
gsl::not_null<GLFWmonitor *> monitor) {
glm::ivec2 window_size;
glfwGetWindowSize(window, &window_size.x, &window_size.y);
const glm::ivec2 window_new_position = GetMonitorPosition(monitor) +
(GetMonitorWorkAreaSize(monitor) / 2) -
(window_size / 2);
glfwSetWindowPos(window, window_new_position.x, window_new_position.y);
}
} // namespace veng

39
src/glfw/glfw_window.cpp Normal file
View File

@@ -0,0 +1,39 @@
#include <GLFW/glfw3.h>
#include "glfw/glfw_monitor.h"
#include "glfw/glfw_window.h"
#include "precomp.h"
namespace veng {
Window::Window(gsl::czstring name, glm::ivec2 size) {
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
window_ = glfwCreateWindow(size.x, size.y, name, nullptr, nullptr);
if (window_ == nullptr) std::exit(EXIT_FAILURE);
}
Window::~Window() { glfwDestroyWindow(window_); }
glm::ivec2 Window::GetWindowSize() const {
glm::ivec2 window_size;
glfwGetWindowSize(window_, &window_size.x, &window_size.y);
return window_size;
}
bool Window::ShouldClose() const { return glfwWindowShouldClose(window_); }
GLFWwindow* Window::GetHandle() const { return window_; }
bool Window::TryMoveToMonitor(std::uint16_t monitor_number) {
gsl::span<GLFWmonitor*> monitors = veng::GetMonitors();
if (monitor_number < monitors.size()) {
veng::MoveWindowToMonitor(window_, monitors[monitor_number]);
return true;
}
return false;
}
} // namespace veng