diff --git a/kitty/shaders.c b/kitty/shaders.c index 5c90396f6..f75401b97 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -171,7 +171,7 @@ init_cell_program() { #define CELL_BUFFERS enum { cell_data_buffer, selection_buffer, uniform_buffer }; -static ssize_t +ssize_t create_cell_vao() { ssize_t vao_idx = create_vao(); #define A(name, size, dtype, offset, stride) \ @@ -194,7 +194,7 @@ create_cell_vao() { #undef A1 } -static ssize_t +ssize_t create_graphics_vao() { ssize_t vao_idx = create_vao(); add_buffer_to_vao(vao_idx, GL_ARRAY_BUFFER); @@ -514,8 +514,6 @@ NO_ARG(init_cursor_program) NO_ARG(init_borders_program) NO_ARG(init_cell_program) -NO_ARG_INT(create_cell_vao) -NO_ARG_INT(create_graphics_vao) NO_ARG(destroy_sprite_map) PYWRAP1(layout_sprite_map) { unsigned int cell_width, cell_height; @@ -537,8 +535,6 @@ static PyMethodDef module_methods[] = { MW(init_cursor_program, METH_NOARGS), MW(init_borders_program, METH_NOARGS), MW(init_cell_program, METH_NOARGS), - MW(create_cell_vao, METH_NOARGS), - MW(create_graphics_vao, METH_NOARGS), MW(layout_sprite_map, METH_VARARGS), MW(destroy_sprite_map, METH_NOARGS), diff --git a/kitty/state.c b/kitty/state.c index a7f3781d6..56ef8bade 100644 --- a/kitty/state.c +++ b/kitty/state.c @@ -60,6 +60,7 @@ add_os_window() { ensure_space_for(&global_state, os_windows, OSWindow, global_state.num_os_windows + 1, capacity, 1, true); OSWindow *ans = global_state.os_windows + global_state.num_os_windows++; memset(ans, 0, sizeof(OSWindow)); + ans->tab_bar_render_data.vao_idx = create_cell_vao(); return ans; } @@ -83,6 +84,8 @@ add_window(id_type os_window_id, id_type tab_id, PyObject *title) { tab->windows[tab->num_windows].id = ++global_state.window_id_counter; tab->windows[tab->num_windows].visible = true; tab->windows[tab->num_windows].title = title; + tab->windows[tab->num_windows].render_data.vao_idx = create_cell_vao(); + tab->windows[tab->num_windows].render_data.gvao_idx = create_graphics_vao(); Py_INCREF(tab->windows[tab->num_windows].title); return tab->windows[tab->num_windows++].id; END_WITH_TAB; @@ -316,9 +319,10 @@ PYWRAP1(set_tab_bar_render_data) { #define A(name) &(d.name) ScreenRenderData d = {0}; id_type os_window_id; - PA("KiffffO", &os_window_id, A(vao_idx), A(xstart), A(ystart), A(dx), A(dy), A(screen)); + PA("KffffO", &os_window_id, A(xstart), A(ystart), A(dx), A(dy), A(screen)); WITH_OS_WINDOW(os_window_id) Py_CLEAR(os_window->tab_bar_render_data.screen); + d.vao_idx = os_window->tab_bar_render_data.vao_idx; os_window->tab_bar_render_data = d; Py_INCREF(os_window->tab_bar_render_data.screen); END_WITH_OS_WINDOW @@ -343,10 +347,12 @@ PYWRAP1(set_window_render_data) { unsigned int window_idx; ScreenRenderData d = {0}; WindowGeometry g = {0}; - PA("KIiiffffOIIII", &os_window_id, &tab_id, &window_idx, A(vao_idx), A(gvao_idx), A(xstart), A(ystart), A(dx), A(dy), A(screen), B(left), B(top), B(right), B(bottom)); + PA("KKI ffff OIIII", &os_window_id, &tab_id, &window_idx, A(xstart), A(ystart), A(dx), A(dy), A(screen), B(left), B(top), B(right), B(bottom)); WITH_TAB(os_window_id, tab_id); Py_CLEAR(tab->windows[window_idx].render_data.screen); + d.vao_idx = tab->windows[window_idx].render_data.vao_idx; + d.gvao_idx = tab->windows[window_idx].render_data.gvao_idx; tab->windows[window_idx].render_data = d; tab->windows[window_idx].geometry = g; Py_INCREF(tab->windows[window_idx].render_data.screen); diff --git a/kitty/state.h b/kitty/state.h index 6092e0d46..091f3f8a7 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -143,6 +143,8 @@ OSWindow* add_os_window(); OSWindow* current_os_window(); 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, uint32_t viewport_width, uint32_t viewport_height); +ssize_t create_cell_vao(); +ssize_t create_graphics_vao(); ssize_t create_border_vao(); bool draw_cells(ssize_t, ssize_t, float, float, float, float, Screen *, OSWindow *); void draw_cursor(CursorRenderInfo *, bool); diff --git a/kitty/tabs.py b/kitty/tabs.py index e3b20ab18..ff6a4df41 100644 --- a/kitty/tabs.py +++ b/kitty/tabs.py @@ -10,9 +10,9 @@ from .child import Child from .config import build_ansi_color_table from .constants import WindowGeometry, appname, cell_size, get_boss, shell_path from .fast_data_types import ( - DECAWM, Screen, add_tab, create_cell_vao, glfw_post_empty_event, - remove_tab, remove_window, set_active_tab, set_active_window, - set_tab_bar_render_data, swap_tabs, swap_windows, viewport_for_window + DECAWM, Screen, add_tab, glfw_post_empty_event, remove_tab, remove_window, + set_active_tab, set_active_window, set_tab_bar_render_data, swap_tabs, + swap_windows, viewport_for_window ) from .layout import Rect, all_layouts from .utils import color_as_int @@ -212,7 +212,6 @@ class TabBar: # {{{ self.num_tabs = 1 self.cell_width = 1 self.data_buffer_size = 0 - self.vao_id = create_cell_vao() self.layout_changed = None self.dirty = True self.screen = s = Screen(None, 1, 10) @@ -244,7 +243,7 @@ class TabBar: # {{{ else: self.tab_bar_blank_rects = () self.screen_geometry = sg = calculate_gl_geometry(g, viewport_width, viewport_height, cell_width, cell_height) - set_tab_bar_render_data(self.os_window_id, self.vao_id, sg.xstart, sg.ystart, sg.dx, sg.dy, self.screen) + set_tab_bar_render_data(self.os_window_id, sg.xstart, sg.ystart, sg.dx, sg.dy, self.screen) def update(self, data): if self.layout_changed is None: diff --git a/kitty/window.py b/kitty/window.py index 3f0b9a326..9b24485d1 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -15,10 +15,10 @@ from .fast_data_types import ( BRACKETED_PASTE_END, BRACKETED_PASTE_START, CELL_BACKGROUND_PROGRAM, CELL_FOREGROUND_PROGRAM, CELL_PROGRAM, CELL_SPECIAL_PROGRAM, CURSOR_PROGRAM, GRAPHICS_PROGRAM, SCROLL_FULL, SCROLL_LINE, SCROLL_PAGE, - Screen, add_window, compile_program, create_cell_vao, create_graphics_vao, - glfw_post_empty_event, init_cell_program, init_cursor_program, - set_clipboard_string, set_window_render_data, update_window_title, - update_window_visibility, viewport_for_window + Screen, add_window, compile_program, glfw_post_empty_event, + init_cell_program, init_cursor_program, set_clipboard_string, + set_window_render_data, update_window_title, update_window_visibility, + viewport_for_window ) from .keys import keyboard_mode_name from .rgb import to_color @@ -80,8 +80,6 @@ class Window: self.id = add_window(tab.os_window_id, tab.id, self.title) if not self.id: raise Exception('No tab with id: {} in OS Window: {} was found, or the window counter wrapped'.format(tab.id, tab.os_window_id)) - self.vao_id = create_cell_vao() - self.gvao_id = create_graphics_vao() self.tab_id = tab.id self.os_window_id = tab.os_window_id self.tabref = weakref.ref(tab) @@ -128,7 +126,7 @@ class Window: else: sg = self.update_position(new_geometry) self.geometry = g = new_geometry - set_window_render_data(self.os_window_id, self.tab_id, window_idx, self.vao_id, self.gvao_id, sg.xstart, sg.ystart, sg.dx, sg.dy, self.screen, *g[:4]) + set_window_render_data(self.os_window_id, self.tab_id, window_idx, sg.xstart, sg.ystart, sg.dx, sg.dy, self.screen, *g[:4]) def contains(self, x, y): g = self.geometry @@ -247,8 +245,7 @@ class Window: return ''.join(self.screen.text_for_selection()) def destroy(self): - if self.vao_id is not None: - self.vao_id = self.gvao_id = None + pass def buffer_as_ansi(self): data = []