From b51da0aa7da385989be070995d423600bc234481 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 8 Jul 2026 14:34:43 +0530 Subject: [PATCH] fix regression in slang migration that caused second OS Window to not render because shared gamma_lut UBO was only bound to first OS Window context --- kitty/glfw.c | 1 + kitty/shaders.c | 10 ++++++++-- kitty/state.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/kitty/glfw.c b/kitty/glfw.c index db06327a3..731a60f74 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -1880,6 +1880,7 @@ create_os_window(PyObject UNUSED *self, PyObject *args, PyObject *kw) { } is_first_window = false; } + bind_shader_globals_to_current_context(); OSWindow *w = add_os_window(); w->handle = glfw_window; w->disallow_title_changes = disallow_override_title; diff --git a/kitty/shaders.c b/kitty/shaders.c index 30b349e79..5dbad27f8 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -382,9 +382,15 @@ init_cell_program(void) { unmap_vao_buffer(shader_globals_vao_idx, GAMMA_LUT_GLOBAL_BUFFER); // The border colors change on every draw, but are shared amongst all border VAOs (only one is ever drawn at a time) alloc_vao_buffer(shader_globals_vao_idx, border_colors.size, BORDER_COLORS_GLOBAL_BUFFER, GL_STREAM_DRAW); - bind_vao_uniform_buffer(shader_globals_vao_idx, GAMMA_LUT_GLOBAL_BUFFER, GAMMA_LUT_BINDING_POINT); - bind_vao_uniform_buffer(shader_globals_vao_idx, BORDER_COLORS_GLOBAL_BUFFER, BORDER_COLORS_BINDING_POINT); } + bind_shader_globals_to_current_context(); +} + +void +bind_shader_globals_to_current_context(void) { + if (shader_globals_vao_idx == -1) return; + bind_vao_uniform_buffer(shader_globals_vao_idx, GAMMA_LUT_GLOBAL_BUFFER, GAMMA_LUT_BINDING_POINT); + bind_vao_uniform_buffer(shader_globals_vao_idx, BORDER_COLORS_GLOBAL_BUFFER, BORDER_COLORS_BINDING_POINT); } #define CELL_BUFFERS enum { cell_data_buffer, selection_buffer, uniform_buffer, color_table_buffer }; diff --git a/kitty/state.h b/kitty/state.h index 553054156..ac7dbb4ef 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -584,6 +584,7 @@ bool drag_scroll(Window *, OSWindow*); void draw_borders(ssize_t vao_idx, unsigned int num_border_rects, BorderRect *rect_buf, bool rect_data_is_dirty, color_type, unsigned int, bool, OSWindow *w); ssize_t create_cell_vao(void); ssize_t create_border_vao(void); +void bind_shader_globals_to_current_context(void); bool send_cell_data_to_gpu(ssize_t, Screen *, OSWindow *); void draw_cells(const WindowRenderData*, OSWindow *, bool, bool, bool, Window*); bool update_cursor_trail(CursorTrail *ct, Window *w, monotonic_t now, OSWindow *os_window);