internal/glfw: reduce TLS usages at swapInterval*

This commit is contained in:
Hajime Hoshi 2024-10-12 23:56:23 +09:00
parent 18d3d91195
commit 09c027b670
9 changed files with 9 additions and 21 deletions

View File

@ -647,7 +647,7 @@ GLFWAPI void glfwSwapInterval(GLFWwindow* handle, int interval)
_GLFW_REQUIRE_INIT(); _GLFW_REQUIRE_INIT();
window->context.swapInterval(interval); window->context.swapInterval(window, interval);
} }
GLFWAPI int glfwExtensionSupported(GLFWwindow* handle, const char* extension) GLFWAPI int glfwExtensionSupported(GLFWwindow* handle, const char* extension)

View File

@ -513,7 +513,7 @@ func (w *Window) SwapInterval(interval int) error {
return NotInitialized return NotInitialized
} }
if err := w.context.swapInterval(interval); err != nil { if err := w.context.swapInterval(w, interval); err != nil {
return err return err
} }
return nil return nil

View File

@ -244,7 +244,7 @@ static void swapBuffersEGL(_GLFWwindow* window)
eglSwapBuffers(_glfw.egl.display, window->context.egl.surface); eglSwapBuffers(_glfw.egl.display, window->context.egl.surface);
} }
static void swapIntervalEGL(int interval) static void swapIntervalEGL(_GLFWwindow* window, int interval)
{ {
eglSwapInterval(_glfw.egl.display, interval); eglSwapInterval(_glfw.egl.display, interval);
} }

View File

@ -165,11 +165,8 @@ static void swapBuffersGLX(_GLFWwindow* window)
glXSwapBuffers(_glfw.x11.display, window->context.glx.window); glXSwapBuffers(_glfw.x11.display, window->context.glx.window);
} }
static void swapIntervalGLX(int interval) static void swapIntervalGLX(_GLFWwindow* window, int interval)
{ {
_GLFWwindow* window = _glfwPlatformGetTls(&_glfw.contextSlot);
assert(window != NULL);
if (_glfw.glx.EXT_swap_control) if (_glfw.glx.EXT_swap_control)
{ {
_glfw.glx.SwapIntervalEXT(_glfw.x11.display, _glfw.glx.SwapIntervalEXT(_glfw.x11.display,

View File

@ -55,7 +55,7 @@ typedef struct _GLFWmutex _GLFWmutex;
typedef void (* _GLFWmakecontextcurrentfun)(_GLFWwindow*); typedef void (* _GLFWmakecontextcurrentfun)(_GLFWwindow*);
typedef void (* _GLFWswapbuffersfun)(_GLFWwindow*); typedef void (* _GLFWswapbuffersfun)(_GLFWwindow*);
typedef void (* _GLFWswapintervalfun)(int); typedef void (* _GLFWswapintervalfun)(_GLFWwindow*, int);
typedef int (* _GLFWextensionsupportedfun)(const char*); typedef int (* _GLFWextensionsupportedfun)(const char*);
typedef GLFWglproc (* _GLFWgetprocaddressfun)(const char*); typedef GLFWglproc (* _GLFWgetprocaddressfun)(const char*);
typedef void (* _GLFWdestroycontextfun)(_GLFWwindow*); typedef void (* _GLFWdestroycontextfun)(_GLFWwindow*);

View File

@ -87,7 +87,7 @@ type context struct {
// TODO: Put these functions in an interface type. // TODO: Put these functions in an interface type.
makeCurrent func(*Window) error makeCurrent func(*Window) error
swapBuffers func(*Window) error swapBuffers func(*Window) error
swapInterval func(int) error swapInterval func(*Window, int) error
extensionSupported func(string) bool extensionSupported func(string) bool
getProcAddress func(string) uintptr getProcAddress func(string) uintptr
destroy func(*Window) error destroy func(*Window) error

View File

@ -52,13 +52,10 @@ static void swapBuffersNSGL(_GLFWwindow* window)
} // autoreleasepool } // autoreleasepool
} }
static void swapIntervalNSGL(int interval) static void swapIntervalNSGL(_GLFWwindow* window, int interval)
{ {
@autoreleasepool { @autoreleasepool {
_GLFWwindow* window = _glfwPlatformGetTls(&_glfw.contextSlot);
assert(window != NULL);
[window->context.nsgl.object setValues:&interval [window->context.nsgl.object setValues:&interval
forParameter:NSOpenGLContextParameterSwapInterval]; forParameter:NSOpenGLContextParameterSwapInterval];

View File

@ -71,7 +71,7 @@ static void swapBuffersOSMesa(_GLFWwindow* window)
// No double buffering on OSMesa // No double buffering on OSMesa
} }
static void swapIntervalOSMesa(int interval) static void swapIntervalOSMesa(_GLFWwindow* window, int interval)
{ {
// No swap interval on OSMesa // No swap interval on OSMesa
} }

View File

@ -288,13 +288,7 @@ func swapBuffersWGL(window *Window) error {
return nil return nil
} }
func swapIntervalWGL(interval int) error { func swapIntervalWGL(window *Window, interval int) error {
ptr, err := _glfw.contextSlot.get()
if err != nil {
return err
}
window := (*Window)(unsafe.Pointer(ptr))
window.context.platform.interval = interval window.context.platform.interval = interval
if window.monitor == nil && winver.IsWindowsVistaOrGreater() { if window.monitor == nil && winver.IsWindowsVistaOrGreater() {