Files
geMoldInsight/venv/lib/python3.11/site-packages/pyvista/plotting/utilities/gl_checks.py
T

65 lines
1.8 KiB
Python
Raw Normal View History

2026-02-12 23:22:11 +08:00
"""Plotting GL checks."""
from __future__ import annotations
from pyvista.plotting import _vtk
def check_depth_peeling(number_of_peels=100, occlusion_ratio=0.0):
"""Check if depth peeling is available.
Attempts to use depth peeling to see if it is available for the
current environment. Returns ``True`` if depth peeling is
available and has been successfully leveraged, otherwise
``False``.
Parameters
----------
number_of_peels : int, default: 100
Maximum number of depth peels.
occlusion_ratio : float, default: 0.0
Occlusion ratio.
Returns
-------
bool
``True`` when system supports depth peeling with the specified
settings.
"""
# Try Depth Peeling with a basic scene
source = _vtk.vtkSphereSource()
mapper = _vtk.vtkPolyDataMapper()
mapper.SetInputConnection(source.GetOutputPort())
actor = _vtk.vtkActor()
actor.SetMapper(mapper)
# requires opacity < 1
actor.GetProperty().SetOpacity(0.5)
renderer = _vtk.vtkRenderer()
renderWindow = _vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.SetOffScreenRendering(True)
renderWindow.SetAlphaBitPlanes(True)
renderWindow.SetMultiSamples(0)
renderer.AddActor(actor)
renderer.SetUseDepthPeeling(True)
renderer.SetMaximumNumberOfPeels(number_of_peels)
renderer.SetOcclusionRatio(occlusion_ratio)
renderWindow.Render()
return renderer.GetLastRenderingUsedDepthPeeling() == 1
def uses_egl() -> bool:
"""Check if VTK has been compiled with EGL support via OSMesa.
Returns
-------
bool
``True`` if VTK has been compiled with EGL support via OSMesa,
otherwise ``False``.
"""
ren_win_str = str(type(_vtk.vtkRenderWindow()))
return 'EGL' in ren_win_str or 'OSOpenGL' in ren_win_str