summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vk_common.c23
-rw-r--r--src/vk_common.h4
-rw-r--r--src/window_wayland.c24
-rw-r--r--src/window_wayland.h5
-rw-r--r--subprojects/glfw3.wrap4
-rw-r--r--subprojects/libalabaster.wrap4
-rw-r--r--subprojects/libnaunet.wrap4
-rw-r--r--tests/window.c2
8 files changed, 42 insertions, 28 deletions
diff --git a/src/vk_common.c b/src/vk_common.c
index 3b40f2b..5f5555c 100644
--- a/src/vk_common.c
+++ b/src/vk_common.c
@@ -3,9 +3,14 @@
#include "vk_common.h"
+#if defined VK_FORCE_DYNAMIC_LOAD && !defined NAUNET_ON_WINDOWS
+#include <dlfcn.h>
+#endif
+
static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_vk_proc_address(VkInstance inst, const char *name)
{
PFN_vkGetInstanceProcAddr vk_get_proc_addr;
+#ifdef VK_FORCE_DYNAMIC_LOAD
#ifdef NAUNET_ON_WINDOWS
const char *VKLib = "vulkan-1.dll";
HMODULE VKModule = LoadLibraryA(VKLib);
@@ -15,16 +20,16 @@ static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL get_vk_proc_address(VkInstance i
}
vk_get_proc_addr = (void *)GetProcAddress(VKModule, "vkGetInstanceProcAddr");
#else
- /*
const char *vk_lib = "libvulkan.so.1";
- void *vk_module = dlopen(vk_lib, RTLD_LAZY | RTLD_LOCAL);
+ void *vk_module = dlopen(vk_lib, RTLD_LAZY | RTLD_GLOBAL | RTLD_NODELETE);
if (!vk_module) {
log_error("Failed to load %s.", vk_lib);
return NULL;
}
vk_get_proc_addr = (PFN_vkGetInstanceProcAddr)dlsym(vk_module, "vkGetInstanceProcAddr");
dlclose(vk_module);
- */
+#endif
+#else
vk_get_proc_addr = vkGetInstanceProcAddr;
#endif
if (!vk_get_proc_addr) return NULL;
@@ -42,13 +47,15 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL stl_get_vk_proc_address(VkInstance inst
VkResult stl_vk_destroy_surface(VkInstance inst, VkSurfaceKHR surface)
{
-#ifdef NAUNET_ON_WINDOWS
- PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
- vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)get_vk_proc_address(inst, "vkDestroySurfaceKHR");
- if (!vkDestroySurfaceKHR) {
+ PFN_vkDestroySurfaceKHR pVkDestroySurfaceKHR;
+#ifdef VK_FORCE_DYNAMIC_LOAD
+ pVkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)get_vk_proc_address(inst, "vkDestroySurfaceKHR");
+ if (!pVkDestroySurfaceKHR) {
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
+#else
+ pVkDestroySurfaceKHR = vkDestroySurfaceKHR;
#endif
- vkDestroySurfaceKHR(inst, surface, NULL);
+ pVkDestroySurfaceKHR(inst, surface, NULL);
return VK_SUCCESS;
}
diff --git a/src/vk_common.h b/src/vk_common.h
index 4fcfe14..2fe17e9 100644
--- a/src/vk_common.h
+++ b/src/vk_common.h
@@ -1,5 +1,9 @@
#include "window.h"
+#ifdef NAUNET_ON_WINDOWS
+#define VK_FORCE_DYNAMIC_LOAD
+#endif
+
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL stl_get_vk_proc_address(VkInstance inst, const char *name);
VkResult stl_vk_create_surface(void *window, VkInstance inst, VkSurfaceKHR *surface);
VkResult stl_vk_destroy_surface(VkInstance inst, VkSurfaceKHR surface);
diff --git a/src/window_wayland.c b/src/window_wayland.c
index 68a0444..1d3be16 100644
--- a/src/window_wayland.c
+++ b/src/window_wayland.c
@@ -10,7 +10,7 @@
#include "poll_common.h"
#include "keys.h"
-#define FRAME_NO_VALUE -DBL_MAX
+#define FRAME_NO_VALUE ((f64)0xffffffffffffffff)
f64 stl_scale_scroll(f64 v, f64 factor)
{
@@ -564,10 +564,10 @@ static void keyboard_enter(void *data, struct wl_keyboard *keyboard,
(void)keyboard;
(void)serial;
(void)surface;
- void *item;
+ u32 *item;
wl_array_for_each(item, keys) {
- u32 key = *(u32 *)item;
- al_assert(key < STELA_WAYLAND_KEY_MAX);
+ u32 key = *item;
+ al_assert(key <= STELA_WAYLAND_KEY_MAX);
u16 mapped_key = global.keycodes[key];
if (stl_key_to_mod(mapped_key) == STELA_MOD_NONE) continue;
stl_window_send_key_event(&wl->w, STELA_BUTTON_PRESSED, mapped_key);
@@ -591,7 +591,7 @@ static void keyboard_key(void *data, struct wl_keyboard *keyboard,
(void)keyboard;
(void)serial;
(void)time;
- al_assert(key < STELA_WAYLAND_KEY_MAX);
+ al_assert(key <= STELA_WAYLAND_KEY_MAX);
u16 mapped_key = global.keycodes[key];
u8 mapped_state = (state == WL_KEYBOARD_KEY_STATE_PRESSED) ? STELA_BUTTON_PRESSED : STELA_BUTTON_RELEASED;
stl_window_send_key_immediate_event(&wl->w, mapped_state, mapped_key);
@@ -1198,15 +1198,17 @@ static VkResult window_wayland_vk_create_surface(void *window, VkInstance inst,
.surface = wl->surface
};
- /*
- PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR;
- vkCreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)stl_get_vk_proc_address(inst, "vkCreateWaylandSurfaceKHR");
- if (!vkCreateWaylandSurfaceKHR) {
+ PFN_vkCreateWaylandSurfaceKHR pVkCreateWaylandSurfaceKHR;
+#ifdef VK_FORCE_DYNAMIC_LOAD
+ pVkCreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)stl_get_vk_proc_address(inst, "vkCreateWaylandSurfaceKHR");
+ if (!pVkCreateWaylandSurfaceKHR) {
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
- */
+#else
+ pVkCreateWaylandSurfaceKHR = vkCreateWaylandSurfaceKHR;
+#endif
- VkResult ret = vkCreateWaylandSurfaceKHR(inst, &info, NULL, surface);
+ VkResult ret = pVkCreateWaylandSurfaceKHR(inst, &info, NULL, surface);
if (ret != VK_SUCCESS) {
log_error("Failed to create Wayland Vulkan surface.");
}
diff --git a/src/window_wayland.h b/src/window_wayland.h
index 09c3821..3df2794 100644
--- a/src/window_wayland.h
+++ b/src/window_wayland.h
@@ -22,13 +22,14 @@
#include "egl_common.h"
#endif
-#define STELA_WAYLAND_KEY_MAX (KEY_MEDIA + 1)
+#define STELA_WAYLAND_KEY_MAX KEY_MAX
+#define STELA_WAYLAND_KEY_COUNT KEY_CNT
struct stl_wayland_global {
struct wl_display *display;
s32 display_fd;
struct wl_registry *registry;
- u16 keycodes[STELA_WAYLAND_KEY_MAX];
+ u16 keycodes[STELA_WAYLAND_KEY_COUNT];
array(struct stl_monitor *) monitors;
#if defined STELA_API_VULKAN
const char **vk_extensions;
diff --git a/subprojects/glfw3.wrap b/subprojects/glfw3.wrap
index 2e3e365..692b7a0 100644
--- a/subprojects/glfw3.wrap
+++ b/subprojects/glfw3.wrap
@@ -1,6 +1,6 @@
[wrap-git]
-directory = glfw3-8e15281
+directory = glfw3-162896e
url = https://github.com/glfw/glfw.git
-revision = 8e15281d34a8b9ee9271ccce38177a3d812456f8
+revision = 162896e5b9a40dc382c5c438cd12c90a5ff86ddd
depth = 1
method = cmake
diff --git a/subprojects/libalabaster.wrap b/subprojects/libalabaster.wrap
index e93a582..3f7a977 100644
--- a/subprojects/libalabaster.wrap
+++ b/subprojects/libalabaster.wrap
@@ -1,5 +1,5 @@
[wrap-git]
-directory = libalabaster-ed6fc17
+directory = libalabaster-dd7a1d1
url = https://git.akon.city/libalabaster.git
-revision = ed6fc176a1ef6afd43eaa198c43eb813c3a81d99
+revision = dd7a1d1afb8b3e93ab1005abdc21edb6efca840a
depth = 1
diff --git a/subprojects/libnaunet.wrap b/subprojects/libnaunet.wrap
index 53670a7..547bd75 100644
--- a/subprojects/libnaunet.wrap
+++ b/subprojects/libnaunet.wrap
@@ -1,5 +1,5 @@
[wrap-git]
-directory = libnaunet-4aea807
+directory = libnaunet-1e0f603
url = https://git.akon.city/libnaunet.git
-revision = 4aea807a167a894fd264718efc8c9fa8bced7dcb
+revision = 1e0f60341192c79bf49e84e6b187ffb7bfded252
depth = 1
diff --git a/tests/window.c b/tests/window.c
index e1c5de1..31447d8 100644
--- a/tests/window.c
+++ b/tests/window.c
@@ -4,9 +4,9 @@
#include <al/array.h>
#include <al/str.h>
#include <al/math.h>
+#include <nnwt/common.h>
#include <stl/window.h>
#include <stl/gl.h>
-#include <nnwt/common.h>
#define DEFAULT_WIDTH 720
#define DEFAULT_HEIGHT 480