Skip to content

Commit 7d7c505

Browse files
authored
Fixed opengl Surface with reordering initialization process (#3089)
* Fixed opengl Surface with disabling refresh of shader wrapper id in constructor * Reordered Elements in constructor of opengl_vectorized_mobject to fix initialization dependency issues
1 parent d3b96dd commit 7d7c505

File tree

4 files changed

+26
-8
lines changed

4 files changed

+26
-8
lines changed

manim/mobject/opengl/opengl_mobject.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2627,12 +2627,15 @@ def set_color_by_xyz_func(
26272627
# For shader data
26282628

26292629
def refresh_shader_wrapper_id(self):
2630-
self.shader_wrapper.refresh_id()
2630+
self.get_shader_wrapper().refresh_id()
26312631
return self
26322632

26332633
def get_shader_wrapper(self):
26342634
from manim.renderer.shader_wrapper import ShaderWrapper
26352635

2636+
# if hasattr(self, "__shader_wrapper"):
2637+
# return self.__shader_wrapper
2638+
26362639
self.shader_wrapper = ShaderWrapper(
26372640
vert_data=self.get_shader_data(),
26382641
vert_indices=self.get_shader_vert_indices(),

manim/mobject/opengl/opengl_surface.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ def __init__(
9898
# can crop up in the shaders.
9999
self.epsilon = epsilon
100100

101+
self.triangle_indices = None
101102
super().__init__(
102103
color=color,
103104
opacity=opacity,
@@ -127,7 +128,7 @@ def init_points(self):
127128
# - Those generated by values nudged by du
128129
# - Those generated by values nudged by dv
129130
point_lists = []
130-
for (du, dv) in [(0, 0), (self.epsilon, 0), (0, self.epsilon)]:
131+
for du, dv in [(0, 0), (self.epsilon, 0), (0, self.epsilon)]:
131132
uv_grid = np.array([[[u + du, v + dv] for v in v_range] for u in u_range])
132133
point_grid = np.apply_along_axis(lambda p: self.uv_func(*p), 2, uv_grid)
133134
point_lists.append(point_grid.reshape((nu * nv, dim)))

manim/mobject/opengl/opengl_vectorized_mobject.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@ def __init__(
137137
self.needs_new_triangulation = True
138138
self.triangulation = np.zeros(0, dtype="i4")
139139
self.orientation = 1
140+
self.fill_data = None
141+
self.stroke_data = None
142+
self.fill_shader_wrapper = None
143+
self.stroke_shader_wrapper = None
144+
self.init_shader_data()
145+
140146
super().__init__(**kwargs)
141147
self.refresh_unit_normal()
142148

@@ -145,12 +151,6 @@ def __init__(
145151
if stroke_color:
146152
self.stroke_color = Color(stroke_color)
147153

148-
self.fill_data = None
149-
self.stroke_data = None
150-
self.fill_shader_wrapper = None
151-
self.stroke_shader_wrapper = None
152-
self.init_shader_data()
153-
154154
def get_group_class(self):
155155
return OpenGLVGroup
156156

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import numpy as np
2+
3+
from manim.mobject.opengl.opengl_surface import OpenGLSurface
4+
from manim.mobject.opengl.opengl_three_dimensions import OpenGLSurfaceMesh
5+
6+
7+
def test_surface_initialization(using_opengl_renderer):
8+
surface = OpenGLSurface(
9+
lambda u, v: (u, v, u * np.sin(v) + v * np.cos(u)),
10+
u_range=(-3, 3),
11+
v_range=(-3, 3),
12+
)
13+
14+
mesh = OpenGLSurfaceMesh(surface)

0 commit comments

Comments
 (0)