2024-11-28 17:09:00 +00:00
|
|
|
#include "RHI/OpenglDrv/gl.h"
|
2024-11-27 17:13:57 +00:00
|
|
|
|
|
|
|
#include "Window/GLFWImpl/GLFWImpl.h"
|
|
|
|
#include "Core/Logger.h"
|
|
|
|
#include "RHI/RHI.h"
|
|
|
|
|
|
|
|
GLFWImpl::GLFWImpl() noexcept {}
|
|
|
|
|
|
|
|
GLFWImpl::~GLFWImpl() {
|
|
|
|
if (nullptr != window_) {
|
|
|
|
glfwDestroyWindow(window_);
|
|
|
|
window_ = nullptr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool GLFWImpl::Create(const WindowSettings& settings) {
|
|
|
|
DriverSettings& driverSetting = RHI::Get()->GetDriverSettings();
|
|
|
|
glfwWindowHint(GLFW_RESIZABLE, settings.resizable);
|
|
|
|
glfwWindowHint(GLFW_DECORATED, settings.decorated);
|
|
|
|
glfwWindowHint(GLFW_FOCUSED, settings.focused);
|
|
|
|
glfwWindowHint(GLFW_MAXIMIZED, settings.maximized);
|
|
|
|
glfwWindowHint(GLFW_FLOATING, settings.floating);
|
|
|
|
glfwWindowHint(GLFW_VISIBLE, settings.visible);
|
|
|
|
glfwWindowHint(GLFW_AUTO_ICONIFY, settings.autoIconify);
|
|
|
|
//glfwWindowHint(GLFW_REFRESH_RATE, settings.refreshRate);
|
|
|
|
glfwWindowHint(GLFW_SAMPLES, settings.samples);
|
|
|
|
|
|
|
|
window_ = glfwCreateWindow(settings.width, settings.height, settings.title.c_str(), nullptr, nullptr);
|
|
|
|
if (!window_) {
|
|
|
|
ERRORLOG("glfwCreateWindow failed");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (nullptr == driverSetting.isWindowShouldClose) {
|
|
|
|
driverSetting.isWindowShouldClose = [this]() {
|
|
|
|
return ShouldClose();
|
|
|
|
};
|
|
|
|
|
|
|
|
driverSetting.renderMakeCurrentContext = [this]() {
|
|
|
|
MakeCurrentContext();
|
|
|
|
};
|
|
|
|
|
|
|
|
driverSetting.renderSwapBuffers = [this]() {
|
|
|
|
SwapBuffers();
|
|
|
|
};
|
|
|
|
}
|
|
|
|
glfwSetKeyCallback(window_, [](GLFWwindow* window, int key, int scancode, int action, int mods) {
|
|
|
|
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
|
|
|
glfwSetWindowShouldClose(window, GLFW_TRUE);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool GLFWImpl::ShouldClose() const {
|
|
|
|
if (nullptr == window_) {
|
|
|
|
WARNLOG("window_ is nullptr");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return glfwWindowShouldClose(window_);
|
|
|
|
}
|
|
|
|
|
|
|
|
void GLFWImpl::MakeCurrentContext() const {
|
|
|
|
glfwMakeContextCurrent(window_);
|
|
|
|
}
|
|
|
|
|
|
|
|
void GLFWImpl::SwapBuffers() const {
|
|
|
|
glfwSwapBuffers(window_);
|
|
|
|
}
|