#!/bin/bash

USE_COLOR=1
msg() {
  if [ $USE_COLOR -eq 1 ]; then
    echo -e "\033[1;32m==>\033[1;0m \033[1;1m$1\033[1;0m" >&2
  else
    echo "==> $1" >&2
  fi
}

usage() {
  echo "Usage: startxgl [display number] [window manager] [gfx]"
  echo
  echo "  Command line arguments are optional."
  echo "  Default [display number] is 1."
  echo "  [window manager] can be: 'gnome', 'xfce' (no session), 'xfce-svn' (no session), or 'xfce-session'. Default is 'gnome'."
  echo "  [gfx] values are 'ati', 'nvidia' or 'other'. Default is 'other'."
}

if [ "$1" = "-h" -o "$1" = "--help" ]; then
  usage
  exit 0
elif [ -z "$1" ]; then
  xgldisplay=1
else
  xgldisplay=$1
fi

msg "Starting XGL at display :$xgldisplay"
if [ "$3" = "ati" ]; then
  msg "Using card: ati"
  Xgl :$xgldisplay -ac -accel xv:pbuffer -accel glx:pbuffer &
elif [ "$3" = "nvidia" ]; then
  msg "Using card: nvidia"
  # NVidia OpenGL settings (antialiasing, anisotropic texture filtering and sync to VBlank)
  # Look at /usr/share/doc/NVIDIA_GLX-1.0/README.txt (different cards have different settings)
  #export __GL_FSAA_MODE=1
  #export __GL_LOG_MAX_ANISO=2
  #export __GL_SYNC_TO_VBLANK=1
  Xgl :$xgldisplay -ac -accel xv -accel glx:pbuffer &
else
  msg "Using card: other"
  Xgl :$xgldisplay -ac -accel xv -accel glx:pbuffer &
fi

sleep 1
msg "Starting Compiz (window and composite manager)"
DISPLAY=:$xgldisplay LD_LIBRARY_PATH=/opt/mesa-xgl-cvs/lib/ compiz --replace gconf gconf-dump miniwin decoration transset wobbly fade minimize cube rotate zoom scale move resize place switcher trailfocus water &

sleep 1
if [ "$2" = "xfce" ]; then
  msg "Starting xfce-mcs-manager"
  DISPLAY=:$xgldisplay xfce-mcs-manager
  msg "Starting gnome-window-decorator"
  DISPLAY=:$xgldisplay gnome-window-decorator &
  msg "Starting xftaskbar4, xfdesktop and xfce4-panel"
  DISPLAY=:$xgldisplay xftaskbar4 &
  DISPLAY=:$xgldisplay xfdesktop &
  DISPLAY=:$xgldisplay exec xfce4-panel
elif [ "$2" = "xfce-svn" ]; then
  msg "Starting xfce-mcs-manager"
  DISPLAY=:$xgldisplay xfce-mcs-manager
  msg "Starting gnome-window-decorator"
  DISPLAY=:$xgldisplay gnome-window-decorator &
  msg "Starting xfdesktop and xfce4-panel"
  DISPLAY=:$xgldisplay xfdesktop &
  DISPLAY=:$xgldisplay exec xfce4-panel
elif [ "$2" = "xfce-session" ]; then
  msg "Starting gnome-window-decorator"
  DISPLAY=:$xgldisplay gnome-window-decorator &
  msg "Starting xfce4-session"
  DISPLAY=:$xgldisplay exec xfce4-session
else
  msg "Starting gnome-window-decorator"
  DISPLAY=:$xgldisplay gnome-window-decorator &
  msg "Starting gnome-session"
  DISPLAY=:$xgldisplay exec gnome-session
fi
