Misc fixes

This commit is contained in:
2025-04-08 22:10:07 +10:00
parent 2192a8ba10
commit 536a1e8773
5 changed files with 29 additions and 27 deletions

View File

@@ -15,8 +15,8 @@ using namespace Nova;
int main() { int main() {
Debug::get_logger()->set_level(spdlog::level::trace); Debug::get_logger()->set_level(spdlog::level::trace);
auto wd = WindowDriver::create(); const auto wd = WindowDriver::create();
auto rd = RenderDriver::create(RenderAPI::VULKAN, wd); const auto rd = RenderDriver::create(RenderAPI::VULKAN, wd);
rd->select_device(RenderDevice::AUTO); rd->select_device(RenderDevice::AUTO);
wd->create_window("Nova", 1280, 720); wd->create_window("Nova", 1280, 720);

View File

@@ -22,7 +22,7 @@ namespace Nova {
virtual void poll_events() = 0; virtual void poll_events() = 0;
virtual void beep() = 0; virtual void beep() = 0;
virtual WindowID create_window(std::string_view title = "Nova", u32 width = 800, u32 height = 600) = 0; virtual WindowID create_window(std::string_view title, u32 width, u32 height) = 0;
virtual void destroy_window(WindowID window) = 0; virtual void destroy_window(WindowID window) = 0;
virtual void set_window_title(WindowID window, std::string_view title) = 0; virtual void set_window_title(WindowID window, std::string_view title) = 0;

View File

@@ -16,7 +16,7 @@
namespace Nova { namespace Nova {
class VulkanRenderDriver final : public RenderDriver { class VulkanRenderDriver final : public RenderDriver {
public: public:
VulkanRenderDriver(WindowDriver* window_driver); explicit VulkanRenderDriver(WindowDriver* window_driver);
~VulkanRenderDriver() override; ~VulkanRenderDriver() override;
[[nodiscard]] RenderAPI get_api() const override; [[nodiscard]] RenderAPI get_api() const override;

View File

@@ -15,6 +15,8 @@
#include <nova/core/debug.h> #include <nova/core/debug.h>
#include <ranges>
using namespace Nova; using namespace Nova;
X11WindowDriver::X11WindowDriver() { X11WindowDriver::X11WindowDriver() {
@@ -31,8 +33,8 @@ X11WindowDriver::X11WindowDriver() {
X11WindowDriver::~X11WindowDriver() { X11WindowDriver::~X11WindowDriver() {
NOVA_AUTO_TRACE(); NOVA_AUTO_TRACE();
for (const auto& [id, _] : m_windows) { for (const auto window : std::views::keys(m_windows)) {
XDestroyWindow(m_display, id); XDestroyWindow(m_display, window);
} }
if (m_display) { if (m_display) {
@@ -47,15 +49,15 @@ void X11WindowDriver::poll_events() {
XEvent event; XEvent event;
XNextEvent(m_display, &event); XNextEvent(m_display, &event);
WindowID id = event.xany.window; const WindowID window = event.xany.window;
NOVA_ASSERT(m_windows.contains(id)); NOVA_ASSERT(m_windows.contains(window));
switch (event.type) { switch (event.type) {
case Expose: case Expose:
break; break;
case ClientMessage: { case ClientMessage: {
if (event.xclient.data.l[0] == static_cast<long>(m_window_close_atom)) { if (event.xclient.data.l[0] == static_cast<long>(m_window_close_atom)) {
destroy_window(id); destroy_window(window);
} }
break; break;
} }
@@ -65,15 +67,15 @@ void X11WindowDriver::poll_events() {
} }
} }
void X11WindowDriver::beep(){ void X11WindowDriver::beep() {
XBell(m_display, 100); XBell(m_display, 100);
} }
WindowID X11WindowDriver::create_window(std::string_view title, u32 width, u32 height) { WindowID X11WindowDriver::create_window(const std::string_view title, const u32 width, const u32 height) {
NOVA_AUTO_TRACE(); NOVA_AUTO_TRACE();
WindowID window = XCreateSimpleWindow(m_display, DefaultRootWindow(m_display), 0, 0, width, height, 0, 0, 0); const WindowID window = XCreateSimpleWindow(m_display, DefaultRootWindow(m_display), 0, 0, width, height, 0, 0, 0);
WindowData& data = m_windows[window]; const WindowData& data = m_windows[window];
(void)data; // TODO: Initialize window data (void)data; // TODO: Initialize window data
XSetWMProtocols(m_display, window, &m_window_close_atom, 1); XSetWMProtocols(m_display, window, &m_window_close_atom, 1);
@@ -85,31 +87,31 @@ WindowID X11WindowDriver::create_window(std::string_view title, u32 width, u32 h
return window; return window;
} }
void X11WindowDriver::destroy_window(WindowID id) { void X11WindowDriver::destroy_window(const WindowID window) {
NOVA_AUTO_TRACE(); NOVA_AUTO_TRACE();
if (!m_windows.contains(id)) { if (!m_windows.contains(window)) {
return; return;
} }
XDestroyWindow(m_display, id); XDestroyWindow(m_display, window);
m_windows.erase(id); m_windows.erase(window);
} }
void X11WindowDriver::set_window_title(WindowID id, std::string_view title) { void X11WindowDriver::set_window_title(const WindowID window, const std::string_view title) {
NOVA_AUTO_TRACE(); NOVA_AUTO_TRACE();
NOVA_ASSERT(m_windows.contains(id)); NOVA_ASSERT(m_windows.contains(window));
XStoreName(m_display, id, title.data()); XStoreName(m_display, window, title.data());
} }
void X11WindowDriver::set_window_size(WindowID id, u32 width, u32 height) { void X11WindowDriver::set_window_size(const WindowID window, const u32 width, const u32 height) {
NOVA_AUTO_TRACE(); NOVA_AUTO_TRACE();
NOVA_ASSERT(m_windows.contains(id)); NOVA_ASSERT(m_windows.contains(window));
XResizeWindow(m_display, id, width, height); XResizeWindow(m_display, window, width, height);
} }
void X11WindowDriver::set_window_position(WindowID id, i32 x, i32 y) { void X11WindowDriver::set_window_position(const WindowID window, const i32 x, const i32 y) {
NOVA_AUTO_TRACE(); NOVA_AUTO_TRACE();
NOVA_ASSERT(m_windows.contains(id)); NOVA_ASSERT(m_windows.contains(window));
XMoveWindow(m_display, id, x, y); XMoveWindow(m_display, window, x, y);
} }
u32 X11WindowDriver::get_window_count() const { u32 X11WindowDriver::get_window_count() const {

View File

@@ -12,7 +12,7 @@
using namespace Nova; using namespace Nova;
RenderDriver* RenderDriver::create(RenderAPI api, WindowDriver* window_driver) { RenderDriver* RenderDriver::create(const RenderAPI api, WindowDriver* window_driver) {
NOVA_AUTO_TRACE(); NOVA_AUTO_TRACE();
switch (api) { switch (api) {
#ifdef NOVA_DX12 #ifdef NOVA_DX12