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() {
Debug::get_logger()->set_level(spdlog::level::trace);
auto wd = WindowDriver::create();
auto rd = RenderDriver::create(RenderAPI::VULKAN, wd);
const auto wd = WindowDriver::create();
const auto rd = RenderDriver::create(RenderAPI::VULKAN, wd);
rd->select_device(RenderDevice::AUTO);
wd->create_window("Nova", 1280, 720);

View File

@@ -22,7 +22,7 @@ namespace Nova {
virtual void poll_events() = 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 set_window_title(WindowID window, std::string_view title) = 0;

View File

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

View File

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

View File

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