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
This commit is contained in:
Tristan Schulz 2022-12-26 01:47:17 +01:00 committed by GitHub
commit 7d7c5055d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 8 deletions

View file

@ -2627,12 +2627,15 @@ class OpenGLMobject:
# For shader data
def refresh_shader_wrapper_id(self):
self.shader_wrapper.refresh_id()
self.get_shader_wrapper().refresh_id()
return self
def get_shader_wrapper(self):
from manim.renderer.shader_wrapper import ShaderWrapper
# if hasattr(self, "__shader_wrapper"):
# return self.__shader_wrapper
self.shader_wrapper = ShaderWrapper(
vert_data=self.get_shader_data(),
vert_indices=self.get_shader_vert_indices(),

View file

@ -98,6 +98,7 @@ class OpenGLSurface(OpenGLMobject):
# can crop up in the shaders.
self.epsilon = epsilon
self.triangle_indices = None
super().__init__(
color=color,
opacity=opacity,
@ -127,7 +128,7 @@ class OpenGLSurface(OpenGLMobject):
# - Those generated by values nudged by du
# - Those generated by values nudged by dv
point_lists = []
for (du, dv) in [(0, 0), (self.epsilon, 0), (0, self.epsilon)]:
for du, dv in [(0, 0), (self.epsilon, 0), (0, self.epsilon)]:
uv_grid = np.array([[[u + du, v + dv] for v in v_range] for u in u_range])
point_grid = np.apply_along_axis(lambda p: self.uv_func(*p), 2, uv_grid)
point_lists.append(point_grid.reshape((nu * nv, dim)))

View file

@ -137,6 +137,12 @@ class OpenGLVMobject(OpenGLMobject):
self.needs_new_triangulation = True
self.triangulation = np.zeros(0, dtype="i4")
self.orientation = 1
self.fill_data = None
self.stroke_data = None
self.fill_shader_wrapper = None
self.stroke_shader_wrapper = None
self.init_shader_data()
super().__init__(**kwargs)
self.refresh_unit_normal()
@ -145,12 +151,6 @@ class OpenGLVMobject(OpenGLMobject):
if stroke_color:
self.stroke_color = Color(stroke_color)
self.fill_data = None
self.stroke_data = None
self.fill_shader_wrapper = None
self.stroke_shader_wrapper = None
self.init_shader_data()
def get_group_class(self):
return OpenGLVGroup

View file

@ -0,0 +1,14 @@
import numpy as np
from manim.mobject.opengl.opengl_surface import OpenGLSurface
from manim.mobject.opengl.opengl_three_dimensions import OpenGLSurfaceMesh
def test_surface_initialization(using_opengl_renderer):
surface = OpenGLSurface(
lambda u, v: (u, v, u * np.sin(v) + v * np.cos(u)),
u_range=(-3, 3),
v_range=(-3, 3),
)
mesh = OpenGLSurfaceMesh(surface)