mirror of
https://github.com/ManimCommunity/manim.git
synced 2026-06-22 10:01:47 +00:00
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:
parent
d3b96dd68c
commit
7d7c5055d4
4 changed files with 26 additions and 8 deletions
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
14
tests/opengl/test_opengl_surface.py
Normal file
14
tests/opengl/test_opengl_surface.py
Normal 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue