Migrate tabs to also use the new buffer mapping API

This commit is contained in:
Kovid Goyal 2017-09-08 19:42:14 +05:30
parent 029ff84f09
commit 51231b7eb2
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -3,7 +3,7 @@
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net> # License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
from collections import deque, namedtuple from collections import deque, namedtuple
from ctypes import addressof from ctypes import sizeof
from functools import partial from functools import partial
from .borders import Borders from .borders import Borders
@ -207,8 +207,9 @@ class TabBar:
def __init__(self, opts): def __init__(self, opts):
self.num_tabs = 1 self.num_tabs = 1
self.cell_width = 1 self.cell_width = 1
self.data_buffer_size = 0
self.vao_id = None self.vao_id = None
self.render_buf = self.selection_buf = None self.selection_buf = None
self.selection_buf_changed = True self.selection_buf_changed = True
self.dirty = True self.dirty = True
self.screen = s = Screen(None, 1, 10) self.screen = s = Screen(None, 1, 10)
@ -232,8 +233,8 @@ class TabBar:
ncells = viewport_width // cell_width ncells = viewport_width // cell_width
s.resize(1, ncells) s.resize(1, ncells)
s.reset_mode(DECAWM) s.reset_mode(DECAWM)
self.render_buf = (GLuint * (s.lines * s.columns * DATA_CELL_SIZE))()
self.selection_buf = (GLuint * (s.lines * s.columns))() self.selection_buf = (GLuint * (s.lines * s.columns))()
self.data_buffer_size = sizeof(GLuint) * s.lines * s.columns * DATA_CELL_SIZE
self.selection_buf_changed = True self.selection_buf_changed = True
margin = (viewport_width - ncells * cell_width) // 2 margin = (viewport_width - ncells * cell_width) // 2
self.window_geometry = g = WindowGeometry( self.window_geometry = g = WindowGeometry(
@ -245,7 +246,7 @@ class TabBar:
self.screen_geometry = calculate_gl_geometry(g, viewport_width, viewport_height, cell_width, cell_height) self.screen_geometry = calculate_gl_geometry(g, viewport_width, viewport_height, cell_width, cell_height)
def update(self, data): def update(self, data):
if self.render_buf is None: if self.selection_buf is None:
return return
s = self.screen s = self.screen
s.cursor.x = 0 s.cursor.x = 0
@ -271,17 +272,17 @@ class TabBar:
s.draw('') s.draw('')
break break
s.erase_in_line(0, False) # Ensure no long titles bleed after the last tab s.erase_in_line(0, False) # Ensure no long titles bleed after the last tab
s.update_cell_data(addressof(self.render_buf), True)
self.cell_ranges = cr self.cell_ranges = cr
self.dirty = True self.dirty = True
glfw_post_empty_event() glfw_post_empty_event()
def render(self, cell_program, sprites): def render(self, cell_program, sprites):
if self.render_buf is not None: if self.selection_buf is not None:
if self.vao_id is None: if self.vao_id is None:
self.vao_id = cell_program.create_sprite_map() self.vao_id = cell_program.create_sprite_map()
if self.dirty: if self.dirty:
cell_program.send_vertex_data(self.vao_id, self.render_buf) with cell_program.mapped_vertex_data(self.vao_id, self.data_buffer_size) as address:
self.screen.update_cell_data(address, 0, True)
if self.selection_buf_changed: if self.selection_buf_changed:
cell_program.send_vertex_data(self.vao_id, self.selection_buf, bufnum=1) cell_program.send_vertex_data(self.vao_id, self.selection_buf, bufnum=1)
self.selection_buf_changed = False self.selection_buf_changed = False