#!/bin/sh

# Note: This functions like vglrun, but only with options relevant to ECS.
# It is a complete rewrite, and not based on LGPL vglrun.

printusage()
{
cat <<END_USAGE
Usage: '`basename $0`' [options] [--] <opengl_app> [opengl_app options]

Options:
 -d <dpy>    Set display for OpenGL rendering. Use "glp" for first GLP device.
 -fps <f>    Limit frame-rate to <f>
 +g          Enable gamma correction
 -g          Disable gamma correction [default]
 -gamma <f>  Set gamma correction factor
 -ge         Work with apps that check for hooked functions (Hook getenv())
 +sp         Enable frame spoiling [default]. Dynamically skip frames to
               increase perceived frame-rate
 -sp         Disable frame spoiling
 -st <mode>  Set stereo mode to one of: left, right, quad [default], rc
 +sy         Enable strict syncronization bewtween 2D and 3D on each frame
 -sy         Disable strict syncronization. [default]
 +v          Enable verbose mode
 -v          Disable verbose mode [default]
 
For more details see the VirtualGL documentation.

END_USAGE
	exit $1
}

__USE_GE__=0

setOpt()
{
case "$1" in
+*) eval $2=1;;
-*) eval $2=0;;
esac
eval export $2
}
setOptArg()
{
eval $1=$2
eval export $1
}

while [ 1 ]; do
case "$1" in
[+-]sy ) setOpt $1 VGL_SYNC;;
   -st ) setOptArg VGL_STEREO $2; shift ;;
[+-]sp ) setOpt $1 VGL_SPOIL;;
   -d  ) setOptArg VGL_DISPLAY $2; shift ;;
-gamma ) setOptArg VGL_GAMMA $2; shift ;;
   -ge ) __USE_GE__=1;;
 [+-]g ) setOpt $1 VGL_GAMMA;;
 [+-]v ) setOpt $1 VGL_VERBOSE;;
  -fps ) setOptArg VGL_FPS $2; shift ;;
-window ) VGL_WINDOW=1; export VGL_WINDOW ;;
-h|--help ) printusage 0 ;;
    -- ) shift ; break ;;
     * ) break ;;
esac
shift
[ $# = 0 ] && break
done

[ -z "$1" ] && printusage 1

VGL_COMPRESS=proxy
export VGL_COMPRESS

ECSBINDIR=`dirname $0`

VGLLIBDIR32=$ECSBINDIR/gl/lib
VGLLIBDIR64=$ECSBINDIR/gl/lib64

RRFAKERLIB32=$VGLLIBDIR32/librrfaker.so
RRFAKERLIB64=$VGLLIBDIR64/librrfaker.so

GEFAKERLIB32=$VGLLIBDIR32/libgefaker.so
GEFAKERLIB64=$VGLLIBDIR64/libgefaker.so

case "`uname`" in
Linux )
	[ -n "$LD_LIBRARY_PATH" ] && LD_LIBRARY_PATH=":$LD_LIBRARY_PATH"
	LD_LIBRARY_PATH=$VGLLIBDIR32:$VGLLIBDIR64:$LD_LIBRARY_PATH
	export LD_LIBRARY_PATH

	[ -n "$LD_PRELOAD" ] && LD_PRELOAD=":$LD_PRELOAD"
	LD_PRELOAD=librrfaker.so$LD_PRELOAD
	[ $__USE_GE__ = 1 ] && LD_PRELOAD=libgefaker.so:$LD_PRELOAD
	export LD_PRELOAD
;;
SunOS )
	[ -n "$LD_LIBRARY_PATH" ] && LD_LIBRARY_PATH=":$LD_LIBRARY_PATH"
	LD_LIBRARY_PATH=$VGLLIBDIR32:$VGLLIBDIR64:$LD_LIBRARY_PATH
	export LD_LIBRARY_PATH

	[ -n "$LD_PRELOAD_32" ] && LD_PRELOAD_32=:$LD_PRELOAD_32
	LD_PRELOAD_32=$RRFAKERLIB32:$LD_PRELOAD_32
	[ -n "$LD_PRELOAD_64" ] && LD_PRELOAD_64=:$LD_PRELOAD_64
	LD_PRELOAD_64=$RRFAKERLIB64:$LD_PRELOAD_64

	if [ $__USE_GE__ = 1 ]; then
		LD_PRELOAD_32=$GEFAKERLIB32:$LD_PRELOAD_32
		LD_PRELOAD_64=$GEFAKERLIB64:$LD_PRELOAD_32
	fi
	export LD_PRELOAD_32
	export LD_PRELOAD_64
;;
* )
	echo "This platform isn't supported."
	exit
;;
esac

exec ${1+"$@"}
