@@ -174,10 +174,6 @@ def __init__(
174174 self .init_points ()
175175 self .color = ManimColor .parse (color )
176176 self .init_colors ()
177- self .init_shader_data ()
178-
179- if self .depth_test :
180- self .apply_depth_test ()
181177
182178 @classmethod
183179 def __init_subclass__ (cls , ** kwargs ):
@@ -2639,8 +2635,6 @@ def align_data_and_family(self, mobject):
26392635 self .align_data (mobject )
26402636
26412637 def align_data (self , mobject ) -> None :
2642- # In case any data arrays get resized when aligned to shader data
2643- self .refresh_shader_data ()
26442638 for mob1 , mob2 in zip (self .get_family (), mobject .get_family ()):
26452639 # Separate out how points are treated so that subclasses
26462640 # can handle that case differently if they choose
@@ -2731,24 +2725,9 @@ def construct(self):
27312725
27322726 self.add(dotL, dotR, dotMiddle)
27332727 """
2734- for key in self .data :
2735- if key in self .locked_data_keys :
2736- continue
2737- if len (self .data [key ]) == 0 : # type: ignore
2738- continue
2739- if key not in mobject1 .data or key not in mobject2 .data :
2740- continue
2741-
2742- if key in ("points" , "bounding_box" ):
2743- func = path_func
2744- else :
2745- func = interpolate
2746-
2747- self .data [key ][:] = func (mobject1 .data [key ], mobject2 .data [key ], alpha ) # type: ignore
2748- for key in self .uniforms :
2749- self .uniforms [key ] = interpolate ( # type: ignore
2750- mobject1 .uniforms [key ], mobject2 .uniforms [key ], alpha
2751- )
2728+ # TODO: replace with list of attribute names with a locking system
2729+ self .points = path_func (mobject1 .points , mobject2 .points , alpha )
2730+ self .interpolate_color (mobject1 , mobject2 , alpha )
27522731 return self
27532732
27542733 def pointwise_become_partial (self , mobject , a , b ):
@@ -2906,44 +2885,36 @@ def has_same_shape_as(self, mobject: OpenGLMobject) -> bool:
29062885 return bool (np .isclose (points1 , points2 ).all ())
29072886
29082887 # Operations touching shader uniforms
2909-
2910- @affects_shader_info_id
29112888 def fix_in_frame (self ) -> Self :
29122889 self .uniforms ["is_fixed_in_frame" ] = float (1.0 )
29132890 self .is_fixed_in_frame = True
29142891 return self
29152892
2916- @affects_shader_info_id
29172893 def fix_orientation (self ) -> Self :
29182894 self .uniforms ["is_fixed_orientation" ] = float (1.0 )
29192895 self .is_fixed_orientation = True
29202896 self .fixed_orientation_center = tuple (self .get_center ())
29212897 return self
29222898
2923- @affects_shader_info_id
29242899 def unfix_from_frame (self ) -> Self :
29252900 self .uniforms ["is_fixed_in_frame" ] = float (0.0 )
29262901 self .is_fixed_in_frame = False
29272902 return self
29282903
2929- @affects_shader_info_id
29302904 def unfix_orientation (self ):
29312905 self .is_fixed_orientation = 0.0
29322906 self .fixed_orientation_center = (0 , 0 , 0 )
29332907 return self
29342908
2935- @affects_shader_info_id
29362909 def apply_depth_test (self ):
29372910 self .depth_test = True
29382911 return self
29392912
2940- @affects_shader_info_id
29412913 def deactivate_depth_test (self ):
29422914 self .depth_test = False
29432915 return self
29442916
29452917 # Shader code manipulation
2946-
29472918 def replace_shader_code (self , old , new ):
29482919 # TODO, will this work with VMobject structure, given
29492920 # that it does not simpler return shader_wrappers of
@@ -2988,47 +2959,6 @@ def set_color_by_xyz_func(
29882959 )
29892960 return self
29902961
2991- # For shader data
2992- def init_shader_data (self ):
2993- # TODO, only call this when needed?
2994- self .shader_data = np .zeros (len (self .points ), dtype = self .shader_dtype )
2995- self .shader_indices = None
2996- self .shader_wrapper = ShaderWrapper (
2997- vert_data = self .shader_data ,
2998- shader_folder = self .shader_folder ,
2999- texture_paths = self .texture_paths ,
3000- depth_test = self .depth_test ,
3001- render_primitive = self .render_primitive ,
3002- )
3003-
3004- def refresh_shader_wrapper_id (self ):
3005- self .shader_wrapper .refresh_id ()
3006- return self
3007-
3008- def get_shader_wrapper (self ):
3009- self .shader_wrapper .vert_data = self .get_shader_data ()
3010- self .shader_wrapper .vert_indices = self .get_shader_vert_indices ()
3011- self .shader_wrapper .uniforms = self .get_shader_uniforms ()
3012- self .shader_wrapper .depth_test = self .depth_test
3013- return self .shader_wrapper
3014-
3015- def get_shader_wrapper_list (self ):
3016- shader_wrappers = it .chain (
3017- [self .get_shader_wrapper ()],
3018- * (sm .get_shader_wrapper_list () for sm in self .submobjects ),
3019- )
3020- batches = batch_by_property (shader_wrappers , lambda sw : sw .get_id ())
3021-
3022- result = []
3023- for wrapper_group , _ in batches :
3024- shader_wrapper = wrapper_group [0 ]
3025- if not shader_wrapper .is_valid ():
3026- continue
3027- shader_wrapper .combine_with (* wrapper_group [1 :])
3028- if len (shader_wrapper .vert_data ) > 0 :
3029- result .append (shader_wrapper )
3030- return result
3031-
30322962 def check_data_alignment (self , array , data_key ):
30332963 # Makes sure that self.data[key] can be broadcast into
30342964 # the given array, meaning its length has to be either 1
@@ -3041,33 +2971,6 @@ def check_data_alignment(self, array, data_key):
30412971 )
30422972 return self
30432973
3044- def get_resized_shader_data_array (self , length : int ) -> np .ndarray :
3045- # If possible, try to populate an existing array, rather
3046- # than recreating it each frame
3047- if len (self .shader_data ) != length :
3048- self .shader_data = resize_array (self .shader_data , length )
3049- return self .shader_data
3050-
3051- def read_data_to_shader (self , shader_data , shader_data_key , data_key ):
3052- if data_key in self .locked_data_keys :
3053- return
3054- self .check_data_alignment (shader_data , data_key )
3055- shader_data [shader_data_key ] = self .data [data_key ]
3056-
3057- def get_shader_data (self ):
3058- shader_data = self .get_resized_shader_data_array (self .get_num_points ())
3059- self .read_data_to_shader (shader_data , "point" , "points" )
3060- return shader_data
3061-
3062- def refresh_shader_data (self ):
3063- self .get_shader_data ()
3064-
3065- def get_shader_uniforms (self ):
3066- return self .uniforms
3067-
3068- def get_shader_vert_indices (self ):
3069- return self .shader_indices
3070-
30712974 # Event Handlers
30722975 """
30732976 Event handling follows the Event Bubbling model of DOM in javascript.
0 commit comments