mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Update XRayView to render properly
This commit is contained in:
parent
45d797515f
commit
042c575b18
3 changed files with 23 additions and 15 deletions
|
@ -25,7 +25,7 @@ class XRayPass(RenderPass):
|
||||||
if not self._shader:
|
if not self._shader:
|
||||||
self._shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("XRayView"), "xray.shader"))
|
self._shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("XRayView"), "xray.shader"))
|
||||||
|
|
||||||
batch = RenderBatch(self._shader, type = RenderBatch.RenderType.NoType, backface_cull = False)
|
batch = RenderBatch(self._shader, type = RenderBatch.RenderType.NoType, backface_cull = False, blend_mode = RenderBatch.BlendMode.Additive)
|
||||||
for node in DepthFirstIterator(self._scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
if type(node) is SceneNode and node.getMeshData() and node.isVisible():
|
if type(node) is SceneNode and node.getMeshData() and node.isVisible():
|
||||||
batch.addItem(node.getWorldTransformation(), node.getMeshData())
|
batch.addItem(node.getWorldTransformation(), node.getMeshData())
|
||||||
|
@ -33,8 +33,6 @@ class XRayPass(RenderPass):
|
||||||
self.bind()
|
self.bind()
|
||||||
|
|
||||||
self._gl.glDisable(self._gl.GL_DEPTH_TEST)
|
self._gl.glDisable(self._gl.GL_DEPTH_TEST)
|
||||||
self._gl.glEnable(self._gl.GL_BLEND)
|
|
||||||
self._gl.glBlendFunc(self._gl.GL_SRC_ALPHA, self._gl.GL_ONE)
|
|
||||||
batch.render(self._scene.getActiveCamera())
|
batch.render(self._scene.getActiveCamera())
|
||||||
self._gl.glEnable(self._gl.GL_DEPTH_TEST)
|
self._gl.glEnable(self._gl.GL_DEPTH_TEST)
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,9 @@ import os.path
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Event import Event
|
from UM.Event import Event
|
||||||
from UM.View.View import View
|
from UM.View.View import View
|
||||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
|
||||||
|
|
||||||
|
from UM.View.RenderBatch import RenderBatch
|
||||||
from UM.View.GL.OpenGL import OpenGL
|
from UM.View.GL.OpenGL import OpenGL
|
||||||
|
|
||||||
from . import XRayPass
|
from . import XRayPass
|
||||||
|
@ -16,8 +17,8 @@ from . import XRayPass
|
||||||
class XRayView(View):
|
class XRayView(View):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._shader = None
|
|
||||||
|
|
||||||
|
self._xray_shader = None
|
||||||
self._xray_pass = None
|
self._xray_pass = None
|
||||||
self._xray_composite_shader = None
|
self._xray_composite_shader = None
|
||||||
self._composite_pass = None
|
self._composite_pass = None
|
||||||
|
@ -28,24 +29,36 @@ class XRayView(View):
|
||||||
scene = self.getController().getScene()
|
scene = self.getController().getScene()
|
||||||
renderer = self.getRenderer()
|
renderer = self.getRenderer()
|
||||||
|
|
||||||
for node in DepthFirstIterator(scene.getRoot()):
|
if not self._xray_shader:
|
||||||
node.render(renderer)
|
self._xray_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("XRayView"), "xray.shader"))
|
||||||
|
self._xray_shader.setUniformValue("u_color", [0.1, 0.1, 0.2, 1.0])
|
||||||
|
|
||||||
|
for node in BreadthFirstIterator(scene.getRoot()):
|
||||||
|
if not node.render(renderer):
|
||||||
|
if node.getMeshData() and node.isVisible():
|
||||||
|
renderer.queueNode(node,
|
||||||
|
shader = self._xray_shader,
|
||||||
|
type = RenderBatch.RenderType.Solid,
|
||||||
|
blend_mode = RenderBatch.BlendMode.Additive,
|
||||||
|
sort = -10,
|
||||||
|
state_setup_callback = lambda gl: gl.glDepthFunc(gl.GL_ALWAYS),
|
||||||
|
state_teardown_callback = lambda gl: gl.glDepthFunc(gl.GL_LESS)
|
||||||
|
)
|
||||||
|
|
||||||
def endRendering(self):
|
def endRendering(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def event(self, event):
|
def event(self, event):
|
||||||
renderer = self.getRenderer()
|
|
||||||
if event.type == Event.ViewActivateEvent:
|
if event.type == Event.ViewActivateEvent:
|
||||||
if not self._xray_pass:
|
if not self._xray_pass:
|
||||||
self._xray_pass = XRayPass.XRayPass(1280, 720)
|
self._xray_pass = XRayPass.XRayPass(1280, 720)
|
||||||
renderer.addRenderPass(self._xray_pass)
|
self.getRenderer().addRenderPass(self._xray_pass)
|
||||||
|
|
||||||
if not self._xray_composite_shader:
|
if not self._xray_composite_shader:
|
||||||
self._xray_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("XRayView"), "xray_composite.shader"))
|
self._xray_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("XRayView"), "xray_composite.shader"))
|
||||||
|
|
||||||
if not self._composite_pass:
|
if not self._composite_pass:
|
||||||
self._composite_pass = renderer.getRenderPass("composite")
|
self._composite_pass = self.getRenderer().getRenderPass("composite")
|
||||||
|
|
||||||
self._old_layer_bindings = self._composite_pass.getLayerBindings()
|
self._old_layer_bindings = self._composite_pass.getLayerBindings()
|
||||||
self._composite_pass.setLayerBindings(["default", "selection", "xray"])
|
self._composite_pass.setLayerBindings(["default", "selection", "xray"])
|
||||||
|
|
|
@ -42,14 +42,11 @@ fragment =
|
||||||
|
|
||||||
result = layer0 * layer0.a + result * (1.0 - layer0.a);
|
result = layer0 * layer0.a + result * (1.0 - layer0.a);
|
||||||
|
|
||||||
vec4 layer2 = texture2D(u_layer2, v_uvs);
|
float intersection_count = (texture2D(u_layer2, v_uvs).r * 255.0) / 5.0;
|
||||||
|
|
||||||
float intersection_count = (layer2.r * 255.0) / 5.0;
|
|
||||||
if(mod(intersection_count, 2.0) == 1.0)
|
if(mod(intersection_count, 2.0) == 1.0)
|
||||||
{
|
{
|
||||||
layer2 = u_error_color;
|
result = u_error_color;
|
||||||
}
|
}
|
||||||
result = layer2 * layer2.a + result * (1.0 - layer2.a);
|
|
||||||
|
|
||||||
vec4 sum = vec4(0.0);
|
vec4 sum = vec4(0.0);
|
||||||
for (int i = 0; i < 9; i++)
|
for (int i = 0; i < 9; i++)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue