|
1 | 1 | #!/bin/bash |
2 | 2 | # Launcher script for svVascularize GUI with software rendering |
3 | 3 |
|
4 | | -# Set environment for software rendering |
5 | | -export LIBGL_ALWAYS_SOFTWARE=1 |
6 | | -export GALLIUM_DRIVER=llvmpipe |
7 | | -export MESA_GL_VERSION_OVERRIDE=3.3 |
| 4 | +# Add svVascularize to Python path |
| 5 | +export PYTHONPATH="$(pwd):$PYTHONPATH" |
8 | 6 |
|
9 | | -# Set DRI driver path to conda's Mesa drivers |
10 | | -if [ -n "$CONDA_PREFIX" ]; then |
11 | | - export LIBGL_DRIVERS_PATH="$CONDA_PREFIX/x86_64-conda-linux-gnu/sysroot/usr/lib64/dri" |
| 7 | +# Function to find Mesa drivers |
| 8 | +find_mesa_drivers() { |
| 9 | + local candidates=() |
| 10 | + |
| 11 | + # Check conda environment locations |
| 12 | + if [ -n "$CONDA_PREFIX" ]; then |
| 13 | + candidates+=( |
| 14 | + "$CONDA_PREFIX/lib/dri" |
| 15 | + "$CONDA_PREFIX/x86_64-conda-linux-gnu/sysroot/usr/lib64/dri" |
| 16 | + "$CONDA_PREFIX/x86_64-conda-linux-gnu/sysroot/usr/lib/dri" |
| 17 | + ) |
| 18 | + |
| 19 | + # Check base conda if in an environment |
| 20 | + if [[ "$CONDA_PREFIX" == */envs/* ]]; then |
| 21 | + BASE_PREFIX="${CONDA_PREFIX%/envs/*}" |
| 22 | + candidates+=( |
| 23 | + "$BASE_PREFIX/x86_64-conda-linux-gnu/sysroot/usr/lib64/dri" |
| 24 | + ) |
| 25 | + fi |
| 26 | + fi |
| 27 | + |
| 28 | + # Check system locations (prioritize these as they exist) |
| 29 | + candidates=( |
| 30 | + "/usr/lib/x86_64-linux-gnu/dri" |
| 31 | + "/usr/lib64/dri" |
| 32 | + "/usr/lib/dri" |
| 33 | + "${candidates[@]}" |
| 34 | + ) |
| 35 | + |
| 36 | + # Find first existing directory |
| 37 | + for dir in "${candidates[@]}"; do |
| 38 | + if [ -d "$dir" ] && [ -f "$dir/swrast_dri.so" -o -f "$dir/llvmpipe_dri.so" ]; then |
| 39 | + echo "$dir" |
| 40 | + return 0 |
| 41 | + fi |
| 42 | + done |
| 43 | + |
| 44 | + return 1 |
| 45 | +} |
| 46 | + |
| 47 | +# Parse command line arguments |
| 48 | +USE_SYSTEM_GL=0 |
| 49 | +DEBUG_GL=0 |
| 50 | +for arg in "$@"; do |
| 51 | + case $arg in |
| 52 | + --system-gl) |
| 53 | + USE_SYSTEM_GL=1 |
| 54 | + shift |
| 55 | + ;; |
| 56 | + --debug-gl) |
| 57 | + DEBUG_GL=1 |
| 58 | + shift |
| 59 | + ;; |
| 60 | + --help) |
| 61 | + echo "Usage: $0 [OPTIONS]" |
| 62 | + echo "" |
| 63 | + echo "Options:" |
| 64 | + echo " --system-gl Use system OpenGL instead of software rendering" |
| 65 | + echo " --debug-gl Enable OpenGL debugging output" |
| 66 | + echo " --help Show this help message" |
| 67 | + echo "" |
| 68 | + echo "Environment variables:" |
| 69 | + echo " SVV_GUI_GL_MODE='system' Use system OpenGL (same as --system-gl)" |
| 70 | + echo " SVV_GUI_SOFTWARE_DRIVER='swr' Use OpenSWR instead of llvmpipe" |
| 71 | + echo " SVV_LIBGL_DRIVERS_PATH='/path' Override DRI drivers path" |
| 72 | + exit 0 |
| 73 | + ;; |
| 74 | + esac |
| 75 | +done |
| 76 | + |
| 77 | +# Configure OpenGL settings |
| 78 | +if [ "$USE_SYSTEM_GL" -eq 1 ]; then |
| 79 | + export SVV_GUI_GL_MODE=system |
| 80 | + echo "Using system OpenGL drivers" |
| 81 | +else |
| 82 | + # Configure software rendering |
| 83 | + export LIBGL_ALWAYS_SOFTWARE=1 |
| 84 | + export GALLIUM_DRIVER=llvmpipe |
| 85 | + export MESA_GL_VERSION_OVERRIDE=3.3 |
| 86 | + export MESA_LOADER_DRIVER_OVERRIDE=llvmpipe |
| 87 | + export QT_OPENGL=software |
| 88 | + export SVV_GUI_GL_MODE=software |
| 89 | + |
| 90 | + # Find and set Mesa drivers path |
| 91 | + if [ -z "$SVV_LIBGL_DRIVERS_PATH" ]; then |
| 92 | + DRI_PATH=$(find_mesa_drivers) |
| 93 | + if [ $? -eq 0 ]; then |
| 94 | + export LIBGL_DRIVERS_PATH="$DRI_PATH" |
| 95 | + export SVV_LIBGL_DRIVERS_PATH="$DRI_PATH" |
| 96 | + echo "Found Mesa drivers at: $DRI_PATH" |
| 97 | + else |
| 98 | + echo "Warning: Could not find Mesa DRI drivers. Trying system fallback..." |
| 99 | + # Try installing mesa packages if needed |
| 100 | + if command -v conda &> /dev/null && [ -n "$CONDA_PREFIX" ]; then |
| 101 | + echo "Attempting to install Mesa drivers via conda..." |
| 102 | + conda install -y -c conda-forge mesa-libgl-cos7-x86_64 mesa-dri-drivers-cos7-x86_64 2>/dev/null || true |
| 103 | + |
| 104 | + # Try to find again after installation |
| 105 | + DRI_PATH=$(find_mesa_drivers) |
| 106 | + if [ $? -eq 0 ]; then |
| 107 | + export LIBGL_DRIVERS_PATH="$DRI_PATH" |
| 108 | + export SVV_LIBGL_DRIVERS_PATH="$DRI_PATH" |
| 109 | + echo "Mesa drivers installed and found at: $DRI_PATH" |
| 110 | + fi |
| 111 | + fi |
| 112 | + fi |
| 113 | + else |
| 114 | + export LIBGL_DRIVERS_PATH="$SVV_LIBGL_DRIVERS_PATH" |
| 115 | + echo "Using user-specified Mesa drivers at: $SVV_LIBGL_DRIVERS_PATH" |
| 116 | + fi |
| 117 | + |
| 118 | + # Force XCB on Wayland systems |
| 119 | + if [ -n "$WAYLAND_DISPLAY" ]; then |
| 120 | + export QT_QPA_PLATFORM=xcb |
| 121 | + fi |
12 | 122 | fi |
13 | 123 |
|
14 | | -# Add svVascularize to Python path |
15 | | -export PYTHONPATH="$(pwd):$PYTHONPATH" |
| 124 | +# Enable debugging if requested |
| 125 | +if [ "$DEBUG_GL" -eq 1 ]; then |
| 126 | + export SVV_GUI_DEBUG_GL=1 |
| 127 | + export MESA_DEBUG=1 |
| 128 | + export LIBGL_DEBUG=verbose |
| 129 | +fi |
| 130 | + |
| 131 | +# Fix libffi conflicts for Mesa drivers |
| 132 | +if [ -n "$CONDA_PREFIX" ]; then |
| 133 | + # Look for libffi in conda environment |
| 134 | + if [ -f "$CONDA_PREFIX/lib/libffi.so.7" ]; then |
| 135 | + export LD_PRELOAD="$CONDA_PREFIX/lib/libffi.so.7:$LD_PRELOAD" |
| 136 | + echo "Using libffi from conda: $CONDA_PREFIX/lib/libffi.so.7" |
| 137 | + elif [ -f "$CONDA_PREFIX/lib/libffi.so.8" ]; then |
| 138 | + export LD_PRELOAD="$CONDA_PREFIX/lib/libffi.so.8:$LD_PRELOAD" |
| 139 | + echo "Using libffi from conda: $CONDA_PREFIX/lib/libffi.so.8" |
| 140 | + fi |
| 141 | +fi |
16 | 142 |
|
17 | 143 | # Launch the GUI |
| 144 | +echo "Launching svVascularize GUI..." |
18 | 145 | python -c " |
19 | 146 | import sys |
20 | | -from qtpy.QtWidgets import QApplication |
| 147 | +from PySide6.QtWidgets import QApplication |
| 148 | +from svv.visualize.gui import VascularizeGUI |
| 149 | +
|
| 150 | +app = QApplication(sys.argv) |
| 151 | +gui = VascularizeGUI() |
| 152 | +gui.show() |
| 153 | +sys.exit(app.exec()) |
| 154 | +" || python -c " |
| 155 | +# Fallback with exec_ for older PySide6 |
| 156 | +import sys |
| 157 | +from PySide6.QtWidgets import QApplication |
21 | 158 | from svv.visualize.gui import VascularizeGUI |
22 | 159 |
|
23 | 160 | app = QApplication(sys.argv) |
|
0 commit comments