diff --git a/engine/viewport.py b/engine/viewport.py index 56768ab8..25f1238b 100644 --- a/engine/viewport.py +++ b/engine/viewport.py @@ -105,6 +105,14 @@ def view_update(engine, context, depsgraph, changes=None): traceback.print_exc() return + # Check for color management changes first + current_display_device = depsgraph.scene_eval.display_settings.display_device + if not hasattr(engine, 'last_display_device') or current_display_device != engine.last_display_device: + engine.last_display_device = current_display_device + # Don't trigger a full re-export, just redraw to apply the new settings + engine.tag_redraw() + return + s = time() changes = engine.exporter.get_changes(depsgraph, context, changes) delta_t = (time() - s) * 1000 @@ -115,6 +123,7 @@ def view_update(engine, context, depsgraph, changes=None): # Only restart the session if the view transform didn't change by itself force_session_restart(engine) return + s = time() # We have to re-assign the session because it might have been replaced due to filmsize change engine.session = engine.exporter.update(depsgraph, context, engine.session, changes) @@ -185,6 +194,12 @@ def view_draw(engine, context, depsgraph): # camera) do not trigger a view_update() call, but only a view_draw() call. changes = engine.exporter.get_viewport_changes(depsgraph, context) + # New logic to handle color management changes in view_draw + if changes & export.Change.REQUIRES_VIEW_UPDATE: + if framebuffer: + framebuffer.update_color_management(context) + changes &= ~export.Change.VIEW_TRANSFORM + if changes & export.Change.REQUIRES_VIEW_UPDATE: engine.tag_redraw() # view_update(engine, context, depsgraph, changes) # Disabled, see comment on force_session_restart() diff --git a/export/__init__.py b/export/__init__.py index 8cac1854..67e03990 100644 --- a/export/__init__.py +++ b/export/__init__.py @@ -25,7 +25,6 @@ class Change: WORLD = 1 << 5 IMAGEPIPELINE = 1 << 6 HALT = 1 << 7 - REQUIRES_SCENE_EDIT = CAMERA | OBJECT | MATERIAL | VISIBILITY | WORLD REQUIRES_VIEW_UPDATE = CONFIG REQUIRES_SESSION_PARSE = IMAGEPIPELINE | HALT @@ -446,3 +445,5 @@ def _init_stats(self, stats, config_props, scene): stats.use_hybridbackforward.value = (config_props.Get("path.hybridbackforward.enable", [False]).GetBool() and render_engine != "BIDIRCPU") + +