diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-05-02 00:09:00 +0200 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-05-02 00:09:00 +0200 |
commit | 1b5f373f8e913aa948ef0964d26a0082e6563f0a (patch) | |
tree | be5b465b643f308b207925af8ec95df542c277bb /deimos | |
parent | a3fdb87df94f8d377b7ea90ca50a06418fda3867 (diff) |
Vulkan surface creation & present queue selection
Diffstat (limited to 'deimos')
-rw-r--r-- | deimos/core/base.h | 3 | ||||
-rw-r--r-- | deimos/core/os.h | 5 | ||||
-rw-r--r-- | deimos/core/os_win32.cpp | 18 | ||||
-rw-r--r-- | deimos/vulkan/vulkan_instance_functions.inc | 6 |
4 files changed, 29 insertions, 3 deletions
diff --git a/deimos/core/base.h b/deimos/core/base.h index 34a341f..0c15ccd 100644 --- a/deimos/core/base.h +++ b/deimos/core/base.h @@ -1,5 +1,8 @@ #pragma once
+// @Todo Add some compile-time config stuff
+#define DEIMOS_OS_WIN32 1 // NOLINT
+
#include "deimos/core/std.h"
#include "deimos/core/gsl.h"
diff --git a/deimos/core/os.h b/deimos/core/os.h index c440555..d310185 100644 --- a/deimos/core/os.h +++ b/deimos/core/os.h @@ -64,6 +64,11 @@ public: virtual void Update(OsWindow*) = 0;
virtual bool QuitRequested(const OsWindow*) = 0;
+
+#if DEIMOS_OS_WIN32
+ virtual void* Win32Hwnd(const OsWindow*) = 0;
+ virtual void* Win32Hinstance(const OsWindow*) = 0;
+#endif
};
class OsApi
diff --git a/deimos/core/os_win32.cpp b/deimos/core/os_win32.cpp index e80a1d5..84fc3a3 100644 --- a/deimos/core/os_win32.cpp +++ b/deimos/core/os_win32.cpp @@ -95,6 +95,7 @@ class Win32WindowApiImpl : public OsWindowApi {
static constexpr wchar_t kClassName[] = L"Deimos window class";
+ HINSTANCE m_hinstance;
Allocator* m_allocator;
bool m_class_registered = false;
@@ -134,7 +135,7 @@ class Win32WindowApiImpl : public OsWindowApi WNDCLASSW wnd_class{};
wnd_class.lpfnWndProc = WindowProc;
- wnd_class.hInstance = ::GetModuleHandleW(nullptr);
+ wnd_class.hInstance = m_hinstance;
wnd_class.lpszClassName = kClassName;
::RegisterClassW(&wnd_class);
@@ -144,6 +145,7 @@ class Win32WindowApiImpl : public OsWindowApi public:
explicit Win32WindowApiImpl(Allocator* allocator) :
+ m_hinstance{::GetModuleHandleW(nullptr)},
m_allocator{allocator}
{}
@@ -163,7 +165,7 @@ public: HWND hwnd = ::CreateWindowExW(
0, kClassName, title_w, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, width, height,
- nullptr, nullptr, ::GetModuleHandle(nullptr), window);
+ nullptr, nullptr, m_hinstance, window);
if (hwnd == nullptr)
{
@@ -192,6 +194,18 @@ public: {
return window->quit_requested;
}
+
+#if DEIMOS_OS_WIN32
+ void* Win32Hwnd(const OsWindow* window) override
+ {
+ return std::bit_cast<void*>(window->hwnd);
+ }
+
+ void* Win32Hinstance(const OsWindow*) override
+ {
+ return std::bit_cast<void*>(m_hinstance);
+ }
+#endif
};
class Win32OsApiImpl : public OsApi
diff --git a/deimos/vulkan/vulkan_instance_functions.inc b/deimos/vulkan/vulkan_instance_functions.inc index 48daf68..0a46455 100644 --- a/deimos/vulkan/vulkan_instance_functions.inc +++ b/deimos/vulkan/vulkan_instance_functions.inc @@ -2,8 +2,12 @@ FN(EnumeratePhysicalDevices)
FN(GetPhysicalDeviceProperties2)
FN(GetPhysicalDeviceQueueFamilyProperties)
-FN(GetPhysicalDeviceWin32PresentationSupportKHR)
FN(DestroyInstance)
+
FN(CreateDevice)
FN(GetDeviceProcAddr)
+
+FN(CreateWin32SurfaceKHR)
+FN(DestroySurfaceKHR)
+FN(GetPhysicalDeviceSurfaceSupportKHR)
// NOLINTEND
|