Skip to content

Commit

Permalink
#2467 initialize the vao just once
Browse files Browse the repository at this point in the history
  • Loading branch information
totaam committed Nov 5, 2023
1 parent ff4e5e3 commit 4696b27
Showing 1 changed file with 22 additions and 21 deletions.
43 changes: 22 additions & 21 deletions xpra/client/gl/backing.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ def __init__(self, wid: int, window_alpha: bool, pixel_depth: int = 0):
self.offscreen_fbo = None
self.tmp_fbo = None
self.vao = None
self.vertex_buffer = None
self.pending_fbo_paint : list[tuple[int,int,int,int]] = []
self.last_flush = monotonic()
self.last_present_fbo_error = ""
Expand Down Expand Up @@ -387,8 +388,21 @@ def gl_init_shaders(self) -> None:
overlay_shader = self.gl_init_shader("overlay", GL_FRAGMENT_SHADER)
self.gl_init_program("overlay", vertex_shader, overlay_shader)
self.vao = glGenVertexArrays(1)
self.vertex_buffer = glGenBuffers(1)
vertices = [-1, -1, 1, -1, -1, 1, 1, 1]
c_vertices = (c_float * len(vertices))(*vertices)
glBindVertexArray(self.vao)
glBindBuffer(GL_ARRAY_BUFFER, self.vertex_buffer)
glBufferData(GL_ARRAY_BUFFER, len(vertices)*4, c_vertices, GL_STATIC_DRAW)
glBindBuffer(GL_ARRAY_BUFFER, 0)
glBindVertexArray(0)

def gl_init_program(self, name: str, *shaders: int):
def set_vao(self, index) -> None:
glBindVertexArray(self.vao)
glVertexAttribPointer(index, 2, GL_FLOAT, GL_FALSE, 0, c_void_p(0))
glEnableVertexAttribArray(index)

def gl_init_program(self, name: str, *shaders: int) -> None:
from OpenGL.GL import (
glAttachShader, glDetachShader,
glCreateProgram, glDeleteProgram, glLinkProgram, glGetProgramiv, glValidateProgram, glGetShaderInfoLog,
Expand All @@ -414,7 +428,7 @@ def gl_init_program(self, name: str, *shaders: int):
glDetachShader(program, shader)
self.programs[name] = program

def fail_shader(self, name: str, err: bytes):
def fail_shader(self, name: str, err: bytes) -> None:
from OpenGL.GL import glDeleteShader
err_str = bytestostr(err).strip("\n\r")
shader = self.shaders.pop(name, None)
Expand Down Expand Up @@ -542,7 +556,10 @@ def close(self) -> None:
if vao:
self.vao = None
glDeleteVertexArrays(1, [vao])

vb = self.vertex_buffer
if vb:
self.vertex_buffer = None
glDeleteBuffers([vb])

def paint_scroll(self, scroll_data, options: typedict, callbacks: Iterable[Callable]) -> None: # pylint: disable=arguments-differ, arguments-renamed
flush = options.intget("flush", 0)
Expand Down Expand Up @@ -799,16 +816,13 @@ def overlay_texture(self, texture: int, x: int, y: int, w: int, h: int) -> None:
viewport_pos = glGetUniformLocation(program, "viewport_pos")
glUniform2f(viewport_pos, x, y)

vertices = [-1, -1, 1, -1, -1, 1, 1, 1]
position = 0
pos_buffer = self.set_vao(position, vertices)
self.set_vao(position)

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)

glBindVertexArray(0)
glUseProgram(0)

glDeleteBuffers(1, [pos_buffer])
glDisableVertexAttribArray(position)

glBindTexture(target, 0)
Expand Down Expand Up @@ -1415,12 +1429,10 @@ def render_planar_update(self, rx: int, ry: int, rw: int, rh: int, x_scale=1.0,
viewport_pos = glGetUniformLocation(program, "viewport_pos")
glUniform2f(viewport_pos, rx, ry)

vertices = [-1, -1, 1, -1, -1, 1, 1, 1]
pos_buffer = self.set_vao(position, vertices)
self.set_vao(position)

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)

glDeleteBuffers(1, [pos_buffer])
glDisableVertexAttribArray(position)
glBindVertexArray(0)
glUseProgram(0)
Expand All @@ -1429,17 +1441,6 @@ def render_planar_update(self, rx: int, ry: int, rw: int, rh: int, x_scale=1.0,
glBindTexture(target, 0)
glActiveTexture(GL_TEXTURE0)

def set_vao(self, index, vertices : list):
c_vertices = (c_float * len(vertices))(*vertices)
glBindVertexArray(self.vao)
buf = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, buf)
glBufferData(GL_ARRAY_BUFFER, len(vertices)*4, c_vertices, GL_STATIC_DRAW)
glVertexAttribPointer(index, 2, GL_FLOAT, GL_FALSE, 0, c_void_p(0))
glBindBuffer(GL_ARRAY_BUFFER, 0)
glEnableVertexAttribArray(index)
return buf


def gl_show(self, rect_count: int) -> None:
start = monotonic()
Expand Down

0 comments on commit 4696b27

Please sign in to comment.