mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-11 16:57:51 -06:00
Improve depth sorting on layers
CURA-1601
This commit is contained in:
parent
f1b81dfad0
commit
5d9e1c2458
1 changed files with 5 additions and 8 deletions
|
@ -30,7 +30,7 @@ class LayerPass(RenderPass):
|
||||||
self._gl = OpenGL.getInstance().getBindingsObject()
|
self._gl = OpenGL.getInstance().getBindingsObject()
|
||||||
self._scene = self._controller.getScene()
|
self._scene = self._controller.getScene()
|
||||||
|
|
||||||
self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged)
|
self._scene.getRoot().childrenChanged.connect(self._onSceneChanged)
|
||||||
self._max_layers = 0
|
self._max_layers = 0
|
||||||
self._current_layer_num = 0
|
self._current_layer_num = 0
|
||||||
self._current_layer_mesh = None
|
self._current_layer_mesh = None
|
||||||
|
@ -84,13 +84,12 @@ class LayerPass(RenderPass):
|
||||||
self.currentLayerNumChanged.emit()
|
self.currentLayerNumChanged.emit()
|
||||||
|
|
||||||
def calculateMaxLayers(self):
|
def calculateMaxLayers(self):
|
||||||
scene = self._controller.getScene()
|
|
||||||
self._activity = True
|
self._activity = True
|
||||||
|
|
||||||
self._old_max_layers = self._max_layers
|
self._old_max_layers = self._max_layers
|
||||||
## Recalculate num max layers
|
## Recalculate num max layers
|
||||||
new_max_layers = 0
|
new_max_layers = 0
|
||||||
for node in DepthFirstIterator(scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
layer_data = node.callDecoration("getLayerData")
|
layer_data = node.callDecoration("getLayerData")
|
||||||
if not layer_data:
|
if not layer_data:
|
||||||
continue
|
continue
|
||||||
|
@ -122,7 +121,6 @@ class LayerPass(RenderPass):
|
||||||
self._tool_handle_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "toolhandle.shader"))
|
self._tool_handle_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "toolhandle.shader"))
|
||||||
|
|
||||||
self.bind()
|
self.bind()
|
||||||
self._gl.glDisable(self._gl.GL_DEPTH_TEST)
|
|
||||||
|
|
||||||
tool_handle_batch = RenderBatch(self._tool_handle_shader, type = RenderBatch.RenderType.Overlay)
|
tool_handle_batch = RenderBatch(self._tool_handle_shader, type = RenderBatch.RenderType.Overlay)
|
||||||
tool_handle_has_items = False
|
tool_handle_has_items = False
|
||||||
|
@ -132,7 +130,7 @@ class LayerPass(RenderPass):
|
||||||
tool_handle_batch.addItem(node.getWorldTransformation(), mesh = node.getSolidMesh())
|
tool_handle_batch.addItem(node.getWorldTransformation(), mesh = node.getSolidMesh())
|
||||||
tool_handle_has_items = True
|
tool_handle_has_items = True
|
||||||
|
|
||||||
if type(node) is SceneNode and node.getMeshData() and node.isVisible():
|
elif isinstance(node, SceneNode) and node.getMeshData() and node.isVisible():
|
||||||
layer_data = node.callDecoration("getLayerData")
|
layer_data = node.callDecoration("getLayerData")
|
||||||
if not layer_data:
|
if not layer_data:
|
||||||
continue
|
continue
|
||||||
|
@ -148,12 +146,12 @@ class LayerPass(RenderPass):
|
||||||
end += counts
|
end += counts
|
||||||
|
|
||||||
# This uses glDrawRangeElements internally to only draw a certain range of lines.
|
# This uses glDrawRangeElements internally to only draw a certain range of lines.
|
||||||
batch = RenderBatch(self._shader, type = RenderBatch.RenderType.NoType, mode = RenderBatch.RenderMode.Lines, range = (start, end))
|
batch = RenderBatch(self._shader, type = RenderBatch.RenderType.Solid, mode = RenderBatch.RenderMode.Lines, range = (start, end))
|
||||||
batch.addItem(node.getWorldTransformation(), layer_data)
|
batch.addItem(node.getWorldTransformation(), layer_data)
|
||||||
batch.render(self._scene.getActiveCamera())
|
batch.render(self._scene.getActiveCamera())
|
||||||
|
|
||||||
# Create a new batch that is not range-limited
|
# Create a new batch that is not range-limited
|
||||||
batch = RenderBatch(self._shader, type = RenderBatch.RenderType.NoType, mode = RenderBatch.RenderMode.Lines)
|
batch = RenderBatch(self._shader, type = RenderBatch.RenderType.Solid)
|
||||||
batch_has_items = False
|
batch_has_items = False
|
||||||
|
|
||||||
if self._current_layer_mesh:
|
if self._current_layer_mesh:
|
||||||
|
@ -171,7 +169,6 @@ class LayerPass(RenderPass):
|
||||||
if tool_handle_has_items:
|
if tool_handle_has_items:
|
||||||
tool_handle_batch.render(self._scene.getActiveCamera())
|
tool_handle_batch.render(self._scene.getActiveCamera())
|
||||||
|
|
||||||
self._gl.glEnable(self._gl.GL_DEPTH_TEST)
|
|
||||||
self.release()
|
self.release()
|
||||||
|
|
||||||
def _onSceneChanged(self, node):
|
def _onSceneChanged(self, node):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue