Просмотр исходного кода

Put all objects normal models in a single render batch

THis speeds things up a fair bit for build plates with multiple models

CURA-7106
Jaime van Kessel 4 лет назад
Родитель
Сommit
b1fe4793e4
2 измененных файлов с 4 добавлено и 2 удалено
  1. 1 1
      cura/XRayPass.py
  2. 3 1
      plugins/SolidView/SolidView.py

+ 1 - 1
cura/XRayPass.py

@@ -29,7 +29,7 @@ class XRayPass(RenderPass):
         batch = RenderBatch(self._shader, type = RenderBatch.RenderType.NoType, backface_cull = False, blend_mode = RenderBatch.BlendMode.Additive)
         for node in DepthFirstIterator(self._scene.getRoot()):
             if isinstance(node, CuraSceneNode) and node.getMeshData() and node.isVisible():
-                batch.addItem(node.getWorldTransformation(), node.getMeshData())
+                batch.addItem(node.getWorldTransformation(copy = False), node.getMeshData())
 
         self.bind()
 

+ 3 - 1
plugins/SolidView/SolidView.py

@@ -187,7 +187,9 @@ class SolidView(View):
             else:
                 self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0)))
         disabled_batch = renderer.createRenderBatch(shader = self._disabled_shader)
+        normal_object_batch = renderer.createRenderBatch(shader = self._enabled_shader)
         renderer.addRenderBatch(disabled_batch)
+        renderer.addRenderBatch(normal_object_batch)
         for node in DepthFirstIterator(scene.getRoot()):
             if node.render(renderer):
                 continue
@@ -246,7 +248,7 @@ class SolidView(View):
                     ]
                     renderer.queueNode(node, shader = self._support_mesh_shader, uniforms = uniforms)
                 else:
-                    renderer.queueNode(node, shader = self._enabled_shader, uniforms = uniforms)
+                    normal_object_batch.addItem(node.getWorldTransformation(copy=False), node.getMeshData(), uniforms=uniforms)
             if node.callDecoration("isGroup") and Selection.isSelected(node):
                 renderer.queueNode(scene.getRoot(), mesh = node.getBoundingBoxMesh(), mode = RenderBatch.RenderMode.LineLoop)