feat(plots): expose use_opengl as a runtime-switchable property on PlotBase

This commit is contained in:
2026-08-10 16:21:58 +02:00
parent 2e056065ed
commit b25e34b321
7 changed files with 312 additions and 15 deletions
@@ -1,5 +1,9 @@
import numpy as np
import pytest
from qtpy.QtOpenGLWidgets import QOpenGLWidget
import bec_widgets.widgets.plots.plot_base as plot_base_module
from bec_widgets.utils.gpu_acceleration import opengl_available
from bec_widgets.widgets.plots.plot_base import PlotBase, UIMode
from .client_mocks import mocked_client
@@ -538,3 +542,35 @@ def test_limits_accept_fractional_values(qtbot, mocked_client):
pb.y_limits = (-1.75, 3.5)
assert (pb.x_limits.x(), pb.x_limits.y()) == (0.5, 9.25)
assert (pb.y_limits.x(), pb.y_limits.y()) == (-1.75, 3.5)
def test_use_opengl_defaults_to_true_when_available(qtbot, mocked_client):
"""PlotBase opts into the OpenGL viewport by default."""
pb = create_widget(qtbot, PlotBase, client=mocked_client)
assert pb.USE_OPENGL is True
assert pb.use_opengl is opengl_available(True)
def test_use_opengl_can_be_toggled_at_runtime(qtbot, mocked_client):
"""The viewport can be swapped after the widget is built."""
pb = create_widget(qtbot, PlotBase, client=mocked_client)
if not opengl_available(True):
pytest.skip("no hardware OpenGL available in this environment")
pb.use_opengl = False
assert pb.use_opengl is False
assert not isinstance(pb.plot_widget.viewport(), QOpenGLWidget)
pb.use_opengl = True
assert pb.use_opengl is True
assert isinstance(pb.plot_widget.viewport(), QOpenGLWidget)
def test_use_opengl_declines_without_hardware_context(qtbot, mocked_client, monkeypatch):
"""Requesting OpenGL on a software renderer leaves the raster viewport in place."""
pb = create_widget(qtbot, PlotBase, client=mocked_client)
monkeypatch.setattr(plot_base_module, "opengl_available", lambda requested=True: False)
pb.use_opengl = True
assert pb.use_opengl is False
assert not isinstance(pb.plot_widget.viewport(), QOpenGLWidget)