Browse Source

ConvexHull Scene node no longe re-builds the shader every time it's created

This took about 12ms per object, which was quite noticable if there were multiple objects
Jaime van Kessel 8 years ago
parent
commit
ad4e1b3b18
1 changed files with 9 additions and 8 deletions
  1. 9 8
      cura/ConvexHullNode.py

+ 9 - 8
cura/ConvexHullNode.py

@@ -9,7 +9,10 @@ from UM.Mesh.MeshBuilder import MeshBuilder  # To create a mesh to display the c
 
 from UM.View.GL.OpenGL import OpenGL
 
+
 class ConvexHullNode(SceneNode):
+    shader = None  # To prevent the shader from being re-built over and over again, only load it once.
+
     ##  Convex hull node is a special type of scene node that is used to display an area, to indicate the
     #   location an object uses on the buildplate. This area (or area's in case of one at a time printing) is
     #   then displayed as a transparent shadow. If the adhesion type is set to raft, the area is extruded
@@ -19,8 +22,6 @@ class ConvexHullNode(SceneNode):
 
         self.setCalculateBoundingBox(False)
 
-        self._shader = None
-
         self._original_parent = parent
 
         # Color of the drawn convex hull
@@ -59,16 +60,16 @@ class ConvexHullNode(SceneNode):
         return self._node
 
     def render(self, renderer):
-        if not self._shader:
-            self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader"))
-            self._shader.setUniformValue("u_diffuseColor", self._color)
-            self._shader.setUniformValue("u_opacity", 0.6)
+        if not ConvexHullNode.shader:
+            ConvexHullNode.shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader"))
+            ConvexHullNode.shader.setUniformValue("u_diffuseColor", self._color)
+            ConvexHullNode.shader.setUniformValue("u_opacity", 0.6)
 
         if self.getParent():
             if self.getMeshData():
-                renderer.queueNode(self, transparent = True, shader = self._shader, backface_cull = True, sort = -8)
+                renderer.queueNode(self, transparent = True, shader = ConvexHullNode.shader, backface_cull = True, sort = -8)
                 if self._convex_hull_head_mesh:
-                    renderer.queueNode(self, shader = self._shader, transparent = True, mesh = self._convex_hull_head_mesh, backface_cull = True, sort = -8)
+                    renderer.queueNode(self, shader = ConvexHullNode.shader, transparent = True, mesh = self._convex_hull_head_mesh, backface_cull = True, sort = -8)
 
         return True