Track indices for fill shader, but prevent ibo usage at the Camera level

This commit is contained in:
Grant Sanderson 2023-01-12 15:56:44 -08:00
parent a07701e295
commit 9464f83d18
2 changed files with 12 additions and 11 deletions

View file

@ -402,16 +402,15 @@ class Camera(object):
shader_wrapper: ShaderWrapper,
single_use: bool = True
) -> dict[str, Any]:
# Data buffers
vbo = self.ctx.buffer(shader_wrapper.vert_data.tobytes())
if shader_wrapper.vert_indices is None:
ibo = None
else:
vert_index_data = shader_wrapper.vert_indices.astype('i4').tobytes()
if vert_index_data:
ibo = self.ctx.buffer(vert_index_data)
else:
ibo = None
# Data buffer
vert_data = shader_wrapper.vert_data
indices = shader_wrapper.vert_indices
if indices is not None:
vert_data = vert_data[indices]
vbo = self.ctx.buffer(vert_data.tobytes())
# For the moment, the index buffer is actually not used,
# since it seems to make the actual render calls meaninfully slower
ibo = None
# Program and vertex array
shader_program, vert_format = self.get_shader_program(shader_wrapper)

View file

@ -1134,6 +1134,7 @@ class VMobject(Mobject):
self.stroke_data = np.zeros(0, dtype=self.stroke_dtype)
self.fill_shader_wrapper = ShaderWrapper(
vert_data=self.fill_data,
vert_indices=np.zeros(0, dtype='i4'),
uniforms=self.uniforms,
shader_folder=self.fill_shader_folder,
render_primitive=self.fill_render_primitive,
@ -1152,7 +1153,8 @@ class VMobject(Mobject):
return self
def get_fill_shader_wrapper(self) -> ShaderWrapper:
self.fill_shader_wrapper.vert_data = self.get_fill_shader_data()[self.get_triangulation()]
self.fill_shader_wrapper.vert_data = self.get_fill_shader_data()
self.fill_shader_wrapper.vert_indices = self.get_triangulation()
self.fill_shader_wrapper.uniforms = self.get_shader_uniforms()
self.fill_shader_wrapper.depth_test = self.depth_test
return self.fill_shader_wrapper