Skip to content

Commit 67cb418

Browse files
committed
Simple animations for OpenGL geometry
1 parent bc643e9 commit 67cb418

File tree

5 files changed

+33
-16
lines changed

5 files changed

+33
-16
lines changed

manim/animation/animation.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
from manim.scene.scene import Scene
1515

1616
from .. import logger
17-
from ..mobject.mobject import Mobject, _AnimationBuilder
17+
from ..mobject import mobject
18+
from ..mobject import opengl_mobject
19+
from ..mobject.mobject import Mobject
1820
from ..utils.rate_functions import smooth
1921
from ..mobject.opengl_mobject import OpenGLMobject
2022

@@ -198,7 +200,9 @@ def is_remover(self) -> bool:
198200
return self.remover
199201

200202

201-
def prepare_animation(anim: Union["Animation", "_AnimationBuilder"]) -> "Animation":
203+
def prepare_animation(
204+
anim: Union["Animation", "mobject._AnimationBuilder"]
205+
) -> "Animation":
202206
r"""Returns either an unchanged animation, or the animation built
203207
from a passed animation factory.
204208
@@ -225,7 +229,10 @@ def prepare_animation(anim: Union["Animation", "_AnimationBuilder"]) -> "Animati
225229
TypeError: Object 42 cannot be converted to an animation
226230
227231
"""
228-
if isinstance(anim, _AnimationBuilder):
232+
if isinstance(anim, mobject._AnimationBuilder):
233+
return anim.build()
234+
235+
if isinstance(anim, opengl_mobject._AnimationBuilder):
229236
return anim.build()
230237

231238
if isinstance(anim, Animation):

manim/animation/creation.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def construct(self):
8282
from ..animation.composition import Succession
8383
from ..mobject.mobject import Group, Mobject
8484
from ..mobject.types.vectorized_mobject import VMobject
85+
from ..mobject.types.opengl_vectorized_mobject import OpenGLVMobject
8586
from ..utils.bezier import integer_interpolate
8687
from ..utils.rate_functions import double_smooth, linear, smooth
8788

@@ -101,7 +102,9 @@ class ShowPartial(Animation):
101102
"""
102103

103104
def __init__(self, mobject: VMobject, **kwargs):
104-
if not isinstance(mobject, VMobject):
105+
if not isinstance(mobject, VMobject) and not isinstance(
106+
mobject, OpenGLVMobject
107+
):
105108
raise TypeError("This Animation only works on vectorized mobjects")
106109
super().__init__(mobject, **kwargs)
107110

manim/mobject/opengl_mobject.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,7 @@ def update_target(*method_args, **method_kwargs):
16171617
return update_target
16181618

16191619
def build(self):
1620-
from manimlib.animation.transform import _MethodAnimation
1620+
from ..animation.transform import _MethodAnimation
16211621

16221622
if self.overridden_animation:
16231623
return self.overridden_animation

manim/renderer/opengl_renderer.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,15 @@ def update_depth_test(self, context, shader_wrapper):
5454
else:
5555
self.context.disable(moderngl.DEPTH_TEST)
5656

57-
def render_mobject(self, mob):
57+
def render_mobject(self, mobs):
5858
# shader_wrapper_list = self.get_shader_wrapper_list(mob)
59-
shader_wrapper_list = mob.get_shader_wrapper_list()
60-
render_group_list = map(
61-
lambda x: self.get_render_group(self.context, x), shader_wrapper_list
62-
)
63-
for render_group in render_group_list:
64-
self.render_render_group(render_group)
59+
for mob in mobs:
60+
shader_wrapper_list = mob.get_shader_wrapper_list()
61+
render_group_list = map(
62+
lambda x: self.get_render_group(self.context, x), shader_wrapper_list
63+
)
64+
for render_group in render_group_list:
65+
self.render_render_group(render_group)
6566

6667
def render_render_group(self, render_group):
6768
shader_wrapper = render_group["shader_wrapper"]
@@ -318,7 +319,7 @@ def play(self, scene, *args, **kwargs):
318319
def render(self, scene, frame_offset, moving_mobjects):
319320
def update_frame():
320321
self.frame_buffer_object.clear(*window_background_color)
321-
self.render_mobject(scene.mobjects[0])
322+
self.render_mobject(scene.mobjects)
322323
self.window.swap_buffers()
323324
self.animation_elapsed_time = time.time() - self.animation_start_time
324325

manim/scene/scene.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,15 @@ def get_mobject_family_members(self):
301301
list
302302
List of mobject family members.
303303
"""
304-
return extract_mobject_family_members(
305-
self.mobjects, use_z_index=self.renderer.camera.use_z_index
306-
)
304+
if config["use_opengl_renderer"]:
305+
family_members = []
306+
for mob in self.mobjects:
307+
family_members.extend(mob.get_family())
308+
return family_members
309+
else:
310+
return extract_mobject_family_members(
311+
self.mobjects, use_z_index=self.renderer.camera.use_z_index
312+
)
307313

308314
def add(self, *mobjects):
309315
"""

0 commit comments

Comments
 (0)