From 51378cae560036b3ad94a9bf94227bf3d18d2dab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 1 May 2020 17:49:29 +0200 Subject: [PATCH] Don't crash if the shader fails to compile --- cura/PickingPass.py | 10 ++++++++-- cura/PreviewPass.py | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cura/PickingPass.py b/cura/PickingPass.py index 75ee21ef41..ea0d05ab4f 100644 --- a/cura/PickingPass.py +++ b/cura/PickingPass.py @@ -1,14 +1,16 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2020 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from typing import Optional, TYPE_CHECKING from UM.Qt.QtApplication import QtApplication +from UM.Logger import Logger from UM.Math.Vector import Vector from UM.Resources import Resources from UM.View.RenderPass import RenderPass from UM.View.GL.OpenGL import OpenGL +from UM.View.GL.ShaderProgram import InvalidShaderProgramError from UM.View.RenderBatch import RenderBatch from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator @@ -31,7 +33,11 @@ class PickingPass(RenderPass): def render(self) -> None: if not self._shader: - self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "camera_distance.shader")) + try: + self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "camera_distance.shader")) + except InvalidShaderProgramError: + Logger.error("Unable to compile shader program: camera_distance.shader") + return width, height = self.getSize() self._gl.glViewport(0, 0, width, height) diff --git a/cura/PreviewPass.py b/cura/PreviewPass.py index 5e3982e1f3..7fcc4eb6cd 100644 --- a/cura/PreviewPass.py +++ b/cura/PreviewPass.py @@ -1,10 +1,11 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2020 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from typing import Optional, TYPE_CHECKING, cast from UM.Application import Application +from UM.Logger import Logger from UM.Resources import Resources from UM.View.RenderPass import RenderPass @@ -63,6 +64,8 @@ class PreviewPass(RenderPass): self._shader.setUniformValue("u_shininess", 20.0) self._shader.setUniformValue("u_renderError", 0.0) # We don't want any error markers!. self._shader.setUniformValue("u_faceId", -1) # Don't render any selected faces in the preview. + else: + Logger.error("Unable to compile shader program: overhang.shader") if not self._non_printing_shader: if self._non_printing_shader: