@@ -105,6 +105,7 @@ def __init__(
105
105
self .bounding_box : Vect3Array = np .zeros ((3 , 3 ))
106
106
self ._shaders_initialized : bool = False
107
107
self ._data_has_changed : bool = True
108
+ self .shader_code_replacements : dict [str , str ] = dict ()
108
109
109
110
self .init_data ()
110
111
self ._data_defaults = np .ones (1 , dtype = self .data .dtype )
@@ -1895,12 +1896,12 @@ def deactivate_depth_test(self, recurse: bool = True) -> Self:
1895
1896
1896
1897
# Shader code manipulation
1897
1898
1899
+ @affects_data
1898
1900
def replace_shader_code (self , old : str , new : str ) -> Self :
1899
- # TODO, will this work with VMobject structure, given
1900
- # that it does not simpler return shader_wrappers of
1901
- # family?
1902
- for wrapper in self .get_shader_wrapper_list ():
1903
- wrapper .replace_code (old , new )
1901
+ self .shader_code_replacements [old ] = new
1902
+ self ._shaders_initialized = False
1903
+ for mob in self .get_ancestors ():
1904
+ mob ._shaders_initialized = False
1904
1905
return self
1905
1906
1906
1907
def set_color_by_code (self , glsl_code : str ) -> Self :
@@ -1969,6 +1970,8 @@ def get_shader_wrapper(self, ctx: Context) -> ShaderWrapper:
1969
1970
self .shader_wrapper .vert_indices = self .get_shader_vert_indices ()
1970
1971
self .shader_wrapper .bind_to_mobject_uniforms (self .get_uniforms ())
1971
1972
self .shader_wrapper .depth_test = self .depth_test
1973
+ for old , new in self .shader_code_replacements .items ():
1974
+ self .shader_wrapper .replace_code (old , new )
1972
1975
return self .shader_wrapper
1973
1976
1974
1977
def get_shader_wrapper_list (self , ctx : Context ) -> list [ShaderWrapper ]:
0 commit comments