Skip to content

MLR108: Object treated as visible after a renderer-divergent unfix

qual reports MLR108 when an object is mutated after a renderer-divergent remove_fixed_in_frame_mobjects / remove_fixed_orientation_mobjects call without an explicit Scene.add / Scene.remove in between, while an active profile targets OpenGL.

  • Default severity: warning
  • Minimum confidence: high
  • Implementation phase: 4
  • Fix: none (suggests an explicit add / remove after the unfix)

Unfixing a fixed object diverges between the renderers (DESIGN 3.5, three_d_scene.py): Cairo only unregisters the camera fixation and the object stays displayed; the OpenGL branch additionally calls Scene.remove. Styling or moving the object afterwards therefore renders a visible change under Cairo and nothing under OpenGL. The diagnostic anchors at the first definite mutation and its applicable_profiles lists the OpenGL profiles (DESIGN 15.8).

An explicit Scene.add / Scene.remove (a play's auto-add included) pins the intended membership and silences the rule; branch-dependent removals or mutations, unknown calls that may touch the object, and Cairo-only runs stay silent.

Wrong (with an OpenGL profile active):

self.remove_fixed_in_frame_mobjects(label)
label.set_color(RED)  # invisible under OpenGL, visible under Cairo

Right:

self.remove_fixed_in_frame_mobjects(label)
self.add(label)       # pin the membership on both renderers
label.set_color(RED)