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

View file

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