Re-use some render batches

This prevents us from having to re-create them everytime

CURA-7106
This commit is contained in:
Jaime van Kessel 2020-06-23 17:12:47 +02:00
parent b0ed47daf1
commit 03e66beafd
No known key found for this signature in database
GPG Key ID: 3710727397403C91
2 changed files with 8 additions and 4 deletions

View File

@ -86,8 +86,11 @@ class ConvexHullNode(SceneNode):
ConvexHullNode.shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader")) ConvexHullNode.shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader"))
ConvexHullNode.shader.setUniformValue("u_diffuseColor", self._color) ConvexHullNode.shader.setUniformValue("u_diffuseColor", self._color)
ConvexHullNode.shader.setUniformValue("u_opacity", 0.6) ConvexHullNode.shader.setUniformValue("u_opacity", 0.6)
batch = renderer.getNamedBatch("convex_hull_node")
renderer.queueNode(self, transparent = True, shader = ConvexHullNode.shader, backface_cull = True, sort = -8) if not batch:
batch = renderer.createRenderBatch(transparent = True, shader = ConvexHullNode.shader, backface_cull = True, sort = -8)
renderer.addRenderBatch(batch, name = "convex_hull_node")
batch.addItem(self.getWorldTransformation(copy = False), self.getMeshData())
if self._convex_hull_head_mesh: if self._convex_hull_head_mesh:
# The full head. Rendered as a hint to the user: If this area overlaps another object A; this object # The full head. Rendered as a hint to the user: If this area overlaps another object A; this object
# cannot be printed after A, because the head would hit A while printing the current object # cannot be printed after A, because the head would hit A while printing the current object

View File

@ -186,7 +186,8 @@ class SolidView(View):
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) #Overhang angle of 0 causes no area at all to be marked as overhang. self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) #Overhang angle of 0 causes no area at all to be marked as overhang.
else: else:
self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0)))
disabled_batch = renderer.createRenderBatch(shader = self._disabled_shader)
renderer.addRenderBatch(disabled_batch)
for node in DepthFirstIterator(scene.getRoot()): for node in DepthFirstIterator(scene.getRoot()):
if node.render(renderer): if node.render(renderer):
continue continue
@ -233,7 +234,7 @@ class SolidView(View):
else: else:
renderer.queueNode(node, shader = self._non_printing_shader, transparent = True) renderer.queueNode(node, shader = self._non_printing_shader, transparent = True)
elif getattr(node, "_outside_buildarea", False): elif getattr(node, "_outside_buildarea", False):
renderer.queueNode(node, shader = self._disabled_shader) disabled_batch.addItem(node.getWorldTransformation(copy = False), node.getMeshData())
elif per_mesh_stack and node.callDecoration("isSupportMesh"): elif per_mesh_stack and node.callDecoration("isSupportMesh"):
# Render support meshes with a vertical stripe that is darker # Render support meshes with a vertical stripe that is darker
shade_factor = 0.6 shade_factor = 0.6