monotonic_start_time needs to be a global symbol, not local to each translation unit
This commit is contained in:
parent
3378175450
commit
97fe38fbbc
@ -194,6 +194,7 @@ const char *action_text, int32_t timeout, GLFWDBusnotificationcreatedfun callbac
|
||||
#pragma once
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "monotonic.h"
|
||||
|
||||
{}
|
||||
|
||||
|
||||
2
glfw/glfw3.h
vendored
2
glfw/glfw3.h
vendored
@ -1704,7 +1704,7 @@ typedef struct GLFWgamepadstate
|
||||
*
|
||||
* @ingroup init
|
||||
*/
|
||||
GLFWAPI int glfwInit(void);
|
||||
GLFWAPI int glfwInit(monotonic_t start_time);
|
||||
GLFWAPI void glfwRunMainLoop(GLFWtickcallback callback, void *callback_data);
|
||||
GLFWAPI void glfwStopMainLoop(void);
|
||||
GLFWAPI unsigned long long glfwAddTimer(monotonic_t interval, bool repeats, GLFWuserdatafun callback, void * callback_data, GLFWuserdatafun free_callback);
|
||||
|
||||
4
glfw/init.c
vendored
4
glfw/init.c
vendored
@ -27,6 +27,7 @@
|
||||
// Please use C89 style variable declarations in this file because VS 2010
|
||||
//========================================================================
|
||||
|
||||
#define MONOTONIC_START_MODULE
|
||||
#include "internal.h"
|
||||
#include "mappings.h"
|
||||
|
||||
@ -214,10 +215,11 @@ _glfwDebug(const char *format, ...) {
|
||||
////// GLFW public API //////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
GLFWAPI int glfwInit(void)
|
||||
GLFWAPI int glfwInit(monotonic_t start_time)
|
||||
{
|
||||
if (_glfw.initialized)
|
||||
return true;
|
||||
monotonic_start_time = start_time;
|
||||
|
||||
memset(&_glfw, 0, sizeof(_glfw));
|
||||
_glfw.hints.init = _glfwInitHints;
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
* Distributed under terms of the GPL3 license.
|
||||
*/
|
||||
|
||||
#define MONOTONIC_START_MODULE
|
||||
#ifdef __APPLE__
|
||||
// Needed for _CS_DARWIN_USER_CACHE_DIR
|
||||
#define _DARWIN_C_SOURCE
|
||||
|
||||
9
kitty/glfw-wrapper.h
generated
9
kitty/glfw-wrapper.h
generated
@ -7,7 +7,7 @@
|
||||
#pragma once
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "../kitty/monotonic.h"
|
||||
#include "monotonic.h"
|
||||
|
||||
|
||||
|
||||
@ -955,7 +955,7 @@ typedef struct GLFWkeyevent
|
||||
// Bit field describing which [modifier keys](@ref mods) were held down.
|
||||
int mods;
|
||||
|
||||
// UTF-8 encoded text generated by this key event or empty string.
|
||||
// UTF-8 encoded text generated by this key event or empty string or NULL
|
||||
const char *text;
|
||||
|
||||
// Used for Input Method events. Zero for normal key events.
|
||||
@ -1249,7 +1249,8 @@ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double,int);
|
||||
* the "s" key will generate text "o" and GLFW_KEY_O.
|
||||
*
|
||||
* @param[in] window The window that received the event.
|
||||
* @param[in] ev TODO: blablabla
|
||||
* @param[in] ev The key event, see GLFWkeyevent. The data in this event is only valid for
|
||||
* the lifetime of the callback.
|
||||
*
|
||||
* @note On X11/Wayland if a modifier other than the modifiers GLFW reports
|
||||
* (ctrl/shift/alt/super) is used, GLFW will report the shifted key rather
|
||||
@ -1476,7 +1477,7 @@ typedef void (* GLFWcocoarenderframefun)(GLFWwindow*);
|
||||
typedef void (*GLFWwaylandframecallbackfunc)(unsigned long long id);
|
||||
typedef void (*GLFWDBusnotificationcreatedfun)(unsigned long long, uint32_t, void*);
|
||||
typedef void (*GLFWDBusnotificationactivatedfun)(uint32_t, const char*);
|
||||
typedef int (*glfwInit_func)(void);
|
||||
typedef int (*glfwInit_func)(monotonic_t);
|
||||
glfwInit_func glfwInit_impl;
|
||||
#define glfwInit glfwInit_impl
|
||||
|
||||
|
||||
@ -792,7 +792,7 @@ glfw_init(PyObject UNUSED *self, PyObject *args) {
|
||||
glfwDBusSetUserNotificationHandler(dbus_user_notification_activated);
|
||||
}
|
||||
#endif
|
||||
PyObject *ans = glfwInit() ? Py_True: Py_False;
|
||||
PyObject *ans = glfwInit(monotonic_start_time) ? Py_True: Py_False;
|
||||
if (ans == Py_True) {
|
||||
OSWindow w = {0};
|
||||
set_os_window_dpi(&w);
|
||||
|
||||
@ -61,7 +61,12 @@ static inline double monotonic_t_to_s_double(monotonic_t time) {
|
||||
return (double)time / 1000.0 / 1000.0 / 1000.0;
|
||||
}
|
||||
|
||||
static monotonic_t start_time = 0;
|
||||
#ifdef MONOTONIC_START_MODULE
|
||||
monotonic_t monotonic_start_time = 0;
|
||||
#else
|
||||
extern monotonic_t monotonic_start_time;
|
||||
#endif
|
||||
|
||||
|
||||
static inline monotonic_t monotonic_(void) {
|
||||
struct timespec ts = {0};
|
||||
@ -76,9 +81,9 @@ static inline monotonic_t monotonic_(void) {
|
||||
}
|
||||
|
||||
static inline monotonic_t monotonic(void) {
|
||||
return monotonic_() - start_time;
|
||||
return monotonic_() - monotonic_start_time;
|
||||
}
|
||||
|
||||
static inline void init_monotonic(void) {
|
||||
start_time = monotonic_();
|
||||
monotonic_start_time = monotonic_();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user