Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenGL: BackgroundRectangle.color causes infinite loop #3634

Open
slevey087 opened this issue Mar 3, 2024 · 1 comment · May be fixed by #3732
Open

OpenGL: BackgroundRectangle.color causes infinite loop #3634

slevey087 opened this issue Mar 3, 2024 · 1 comment · May be fixed by #3732
Labels
issue:bug Something isn't working... For use in issues opengl Concerning the OpenGL renderer.

Comments

@slevey087
Copy link

Description of bug / unexpected behavior

Manim is getting stuck in a recursion loop, to do with retrieving color.

Expected behavior

Should just render items.

How to reproduce the issue

This code is causing the issue for me, but only when rendered with OpenGL.

class BugTest(ThreeDScene):
    def construct(self):
        mve = MathTex(r"Text").add_background_rectangle()
        self.play(Write(mve))

If I remove add_background_rectangle OR change Write to Create the problem goes away, so it seems to be at the intersection of these.

Logs

Logs look similar to this (collapsed):

Terminal output
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:397 in get_color                                       |
|                                                                             |
|    394     def get_color(self):                                             |
|    395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
| >  397         return self.get_fill_color()                                 |
|    398                                                                      |
|    399     def get_colors(self):                                            |
|    400         if self.has_stroke():                                        |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\geometry\shape_ |
| matchers.py:133 in get_fill_color                                           |
|                                                                             |
|   130         return self                                                   |
|   131                                                                       |
|   132     def get_fill_color(self) -> ManimColor:                           |
| > 133         return self.color                                             |
|   134                                                                       |
|   135                                                                       |
|   136 class Cross(VGroup):                                                  |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:395 in get_color                                       |
|                                                                             |
|    392         return self.get_stroke_opacities()[0]                        |
|    393                                                                      |
|    394     def get_color(self):                                             |
| >  395         if self.has_stroke():                                        |
|    396             return self.get_stroke_color()                           |
|    397         return self.get_fill_color()                                 |
|    398                                                                      |
|                                                                             |
| C:\Users\Sam                                                                |
| Levey\.conda\envs\for_manim\lib\site-packages\manim\mobject\opengl\opengl_v |
| ectorized_mobject.py:409 in has_stroke                                      |
|                                                                             |
|    406     fill_color = property(get_fill_color, set_fill)                  |
|    407                                                                      |
|    408     def has_stroke(self):                                            |
| >  409         stroke_widths = self.get_stroke_widths()                     |
|    410         stroke_opacities = self.get_stroke_opacities()               |
|    411         return (                                                     |
|    412             stroke_widths is not None                                |
+-----------------------------------------------------------------------------+
RecursionError: maximum recursion depth exceeded
@behackl behackl added issue:bug Something isn't working... For use in issues opengl Concerning the OpenGL renderer. labels Apr 20, 2024
@behackl behackl changed the title Recursion loop when combining OpenGL + add_background_rectangle + Write OpenGL: BackgroundRectangle.color causes infinite loop Apr 20, 2024
@camburd2
Copy link

I think I found a fix for this, I will try to submit a PR by the end of the week.

@camburd2 camburd2 linked a pull request Apr 27, 2024 that will close this issue
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
issue:bug Something isn't working... For use in issues opengl Concerning the OpenGL renderer.
Projects
Status: 🆕 New
Development

Successfully merging a pull request may close this issue.

3 participants