Evas GL: change function naming and small bug fixes
authorDongyeon Kim <dy5.kim@samsung.com>
Mon, 9 Mar 2015 08:17:19 +0000 (17:17 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Mon, 16 Mar 2015 06:56:48 +0000 (15:56 +0900)
Summary:
Remove gles1 prefixes for functions that are also used by gles3.
Refactor evgl_make_current a little bit.
Destroy indirect context properly.
Some log message changes and typo fixes.

Test Plan: Local tests on desktop PC

Reviewers: jpeg

Subscribers: mythri, mer.kim, wonsik, cedric

Differential Revision: https://phab.enlightenment.org/D2104

12 files changed:
src/Makefile_Ethumb.am:58: [new file with mode: 0644]
src/bin/ecore_evas/ecore_evas_svg [new file with mode: 0755]
src/examples/evas/evas-images2 [new file with mode: 0755]
src/examples/evas/evas-map-aa [new file with mode: 0755]
src/examples/evas/evas_3d_moon_space [new file with mode: 0755]
src/examples/evas/evas_vg_batman [new file with mode: 0755]
src/modules/evas/engines/gl_common/evas_gl_api.c.BAK [new file with mode: 0644]
src/modules/evas/engines/gl_common/evas_gl_api_ext.c
src/modules/evas/engines/gl_common/evas_gl_api_gles1.c.BAK [new file with mode: 0644]
src/modules/evas/engines/gl_common/evas_gl_core.c
src/modules/evas/engines/gl_common/evas_gl_core_private.h
src/modules/evas/engines/gl_x11/evas_engine.c

diff --git a/src/Makefile_Ethumb.am:58: b/src/Makefile_Ethumb.am:58:
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/bin/ecore_evas/ecore_evas_svg b/src/bin/ecore_evas/ecore_evas_svg
new file mode 100755 (executable)
index 0000000..ef23c21
--- /dev/null
@@ -0,0 +1,228 @@
+#! /bin/sh
+
+# bin/ecore_evas/ecore_evas_svg - temporary wrapper script for .libs/ecore_evas_svg
+# Generated by libtool (GNU libtool) 2.4.5
+#
+# The bin/ecore_evas/ecore_evas_svg program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command="(cd /home/jpeg/e/core/efl/src; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; LD_LIBRARY_PATH=/opt/e/lib/; export LD_LIBRARY_PATH; PATH=/opt/e/bin:/home/jpeg/bin:/home/jpeg/Applications/.bin:/opt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/jpeg/.gem/ruby/2.1.0/bin; export PATH; gcc -std=gnu99 -g -ggdb3 -W -Wall -Wextra -Wshadow -Wclobbered -o \$progdir/\$file bin/ecore_evas/bin_ecore_evas_ecore_evas_svg-ecore_evas_svg.o -fvisibility=hidden -fdata-sections -ffunction-sections -Wl,--gc-sections -fno-strict-aliasing -Wl,--as-needed -Wl,--no-copy-dt-needed-entries  lib/eina/.libs/libeina.so lib/eo/.libs/libeo.so lib/efl/.libs/libefl.so lib/evas/.libs/libevas.so -L/usr/lib lib/eet/.libs/libeet.so lib/ecore/.libs/libecore.so lib/ecore_input/.libs/libecore_input.so lib/ecore_input_evas/.libs/libecore_input_evas.so lib/ecore_evas/.libs/libecore_evas.so /home/jpeg/e/core/efl/src/lib/ecore_input_evas/.libs/libecore_input_evas.so /home/jpeg/e/core/efl/src/lib/evas/.libs/libevas.so -lfribidi -lfontconfig -lfreetype -lluajit-5.1 /home/jpeg/e/core/efl/src/lib/ector/.libs/libector.so /home/jpeg/e/core/efl/src/lib/eet/.libs/libeet.so -lssl -lcrypto -lz -ljpeg -lpng16 /home/jpeg/e/core/efl/src/lib/ecore_input/.libs/libecore_input.so /home/jpeg/e/core/efl/src/lib/ecore/.libs/libecore.so -lgthread-2.0 -lglib-2.0 /home/jpeg/e/core/efl/src/lib/efl/.libs/libefl.so /home/jpeg/e/core/efl/src/lib/eo/.libs/libeo.so /home/jpeg/e/core/efl/src/lib/eina/.libs/libeina.so -lsystemd -lrt -ldl -lm -lpthread -pthread -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eina/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eo/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/efl/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eet/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_input/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_input_evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ector/.libs)"
+
+# This environment variable determines our operation mode.
+if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='2.4.5'
+  notinst_deplibs=' lib/eina/libeina.la lib/eo/libeo.la lib/efl/libefl.la lib/evas/libevas.la lib/eet/libeet.la lib/ecore/libecore.la lib/ecore_input/libecore_input.la lib/ecore_input_evas/libecore_input_evas.la lib/ecore_evas/libecore_evas.la /home/jpeg/e/core/efl/src/lib/ecore_input_evas/libecore_input_evas.la /home/jpeg/e/core/efl/src/lib/evas/libevas.la /home/jpeg/e/core/efl/src/lib/ector/libector.la /home/jpeg/e/core/efl/src/lib/eet/libeet.la /home/jpeg/e/core/efl/src/lib/ecore_input/libecore_input.la /home/jpeg/e/core/efl/src/lib/ecore/libecore.la /home/jpeg/e/core/efl/src/lib/efl/libefl.la /home/jpeg/e/core/efl/src/lib/eo/libeo.la /home/jpeg/e/core/efl/src/lib/eina/libeina.la'
+else
+  # When we are sourced in execute mode, $file and $ECHO are already set.
+  if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+    file="$0"
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+    ECHO="printf %s\\n"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string --lt-
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's ../libtool value, followed by no.
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=$0
+  shift
+  for lt_opt
+  do
+    case "$lt_opt" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`
+        test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.
+        lt_dump_F=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%^.*/%%'`
+        cat "$lt_dump_D/$lt_dump_F"
+        exit 0
+      ;;
+    --lt-*)
+        $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n "$lt_option_debug"; then
+    echo "ecore_evas_svg:bin/ecore_evas/ecore_evas_svg:$LINENO: libtool wrapper (GNU libtool) 2.4.5" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    $ECHO "ecore_evas_svg:bin/ecore_evas/ecore_evas_svg:$LINENO: newargv[$lt_dump_args_N]: $lt_arg"
+    lt_dump_args_N=`expr $lt_dump_args_N + 1`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+
+      if test -n "$lt_option_debug"; then
+        $ECHO "ecore_evas_svg:bin/ecore_evas/ecore_evas_svg:$LINENO: newargv[0]: $progdir/$program" 1>&2
+        func_lt_dump_args ${1+"$@"} 1>&2
+      fi
+      exec "$progdir/$program" ${1+"$@"}
+
+      $ECHO "$0: cannot exec $program $*" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from $@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case " $* " in
+  *\ --lt-*)
+    for lt_wr_arg
+    do
+      case $lt_wr_arg in
+      --lt-*) ;;
+      *) set x "$@" "$lt_wr_arg"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core ${1+"$@"}
+}
+
+  # Parse options
+  func_parse_lt_options "$0" ${1+"$@"}
+
+  # Find the directory that this script lives in.
+  thisdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+  test "x$thisdir" = "x$file" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=`ls -ld "$file" | /usr/bin/sed -n 's/.*-> //p'`
+  while test -n "$file"; do
+    destdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+
+    # If there was a directory component, then change thisdir.
+    if test "x$destdir" != "x$file"; then
+      case "$destdir" in
+      [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
+      *) thisdir="$thisdir/$destdir" ;;
+      esac
+    fi
+
+    file=`$ECHO "$file" | /usr/bin/sed 's%^.*/%%'`
+    file=`ls -ld "$thisdir/$file" | /usr/bin/sed -n 's/.*-> //p'`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
+  if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
+    # special case for '.'
+    if test "$thisdir" = "."; then
+      thisdir=`pwd`
+    fi
+    # remove .libs from thisdir
+    case "$thisdir" in
+    *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /usr/bin/sed 's%[\\/][^\\/]*$%%'` ;;
+    .libs )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=`cd "$thisdir" && pwd`
+  test -n "$absdir" && thisdir="$absdir"
+
+  program=lt-'ecore_evas_svg'
+  progdir="$thisdir/.libs"
+
+  if test ! -f "$progdir/$program" ||
+     { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /usr/bin/sed 1q`; \
+       test "X$file" != "X$progdir/$program"; }; then
+
+    file="$$-$program"
+
+    if test ! -d "$progdir"; then
+      mkdir "$progdir"
+    else
+      rm -f "$progdir/$file"
+    fi
+
+    # relink executable if necessary
+    if test -n "$relink_command"; then
+      if relink_command_output=`eval $relink_command 2>&1`; then :
+      else
+       $ECHO "$relink_command_output" >&2
+       rm -f "$progdir/$file"
+       exit 1
+      fi
+    fi
+
+    mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
+    { rm -f "$progdir/$program";
+      mv -f "$progdir/$file" "$progdir/$program"; }
+    rm -f "$progdir/$file"
+  fi
+
+  if test -f "$progdir/$program"; then
+    if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+      # Run the actual program with our arguments.
+      func_exec_program ${1+"$@"}
+    fi
+  else
+    # The program doesn't exist.
+    $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2
+    $ECHO "This script is just a wrapper for $program." 1>&2
+    $ECHO "See the libtool documentation for more information." 1>&2
+    exit 1
+  fi
+fi
diff --git a/src/examples/evas/evas-images2 b/src/examples/evas/evas-images2
new file mode 100755 (executable)
index 0000000..7265a26
Binary files /dev/null and b/src/examples/evas/evas-images2 differ
diff --git a/src/examples/evas/evas-map-aa b/src/examples/evas/evas-map-aa
new file mode 100755 (executable)
index 0000000..494eeab
Binary files /dev/null and b/src/examples/evas/evas-map-aa differ
diff --git a/src/examples/evas/evas_3d_moon_space b/src/examples/evas/evas_3d_moon_space
new file mode 100755 (executable)
index 0000000..50cc392
--- /dev/null
@@ -0,0 +1,228 @@
+#! /bin/sh
+
+# evas_3d_moon_space - temporary wrapper script for .libs/evas_3d_moon_space
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# The evas_3d_moon_space program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command="(cd /home/jpeg/e/core/efl/src/examples/evas; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/jpeg/bin:/home/jpeg/Applications/.bin:/opt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/jpeg/.gem/ruby/2.1.0/bin; export PATH; gcc -std=gnu99 -g -ggdb3 -W -Wall -Wextra -Wshadow -Wclobbered -o \$progdir/\$file evas_3d_moon_space-evas-3d-moon-space.o -fvisibility=hidden -fdata-sections -ffunction-sections -Wl,--gc-sections -fno-strict-aliasing -Wl,--as-needed -Wl,--no-copy-dt-needed-entries  ../../../src/lib/efl/.libs/libefl.so ../../../src/lib/eina/.libs/libeina.so ../../../src/lib/eo/.libs/libeo.so ../../../src/lib/ecore/.libs/libecore.so ../../../src/lib/ecore_input/.libs/libecore_input.so ../../../src/lib/ecore_evas/.libs/libecore_evas.so -L/usr/lib /home/jpeg/e/core/efl/src/lib/ecore_input_evas/.libs/libecore_input_evas.so /home/jpeg/e/core/efl/src/lib/evas/.libs/libevas.so /home/jpeg/e/core/efl/src/lib/ecore_input/.libs/libecore_input.so /home/jpeg/e/core/efl/src/lib/ecore/.libs/libecore.so -lgthread-2.0 ../../../src/lib/evas/.libs/libevas.so -lfribidi -lglib-2.0 -lfontconfig -lfreetype -lluajit-5.1 /home/jpeg/e/core/efl/src/lib/efl/.libs/libefl.so /home/jpeg/e/core/efl/src/lib/eet/.libs/libeet.so -lssl -lcrypto -lz /home/jpeg/e/core/efl/src/lib/eo/.libs/libeo.so /home/jpeg/e/core/efl/src/lib/eina/.libs/libeina.so -lsystemd -ldl -lrt -ljpeg -lpng16 -lm -lpthread -pthread -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/efl/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eina/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eo/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_input/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_input_evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eet/.libs)"
+
+# This environment variable determines our operation mode.
+if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='2.4.2'
+  notinst_deplibs=' ../../../src/lib/efl/libefl.la ../../../src/lib/eina/libeina.la ../../../src/lib/eo/libeo.la ../../../src/lib/ecore/libecore.la ../../../src/lib/ecore_input/libecore_input.la ../../../src/lib/ecore_evas/libecore_evas.la /home/jpeg/e/core/efl/src/lib/ecore_input_evas/libecore_input_evas.la /home/jpeg/e/core/efl/src/lib/evas/libevas.la /home/jpeg/e/core/efl/src/lib/ecore_input/libecore_input.la /home/jpeg/e/core/efl/src/lib/ecore/libecore.la ../../../src/lib/evas/libevas.la /home/jpeg/e/core/efl/src/lib/efl/libefl.la /home/jpeg/e/core/efl/src/lib/eet/libeet.la /home/jpeg/e/core/efl/src/lib/eo/libeo.la /home/jpeg/e/core/efl/src/lib/eina/libeina.la'
+else
+  # When we are sourced in execute mode, $file and $ECHO are already set.
+  if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+    file="$0"
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+    ECHO="printf %s\\n"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string --lt-
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's ../../../libtool value, followed by no.
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=$0
+  shift
+  for lt_opt
+  do
+    case "$lt_opt" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`
+        test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.
+        lt_dump_F=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%^.*/%%'`
+        cat "$lt_dump_D/$lt_dump_F"
+        exit 0
+      ;;
+    --lt-*)
+        $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n "$lt_option_debug"; then
+    echo "evas_3d_moon_space:evas_3d_moon_space:${LINENO}: libtool wrapper (GNU libtool) 2.4.2" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    $ECHO "evas_3d_moon_space:evas_3d_moon_space:${LINENO}: newargv[$lt_dump_args_N]: $lt_arg"
+    lt_dump_args_N=`expr $lt_dump_args_N + 1`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+
+      if test -n "$lt_option_debug"; then
+        $ECHO "evas_3d_moon_space:evas_3d_moon_space:${LINENO}: newargv[0]: $progdir/$program" 1>&2
+        func_lt_dump_args ${1+"$@"} 1>&2
+      fi
+      exec "$progdir/$program" ${1+"$@"}
+
+      $ECHO "$0: cannot exec $program $*" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from $@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case " $* " in
+  *\ --lt-*)
+    for lt_wr_arg
+    do
+      case $lt_wr_arg in
+      --lt-*) ;;
+      *) set x "$@" "$lt_wr_arg"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core ${1+"$@"}
+}
+
+  # Parse options
+  func_parse_lt_options "$0" ${1+"$@"}
+
+  # Find the directory that this script lives in.
+  thisdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+  test "x$thisdir" = "x$file" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=`ls -ld "$file" | /usr/bin/sed -n 's/.*-> //p'`
+  while test -n "$file"; do
+    destdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+
+    # If there was a directory component, then change thisdir.
+    if test "x$destdir" != "x$file"; then
+      case "$destdir" in
+      [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
+      *) thisdir="$thisdir/$destdir" ;;
+      esac
+    fi
+
+    file=`$ECHO "$file" | /usr/bin/sed 's%^.*/%%'`
+    file=`ls -ld "$thisdir/$file" | /usr/bin/sed -n 's/.*-> //p'`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
+  if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
+    # special case for '.'
+    if test "$thisdir" = "."; then
+      thisdir=`pwd`
+    fi
+    # remove .libs from thisdir
+    case "$thisdir" in
+    *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /usr/bin/sed 's%[\\/][^\\/]*$%%'` ;;
+    .libs )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=`cd "$thisdir" && pwd`
+  test -n "$absdir" && thisdir="$absdir"
+
+  program=lt-'evas_3d_moon_space'
+  progdir="$thisdir/.libs"
+
+  if test ! -f "$progdir/$program" ||
+     { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /usr/bin/sed 1q`; \
+       test "X$file" != "X$progdir/$program"; }; then
+
+    file="$$-$program"
+
+    if test ! -d "$progdir"; then
+      mkdir "$progdir"
+    else
+      rm -f "$progdir/$file"
+    fi
+
+    # relink executable if necessary
+    if test -n "$relink_command"; then
+      if relink_command_output=`eval $relink_command 2>&1`; then :
+      else
+       printf %s\n "$relink_command_output" >&2
+       rm -f "$progdir/$file"
+       exit 1
+      fi
+    fi
+
+    mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
+    { rm -f "$progdir/$program";
+      mv -f "$progdir/$file" "$progdir/$program"; }
+    rm -f "$progdir/$file"
+  fi
+
+  if test -f "$progdir/$program"; then
+    if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+      # Run the actual program with our arguments.
+      func_exec_program ${1+"$@"}
+    fi
+  else
+    # The program doesn't exist.
+    $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2
+    $ECHO "This script is just a wrapper for $program." 1>&2
+    $ECHO "See the libtool documentation for more information." 1>&2
+    exit 1
+  fi
+fi
diff --git a/src/examples/evas/evas_vg_batman b/src/examples/evas/evas_vg_batman
new file mode 100755 (executable)
index 0000000..21295fb
--- /dev/null
@@ -0,0 +1,228 @@
+#! /bin/sh
+
+# evas_vg_batman - temporary wrapper script for .libs/evas_vg_batman
+# Generated by libtool (GNU libtool) 2.4.5
+#
+# The evas_vg_batman program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command="(cd /home/jpeg/e/core/efl/src/examples/evas; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; LD_LIBRARY_PATH=/opt/e/lib/; export LD_LIBRARY_PATH; PATH=/opt/e/bin:/home/jpeg/bin:/home/jpeg/Applications/.bin:/opt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/jpeg/.gem/ruby/2.1.0/bin; export PATH; gcc -std=gnu99 -g -ggdb3 -W -Wall -Wextra -Wshadow -Wclobbered -o \$progdir/\$file evas_vg_batman-evas-vg-batman.o -fvisibility=hidden -fdata-sections -ffunction-sections -Wl,--gc-sections -fno-strict-aliasing -Wl,--as-needed -Wl,--no-copy-dt-needed-entries  ../../../src/lib/efl/.libs/libefl.so ../../../src/lib/eina/.libs/libeina.so ../../../src/lib/eo/.libs/libeo.so ../../../src/lib/ecore/.libs/libecore.so ../../../src/lib/ecore_file/.libs/libecore_file.so -L/usr/lib /home/jpeg/e/core/efl/src/lib/ecore_con/.libs/libecore_con.so ../../../src/lib/ecore_input/.libs/libecore_input.so ../../../src/lib/ecore_evas/.libs/libecore_evas.so /home/jpeg/e/core/efl/src/lib/ecore_input_evas/.libs/libecore_input_evas.so /home/jpeg/e/core/efl/src/lib/evas/.libs/libevas.so /home/jpeg/e/core/efl/src/lib/ecore_input/.libs/libecore_input.so /home/jpeg/e/core/efl/src/lib/ecore/.libs/libecore.so -lgthread-2.0 ../../../src/lib/ector/.libs/libector.so ../../../src/lib/evas/.libs/libevas.so -lfribidi -lglib-2.0 -lfontconfig -lfreetype -lluajit-5.1 /home/jpeg/e/core/efl/src/lib/ector/.libs/libector.so /home/jpeg/e/core/efl/src/lib/efl/.libs/libefl.so /home/jpeg/e/core/efl/src/lib/eet/.libs/libeet.so -lssl -lcrypto -lz /home/jpeg/e/core/efl/src/lib/eo/.libs/libeo.so /home/jpeg/e/core/efl/src/lib/eina/.libs/libeina.so -lsystemd -lpthread -ldl -lrt -ljpeg -lpng16 -lm -pthread -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/efl/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eina/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eo/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_file/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_con/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_input/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ecore_input_evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/evas/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/ector/.libs -Wl,-rpath -Wl,/home/jpeg/e/core/efl/src/lib/eet/.libs)"
+
+# This environment variable determines our operation mode.
+if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='2.4.5'
+  notinst_deplibs=' ../../../src/lib/efl/libefl.la ../../../src/lib/eina/libeina.la ../../../src/lib/eo/libeo.la ../../../src/lib/ecore/libecore.la ../../../src/lib/ecore_file/libecore_file.la /home/jpeg/e/core/efl/src/lib/ecore_con/libecore_con.la ../../../src/lib/ecore_input/libecore_input.la ../../../src/lib/ecore_evas/libecore_evas.la /home/jpeg/e/core/efl/src/lib/ecore_input_evas/libecore_input_evas.la /home/jpeg/e/core/efl/src/lib/evas/libevas.la /home/jpeg/e/core/efl/src/lib/ecore_input/libecore_input.la /home/jpeg/e/core/efl/src/lib/ecore/libecore.la ../../../src/lib/ector/libector.la ../../../src/lib/evas/libevas.la /home/jpeg/e/core/efl/src/lib/ector/libector.la /home/jpeg/e/core/efl/src/lib/efl/libefl.la /home/jpeg/e/core/efl/src/lib/eet/libeet.la /home/jpeg/e/core/efl/src/lib/eo/libeo.la /home/jpeg/e/core/efl/src/lib/eina/libeina.la'
+else
+  # When we are sourced in execute mode, $file and $ECHO are already set.
+  if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+    file="$0"
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+    ECHO="printf %s\\n"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string --lt-
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's ../../../libtool value, followed by no.
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=$0
+  shift
+  for lt_opt
+  do
+    case "$lt_opt" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`
+        test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.
+        lt_dump_F=`$ECHO "X$lt_script_arg0" | /usr/bin/sed -e 's/^X//' -e 's%^.*/%%'`
+        cat "$lt_dump_D/$lt_dump_F"
+        exit 0
+      ;;
+    --lt-*)
+        $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n "$lt_option_debug"; then
+    echo "evas_vg_batman:evas_vg_batman:$LINENO: libtool wrapper (GNU libtool) 2.4.5" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    $ECHO "evas_vg_batman:evas_vg_batman:$LINENO: newargv[$lt_dump_args_N]: $lt_arg"
+    lt_dump_args_N=`expr $lt_dump_args_N + 1`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+
+      if test -n "$lt_option_debug"; then
+        $ECHO "evas_vg_batman:evas_vg_batman:$LINENO: newargv[0]: $progdir/$program" 1>&2
+        func_lt_dump_args ${1+"$@"} 1>&2
+      fi
+      exec "$progdir/$program" ${1+"$@"}
+
+      $ECHO "$0: cannot exec $program $*" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from $@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case " $* " in
+  *\ --lt-*)
+    for lt_wr_arg
+    do
+      case $lt_wr_arg in
+      --lt-*) ;;
+      *) set x "$@" "$lt_wr_arg"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core ${1+"$@"}
+}
+
+  # Parse options
+  func_parse_lt_options "$0" ${1+"$@"}
+
+  # Find the directory that this script lives in.
+  thisdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+  test "x$thisdir" = "x$file" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=`ls -ld "$file" | /usr/bin/sed -n 's/.*-> //p'`
+  while test -n "$file"; do
+    destdir=`$ECHO "$file" | /usr/bin/sed 's%/[^/]*$%%'`
+
+    # If there was a directory component, then change thisdir.
+    if test "x$destdir" != "x$file"; then
+      case "$destdir" in
+      [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
+      *) thisdir="$thisdir/$destdir" ;;
+      esac
+    fi
+
+    file=`$ECHO "$file" | /usr/bin/sed 's%^.*/%%'`
+    file=`ls -ld "$thisdir/$file" | /usr/bin/sed -n 's/.*-> //p'`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
+  if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
+    # special case for '.'
+    if test "$thisdir" = "."; then
+      thisdir=`pwd`
+    fi
+    # remove .libs from thisdir
+    case "$thisdir" in
+    *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /usr/bin/sed 's%[\\/][^\\/]*$%%'` ;;
+    .libs )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=`cd "$thisdir" && pwd`
+  test -n "$absdir" && thisdir="$absdir"
+
+  program=lt-'evas_vg_batman'
+  progdir="$thisdir/.libs"
+
+  if test ! -f "$progdir/$program" ||
+     { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /usr/bin/sed 1q`; \
+       test "X$file" != "X$progdir/$program"; }; then
+
+    file="$$-$program"
+
+    if test ! -d "$progdir"; then
+      mkdir "$progdir"
+    else
+      rm -f "$progdir/$file"
+    fi
+
+    # relink executable if necessary
+    if test -n "$relink_command"; then
+      if relink_command_output=`eval $relink_command 2>&1`; then :
+      else
+       $ECHO "$relink_command_output" >&2
+       rm -f "$progdir/$file"
+       exit 1
+      fi
+    fi
+
+    mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
+    { rm -f "$progdir/$program";
+      mv -f "$progdir/$file" "$progdir/$program"; }
+    rm -f "$progdir/$file"
+  fi
+
+  if test -f "$progdir/$program"; then
+    if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+      # Run the actual program with our arguments.
+      func_exec_program ${1+"$@"}
+    fi
+  else
+    # The program doesn't exist.
+    $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2
+    $ECHO "This script is just a wrapper for $program." 1>&2
+    $ECHO "See the libtool documentation for more information." 1>&2
+    exit 1
+  fi
+fi
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api.c.BAK b/src/modules/evas/engines/gl_common/evas_gl_api.c.BAK
new file mode 100644 (file)
index 0000000..6976d71
--- /dev/null
@@ -0,0 +1,3031 @@
+#include "evas_gl_core_private.h"
+#include "evas_gl_api_ext.h"
+
+#define EVGL_FUNC_BEGIN() \
+{ \
+   _func_begin_debug(__FUNCTION__); \
+}
+
+#define EVGL_FUNC_END() GLERRV(__FUNCTION__)
+#define _EVGL_INT_INIT_VALUE -3
+
+#ifdef GL_ERRORS
+#undef glActiveTexture
+#undef glBindAttribLocation
+#undef glBindBuffer
+#undef glBindTexture
+#undef glBlendFunc
+#undef glBufferData
+#undef glCompressedTexImage2D
+#undef glCompressedTexSubImage2D
+#undef glDeleteBuffers
+#undef glDepthMask
+#undef glDisable
+#undef glDisableVertexAttribArray
+#undef glDrawArrays
+#undef glEnable
+#undef glEnableVertexAttribArray
+#undef glGenBuffers
+#undef glGetFloatv
+#undef glGetIntegerv
+#undef glGetUniformLocation
+#undef glHint
+#undef glReadPixels
+#undef glScissor
+#undef glGenFramebuffers
+#undef glGenFramebuffers
+#undef glBindFramebuffer
+#undef glEndTiling
+#undef glGetProgramBinary
+#undef glMapBuffer
+#undef glPixelStorei
+#undef glStartTiling
+#undef glUnmapBuffer
+#undef glTexParameterf
+#undef glTexParameteri
+#undef glTexSubImage2D
+#undef glUniform1f
+#undef glUniform1i
+#undef glUniform2fv
+#undef glUniform4fv
+#undef glUniformMatrix4fv
+#undef glUseProgram
+#undef glVertexAttribPointer
+#undef glViewport
+#undef glCreateShader
+#undef glCreateProgram
+#undef glAttachShader
+#undef glLinkProgram
+#undef glGetProgramiv
+#undef glGetProgramInfoLog
+#undef glGetShaderiv
+#undef glShaderSource
+#undef glCompileShader
+#endif
+
+//---------------------------------------//
+// API Debug Error Checking Code
+static
+void _make_current_check(const char* api)
+{
+   EVGL_Context *ctx = NULL;
+
+   ctx = evas_gl_common_current_context_get();
+
+   if (!ctx)
+     CRI("\e[1;33m%s\e[m: Current Context NOT SET: GL Call Should NOT Be Called without MakeCurrent!!!", api);
+   else if (ctx->version != EVAS_GL_GLES_2_X)
+     CRI("\e[1;33m%s\e[m: This API is being called with the wrong context (invalid version).", api);
+}
+
+static
+void _direct_rendering_check(const char *api)
+{
+   EVGL_Context *ctx = NULL;
+
+   ctx = evas_gl_common_current_context_get();
+   if (!ctx)
+     {
+        ERR("Current Context Not Set");
+        return;
+     }
+
+   if (_evgl_not_in_pixel_get())
+     {
+        CRI("\e[1;33m%s\e[m: This API is being called outside Pixel Get Callback Function.", api);
+     }
+}
+
+static
+void _func_begin_debug(const char *api)
+{
+   _make_current_check(api);
+   _direct_rendering_check(api);
+}
+
+//-------------------------------------------------------------//
+// GL to GLES Compatibility Functions
+//-------------------------------------------------------------//
+void
+_evgl_glBindFramebuffer(GLenum target, GLuint framebuffer)
+{
+   EVGL_Context *ctx = NULL;
+   EVGL_Resource *rsc;
+
+   rsc = _evgl_tls_resource_get();
+   ctx = evas_gl_common_current_context_get();
+
+   if (!ctx)
+     {
+        ERR("No current context set.");
+        return;
+     }
+   if (!rsc)
+     {
+        ERR("No current TLS resource.");
+        return;
+     }
+
+   // Take care of BindFramebuffer 0 issue
+   if (framebuffer==0)
+     {
+        if (_evgl_direct_enabled())
+          {
+             glBindFramebuffer(target, 0);
+
+             if (rsc->direct.partial.enabled)
+               {
+                  if (!ctx->partial_render)
+                    {
+                       evgl_direct_partial_render_start();
+                       ctx->partial_render = 1;
+                    }
+               }
+          }
+        else
+          {
+             glBindFramebuffer(target, ctx->surface_fbo);
+          }
+        ctx->current_fbo = 0;
+     }
+   else
+     {
+        if (_evgl_direct_enabled())
+          {
+             if (ctx->current_fbo == 0)
+               {
+                  if (rsc->direct.partial.enabled)
+                     evgl_direct_partial_render_end();
+               }
+          }
+
+        glBindFramebuffer(target, framebuffer);
+
+        // Save this for restore when doing make current
+        ctx->current_fbo = framebuffer;
+     }
+}
+
+void
+_evgl_glClearDepthf(GLclampf depth)
+{
+#ifdef GL_GLES
+   glClearDepthf(depth);
+#else
+   glClearDepth(depth);
+#endif
+}
+
+void
+_evgl_glDepthRangef(GLclampf zNear, GLclampf zFar)
+{
+#ifdef GL_GLES
+   glDepthRangef(zNear, zFar);
+#else
+   glDepthRange(zNear, zFar);
+#endif
+}
+
+void
+_evgl_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+{
+#ifdef GL_GLES
+   glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
+#else
+   if (range)
+     {
+        range[0] = -126; // floor(log2(FLT_MIN))
+        range[1] = 127; // floor(log2(FLT_MAX))
+     }
+   if (precision)
+     {
+        precision[0] = 24; // floor(-log2((1.0/16777218.0)));
+     }
+   return;
+   if (shadertype) shadertype = precisiontype = 0;
+#endif
+}
+
+void
+_evgl_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
+{
+#ifdef GL_GLES
+   glShaderBinary(n, shaders, binaryformat, binary, length);
+#else
+   // FIXME: need to dlsym/getprocaddress for this
+   ERR("Binary Shader is not supported here yet.");
+   (void)n;
+   (void)shaders;
+   (void)binaryformat;
+   (void)binary;
+   (void)length;
+#endif
+}
+
+void
+_evgl_glReleaseShaderCompiler(void)
+{
+#ifdef GL_GLES
+   glReleaseShaderCompiler();
+#else
+#endif
+}
+
+
+//-------------------------------------------------------------//
+// Calls related to Evas GL Direct Rendering
+//-------------------------------------------------------------//
+// Transform from Evas Coordinat to GL Coordinate
+// returns: imgc[4] (oc[4]) original image object dimension in gl coord
+// returns: objc[4] (nc[4]) tranformed  (x, y, width, heigth) in gl coord
+// returns: cc[4] cliped coordinate in original coordinate
+void
+compute_gl_coordinates(int win_w, int win_h, int rot, int clip_image,
+                       int x, int y, int width, int height,
+                       int img_x, int img_y, int img_w, int img_h,
+                       int clip_x, int clip_y, int clip_w, int clip_h,
+                       int imgc[4], int objc[4], int cc[4])
+{
+   if (rot == 0)
+     {
+        // oringinal image object coordinate in gl coordinate
+        imgc[0] = img_x;
+        imgc[1] = win_h - img_y - img_h;
+        imgc[2] = imgc[0] + img_w;
+        imgc[3] = imgc[1] + img_h;
+
+        // clip coordinates in gl coordinate
+        cc[0] = clip_x;
+        cc[1] = win_h - clip_y - clip_h;
+        cc[2] = cc[0] + clip_w;
+        cc[3] = cc[1] + clip_h;
+
+        // transformed (x,y,width,height) in gl coordinate
+        objc[0] = imgc[0] + x;
+        objc[1] = imgc[1] + y;
+        objc[2] = objc[0] + width;
+        objc[3] = objc[1] + height;
+     }
+   else if (rot == 180)
+     {
+        // oringinal image object coordinate in gl coordinate
+        imgc[0] = win_w - img_x - img_w;
+        imgc[1] = img_y;
+        imgc[2] = imgc[0] + img_w;
+        imgc[3] = imgc[1] + img_h;
+
+        // clip coordinates in gl coordinate
+        cc[0] = win_w - clip_x - clip_w;
+        cc[1] = clip_y;
+        cc[2] = cc[0] + clip_w;
+        cc[3] = cc[1] + clip_h;
+
+        // transformed (x,y,width,height) in gl coordinate
+        objc[0] = imgc[0] + img_w - x - width;
+        objc[1] = imgc[1] + img_h - y - height;
+        objc[2] = objc[0] + width;
+        objc[3] = objc[1] + height;
+
+     }
+   else if (rot == 90)
+     {
+        // oringinal image object coordinate in gl coordinate
+        imgc[0] = img_y;
+        imgc[1] = img_x;
+        imgc[2] = imgc[0] + img_h;
+        imgc[3] = imgc[1] + img_w;
+
+        // clip coordinates in gl coordinate
+        cc[0] = clip_y;
+        cc[1] = clip_x;
+        cc[2] = cc[0] + clip_h;
+        cc[3] = cc[1] + clip_w;
+
+        // transformed (x,y,width,height) in gl coordinate
+        objc[0] = imgc[0] + img_h - y - height;
+        objc[1] = imgc[1] + x;
+        objc[2] = objc[0] + height;
+        objc[3] = objc[1] + width;
+     }
+   else if (rot == 270)
+     {
+        // oringinal image object coordinate in gl coordinate
+        imgc[0] = win_h - img_y - img_h;
+        imgc[1] = win_w - img_x - img_w;
+        imgc[2] = imgc[0] + img_h;
+        imgc[3] = imgc[1] + img_w;
+
+        // clip coordinates in gl coordinate
+        cc[0] = win_h - clip_y - clip_h;
+        cc[1] = win_w - clip_x - clip_w;
+        cc[2] = cc[0] + clip_h;
+        cc[3] = cc[1] + clip_w;
+
+        // transformed (x,y,width,height) in gl coordinate
+        objc[0] = imgc[0] + y;
+        objc[1] = imgc[1] + img_w - x - width;
+        objc[2] = objc[0] + height;
+        objc[3] = objc[1] + width;
+     }
+   else
+     {
+        ERR("Invalid rotation angle %d.", rot);
+        return;
+     }
+
+   if (clip_image)
+     {
+        // Clip against original image object
+        if (objc[0] < imgc[0]) objc[0] = imgc[0];
+        if (objc[0] > imgc[2]) objc[0] = imgc[2];
+
+        if (objc[1] < imgc[1]) objc[1] = imgc[1];
+        if (objc[1] > imgc[3]) objc[1] = imgc[3];
+
+        if (objc[2] < imgc[0]) objc[2] = imgc[0];
+        if (objc[2] > imgc[2]) objc[2] = imgc[2];
+
+        if (objc[3] < imgc[1]) objc[3] = imgc[1];
+        if (objc[3] > imgc[3]) objc[3] = imgc[3];
+     }
+
+   imgc[2] = imgc[2]-imgc[0];     // width
+   imgc[3] = imgc[3]-imgc[1];     // height
+
+   objc[2] = objc[2]-objc[0];     // width
+   objc[3] = objc[3]-objc[1];     // height
+
+   cc[2] = cc[2]-cc[0]; // width
+   cc[3] = cc[3]-cc[1]; // height
+
+   //DBG( "\e[1;32m     Img[%d %d %d %d] Original [%d %d %d %d]  Transformed[%d %d %d %d]  Clip[%d %d %d %d] Clipped[%d %d %d %d] \e[m", img_x, img_y, img_w, img_h, imgc[0], imgc[1], imgc[2], imgc[3], objc[0], objc[1], objc[2], objc[3], clip[0], clip[1], clip[2], clip[3], cc[0], cc[1], cc[2], cc[3]);
+}
+
+static void
+_evgl_glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+   EVGL_Resource *rsc;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        rsc->clear_color.a = alpha;
+        rsc->clear_color.r = red;
+        rsc->clear_color.g = green;
+        rsc->clear_color.b = blue;
+     }
+   glClearColor(red, green, blue, alpha);
+}
+
+static void
+_evgl_glClear(GLbitfield mask)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        if (!(rsc->current_ctx->current_fbo))
+          {
+             /* Skip glClear() if clearing with transparent color
+              * Note: There will be side effects if the object itself is not
+              * marked as having an alpha channel!
+              */
+             if (ctx->current_sfc->alpha && (mask & GL_COLOR_BUFFER_BIT))
+               {
+                  if ((rsc->clear_color.a == 0) &&
+                      (rsc->clear_color.r == 0) &&
+                      (rsc->clear_color.g == 0) &&
+                      (rsc->clear_color.b == 0))
+                    {
+                       // Skip clear color as we don't want to write black
+                       mask &= ~GL_COLOR_BUFFER_BIT;
+                    }
+                  else if (rsc->clear_color.a != 1.0)
+                    {
+                       // TODO: Draw a rectangle? This will never be the perfect solution though.
+                       WRN("glClear() used with a semi-transparent color and direct rendering. "
+                           "This will erase the previous contents of the evas!");
+                    }
+                  if (!mask) return;
+               }
+
+             if ((!ctx->direct_scissor))
+               {
+                  glEnable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 1;
+               }
+
+             if ((ctx->scissor_updated) && (ctx->scissor_enabled))
+               {
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 1,
+                                         ctx->scissor_coord[0], ctx->scissor_coord[1],
+                                         ctx->scissor_coord[2], ctx->scissor_coord[3],
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+
+                  RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], cc[2], cc[3]);
+                  glScissor(nc[0], nc[1], nc[2], nc[3]);
+                  ctx->direct_scissor = 0;
+               }
+             else
+               {
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 0,
+                                         0, 0, 0, 0,
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+                  glScissor(cc[0], cc[1], cc[2], cc[3]);
+               }
+
+             glClear(mask);
+
+             // TODO/FIXME: Restore previous client-side scissors.
+          }
+        else
+          {
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  glDisable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 0;
+               }
+
+             glClear(mask);
+          }
+     }
+   else
+     {
+        if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+          {
+             glDisable(GL_SCISSOR_TEST);
+             ctx->direct_scissor = 0;
+          }
+
+        glClear(mask);
+     }
+}
+
+static void
+_evgl_glEnable(GLenum cap)
+{
+   EVGL_Context *ctx;
+
+   ctx = evas_gl_common_current_context_get();
+
+   if (ctx && (cap == GL_SCISSOR_TEST))
+     {
+        ctx->scissor_enabled = 1;
+
+        if (_evgl_direct_enabled())
+          {
+             EVGL_Resource *rsc = _evgl_tls_resource_get();
+             int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0}, cc[4] = {0,0,0,0};
+
+             if (rsc)
+               {
+                  if (!ctx->current_fbo)
+                    {
+                       // Direct rendering to canvas
+                       if (!ctx->scissor_updated)
+                         {
+                            compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                                   rsc->direct.rot, 0,
+                                                   0, 0, 0, 0,
+                                                   rsc->direct.img.x, rsc->direct.img.y,
+                                                   rsc->direct.img.w, rsc->direct.img.h,
+                                                   rsc->direct.clip.x, rsc->direct.clip.y,
+                                                   rsc->direct.clip.w, rsc->direct.clip.h,
+                                                   oc, nc, cc);
+                            glScissor(cc[0], cc[1], cc[2], cc[3]);
+                         }
+                       else
+                         {
+                            compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                                   rsc->direct.rot, 1,
+                                                   ctx->scissor_coord[0], ctx->scissor_coord[1],
+                                                   ctx->scissor_coord[2], ctx->scissor_coord[3],
+                                                   rsc->direct.img.x, rsc->direct.img.y,
+                                                   rsc->direct.img.w, rsc->direct.img.h,
+                                                   rsc->direct.clip.x, rsc->direct.clip.y,
+                                                   rsc->direct.clip.w, rsc->direct.clip.h,
+                                                   oc, nc, cc);
+                            glScissor(nc[0], nc[1], nc[2], nc[3]);
+                         }
+                       ctx->direct_scissor = 1;
+                    }
+               }
+             else
+               {
+                  // Bound to an FBO, reset scissors to user data
+                  if (ctx->scissor_updated)
+                    {
+                       glScissor(ctx->scissor_coord[0], ctx->scissor_coord[1],
+                                 ctx->scissor_coord[2], ctx->scissor_coord[3]);
+                    }
+                  else if (ctx->direct_scissor)
+                    {
+                       // Back to the default scissors (here: max texture size)
+                       glScissor(0, 0, evgl_engine->caps.max_w, evgl_engine->caps.max_h);
+                    }
+                  ctx->direct_scissor = 0;
+               }
+
+             glEnable(GL_SCISSOR_TEST);
+             return;
+          }
+     }
+
+   glEnable(cap);
+}
+
+static void
+_evgl_glDisable(GLenum cap)
+{
+   EVGL_Context *ctx;
+
+   ctx = evas_gl_common_current_context_get();
+
+   if (ctx && (cap == GL_SCISSOR_TEST))
+     {
+        ctx->scissor_enabled = 0;
+
+        if (_evgl_direct_enabled())
+          {
+             if (!ctx->current_fbo)
+               {
+                  // Restore default scissors for direct rendering
+                  int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0}, cc[4] = {0,0,0,0};
+                  EVGL_Resource *rsc = _evgl_tls_resource_get();
+
+                  if (rsc)
+                    {
+                       compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                              rsc->direct.rot, 1,
+                                              0, 0, rsc->direct.img.w, rsc->direct.img.h,
+                                              rsc->direct.img.x, rsc->direct.img.y,
+                                              rsc->direct.img.w, rsc->direct.img.h,
+                                              rsc->direct.clip.x, rsc->direct.clip.y,
+                                              rsc->direct.clip.w, rsc->direct.clip.h,
+                                              oc, nc, cc);
+
+                       RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], cc[2], cc[3]);
+                       glScissor(nc[0], nc[1], nc[2], nc[3]);
+
+                       ctx->direct_scissor = 1;
+                       glEnable(GL_SCISSOR_TEST);
+                    }
+               }
+             else
+               {
+                  // Bound to an FBO, disable scissors for real
+                  ctx->direct_scissor = 0;
+                  glDisable(GL_SCISSOR_TEST);
+               }
+             return;
+          }
+     }
+
+   glDisable(cap);
+}
+
+void
+_evgl_glGetIntegerv(GLenum pname, GLint* params)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+
+   if (_evgl_direct_enabled())
+     {
+        if (!params)
+          {
+             ERR("Invalid Parameter");
+             return;
+          }
+
+        if (!(rsc=_evgl_tls_resource_get()))
+          {
+             ERR("Unable to execute GL command. Error retrieving tls");
+             return;
+          }
+
+        ctx = rsc->current_ctx;
+        if (!ctx)
+          {
+             ERR("Unable to retrive Current Context");
+             return;
+          }
+
+        // Only need to handle it if it's directly rendering to the window
+        if (!(rsc->current_ctx->current_fbo))
+          {
+             if (pname == GL_SCISSOR_BOX)
+               {
+                  if (ctx->scissor_updated)
+                    {
+                       memcpy(params, ctx->scissor_coord, sizeof(int)*4);
+                       return;
+                    }
+               }
+             else if (pname == GL_VIEWPORT)
+               {
+                  if (ctx->viewport_updated)
+                    {
+                       memcpy(params, ctx->viewport_coord, sizeof(int)*4);
+                       return;
+                    }
+               }
+
+             // If it hasn't been initialized yet, return img object size
+             if ((pname == GL_SCISSOR_BOX) || (pname == GL_VIEWPORT))
+               {
+                  params[0] = 0;
+                  params[1] = 0;
+                  params[2] = (GLint)rsc->direct.img.w;
+                  params[3] = (GLint)rsc->direct.img.h;
+                  return;
+               }
+          }
+     }
+   else
+     {
+        if (pname == GL_FRAMEBUFFER_BINDING)
+          {
+             rsc = _evgl_tls_resource_get();
+             ctx = rsc ? rsc->current_ctx : NULL;
+             if (ctx)
+               {
+                  *params = ctx->current_fbo;
+                  return;
+               }
+          }
+     }
+
+   glGetIntegerv(pname, params);
+}
+
+static const GLubyte *
+_evgl_glGetString(GLenum name)
+{
+   static char _version[128] = {0};
+   static char _glsl[128] = {0};
+   EVGL_Resource *rsc;
+   const GLubyte *ret;
+
+   /* We wrap two values here:
+    *
+    * VERSION: Since OpenGL ES 3 is not supported yet, we return OpenGL ES 2.0
+    *   The string is not modified on desktop GL (eg. 4.4.0 NVIDIA 343.22)
+    *   GLES 3 support is not exposed because apps can't use GLES 3 core
+    *   functions yet.
+    *
+    * EXTENSIONS: This should return only the list of GL extensions supported
+    *   by Evas GL. This means as many extensions as possible should be
+    *   added to the whitelist.
+    */
+
+   /*
+    * Note from Khronos: "If an error is generated, glGetString returns 0."
+    * I decided not to call glGetString if there is no context as this is
+    * known to cause crashes on certain GL drivers (eg. Nvidia binary blob).
+    * --> crash moved to app side if they blindly call strstr()
+    */
+
+   if ((!(rsc = _evgl_tls_resource_get())) || !rsc->current_ctx)
+     {
+        ERR("Current context is NULL, not calling glGetString");
+        // This sets evas_gl_error_get instead of glGetError...
+        evas_gl_common_error_set(NULL, EVAS_GL_BAD_CONTEXT);
+        return NULL;
+     }
+
+   switch (name)
+     {
+      case GL_VENDOR:
+      case GL_RENDERER:
+        // Keep these as-is.
+        break;
+
+      case GL_SHADING_LANGUAGE_VERSION:
+        ret = glGetString(GL_SHADING_LANGUAGE_VERSION);
+        if (!ret) return NULL;
+#ifdef GL_GLES
+        if (ret[15] != (GLubyte) '1')
+          {
+             // We try not to remove the vendor fluff
+             snprintf(_glsl, sizeof(_glsl), "OpenGL ES GLSL ES 1.00 Evas GL (%s)", ((char *) ret) + 18);
+             _glsl[sizeof(_glsl) - 1] = '\0';
+             return (const GLubyte *) _glsl;
+          }
+        return ret;
+#else
+        // Desktop GL, we still keep the official name
+        snprintf(_glsl, sizeof(_glsl), "OpenGL ES GLSL ES 1.00 Evas GL (%s)", (char *) ret);
+        _version[sizeof(_glsl) - 1] = '\0';
+        return (const GLubyte *) _glsl;
+#endif
+
+      case GL_VERSION:
+        ret = glGetString(GL_VERSION);
+        if (!ret) return NULL;
+#ifdef GL_GLES
+        if (ret[11] != (GLubyte) '2')
+          {
+             // We try not to remove the vendor fluff
+             snprintf(_version, sizeof(_version), "OpenGL ES 2.0 Evas GL (%s)", ((char *) ret) + 10);
+             _version[sizeof(_version) - 1] = '\0';
+             return (const GLubyte *) _version;
+          }
+        return ret;
+#else
+        // Desktop GL, we still keep the official name
+        snprintf(_version, sizeof(_version), "OpenGL ES 2.0 Evas GL (%s)", (char *) ret);
+        _version[sizeof(_version) - 1] = '\0';
+        return (const GLubyte *) _version;
+#endif
+
+      case GL_EXTENSIONS:
+        // No need to check context version, this is GLESv2 API.
+        return (GLubyte *) evgl_api_ext_string_get(EINA_TRUE, EINA_FALSE);
+
+      default:
+        // GL_INVALID_ENUM is generated if name is not an accepted value.
+        WRN("Unknown string requested: %x", (unsigned int) name);
+        break;
+     }
+
+   return glGetString(name);
+}
+
+static void
+_evgl_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+
+        if (!(rsc->current_ctx->current_fbo))
+          {
+             compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                    rsc->direct.rot, 1,
+                                    x, y, width, height,
+                                    rsc->direct.img.x, rsc->direct.img.y,
+                                    rsc->direct.img.w, rsc->direct.img.h,
+                                    rsc->direct.clip.x, rsc->direct.clip.y,
+                                    rsc->direct.clip.w, rsc->direct.clip.h,
+                                    oc, nc, cc);
+             glReadPixels(nc[0], nc[1], nc[2], nc[3], format, type, pixels);
+          }
+        else
+          {
+             glReadPixels(x, y, width, height, format, type, pixels);
+          }
+     }
+   else
+     {
+        glReadPixels(x, y, width, height, format, type, pixels);
+     }
+}
+
+static void
+_evgl_glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        if (!(rsc->current_ctx->current_fbo))
+          {
+             // Direct rendering to canvas
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  glDisable(GL_SCISSOR_TEST);
+               }
+
+             compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                    rsc->direct.rot, 1,
+                                    x, y, width, height,
+                                    rsc->direct.img.x, rsc->direct.img.y,
+                                    rsc->direct.img.w, rsc->direct.img.h,
+                                    rsc->direct.clip.x, rsc->direct.clip.y,
+                                    rsc->direct.clip.w, rsc->direct.clip.h,
+                                    oc, nc, cc);
+
+             // Keep a copy of the original coordinates
+             ctx->scissor_coord[0] = x;
+             ctx->scissor_coord[1] = y;
+             ctx->scissor_coord[2] = width;
+             ctx->scissor_coord[3] = height;
+
+             RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], cc[2], cc[3]);
+             glScissor(nc[0], nc[1], nc[2], nc[3]);
+
+             ctx->direct_scissor = 0;
+
+             // Mark user scissor_coord as valid
+             ctx->scissor_updated = 1;
+          }
+        else
+          {
+             // Bound to an FBO, use these new scissors
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  glDisable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 0;
+               }
+
+             glScissor(x, y, width, height);
+
+             // Why did we set this flag to 0???
+             //ctx->scissor_updated = 0;
+          }
+     }
+   else
+     {
+        if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+          {
+             glDisable(GL_SCISSOR_TEST);
+             ctx->direct_scissor = 0;
+          }
+
+        glScissor(x, y, width, height);
+     }
+}
+
+static void
+_evgl_glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        if (!(rsc->current_ctx->current_fbo))
+          {
+             if ((!ctx->direct_scissor))
+               {
+                  glEnable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 1;
+               }
+
+             if ((ctx->scissor_updated) && (ctx->scissor_enabled))
+               {
+                  // Recompute the scissor coordinates
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 1,
+                                         ctx->scissor_coord[0], ctx->scissor_coord[1],
+                                         ctx->scissor_coord[2], ctx->scissor_coord[3],
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+
+                  RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], cc[2], cc[3]);
+                  glScissor(nc[0], nc[1], nc[2], nc[3]);
+
+                  ctx->direct_scissor = 0;
+
+                  // Compute the viewport coordinate
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 0,
+                                         x, y, width, height,
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+                  glViewport(nc[0], nc[1], nc[2], nc[3]);
+               }
+             else
+               {
+
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 0,
+                                         x, y, width, height,
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+                  glScissor(cc[0], cc[1], cc[2], cc[3]);
+
+                  glViewport(nc[0], nc[1], nc[2], nc[3]);
+               }
+
+             // Keep a copy of the original coordinates
+             ctx->viewport_coord[0] = x;
+             ctx->viewport_coord[1] = y;
+             ctx->viewport_coord[2] = width;
+             ctx->viewport_coord[3] = height;
+
+             ctx->viewport_updated   = 1;
+          }
+        else
+          {
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  glDisable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 0;
+               }
+
+             glViewport(x, y, width, height);
+          }
+     }
+   else
+     {
+        if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+          {
+             glDisable(GL_SCISSOR_TEST);
+             ctx->direct_scissor = 0;
+          }
+
+        glViewport(x, y, width, height);
+     }
+}
+//-------------------------------------------------------------//
+
+
+
+//-------------------------------------------------------------//
+// Debug Evas GL APIs
+//  - GL APIs Overriden for debugging purposes
+//-------------------------------------------------------------//
+
+void
+_evgld_glActiveTexture(GLenum texture)
+{
+   EVGL_FUNC_BEGIN();
+   glActiveTexture(texture);
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glAttachShader(GLuint program, GLuint shader)
+{
+   EVGL_FUNC_BEGIN();
+   glAttachShader(program, shader);
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBindAttribLocation(GLuint program, GLuint idx, const char* name)
+{
+   EVGL_FUNC_BEGIN();
+   glBindAttribLocation(program, idx, name);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBindBuffer(GLenum target, GLuint buffer)
+{
+   EVGL_FUNC_BEGIN();
+   glBindBuffer(target, buffer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBindFramebuffer(GLenum target, GLuint framebuffer)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glBindFramebuffer(target, framebuffer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+{
+   EVGL_FUNC_BEGIN();
+   glBindRenderbuffer(target, renderbuffer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBindTexture(GLenum target, GLuint texture)
+{
+   EVGL_FUNC_BEGIN();
+   glBindTexture(target, texture);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+   EVGL_FUNC_BEGIN();
+   glBlendColor(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBlendEquation(GLenum mode)
+{
+   EVGL_FUNC_BEGIN();
+   glBlendEquation(mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+{
+   EVGL_FUNC_BEGIN();
+   glBlendEquationSeparate(modeRGB, modeAlpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBlendFunc(GLenum sfactor, GLenum dfactor)
+{
+   EVGL_FUNC_BEGIN();
+   glBlendFunc(sfactor, dfactor);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+{
+   EVGL_FUNC_BEGIN();
+   glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
+{
+   EVGL_FUNC_BEGIN();
+   glBufferData(target, size, data, usage);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
+{
+   EVGL_FUNC_BEGIN();
+   glBufferSubData(target, offset, size, data);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+GLenum
+_evgld_glCheckFramebufferStatus(GLenum target)
+{
+   GLenum ret = GL_NONE;
+
+   EVGL_FUNC_BEGIN();
+   ret = glCheckFramebufferStatus(target);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+void
+_evgld_glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+   EVGL_FUNC_BEGIN();
+   _evgl_glClearColor(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glClearDepthf(GLclampf depth)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glClearDepthf(depth);
+   GLERR();
+
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glClearStencil(GLint s)
+{
+   EVGL_FUNC_BEGIN();
+   glClearStencil(s);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+{
+   EVGL_FUNC_BEGIN();
+   glColorMask(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glCompileShader(GLuint shader)
+{
+   EVGL_FUNC_BEGIN();
+   glCompileShader(shader);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
+{
+   EVGL_FUNC_BEGIN();
+   glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
+{
+   EVGL_FUNC_BEGIN();
+   glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+{
+   EVGL_FUNC_BEGIN();
+   glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   EVGL_FUNC_BEGIN();
+   glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+GLuint
+_evgld_glCreateProgram(void)
+{
+   GLuint ret = _EVGL_INT_INIT_VALUE;
+
+   EVGL_FUNC_BEGIN();
+   ret = glCreateProgram();
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLuint
+_evgld_glCreateShader(GLenum type)
+{
+   GLuint ret = _EVGL_INT_INIT_VALUE;
+   EVGL_FUNC_BEGIN();
+   ret = glCreateShader(type);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+void
+_evgld_glCullFace(GLenum mode)
+{
+   EVGL_FUNC_BEGIN();
+   glCullFace(mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDeleteBuffers(GLsizei n, const GLuint* buffers)
+{
+   EVGL_FUNC_BEGIN();
+   glDeleteBuffers(n, buffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
+{
+   EVGL_FUNC_BEGIN();
+   glDeleteFramebuffers(n, framebuffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDeleteProgram(GLuint program)
+{
+   EVGL_FUNC_BEGIN();
+   glDeleteProgram(program);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
+{
+   EVGL_FUNC_BEGIN();
+   glDeleteRenderbuffers(n, renderbuffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDeleteShader(GLuint shader)
+{
+   EVGL_FUNC_BEGIN();
+   glDeleteShader(shader);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDeleteTextures(GLsizei n, const GLuint* textures)
+{
+   EVGL_FUNC_BEGIN();
+   glDeleteTextures(n, textures);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDepthFunc(GLenum func)
+{
+   EVGL_FUNC_BEGIN();
+   glDepthFunc(func);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDepthMask(GLboolean flag)
+{
+   EVGL_FUNC_BEGIN();
+   glDepthMask(flag);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDepthRangef(GLclampf zNear, GLclampf zFar)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glDepthRangef(zNear, zFar);
+   GLERR();
+
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDetachShader(GLuint program, GLuint shader)
+{
+   EVGL_FUNC_BEGIN();
+   glDetachShader(program, shader);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDisableVertexAttribArray(GLuint idx)
+{
+   EVGL_FUNC_BEGIN();
+   glDisableVertexAttribArray(idx);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+   EVGL_FUNC_BEGIN();
+   glDrawArrays(mode, first, count);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glDrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
+{
+   EVGL_FUNC_BEGIN();
+   glDrawElements(mode, count, type, indices);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glEnableVertexAttribArray(GLuint idx)
+{
+   EVGL_FUNC_BEGIN();
+   glEnableVertexAttribArray(idx);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glFinish(void)
+{
+   EVGL_FUNC_BEGIN();
+   glFinish();
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glFlush(void)
+{
+   EVGL_FUNC_BEGIN();
+   glFlush();
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+{
+   EVGL_FUNC_BEGIN();
+   glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+{
+   EVGL_FUNC_BEGIN();
+   glFramebufferTexture2D(target, attachment, textarget, texture, level);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glFrontFace(GLenum mode)
+{
+   EVGL_FUNC_BEGIN();
+   glFrontFace(mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetVertexAttribfv(GLuint idx, GLenum pname, GLfloat* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetVertexAttribfv(idx, pname, params);
+
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetVertexAttribiv(GLuint idx, GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetVertexAttribiv(idx, pname, params);
+
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetVertexAttribPointerv(GLuint idx, GLenum pname, void** pointer)
+{
+   EVGL_FUNC_BEGIN();
+   glGetVertexAttribPointerv(idx, pname, pointer);
+
+   GLERR();
+
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glHint(GLenum target, GLenum mode)
+{
+   EVGL_FUNC_BEGIN();
+   glHint(target, mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGenBuffers(GLsizei n, GLuint* buffers)
+{
+   EVGL_FUNC_BEGIN();
+   glGenBuffers(n, buffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGenerateMipmap(GLenum target)
+{
+   EVGL_FUNC_BEGIN();
+   glGenerateMipmap(target);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGenFramebuffers(GLsizei n, GLuint* framebuffers)
+{
+   EVGL_FUNC_BEGIN();
+   glGenFramebuffers(n, framebuffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
+{
+   EVGL_FUNC_BEGIN();
+   glGenRenderbuffers(n, renderbuffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGenTextures(GLsizei n, GLuint* textures)
+{
+   EVGL_FUNC_BEGIN();
+   glGenTextures(n, textures);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetActiveAttrib(GLuint program, GLuint idx, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
+{
+   EVGL_FUNC_BEGIN();
+   glGetActiveAttrib(program, idx, bufsize, length, size, type, name);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetActiveUniform(GLuint program, GLuint idx, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
+{
+   EVGL_FUNC_BEGIN();
+   glGetActiveUniform(program, idx, bufsize, length, size, type, name);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
+{
+   EVGL_FUNC_BEGIN();
+   glGetAttachedShaders(program, maxcount, count, shaders);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+int
+_evgld_glGetAttribLocation(GLuint program, const char* name)
+{
+   int ret = _EVGL_INT_INIT_VALUE;
+   EVGL_FUNC_BEGIN();
+   ret = glGetAttribLocation(program, name);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+void
+_evgld_glGetBooleanv(GLenum pname, GLboolean* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetBooleanv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetBufferParameteriv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+GLenum
+_evgld_glGetError(void)
+{
+   GLenum ret = GL_NONE;
+
+   EVGL_FUNC_BEGIN();
+   ret = glGetError();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+void
+_evgld_glGetFloatv(GLenum pname, GLfloat* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetFloatv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetProgramiv(GLuint program, GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetProgramiv(program, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
+{
+   EVGL_FUNC_BEGIN();
+   glGetProgramInfoLog(program, bufsize, length, infolog);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetRenderbufferParameteriv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetShaderiv(shader, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
+{
+   EVGL_FUNC_BEGIN();
+   glGetShaderInfoLog(shader, bufsize, length, infolog);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
+   GLERR();
+
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
+{
+   EVGL_FUNC_BEGIN();
+   glGetShaderSource(shader, bufsize, length, source);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+const GLubyte *
+_evgld_glGetString(GLenum name)
+{
+   const GLubyte *ret = NULL;
+
+   EVGL_FUNC_BEGIN();
+   ret = _evgl_glGetString(name);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+void
+_evgld_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetTexParameterfv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetTexParameteriv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetUniformfv(GLuint program, GLint location, GLfloat* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetUniformfv(program, location, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetUniformiv(GLuint program, GLint location, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glGetUniformiv(program, location, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+int
+_evgld_glGetUniformLocation(GLuint program, const char* name)
+{
+   int ret = _EVGL_INT_INIT_VALUE;
+
+   EVGL_FUNC_BEGIN();
+   ret = glGetUniformLocation(program, name);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLboolean
+_evgld_glIsBuffer(GLuint buffer)
+{
+   GLboolean ret = GL_FALSE;
+
+   EVGL_FUNC_BEGIN();
+   ret = glIsBuffer(buffer);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLboolean
+_evgld_glIsEnabled(GLenum cap)
+{
+   GLboolean ret = GL_FALSE;
+
+   EVGL_FUNC_BEGIN();
+   ret = glIsEnabled(cap);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLboolean
+_evgld_glIsFramebuffer(GLuint framebuffer)
+{
+   GLboolean ret = GL_FALSE;
+
+   EVGL_FUNC_BEGIN();
+   ret = glIsFramebuffer(framebuffer);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLboolean
+_evgld_glIsProgram(GLuint program)
+{
+   GLboolean ret;
+   EVGL_FUNC_BEGIN();
+   ret = glIsProgram(program);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLboolean
+_evgld_glIsRenderbuffer(GLuint renderbuffer)
+{
+   GLboolean ret;
+   EVGL_FUNC_BEGIN();
+   ret = glIsRenderbuffer(renderbuffer);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLboolean
+_evgld_glIsShader(GLuint shader)
+{
+   GLboolean ret;
+   EVGL_FUNC_BEGIN();
+   ret = glIsShader(shader);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+GLboolean
+_evgld_glIsTexture(GLuint texture)
+{
+   GLboolean ret;
+   EVGL_FUNC_BEGIN();
+   ret = glIsTexture(texture);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+void
+_evgld_glLineWidth(GLfloat width)
+{
+   EVGL_FUNC_BEGIN();
+   glLineWidth(width);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glLinkProgram(GLuint program)
+{
+   EVGL_FUNC_BEGIN();
+   glLinkProgram(program);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glPixelStorei(GLenum pname, GLint param)
+{
+   EVGL_FUNC_BEGIN();
+   glPixelStorei(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glPolygonOffset(GLfloat factor, GLfloat units)
+{
+   EVGL_FUNC_BEGIN();
+   glPolygonOffset(factor, units);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glReleaseShaderCompiler(void)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glReleaseShaderCompiler();
+   GLERR();
+
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+{
+   EVGL_FUNC_BEGIN();
+   glRenderbufferStorage(target, internalformat, width, height);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glSampleCoverage(GLclampf value, GLboolean invert)
+{
+   EVGL_FUNC_BEGIN();
+   glSampleCoverage(value, invert);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glShaderBinary(n, shaders, binaryformat, binary, length);
+   GLERR();
+
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glShaderSource(GLuint shader, GLsizei count, const char* const * string, const GLint* length)
+{
+   EVGL_FUNC_BEGIN();
+#ifdef GL_GLES
+   glShaderSource(shader, count, (const GLchar * const *) string, length);
+#else
+   glShaderSource(shader, count, (const GLchar **) string, length);
+#endif
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glStencilFunc(GLenum func, GLint ref, GLuint mask)
+{
+   EVGL_FUNC_BEGIN();
+   glStencilFunc(func, ref, mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+{
+   EVGL_FUNC_BEGIN();
+   glStencilFuncSeparate(face, func, ref, mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glStencilMask(GLuint mask)
+{
+   EVGL_FUNC_BEGIN();
+   glStencilMask(mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glStencilMaskSeparate(GLenum face, GLuint mask)
+{
+   EVGL_FUNC_BEGIN();
+   glStencilMaskSeparate(face, mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+   EVGL_FUNC_BEGIN();
+   glStencilOp(fail, zfail, zpass);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+{
+   EVGL_FUNC_BEGIN();
+   glStencilOpSeparate(face, fail, zfail, zpass);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
+{
+   EVGL_FUNC_BEGIN();
+   glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+   EVGL_FUNC_BEGIN();
+   glTexParameterf(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
+{
+   EVGL_FUNC_BEGIN();
+   glTexParameterfv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glTexParameteri(GLenum target, GLenum pname, GLint param)
+{
+   EVGL_FUNC_BEGIN();
+   glTexParameteri(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   glTexParameteriv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
+{
+   EVGL_FUNC_BEGIN();
+   glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform1f(GLint location, GLfloat x)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform1f(location, x);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform1fv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform1i(GLint location, GLint x)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform1i(location, x);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform1iv(GLint location, GLsizei count, const GLint* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform1iv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform2f(GLint location, GLfloat x, GLfloat y)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform2f(location, x, y);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform2fv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform2i(GLint location, GLint x, GLint y)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform2i(location, x, y);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform2iv(GLint location, GLsizei count, const GLint* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform2iv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform3f(location, x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform3fv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform3i(GLint location, GLint x, GLint y, GLint z)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform3i(location, x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform3iv(GLint location, GLsizei count, const GLint* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform3iv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform4f(location, x, y, z, w);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform4fv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform4i(location, x, y, z, w);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniform4iv(GLint location, GLsizei count, const GLint* v)
+{
+   EVGL_FUNC_BEGIN();
+   glUniform4iv(location, count, v);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+   EVGL_FUNC_BEGIN();
+   glUniformMatrix2fv(location, count, transpose, value);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+   EVGL_FUNC_BEGIN();
+   glUniformMatrix3fv(location, count, transpose, value);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+   EVGL_FUNC_BEGIN();
+   glUniformMatrix4fv(location, count, transpose, value);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glUseProgram(GLuint program)
+{
+   EVGL_FUNC_BEGIN();
+   glUseProgram(program);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glValidateProgram(GLuint program)
+{
+   EVGL_FUNC_BEGIN();
+   glValidateProgram(program);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib1f(GLuint indx, GLfloat x)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib1f(indx, x);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib1fv(GLuint indx, const GLfloat* values)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib1fv(indx, values);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib2f(indx, x, y);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib2fv(GLuint indx, const GLfloat* values)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib2fv(indx, values);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib3f(indx, x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib3fv(GLuint indx, const GLfloat* values)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib3fv(indx, values);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib4f(indx, x, y, z, w);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttrib4fv(GLuint indx, const GLfloat* values)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttrib4fv(indx, values);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
+{
+   EVGL_FUNC_BEGIN();
+   glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+//-------------------------------------------------------------//
+// Calls for stripping precision string in the shader
+#if 0
+
+static const char *
+opengl_strtok(const char *s, int *n, char **saveptr, char *prevbuf)
+{
+   char *start;
+   char *ret;
+   char *p;
+   int retlen;
+   static const char *delim = " \t\n\r/";
+
+   if (prevbuf)
+      free(prevbuf);
+
+   if (s)
+     {
+        *saveptr = s;
+     }
+   else
+     {
+        if (!(*saveptr) || !(*n))
+           return NULL;
+        s = *saveptr;
+     }
+
+   for (; *n && strchr(delim, *s); s++, (*n)--)
+     {
+        if (*s == '/' && *n > 1)
+          {
+             if (s[1] == '/')
+               {
+                  do {
+                       s++, (*n)--;
+                  } while (*n > 1 && s[1] != '\n' && s[1] != '\r');
+               }
+             else if (s[1] == '*')
+               {
+                  do {
+                       s++, (*n)--;
+                  } while (*n > 2 && (s[1] != '*' || s[2] != '/'));
+                  s++, (*n)--;
+                  s++, (*n)--;
+                  if (*n == 0)
+                    {
+                       break;
+                    }
+               }
+             else
+               {
+                  break;
+               }
+          }
+     }
+
+   start = s;
+   for (; *n && *s && !strchr(delim, *s); s++, (*n)--);
+   if (*n > 0)
+      s++, (*n)--;
+
+   *saveptr = s;
+
+   retlen = s - start;
+   ret = malloc(retlen + 1);
+   p = ret;
+
+   if (retlen == 0)
+     {
+        *p = 0;
+        return;
+     }
+
+   while (retlen > 0)
+     {
+        if (*start == '/' && retlen > 1)
+          {
+             if (start[1] == '/')
+               {
+                  do {
+                       start++, retlen--;
+                  } while (retlen > 1 && start[1] != '\n' && start[1] != '\r');
+                  start++, retlen--;
+                  continue;
+               } else if (start[1] == '*')
+                 {
+                    do {
+                         start++, retlen--;
+                    } while (retlen > 2 && (start[1] != '*' || start[2] != '/'));
+                    start += 3, retlen -= 3;
+                    continue;
+                 }
+          }
+        *(p++) = *(start++), retlen--;
+     }
+
+   *p = 0;
+   return ret;
+}
+
+static char *
+do_eglShaderPatch(const char *source, int length, int *patched_len)
+{
+   char *saveptr = NULL;
+   char *sp;
+   char *p = NULL;
+
+   if (!length) length = strlen(source);
+
+   *patched_len = 0;
+   int patched_size = length;
+   char *patched = malloc(patched_size + 1);
+
+   if (!patched) return NULL;
+
+   p = opengl_strtok(source, &length, &saveptr, NULL);
+
+   for (; p; p = opengl_strtok(0, &length, &saveptr, p))
+     {
+        if (!strncmp(p, "lowp", 4) || !strncmp(p, "mediump", 7) || !strncmp(p, "highp", 5))
+          {
+             continue;
+          }
+        else if (!strncmp(p, "precision", 9))
+          {
+             while ((p = opengl_strtok(0, &length, &saveptr, p)) && !strchr(p, ';'));
+          }
+        else
+          {
+             if (!strncmp(p, "gl_MaxVertexUniformVectors", 26))
+               {
+                  free(p);
+                  p = strdup("(gl_MaxVertexUniformComponents / 4)");
+               }
+             else if (!strncmp(p, "gl_MaxFragmentUniformVectors", 28))
+               {
+                  free(p);
+                  p = strdup("(gl_MaxFragmentUniformComponents / 4)");
+               }
+             else if (!strncmp(p, "gl_MaxVaryingVectors", 20))
+               {
+                  free(p);
+                  p = strdup("(gl_MaxVaryingFloats / 4)");
+               }
+
+             int new_len = strlen(p);
+             if (*patched_len + new_len > patched_size)
+               {
+                  char *tmp;
+
+                  patched_size *= 2;
+                  tmp = realloc(patched, patched_size + 1);
+                  if (!tmp)
+                    {
+                       free(patched);
+                       free(p);
+                       return NULL;
+                    }
+                  patched = tmp;
+               }
+
+             memcpy(patched + *patched_len, p, new_len);
+             *patched_len += new_len;
+          }
+     }
+
+   patched[*patched_len] = 0;
+   /* check that we don't leave dummy preprocessor lines */
+   for (sp = patched; *sp;)
+     {
+        for (; *sp == ' ' || *sp == '\t'; sp++);
+        if (!strncmp(sp, "#define", 7))
+          {
+             for (p = sp + 7; *p == ' ' || *p == '\t'; p++);
+             if (*p == '\n' || *p == '\r' || *p == '/')
+               {
+                  memset(sp, 0x20, 7);
+               }
+          }
+        for (; *sp && *sp != '\n' && *sp != '\r'; sp++);
+        for (; *sp == '\n' || *sp == '\r'; sp++);
+     }
+   return patched;
+}
+
+static int
+shadersrc_gles_to_gl(GLsizei count, const char** string, char **s, const GLint* length, GLint *l)
+{
+   int i;
+
+   for(i = 0; i < count; ++i) {
+        GLint len;
+        if(length) {
+             len = length[i];
+             if (len < 0)
+                len = string[i] ? strlen(string[i]) : 0;
+        } else
+           len = string[i] ? strlen(string[i]) : 0;
+
+        if(string[i]) {
+             s[i] = do_eglShaderPatch(string[i], len, &l[i]);
+             if(!s[i]) {
+                  while(i)
+                     free(s[--i]);
+
+                  free(l);
+                  free(s);
+                  return -1;
+             }
+        } else {
+             s[i] = NULL;
+             l[i] = 0;
+        }
+   }
+
+   return 0;
+}
+
+
+void
+_evgld_glShaderSource(GLuint shader, GLsizei count, const char* const* string, const GLint* length)
+{
+   EVGL_FUNC_BEGIN();
+
+#ifdef GL_GLES
+   glShaderSource(shader, count, string, length);
+   GLERR();
+   goto finish;
+#else
+   //GET_EXT_PTR(void, glShaderSource, (int, int, char **, void *));
+   int size = count;
+   int i;
+   int acc_length = 0;
+   GLchar **tab_prog = malloc(size * sizeof(GLchar *));
+   int *tab_length = (int *) length;
+
+   char **tab_prog_new;
+   GLint *tab_length_new;
+
+   tab_prog_new = malloc(count* sizeof(char*));
+   tab_length_new = malloc(count* sizeof(GLint));
+
+   memset(tab_prog_new, 0, count * sizeof(char*));
+   memset(tab_length_new, 0, count * sizeof(GLint));
+
+   for (i = 0; i < size; i++) {
+        tab_prog[i] = ((GLchar *) string) + acc_length;
+        acc_length += tab_length[i];
+   }
+
+   shadersrc_gles_to_gl(count, tab_prog, tab_prog_new, tab_length, tab_length_new);
+
+   if (!tab_prog_new || !tab_length_new)
+      ERR("Error allocating memory for shader string manipulation.");
+
+   glShaderSource(shader, count, tab_prog_new, tab_length_new);
+   GLERR();
+
+   for (i = 0; i < count; i++)
+      free(tab_prog_new[i]);
+   free(tab_prog_new);
+   free(tab_length_new);
+
+   free(tab_prog);
+#endif
+
+finish:
+   EVGL_FUNC_END();
+}
+#endif
+
+//-------------------------------------------------------------//
+
+
+//-------------------------------------------------------------//
+// Calls related to Evas GL Direct Rendering
+//-------------------------------------------------------------//
+static void
+_evgld_glClear(GLbitfield mask)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glClear(mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_glEnable(GLenum cap)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glEnable(cap);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_glDisable(GLenum cap)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glDisable(cap);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+void
+_evgld_glGetIntegerv(GLenum pname, GLint* params)
+{
+   EVGL_FUNC_BEGIN();
+   _evgl_glGetIntegerv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glReadPixels(x, y, width, height, format, type, pixels);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glScissor(x, y, width, height);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   EVGL_FUNC_BEGIN();
+
+   _evgl_glViewport(x, y, width, height);
+   GLERR();
+   EVGL_FUNC_END();
+}
+//-------------------------------------------------------------//
+
+static void
+_normal_gl_api_get(Evas_GL_API *funcs)
+{
+   funcs->version = EVAS_GL_API_VERSION;
+
+#define ORD(f) EVAS_API_OVERRIDE(f, funcs,)
+   // GLES 2.0
+   ORD(glActiveTexture);
+   ORD(glAttachShader);
+   ORD(glBindAttribLocation);
+   ORD(glBindBuffer);
+   ORD(glBindTexture);
+   ORD(glBlendColor);
+   ORD(glBlendEquation);
+   ORD(glBlendEquationSeparate);
+   ORD(glBlendFunc);
+   ORD(glBlendFuncSeparate);
+   ORD(glBufferData);
+   ORD(glBufferSubData);
+   ORD(glCheckFramebufferStatus);
+//   ORD(glClear);
+//   ORD(glClearColor);
+//   ORD(glClearDepthf);
+   ORD(glClearStencil);
+   ORD(glColorMask);
+   ORD(glCompileShader);
+   ORD(glCompressedTexImage2D);
+   ORD(glCompressedTexSubImage2D);
+   ORD(glCopyTexImage2D);
+   ORD(glCopyTexSubImage2D);
+   ORD(glCreateProgram);
+   ORD(glCreateShader);
+   ORD(glCullFace);
+   ORD(glDeleteBuffers);
+   ORD(glDeleteFramebuffers);
+   ORD(glDeleteProgram);
+   ORD(glDeleteRenderbuffers);
+   ORD(glDeleteShader);
+   ORD(glDeleteTextures);
+   ORD(glDepthFunc);
+   ORD(glDepthMask);
+//   ORD(glDepthRangef);
+   ORD(glDetachShader);
+//   ORD(glDisable);
+   ORD(glDisableVertexAttribArray);
+   ORD(glDrawArrays);
+   ORD(glDrawElements);
+//   ORD(glEnable);
+   ORD(glEnableVertexAttribArray);
+   ORD(glFinish);
+   ORD(glFlush);
+   ORD(glFramebufferRenderbuffer);
+   ORD(glFramebufferTexture2D);
+   ORD(glFrontFace);
+   ORD(glGenBuffers);
+   ORD(glGenerateMipmap);
+   ORD(glGenFramebuffers);
+   ORD(glGenRenderbuffers);
+   ORD(glGenTextures);
+   ORD(glGetActiveAttrib);
+   ORD(glGetActiveUniform);
+   ORD(glGetAttachedShaders);
+   ORD(glGetAttribLocation);
+   ORD(glGetBooleanv);
+   ORD(glGetBufferParameteriv);
+   ORD(glGetError);
+   ORD(glGetFloatv);
+   ORD(glGetFramebufferAttachmentParameteriv);
+//   ORD(glGetIntegerv);
+   ORD(glGetProgramiv);
+   ORD(glGetProgramInfoLog);
+   ORD(glGetRenderbufferParameteriv);
+   ORD(glGetShaderiv);
+   ORD(glGetShaderInfoLog);
+//   ORD(glGetShaderPrecisionFormat);
+   ORD(glGetShaderSource);
+//   ORD(glGetString);
+   ORD(glGetTexParameterfv);
+   ORD(glGetTexParameteriv);
+   ORD(glGetUniformfv);
+   ORD(glGetUniformiv);
+   ORD(glGetUniformLocation);
+   ORD(glGetVertexAttribfv);
+   ORD(glGetVertexAttribiv);
+   ORD(glGetVertexAttribPointerv);
+   ORD(glHint);
+   ORD(glIsBuffer);
+   ORD(glIsEnabled);
+   ORD(glIsFramebuffer);
+   ORD(glIsProgram);
+   ORD(glIsRenderbuffer);
+   ORD(glIsShader);
+   ORD(glIsTexture);
+   ORD(glLineWidth);
+   ORD(glLinkProgram);
+   ORD(glPixelStorei);
+   ORD(glPolygonOffset);
+//   ORD(glReadPixels);
+//   ORD(glReleaseShaderCompiler);
+   ORD(glRenderbufferStorage);
+   ORD(glSampleCoverage);
+//   ORD(glScissor);
+//   ORD(glShaderBinary);
+// Deal with double glShaderSource signature
+   funcs->glShaderSource = (void (*)(GLuint, GLsizei, const char * const *, const GLint *))glShaderSource;
+   ORD(glStencilFunc);
+   ORD(glStencilFuncSeparate);
+   ORD(glStencilMask);
+   ORD(glStencilMaskSeparate);
+   ORD(glStencilOp);
+   ORD(glStencilOpSeparate);
+   ORD(glTexImage2D);
+   ORD(glTexParameterf);
+   ORD(glTexParameterfv);
+   ORD(glTexParameteri);
+   ORD(glTexParameteriv);
+   ORD(glTexSubImage2D);
+   ORD(glUniform1f);
+   ORD(glUniform1fv);
+   ORD(glUniform1i);
+   ORD(glUniform1iv);
+   ORD(glUniform2f);
+   ORD(glUniform2fv);
+   ORD(glUniform2i);
+   ORD(glUniform2iv);
+   ORD(glUniform3f);
+   ORD(glUniform3fv);
+   ORD(glUniform3i);
+   ORD(glUniform3iv);
+   ORD(glUniform4f);
+   ORD(glUniform4fv);
+   ORD(glUniform4i);
+   ORD(glUniform4iv);
+   ORD(glUniformMatrix2fv);
+   ORD(glUniformMatrix3fv);
+   ORD(glUniformMatrix4fv);
+   ORD(glUseProgram);
+   ORD(glValidateProgram);
+   ORD(glVertexAttrib1f);
+   ORD(glVertexAttrib1fv);
+   ORD(glVertexAttrib2f);
+   ORD(glVertexAttrib2fv);
+   ORD(glVertexAttrib3f);
+   ORD(glVertexAttrib3fv);
+   ORD(glVertexAttrib4f);
+   ORD(glVertexAttrib4fv);
+   ORD(glVertexAttribPointer);
+//   ORD(glViewport);
+
+//   ORD(glBindFramebuffer);
+   ORD(glBindRenderbuffer);
+#undef ORD
+
+
+#define ORD(f) EVAS_API_OVERRIDE(f, funcs, _evgl_)
+   // For Surface FBO
+   ORD(glBindFramebuffer);
+
+   // For Direct Rendering
+   ORD(glClear);
+   ORD(glClearColor);
+   ORD(glDisable);
+   ORD(glEnable);
+   ORD(glGetIntegerv);
+   ORD(glGetString);
+   ORD(glReadPixels);
+   ORD(glScissor);
+   ORD(glViewport);
+
+   // GLES 2 Compat for Desktop
+   ORD(glClearDepthf);
+   ORD(glDepthRangef);
+   ORD(glGetShaderPrecisionFormat);
+   ORD(glShaderBinary);
+   ORD(glReleaseShaderCompiler);
+
+#undef ORD
+
+   evgl_api_ext_get(funcs);
+}
+
+static void
+_direct_scissor_off_api_get(Evas_GL_API *funcs)
+{
+
+#define ORD(f) EVAS_API_OVERRIDE(f, funcs,)
+   // For Direct Rendering
+   ORD(glClear);
+   ORD(glClearColor);
+   ORD(glDisable);
+   ORD(glEnable);
+   ORD(glGetIntegerv);
+   ORD(glReadPixels);
+   ORD(glScissor);
+   ORD(glViewport);
+#undef ORD
+}
+
+
+static void
+_debug_gl_api_get(Evas_GL_API *funcs)
+{
+   funcs->version = EVAS_GL_API_VERSION;
+
+#define ORD(f) EVAS_API_OVERRIDE(f, funcs, _evgld_)
+   // GLES 2.0
+   ORD(glActiveTexture);
+   ORD(glAttachShader);
+   ORD(glBindAttribLocation);
+   ORD(glBindBuffer);
+   ORD(glBindTexture);
+   ORD(glBlendColor);
+   ORD(glBlendEquation);
+   ORD(glBlendEquationSeparate);
+   ORD(glBlendFunc);
+   ORD(glBlendFuncSeparate);
+   ORD(glBufferData);
+   ORD(glBufferSubData);
+   ORD(glCheckFramebufferStatus);
+   ORD(glClear);
+   ORD(glClearColor);
+   ORD(glClearDepthf);
+   ORD(glClearStencil);
+   ORD(glColorMask);
+   ORD(glCompileShader);
+   ORD(glCompressedTexImage2D);
+   ORD(glCompressedTexSubImage2D);
+   ORD(glCopyTexImage2D);
+   ORD(glCopyTexSubImage2D);
+   ORD(glCreateProgram);
+   ORD(glCreateShader);
+   ORD(glCullFace);
+   ORD(glDeleteBuffers);
+   ORD(glDeleteFramebuffers);
+   ORD(glDeleteProgram);
+   ORD(glDeleteRenderbuffers);
+   ORD(glDeleteShader);
+   ORD(glDeleteTextures);
+   ORD(glDepthFunc);
+   ORD(glDepthMask);
+   ORD(glDepthRangef);
+   ORD(glDetachShader);
+   ORD(glDisable);
+   ORD(glDisableVertexAttribArray);
+   ORD(glDrawArrays);
+   ORD(glDrawElements);
+   ORD(glEnable);
+   ORD(glEnableVertexAttribArray);
+   ORD(glFinish);
+   ORD(glFlush);
+   ORD(glFramebufferRenderbuffer);
+   ORD(glFramebufferTexture2D);
+   ORD(glFrontFace);
+   ORD(glGenBuffers);
+   ORD(glGenerateMipmap);
+   ORD(glGenFramebuffers);
+   ORD(glGenRenderbuffers);
+   ORD(glGenTextures);
+   ORD(glGetActiveAttrib);
+   ORD(glGetActiveUniform);
+   ORD(glGetAttachedShaders);
+   ORD(glGetAttribLocation);
+   ORD(glGetBooleanv);
+   ORD(glGetBufferParameteriv);
+   ORD(glGetError);
+   ORD(glGetFloatv);
+   ORD(glGetFramebufferAttachmentParameteriv);
+   ORD(glGetIntegerv);
+   ORD(glGetProgramiv);
+   ORD(glGetProgramInfoLog);
+   ORD(glGetRenderbufferParameteriv);
+   ORD(glGetShaderiv);
+   ORD(glGetShaderInfoLog);
+   ORD(glGetShaderPrecisionFormat);
+   ORD(glGetShaderSource);
+   ORD(glGetString);
+   ORD(glGetTexParameterfv);
+   ORD(glGetTexParameteriv);
+   ORD(glGetUniformfv);
+   ORD(glGetUniformiv);
+   ORD(glGetUniformLocation);
+   ORD(glGetVertexAttribfv);
+   ORD(glGetVertexAttribiv);
+   ORD(glGetVertexAttribPointerv);
+   ORD(glHint);
+   ORD(glIsBuffer);
+   ORD(glIsEnabled);
+   ORD(glIsFramebuffer);
+   ORD(glIsProgram);
+   ORD(glIsRenderbuffer);
+   ORD(glIsShader);
+   ORD(glIsTexture);
+   ORD(glLineWidth);
+   ORD(glLinkProgram);
+   ORD(glPixelStorei);
+   ORD(glPolygonOffset);
+   ORD(glReadPixels);
+   ORD(glReleaseShaderCompiler);
+   ORD(glRenderbufferStorage);
+   ORD(glSampleCoverage);
+   ORD(glScissor);
+   ORD(glShaderBinary);
+   ORD(glShaderSource);
+   ORD(glStencilFunc);
+   ORD(glStencilFuncSeparate);
+   ORD(glStencilMask);
+   ORD(glStencilMaskSeparate);
+   ORD(glStencilOp);
+   ORD(glStencilOpSeparate);
+   ORD(glTexImage2D);
+   ORD(glTexParameterf);
+   ORD(glTexParameterfv);
+   ORD(glTexParameteri);
+   ORD(glTexParameteriv);
+   ORD(glTexSubImage2D);
+   ORD(glUniform1f);
+   ORD(glUniform1fv);
+   ORD(glUniform1i);
+   ORD(glUniform1iv);
+   ORD(glUniform2f);
+   ORD(glUniform2fv);
+   ORD(glUniform2i);
+   ORD(glUniform2iv);
+   ORD(glUniform3f);
+   ORD(glUniform3fv);
+   ORD(glUniform3i);
+   ORD(glUniform3iv);
+   ORD(glUniform4f);
+   ORD(glUniform4fv);
+   ORD(glUniform4i);
+   ORD(glUniform4iv);
+   ORD(glUniformMatrix2fv);
+   ORD(glUniformMatrix3fv);
+   ORD(glUniformMatrix4fv);
+   ORD(glUseProgram);
+   ORD(glValidateProgram);
+   ORD(glVertexAttrib1f);
+   ORD(glVertexAttrib1fv);
+   ORD(glVertexAttrib2f);
+   ORD(glVertexAttrib2fv);
+   ORD(glVertexAttrib3f);
+   ORD(glVertexAttrib3fv);
+   ORD(glVertexAttrib4f);
+   ORD(glVertexAttrib4fv);
+   ORD(glVertexAttribPointer);
+   ORD(glViewport);
+
+   ORD(glBindFramebuffer);
+   ORD(glBindRenderbuffer);
+#undef ORD
+
+   evgl_api_ext_get(funcs);
+}
+
+void
+_evgl_api_get(Evas_GL_API *funcs, int debug)
+{
+   if (debug)
+      _debug_gl_api_get(funcs);
+   else
+      _normal_gl_api_get(funcs);
+
+   if (evgl_engine->direct_scissor_off)
+      _direct_scissor_off_api_get(funcs);
+}
index 8fc2e29..2f3a879 100644 (file)
@@ -120,7 +120,7 @@ _evgl_egl_display_get(const char *function)
 
    if (!rsc->current_eng)
      {
-        ERR("%s: Unable to retrive Current Engine", function);
+        ERR("%s: Unable to retrieve Current Engine", function);
         evas_gl_common_error_set(NULL, EVAS_GL_NOT_INITIALIZED);
         return EGL_NO_DISPLAY;
      }
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c.BAK b/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c.BAK
new file mode 100644 (file)
index 0000000..33067bf
--- /dev/null
@@ -0,0 +1,4343 @@
+#include "evas_gl_core_private.h"
+
+#include <dlfcn.h>
+
+#define EVGL_FUNC_BEGIN() \
+{ \
+   _func_begin_debug(__FUNCTION__); \
+}
+
+#define EVGL_FUNC_END()
+
+static void *_gles1_handle = NULL;
+static Evas_GL_API _gles1_api;
+
+#define GLERR() GLERRV(__FUNCTION__)
+
+#ifdef GL_ERRORS
+#undef glActiveTexture
+#undef glBindAttribLocation
+#undef glBindBuffer
+#undef glBindTexture
+#undef glBlendFunc
+#undef glBufferData
+#undef glCompressedTexImage2D
+#undef glCompressedTexSubImage2D
+#undef glDeleteBuffers
+#undef glDepthMask
+#undef glDisable
+#undef glDisableVertexAttribArray
+#undef glDrawArrays
+#undef glEnable
+#undef glEnableVertexAttribArray
+#undef glGenBuffers
+#undef glGetFloatv
+#undef glGetIntegerv
+#undef glGetUniformLocation
+#undef glHint
+#undef glReadPixels
+#undef glScissor
+#undef glGenFramebuffers
+#undef glGenFramebuffers
+#undef glBindFramebuffer
+#undef glEndTiling
+#undef glGetProgramBinary
+#undef glMapBuffer
+#undef glPixelStorei
+#undef glStartTiling
+#undef glUnmapBuffer
+#undef glTexParameterf
+#undef glTexParameteri
+#undef glTexSubImage2D
+#undef glUniform1f
+#undef glUniform1i
+#undef glUniform2fv
+#undef glUniform4fv
+#undef glUniformMatrix4fv
+#undef glUseProgram
+#undef glVertexAttribPointer
+#undef glViewport
+#undef glCreateShader
+#undef glCreateProgram
+#undef glAttachShader
+#undef glLinkProgram
+#undef glGetProgramiv
+#undef glGetProgramInfoLog
+#undef glGetShaderiv
+#undef glShaderSource
+#undef glCompileShader
+#endif
+
+void
+compute_gl_coordinates(int win_w, int win_h, int rot, int clip_image,
+                       int x, int y, int width, int height,
+                       int img_x, int img_y, int img_w, int img_h,
+                       int clip_x, int clip_y, int clip_w, int clip_h,
+                       int imgc[4], int objc[4], int cc[4]);
+
+//---------------------------------------//
+// API Debug Error Checking Code
+
+static
+void _make_current_check(const char* api)
+{
+   EVGL_Context *ctx = NULL;
+
+   ctx = evas_gl_common_current_context_get();
+
+   if (!ctx)
+     CRI("\e[1;33m%s\e[m: Current Context NOT SET: GL Call Should NOT Be Called without MakeCurrent!!!", api);
+   else if (ctx->version != EVAS_GL_GLES_1_X)
+     CRI("\e[1;33m%s\e[m: This API is being called with the wrong context (invalid version).", api);
+}
+
+static
+void _direct_rendering_check(const char *api)
+{
+   EVGL_Context *ctx = NULL;
+
+   ctx = evas_gl_common_current_context_get();
+   if (!ctx)
+     {
+        ERR("Current Context Not Set");
+        return;
+     }
+
+   if (_evgl_not_in_pixel_get())
+     CRI("\e[1;33m%s\e[m: This API is being called outside Pixel Get Callback Function.", api);
+   else if (ctx->version != EVAS_GL_GLES_1_X)
+     CRI("\e[1;33m%s\e[m: This API is being called with the wrong context (invalid version).", api);
+}
+
+static
+void _func_begin_debug(const char *api)
+{
+   _make_current_check(api);
+   _direct_rendering_check(api);
+}
+
+
+static void
+_evgl_gles1_glAlphaFunc(GLenum func, GLclampf ref)
+{
+   if (!_gles1_api.glAlphaFunc)
+     return;
+   _gles1_api.glAlphaFunc(func, ref);
+}
+
+static void
+_evgl_gles1_glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+   EVGL_Resource *rsc;
+
+   if (!_gles1_api.glClearColor)
+     return;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        rsc->clear_color.a = alpha;
+        rsc->clear_color.r = red;
+        rsc->clear_color.g = green;
+        rsc->clear_color.b = blue;
+     }
+   _gles1_api.glClearColor(red, green, blue, alpha);
+}
+
+static void
+_evgl_gles1_glClearDepthf(GLclampf depth)
+{
+   if (!_gles1_api.glClearDepthf)
+     return;
+   _gles1_api.glClearDepthf(depth);
+}
+
+static void
+_evgl_gles1_glClipPlanef(GLenum plane, const GLfloat *equation)
+{
+   if (!_gles1_api.glClipPlanef)
+     return;
+   _gles1_api.glClipPlanef(plane, equation);
+}
+
+static void
+_evgl_gles1_glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+   if (!_gles1_api.glColor4f)
+     return;
+   _gles1_api.glColor4f(red, green, blue, alpha);
+}
+
+static void
+_evgl_gles1_glDepthRangef(GLclampf zNear, GLclampf zFar)
+{
+   if (!_gles1_api.glDepthRangef)
+     return;
+   _gles1_api.glDepthRangef(zNear, zFar);
+}
+
+static void
+_evgl_gles1_glFogf(GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glFogf)
+     return;
+   _gles1_api.glFogf(pname, param);
+}
+
+static void
+_evgl_gles1_glFogfv(GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glFogfv)
+     return;
+   _gles1_api.glFogfv(pname, params);
+}
+
+static void
+_evgl_gles1_glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+   if (!_gles1_api.glFrustumf)
+     return;
+   _gles1_api.glFrustumf(left, right, bottom, top, zNear, zFar);
+}
+
+static void
+_evgl_gles1_glGetClipPlanef(GLenum pname, GLfloat eqn[4])
+{
+   if (!_gles1_api.glGetClipPlanef)
+     return;
+   _gles1_api.glGetClipPlanef(pname, eqn);
+}
+
+static void
+_evgl_gles1_glGetFloatv(GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetFloatv)
+     return;
+   _gles1_api.glGetFloatv(pname, params);
+}
+
+static void
+_evgl_gles1_glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetLightfv)
+     return;
+   _gles1_api.glGetLightfv(light, pname, params);
+}
+
+static void
+_evgl_gles1_glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetMaterialfv)
+     return;
+   _gles1_api.glGetMaterialfv(face, pname, params);
+}
+
+static void
+_evgl_gles1_glGetTexEnvfv(GLenum env, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetTexEnvfv)
+     return;
+   _gles1_api.glGetTexEnvfv(env, pname, params);
+}
+
+static void
+_evgl_gles1_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetTexParameterfv)
+     return;
+   _gles1_api.glGetTexParameterfv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glLightModelf(GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glLightModelf)
+     return;
+   _gles1_api.glLightModelf(pname, param);
+}
+
+static void
+_evgl_gles1_glLightModelfv(GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glLightModelfv)
+     return;
+   _gles1_api.glLightModelfv(pname, params);
+}
+
+static void
+_evgl_gles1_glLightf(GLenum light, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glLightf)
+     return;
+   _gles1_api.glLightf(light, pname, param);
+}
+
+static void
+_evgl_gles1_glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glLightfv)
+     return;
+   _gles1_api.glLightfv(light, pname, params);
+}
+
+static void
+_evgl_gles1_glLineWidth(GLfloat width)
+{
+   if (!_gles1_api.glLineWidth)
+     return;
+   _gles1_api.glLineWidth(width);
+}
+
+static void
+_evgl_gles1_glLoadMatrixf(const GLfloat *m)
+{
+   if (!_gles1_api.glLoadMatrixf)
+     return;
+   _gles1_api.glLoadMatrixf(m);
+}
+
+static void
+_evgl_gles1_glMaterialf(GLenum face, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glMaterialf)
+     return;
+   _gles1_api.glMaterialf(face, pname, param);
+}
+
+static void
+_evgl_gles1_glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glMaterialfv)
+     return;
+   _gles1_api.glMaterialfv(face, pname, params);
+}
+
+static void
+_evgl_gles1_glMultMatrixf(const GLfloat *m)
+{
+   if (!_gles1_api.glMultMatrixf)
+     return;
+   _gles1_api.glMultMatrixf(m);
+}
+
+static void
+_evgl_gles1_glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+{
+   if (!_gles1_api.glMultiTexCoord4f)
+     return;
+   _gles1_api.glMultiTexCoord4f(target, s, t, r, q);
+}
+
+static void
+_evgl_gles1_glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+{
+   if (!_gles1_api.glNormal3f)
+     return;
+   _gles1_api.glNormal3f(nx, ny, nz);
+}
+
+static void
+_evgl_gles1_glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+   if (!_gles1_api.glOrthof)
+     return;
+   _gles1_api.glOrthof(left, right, bottom, top, zNear, zFar);
+}
+
+static void
+_evgl_gles1_glPointParameterf(GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glPointParameterf)
+     return;
+   _gles1_api.glPointParameterf(pname, param);
+}
+
+static void
+_evgl_gles1_glPointParameterfv(GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glPointParameterfv)
+     return;
+   _gles1_api.glPointParameterfv(pname, params);
+}
+
+static void
+_evgl_gles1_glPointSize(GLfloat size)
+{
+   if (!_gles1_api.glPointSize)
+     return;
+   _gles1_api.glPointSize(size);
+}
+
+static void
+_evgl_gles1_glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glPointSizePointerOES)
+     return;
+   _gles1_api.glPointSizePointerOES(type, stride, pointer);
+}
+
+static void
+_evgl_gles1_glPolygonOffset(GLfloat factor, GLfloat units)
+{
+   if (!_gles1_api.glPolygonOffset)
+     return;
+   _gles1_api.glPolygonOffset(factor, units);
+}
+
+static void
+_evgl_gles1_glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+{
+   if (!_gles1_api.glRotatef)
+     return;
+   _gles1_api.glRotatef(angle, x, y, z);
+}
+
+static void
+_evgl_gles1_glScalef(GLfloat x, GLfloat y, GLfloat z)
+{
+   if (!_gles1_api.glScalef)
+     return;
+   _gles1_api.glScalef(x, y, z);
+}
+
+static void
+_evgl_gles1_glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glTexEnvf)
+     return;
+   _gles1_api.glTexEnvf(target, pname, param);
+}
+
+static void
+_evgl_gles1_glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glTexEnvfv)
+     return;
+   _gles1_api.glTexEnvfv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glTexParameterf)
+     return;
+   _gles1_api.glTexParameterf(target, pname, param);
+}
+
+static void
+_evgl_gles1_glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glTexParameterfv)
+     return;
+   _gles1_api.glTexParameterfv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+{
+   if (!_gles1_api.glTranslatef)
+     return;
+   _gles1_api.glTranslatef(x, y, z);
+}
+
+static void
+_evgl_gles1_glActiveTexture(GLenum texture)
+{
+   if (!_gles1_api.glActiveTexture)
+     return;
+   _gles1_api.glActiveTexture(texture);
+}
+
+static void
+_evgl_gles1_glAlphaFuncx(GLenum func, GLclampx ref)
+{
+   if (!_gles1_api.glAlphaFuncx)
+     return;
+   _gles1_api.glAlphaFuncx(func, ref);
+}
+
+static void
+_evgl_gles1_glBindBuffer(GLenum target, GLuint buffer)
+{
+   if (!_gles1_api.glBindBuffer)
+     return;
+   _gles1_api.glBindBuffer(target, buffer);
+}
+
+static void
+_evgl_gles1_glBindTexture(GLenum target, GLuint texture)
+{
+   if (!_gles1_api.glBindTexture)
+     return;
+   _gles1_api.glBindTexture(target, texture);
+}
+
+static void
+_evgl_gles1_glBlendFunc(GLenum sfactor, GLenum dfactor)
+{
+   if (!_gles1_api.glBlendFunc)
+     return;
+   _gles1_api.glBlendFunc(sfactor, dfactor);
+}
+
+static void
+_evgl_gles1_glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
+{
+   if (!_gles1_api.glBufferData)
+     return;
+   _gles1_api.glBufferData(target, size, data, usage);
+}
+
+static void
+_evgl_gles1_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)
+{
+   if (!_gles1_api.glBufferSubData)
+     return;
+   _gles1_api.glBufferSubData(target, offset, size, data);
+}
+
+static void
+_evgl_gles1_glClear(GLbitfield mask)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+   if (!_gles1_api.glClear)
+     return;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (ctx->version != EVAS_GL_GLES_1_X)
+     {
+        ERR("Invalid context version %d", (int) ctx->version);
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        if (!(rsc->current_ctx->current_fbo))
+          //|| rsc->current_ctx->map_tex)
+          {
+             /* Skip glClear() if clearing with transparent color
+              * Note: There will be side effects if the object itself is not
+              * marked as having an alpha channel!
+              */
+             if (ctx->current_sfc->alpha && (mask & GL_COLOR_BUFFER_BIT))
+               {
+                  if ((rsc->clear_color.a == 0) &&
+                      (rsc->clear_color.r == 0) &&
+                      (rsc->clear_color.g == 0) &&
+                      (rsc->clear_color.b == 0))
+                    {
+                       // Skip clear color as we don't want to write black
+                       mask &= ~GL_COLOR_BUFFER_BIT;
+                    }
+                  else if (rsc->clear_color.a != 1.0)
+                    {
+                       // TODO: Draw a rectangle? This will never be the perfect solution though.
+                       WRN("glClear() used with a semi-transparent color and direct rendering. "
+                           "This will erase the previous contents of the evas!");
+                    }
+                  if (!mask) return;
+               }
+
+             if ((!ctx->direct_scissor))
+               {
+                  _gles1_api.glEnable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 1;
+               }
+
+             if ((ctx->scissor_updated) && (ctx->scissor_enabled))
+               {
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 1,
+                                         ctx->scissor_coord[0], ctx->scissor_coord[1],
+                                         ctx->scissor_coord[2], ctx->scissor_coord[3],
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+
+                  RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], cc[2], cc[3]);
+                  _gles1_api.glScissor(nc[0], nc[1], nc[2], nc[3]);
+                  ctx->direct_scissor = 0;
+               }
+             else
+               {
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 0,
+                                         0, 0, 0, 0,
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+
+                  _gles1_api.glScissor(cc[0], cc[1], cc[2], cc[3]);
+               }
+
+             _gles1_api.glClear(mask);
+
+             // TODO/FIXME: Restore previous client-side scissors.
+          }
+        else
+          {
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  _gles1_api.glDisable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 0;
+               }
+
+             _gles1_api.glClear(mask);
+          }
+     }
+   else
+     {
+        if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+          {
+             _gles1_api.glDisable(GL_SCISSOR_TEST);
+             ctx->direct_scissor = 0;
+          }
+
+        _gles1_api.glClear(mask);
+     }
+}
+
+static void
+_evgl_gles1_glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
+{
+   if (!_gles1_api.glClearColorx)
+     return;
+   _gles1_api.glClearColorx(red, green, blue, alpha);
+}
+
+static void
+_evgl_gles1_glClearDepthx(GLclampx depth)
+{
+   if (!_gles1_api.glClearDepthx)
+     return;
+   _gles1_api.glClearDepthx(depth);
+}
+
+static void
+_evgl_gles1_glClearStencil(GLint s)
+{
+   if (!_gles1_api.glClearStencil)
+     return;
+   _gles1_api.glClearStencil(s);
+}
+
+static void
+_evgl_gles1_glClientActiveTexture(GLenum texture)
+{
+   if (!_gles1_api.glClientActiveTexture)
+     return;
+   _gles1_api.glClientActiveTexture(texture);
+}
+
+static void
+_evgl_gles1_glClipPlanex(GLenum plane, const GLfixed *equation)
+{
+   if (!_gles1_api.glClipPlanex)
+     return;
+   _gles1_api.glClipPlanex(plane, equation);
+}
+
+static void
+_evgl_gles1_glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+{
+   if (!_gles1_api.glColor4ub)
+     return;
+   _gles1_api.glColor4ub(red, green, blue, alpha);
+}
+
+static void
+_evgl_gles1_glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+   if (!_gles1_api.glColor4x)
+     return;
+   _gles1_api.glColor4x(red, green, blue, alpha);
+}
+
+static void
+_evgl_gles1_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+{
+   if (!_gles1_api.glColorMask)
+     return;
+   _gles1_api.glColorMask(red, green, blue, alpha);
+}
+
+static void
+_evgl_gles1_glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glColorPointer)
+     return;
+   _gles1_api.glColorPointer(size, type, stride, pointer);
+}
+
+static void
+_evgl_gles1_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
+{
+   if (!_gles1_api.glCompressedTexImage2D)
+     return;
+   _gles1_api.glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
+}
+
+static void
+_evgl_gles1_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
+{
+   if (!_gles1_api.glCompressedTexSubImage2D)
+     return;
+   _gles1_api.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+}
+
+static void
+_evgl_gles1_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+{
+   if (!_gles1_api.glCopyTexImage2D)
+     return;
+   _gles1_api.glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
+}
+
+static void
+_evgl_gles1_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   if (!_gles1_api.glCopyTexSubImage2D)
+     return;
+   _gles1_api.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+}
+
+static void
+_evgl_gles1_glCullFace(GLenum mode)
+{
+   if (!_gles1_api.glCullFace)
+     return;
+   _gles1_api.glCullFace(mode);
+}
+
+static void
+_evgl_gles1_glDeleteBuffers(GLsizei n, const GLuint *buffers)
+{
+   if (!_gles1_api.glDeleteBuffers)
+     return;
+   _gles1_api.glDeleteBuffers(n, buffers);
+}
+
+static void
+_evgl_gles1_glDeleteTextures(GLsizei n, const GLuint *textures)
+{
+   if (!_gles1_api.glDeleteTextures)
+     return;
+   _gles1_api.glDeleteTextures(n, textures);
+}
+
+static void
+_evgl_gles1_glDepthFunc(GLenum func)
+{
+   if (!_gles1_api.glDepthFunc)
+     return;
+   _gles1_api.glDepthFunc(func);
+}
+
+static void
+_evgl_gles1_glDepthMask(GLboolean flag)
+{
+   if (!_gles1_api.glDepthMask)
+     return;
+   _gles1_api.glDepthMask(flag);
+}
+
+static void
+_evgl_gles1_glDepthRangex(GLclampx zNear, GLclampx zFar)
+{
+   if (!_gles1_api.glDepthRangex)
+     return;
+   _gles1_api.glDepthRangex(zNear, zFar);
+}
+
+static void
+_evgl_gles1_glDisable(GLenum cap)
+{
+   EVGL_Context *ctx;
+
+   if (!_gles1_api.glDisable)
+     return;
+
+   ctx = evas_gl_common_current_context_get();
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (ctx->version != EVAS_GL_GLES_1_X)
+     {
+        ERR("Invalid context version %d", (int) ctx->version);
+        return;
+     }
+
+   if (cap == GL_SCISSOR_TEST)
+      ctx->scissor_enabled = 0;
+   _gles1_api.glDisable(cap);
+}
+
+static void
+_evgl_gles1_glDisableClientState(GLenum array)
+{
+   if (!_gles1_api.glDisableClientState)
+     return;
+   _gles1_api.glDisableClientState(array);
+}
+
+static void
+_evgl_gles1_glDrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+   if (!_gles1_api.glDrawArrays)
+     return;
+   _gles1_api.glDrawArrays(mode, first, count);
+}
+
+static void
+_evgl_gles1_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
+{
+   if (!_gles1_api.glDrawElements)
+     return;
+   _gles1_api.glDrawElements(mode, count, type, indices);
+}
+
+static void
+_evgl_gles1_glEnable(GLenum cap)
+{
+   EVGL_Context *ctx;
+
+   if (!_gles1_api.glEnable)
+     return;
+
+   ctx = evas_gl_common_current_context_get();
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (ctx->version != EVAS_GL_GLES_1_X)
+     {
+        ERR("Invalid context version %d", (int) ctx->version);
+        return;
+     }
+
+   if (cap == GL_SCISSOR_TEST)
+      ctx->scissor_enabled = 1;
+   _gles1_api.glEnable(cap);
+}
+
+static void
+_evgl_gles1_glEnableClientState(GLenum array)
+{
+   if (!_gles1_api.glEnableClientState)
+     return;
+   _gles1_api.glEnableClientState(array);
+}
+
+static void
+_evgl_gles1_glFinish(void)
+{
+   if (!_gles1_api.glFinish)
+     return;
+   _gles1_api.glFinish();
+}
+
+static void
+_evgl_gles1_glFlush(void)
+{
+   if (!_gles1_api.glFlush)
+     return;
+   _gles1_api.glFlush();
+}
+
+static void
+_evgl_gles1_glFogx(GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glFogx)
+     return;
+   _gles1_api.glFogx(pname, param);
+}
+
+static void
+_evgl_gles1_glFogxv(GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glFogxv)
+     return;
+   _gles1_api.glFogxv(pname, params);
+}
+
+static void
+_evgl_gles1_glFrontFace(GLenum mode)
+{
+   if (!_gles1_api.glFrontFace)
+     return;
+   _gles1_api.glFrontFace(mode);
+}
+
+static void
+_evgl_gles1_glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+   if (!_gles1_api.glFrustumx)
+     return;
+   _gles1_api.glFrustumx(left, right, bottom, top, zNear, zFar);
+}
+
+static void
+_evgl_gles1_glGetBooleanv(GLenum pname, GLboolean *params)
+{
+   if (!_gles1_api.glGetBooleanv)
+     return;
+   _gles1_api.glGetBooleanv(pname, params);
+}
+
+static void
+_evgl_gles1_glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+   if (!_gles1_api.glGetBufferParameteriv)
+     return;
+   _gles1_api.glGetBufferParameteriv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glGetClipPlanex(GLenum pname, GLfixed eqn[4])
+{
+   if (!_gles1_api.glGetClipPlanex)
+     return;
+   _gles1_api.glGetClipPlanex(pname, eqn);
+}
+
+static void
+_evgl_gles1_glGenBuffers(GLsizei n, GLuint *buffers)
+{
+   if (!_gles1_api.glGenBuffers)
+     return;
+   _gles1_api.glGenBuffers(n, buffers);
+}
+
+static void
+_evgl_gles1_glGenTextures(GLsizei n, GLuint *textures)
+{
+   if (!_gles1_api.glGenTextures)
+     return;
+   _gles1_api.glGenTextures(n, textures);
+}
+
+static GLenum
+_evgl_gles1_glGetError(void)
+{
+   GLenum ret;
+   if (!_gles1_api.glGetError)
+     return EVAS_GL_NOT_INITIALIZED;
+   ret = _gles1_api.glGetError();
+   return ret;
+}
+
+static void
+_evgl_gles1_glGetFixedv(GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetFixedv)
+     return;
+   _gles1_api.glGetFixedv(pname, params);
+}
+
+static void
+_evgl_gles1_glGetIntegerv(GLenum pname, GLint *params)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+
+   if (!_gles1_api.glGetIntegerv)
+     return;
+
+   if (_evgl_direct_enabled())
+     {
+        if (!params)
+          {
+             ERR("Inavlid Parameter");
+             return;
+          }
+
+        if (!(rsc=_evgl_tls_resource_get()))
+          {
+             ERR("Unable to execute GL command. Error retrieving tls");
+             return;
+          }
+
+        ctx = rsc->current_ctx;
+        if (!ctx)
+          {
+             ERR("Unable to retrive Current Context");
+             return;
+          }
+
+        if (ctx->version != EVAS_GL_GLES_1_X)
+          {
+             ERR("Invalid context version %d", (int) ctx->version);
+             return;
+          }
+
+        // Only need to handle it if it's directly rendering to the window
+        if (!(rsc->current_ctx->current_fbo))
+          //|| rsc->current_ctx->map_tex)
+          {
+             if (pname == GL_SCISSOR_BOX)
+               {
+                  if (ctx->scissor_updated)
+                    {
+                       memcpy(params, ctx->scissor_coord, sizeof(int)*4);
+                       return;
+                    }
+               }
+             /*!!! Temporary Fixes to avoid Webkit issue
+             if (pname == GL_VIEWPORT)
+               {
+                  if (ctx->viewport_updated)
+                    {
+                       memcpy(params, ctx->viewport_coord, sizeof(int)*4);
+                       return;
+                    }
+               }
+               */
+
+             // If it hasn't been initialized yet, return img object size
+             if (pname == GL_SCISSOR_BOX) //|| (pname == GL_VIEWPORT))
+               {
+                  params[0] = 0;
+                  params[1] = 0;
+                  params[2] = (GLint)rsc->direct.img.w;
+                  params[3] = (GLint)rsc->direct.img.h;
+                  return;
+               }
+          }
+     }
+
+   _gles1_api.glGetIntegerv(pname, params);
+}
+
+static void
+_evgl_gles1_glGetLightxv(GLenum light, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetLightxv)
+     return;
+   _gles1_api.glGetLightxv(light, pname, params);
+}
+
+static void
+_evgl_gles1_glGetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetMaterialxv)
+     return;
+   _gles1_api.glGetMaterialxv(face, pname, params);
+}
+
+static void
+_evgl_gles1_glGetPointerv(GLenum pname, GLvoid **params)
+{
+   if (!_gles1_api.glGetPointerv)
+     return;
+   _gles1_api.glGetPointerv(pname, params);
+}
+
+static const GLubyte *
+_evgl_gles1_glGetString(GLenum name)
+{
+   const GLubyte * ret;
+   if (!_gles1_api.glGetString)
+     return NULL;
+   ret = _gles1_api.glGetString(name);
+   return ret;
+}
+
+static void
+_evgl_gles1_glGetTexEnviv(GLenum env, GLenum pname, GLint *params)
+{
+   if (!_gles1_api.glGetTexEnviv)
+     return;
+   _gles1_api.glGetTexEnviv(env, pname, params);
+}
+
+static void
+_evgl_gles1_glGetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetTexEnvxv)
+     return;
+   _gles1_api.glGetTexEnvxv(env, pname, params);
+}
+
+static void
+_evgl_gles1_glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+   if (!_gles1_api.glGetTexParameteriv)
+     return;
+   _gles1_api.glGetTexParameteriv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glGetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetTexParameterxv)
+     return;
+   _gles1_api.glGetTexParameterxv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glHint(GLenum target, GLenum mode)
+{
+   if (!_gles1_api.glHint)
+     return;
+   _gles1_api.glHint(target, mode);
+}
+
+static GLboolean
+_evgl_gles1_glIsBuffer(GLuint buffer)
+{
+   GLboolean ret;
+   if (!_gles1_api.glIsBuffer)
+     return EINA_FALSE;
+   ret = _gles1_api.glIsBuffer(buffer);
+   return ret;
+}
+
+static GLboolean
+_evgl_gles1_glIsEnabled(GLenum cap)
+{
+   GLboolean ret;
+   if (!_gles1_api.glIsEnabled)
+     return EINA_FALSE;
+   ret = _gles1_api.glIsEnabled(cap);
+   return ret;
+}
+
+static GLboolean
+_evgl_gles1_glIsTexture(GLuint texture)
+{
+   GLboolean ret;
+   if (!_gles1_api.glIsTexture)
+     return EINA_FALSE;
+   ret = _gles1_api.glIsTexture(texture);
+   return ret;
+}
+
+static void
+_evgl_gles1_glLightModelx(GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glLightModelx)
+     return;
+   _gles1_api.glLightModelx(pname, param);
+}
+
+static void
+_evgl_gles1_glLightModelxv(GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glLightModelxv)
+     return;
+   _gles1_api.glLightModelxv(pname, params);
+}
+
+static void
+_evgl_gles1_glLightx(GLenum light, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glLightx)
+     return;
+   _gles1_api.glLightx(light, pname, param);
+}
+
+static void
+_evgl_gles1_glLightxv(GLenum light, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glLightxv)
+     return;
+   _gles1_api.glLightxv(light, pname, params);
+}
+
+static void
+_evgl_gles1_glLineWidthx(GLfixed width)
+{
+   if (!_gles1_api.glLineWidthx)
+     return;
+   _gles1_api.glLineWidthx(width);
+}
+
+static void
+_evgl_gles1_glLoadIdentity(void)
+{
+   if (!_gles1_api.glLoadIdentity)
+     return;
+   _gles1_api.glLoadIdentity();
+}
+
+static void
+_evgl_gles1_glLoadMatrixx(const GLfixed *m)
+{
+   if (!_gles1_api.glLoadMatrixx)
+     return;
+   _gles1_api.glLoadMatrixx(m);
+}
+
+static void
+_evgl_gles1_glLogicOp(GLenum opcode)
+{
+   if (!_gles1_api.glLogicOp)
+     return;
+   _gles1_api.glLogicOp(opcode);
+}
+
+static void
+_evgl_gles1_glMaterialx(GLenum face, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glMaterialx)
+     return;
+   _gles1_api.glMaterialx(face, pname, param);
+}
+
+static void
+_evgl_gles1_glMaterialxv(GLenum face, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glMaterialxv)
+     return;
+   _gles1_api.glMaterialxv(face, pname, params);
+}
+
+static void
+_evgl_gles1_glMatrixMode(GLenum mode)
+{
+   if (!_gles1_api.glMatrixMode)
+     return;
+   _gles1_api.glMatrixMode(mode);
+}
+
+static void
+_evgl_gles1_glMultMatrixx(const GLfixed *m)
+{
+   if (!_gles1_api.glMultMatrixx)
+     return;
+   _gles1_api.glMultMatrixx(m);
+}
+
+static void
+_evgl_gles1_glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+{
+   if (!_gles1_api.glMultiTexCoord4x)
+     return;
+   _gles1_api.glMultiTexCoord4x(target, s, t, r, q);
+}
+
+static void
+_evgl_gles1_glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz)
+{
+   if (!_gles1_api.glNormal3x)
+     return;
+   _gles1_api.glNormal3x(nx, ny, nz);
+}
+
+static void
+_evgl_gles1_glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glNormalPointer)
+     return;
+   _gles1_api.glNormalPointer(type, stride, pointer);
+}
+
+static void
+_evgl_gles1_glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+   if (!_gles1_api.glOrthox)
+     return;
+   _gles1_api.glOrthox(left, right, bottom, top, zNear, zFar);
+}
+
+static void
+_evgl_gles1_glPixelStorei(GLenum pname, GLint param)
+{
+   if (!_gles1_api.glPixelStorei)
+     return;
+   _gles1_api.glPixelStorei(pname, param);
+}
+
+static void
+_evgl_gles1_glPointParameterx(GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glPointParameterx)
+     return;
+   _gles1_api.glPointParameterx(pname, param);
+}
+
+static void
+_evgl_gles1_glPointParameterxv(GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glPointParameterxv)
+     return;
+   _gles1_api.glPointParameterxv(pname, params);
+}
+
+static void
+_evgl_gles1_glPointSizex(GLfixed size)
+{
+   if (!_gles1_api.glPointSizex)
+     return;
+   _gles1_api.glPointSizex(size);
+}
+
+static void
+_evgl_gles1_glPolygonOffsetx(GLfixed factor, GLfixed units)
+{
+   if (!_gles1_api.glPolygonOffsetx)
+     return;
+   _gles1_api.glPolygonOffsetx(factor, units);
+}
+
+static void
+_evgl_gles1_glPopMatrix(void)
+{
+   if (!_gles1_api.glPopMatrix)
+     return;
+   _gles1_api.glPopMatrix();
+}
+
+static void
+_evgl_gles1_glPushMatrix(void)
+{
+   if (!_gles1_api.glPushMatrix)
+     return;
+   _gles1_api.glPushMatrix();
+}
+
+static void
+_evgl_gles1_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+   if (!_gles1_api.glReadPixels)
+     return;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (ctx->version != EVAS_GL_GLES_1_X)
+     {
+        ERR("Invalid context version %d", (int) ctx->version);
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        if (!(rsc->current_ctx->current_fbo))
+          //|| rsc->current_ctx->map_tex)
+          {
+             compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                    rsc->direct.rot, 1,
+                                    x, y, width, height,
+                                    rsc->direct.img.x, rsc->direct.img.y,
+                                    rsc->direct.img.w, rsc->direct.img.h,
+                                    rsc->direct.clip.x, rsc->direct.clip.y,
+                                    rsc->direct.clip.w, rsc->direct.clip.h,
+                                    oc, nc, cc);
+             _gles1_api.glReadPixels(nc[0], nc[1], nc[2], nc[3], format, type, pixels);
+          }
+        else
+          {
+             _gles1_api.glReadPixels(x, y, width, height, format, type, pixels);
+          }
+     }
+   else
+     {
+        _gles1_api.glReadPixels(x, y, width, height, format, type, pixels);
+     }
+}
+
+static void
+_evgl_gles1_glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+{
+   if (!_gles1_api.glRotatex)
+     return;
+   _gles1_api.glRotatex(angle, x, y, z);
+}
+
+static void
+_evgl_gles1_glSampleCoverage(GLclampf value, GLboolean invert)
+{
+   if (!_gles1_api.glSampleCoverage)
+     return;
+   _gles1_api.glSampleCoverage(value, invert);
+}
+
+static void
+_evgl_gles1_glSampleCoveragex(GLclampx value, GLboolean invert)
+{
+   if (!_gles1_api.glSampleCoveragex)
+     return;
+   _gles1_api.glSampleCoveragex(value, invert);
+}
+
+static void
+_evgl_gles1_glScalex(GLfixed x, GLfixed y, GLfixed z)
+{
+   if (!_gles1_api.glScalex)
+     return;
+   _gles1_api.glScalex(x, y, z);
+}
+
+static void
+_evgl_gles1_glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+   if (!_gles1_api.glScissor)
+     return;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (ctx->version != EVAS_GL_GLES_1_X)
+     {
+        ERR("Invalid context version %d", (int) ctx->version);
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        if (!(rsc->current_ctx->current_fbo))
+          //|| rsc->current_ctx->map_tex)
+          {
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  _gles1_api.glDisable(GL_SCISSOR_TEST);
+               }
+
+             compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                    rsc->direct.rot, 1,
+                                    x, y, width, height,
+                                    rsc->direct.img.x, rsc->direct.img.y,
+                                    rsc->direct.img.w, rsc->direct.img.h,
+                                    rsc->direct.clip.x, rsc->direct.clip.y,
+                                    rsc->direct.clip.w, rsc->direct.clip.h,
+                                    oc, nc, cc);
+
+             // Keep a copy of the original coordinates
+             ctx->scissor_coord[0] = x;
+             ctx->scissor_coord[1] = y;
+             ctx->scissor_coord[2] = width;
+             ctx->scissor_coord[3] = height;
+
+             RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], cc[2], cc[3]);
+             _gles1_api.glScissor(nc[0], nc[1], nc[2], nc[3]);
+
+             ctx->direct_scissor = 0;
+
+             // Check....!!!!
+             ctx->scissor_updated = 1;
+          }
+        else
+          {
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  _gles1_api.glDisable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 0;
+               }
+
+             _gles1_api.glScissor(x, y, width, height);
+
+             ctx->scissor_updated = 0;
+          }
+     }
+   else
+     {
+        if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+          {
+             _gles1_api.glDisable(GL_SCISSOR_TEST);
+             ctx->direct_scissor = 0;
+          }
+
+        _gles1_api.glScissor(x, y, width, height);
+     }
+}
+
+static void
+_evgl_gles1_glShadeModel(GLenum mode)
+{
+   if (!_gles1_api.glShadeModel)
+     return;
+   _gles1_api.glShadeModel(mode);
+}
+
+static void
+_evgl_gles1_glStencilFunc(GLenum func, GLint ref, GLuint mask)
+{
+   if (!_gles1_api.glStencilFunc)
+     return;
+   _gles1_api.glStencilFunc(func, ref, mask);
+}
+
+static void
+_evgl_gles1_glStencilMask(GLuint mask)
+{
+   if (!_gles1_api.glStencilMask)
+     return;
+   _gles1_api.glStencilMask(mask);
+}
+
+static void
+_evgl_gles1_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+   if (!_gles1_api.glStencilOp)
+     return;
+   _gles1_api.glStencilOp(fail, zfail, zpass);
+}
+
+static void
+_evgl_gles1_glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glTexCoordPointer)
+     return;
+   _gles1_api.glTexCoordPointer(size, type, stride, pointer);
+}
+
+static void
+_evgl_gles1_glTexEnvi(GLenum target, GLenum pname, GLint param)
+{
+   if (!_gles1_api.glTexEnvi)
+     return;
+   _gles1_api.glTexEnvi(target, pname, param);
+}
+
+static void
+_evgl_gles1_glTexEnvx(GLenum target, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glTexEnvx)
+     return;
+   _gles1_api.glTexEnvx(target, pname, param);
+}
+
+static void
+_evgl_gles1_glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+{
+   if (!_gles1_api.glTexEnviv)
+     return;
+   _gles1_api.glTexEnviv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glTexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glTexEnvxv)
+     return;
+   _gles1_api.glTexEnvxv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
+{
+   if (!_gles1_api.glTexImage2D)
+     return;
+   _gles1_api.glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+}
+
+static void
+_evgl_gles1_glTexParameteri(GLenum target, GLenum pname, GLint param)
+{
+   if (!_gles1_api.glTexParameteri)
+     return;
+   _gles1_api.glTexParameteri(target, pname, param);
+}
+
+static void
+_evgl_gles1_glTexParameterx(GLenum target, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glTexParameterx)
+     return;
+   _gles1_api.glTexParameterx(target, pname, param);
+}
+
+static void
+_evgl_gles1_glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+{
+   if (!_gles1_api.glTexParameteriv)
+     return;
+   _gles1_api.glTexParameteriv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glTexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glTexParameterxv)
+     return;
+   _gles1_api.glTexParameterxv(target, pname, params);
+}
+
+static void
+_evgl_gles1_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
+{
+   if (!_gles1_api.glTexSubImage2D)
+     return;
+   _gles1_api.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+}
+
+static void
+_evgl_gles1_glTranslatex(GLfixed x, GLfixed y, GLfixed z)
+{
+   if (!_gles1_api.glTranslatex)
+     return;
+   _gles1_api.glTranslatex(x, y, z);
+}
+
+static void
+_evgl_gles1_glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glVertexPointer)
+     return;
+   _gles1_api.glVertexPointer(size, type, stride, pointer);
+}
+
+static void
+_evgl_gles1_glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+   int oc[4] = {0,0,0,0}, nc[4] = {0,0,0,0};
+   int cc[4] = {0,0,0,0};
+
+   if (!_gles1_api.glViewport)
+     return;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+   if (ctx->version != EVAS_GL_GLES_1_X)
+     {
+        ERR("Invalid context version %d", (int) ctx->version);
+        return;
+     }
+
+   if (_evgl_direct_enabled())
+     {
+        if (!(rsc->current_ctx->current_fbo))
+          //|| rsc->current_ctx->map_tex)
+          {
+             if ((!ctx->direct_scissor))
+               {
+                  _gles1_api.glEnable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 1;
+               }
+
+             if ((ctx->scissor_updated) && (ctx->scissor_enabled))
+               {
+                  // Recompute the scissor coordinates
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 1,
+                                         ctx->scissor_coord[0], ctx->scissor_coord[1],
+                                         ctx->scissor_coord[2], ctx->scissor_coord[3],
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+
+                  RECTS_CLIP_TO_RECT(nc[0], nc[1], nc[2], nc[3], cc[0], cc[1], cc[2], cc[3]);
+                  _gles1_api.glScissor(nc[0], nc[1], nc[2], nc[3]);
+
+                  ctx->direct_scissor = 0;
+
+                  // Compute the viewport coordinate
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 0,
+                                         x, y, width, height,
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+                  _gles1_api.glViewport(nc[0], nc[1], nc[2], nc[3]);
+               }
+             else
+               {
+
+                  compute_gl_coordinates(rsc->direct.win_w, rsc->direct.win_h,
+                                         rsc->direct.rot, 0,
+                                         x, y, width, height,
+                                         rsc->direct.img.x, rsc->direct.img.y,
+                                         rsc->direct.img.w, rsc->direct.img.h,
+                                         rsc->direct.clip.x, rsc->direct.clip.y,
+                                         rsc->direct.clip.w, rsc->direct.clip.h,
+                                         oc, nc, cc);
+                  _gles1_api.glScissor(cc[0], cc[1], cc[2], cc[3]);
+
+                  _gles1_api.glViewport(nc[0], nc[1], nc[2], nc[3]);
+               }
+
+             // Keep a copy of the original coordinates
+             ctx->viewport_coord[0] = x;
+             ctx->viewport_coord[1] = y;
+             ctx->viewport_coord[2] = width;
+             ctx->viewport_coord[3] = height;
+
+             ctx->viewport_updated   = 1;
+          }
+        else
+          {
+             if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+               {
+                  _gles1_api.glDisable(GL_SCISSOR_TEST);
+                  ctx->direct_scissor = 0;
+               }
+
+             _gles1_api.glViewport(x, y, width, height);
+          }
+     }
+   else
+     {
+        if ((ctx->direct_scissor) && (!ctx->scissor_enabled))
+          {
+             _gles1_api.glDisable(GL_SCISSOR_TEST);
+             ctx->direct_scissor = 0;
+          }
+
+        _gles1_api.glViewport(x, y, width, height);
+     }
+}
+
+static void
+_evgld_gles1_glAlphaFunc(GLenum func, GLclampf ref)
+{
+   if (!_gles1_api.glAlphaFunc)
+     {
+        ERR("Can not call glAlphaFunc() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glAlphaFunc(func, ref);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+   if (!_gles1_api.glClearColor)
+     {
+        ERR("Can not call glClearColor() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClearColor(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClearDepthf(GLclampf depth)
+{
+   if (!_gles1_api.glClearDepthf)
+     {
+        ERR("Can not call glClearDepthf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClearDepthf(depth);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClipPlanef(GLenum plane, const GLfloat *equation)
+{
+   if (!_gles1_api.glClipPlanef)
+     {
+        ERR("Can not call glClipPlanef() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClipPlanef(plane, equation);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+   if (!_gles1_api.glColor4f)
+     {
+        ERR("Can not call glColor4f() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glColor4f(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDepthRangef(GLclampf zNear, GLclampf zFar)
+{
+   if (!_gles1_api.glDepthRangef)
+     {
+        ERR("Can not call glDepthRangef() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDepthRangef(zNear, zFar);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFogf(GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glFogf)
+     {
+        ERR("Can not call glFogf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFogf(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFogfv(GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glFogfv)
+     {
+        ERR("Can not call glFogfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFogfv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+   if (!_gles1_api.glFrustumf)
+     {
+        ERR("Can not call glFrustumf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFrustumf(left, right, bottom, top, zNear, zFar);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetClipPlanef(GLenum pname, GLfloat eqn[4])
+{
+   if (!_gles1_api.glGetClipPlanef)
+     {
+        ERR("Can not call glGetClipPlanef() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetClipPlanef(pname, eqn);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetFloatv(GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetFloatv)
+     {
+        ERR("Can not call glGetFloatv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetFloatv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetLightfv)
+     {
+        ERR("Can not call glGetLightfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetLightfv(light, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetMaterialfv)
+     {
+        ERR("Can not call glGetMaterialfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetMaterialfv(face, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetTexEnvfv(GLenum env, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetTexEnvfv)
+     {
+        ERR("Can not call glGetTexEnvfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetTexEnvfv(env, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+{
+   if (!_gles1_api.glGetTexParameterfv)
+     {
+        ERR("Can not call glGetTexParameterfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetTexParameterfv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLightModelf(GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glLightModelf)
+     {
+        ERR("Can not call glLightModelf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightModelf(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLightModelfv(GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glLightModelfv)
+     {
+        ERR("Can not call glLightModelfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightModelfv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLightf(GLenum light, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glLightf)
+     {
+        ERR("Can not call glLightf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightf(light, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glLightfv)
+     {
+        ERR("Can not call glLightfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightfv(light, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLineWidth(GLfloat width)
+{
+   if (!_gles1_api.glLineWidth)
+     {
+        ERR("Can not call glLineWidth() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLineWidth(width);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLoadMatrixf(const GLfloat *m)
+{
+   if (!_gles1_api.glLoadMatrixf)
+     {
+        ERR("Can not call glLoadMatrixf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLoadMatrixf(m);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMaterialf(GLenum face, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glMaterialf)
+     {
+        ERR("Can not call glMaterialf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMaterialf(face, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glMaterialfv)
+     {
+        ERR("Can not call glMaterialfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMaterialfv(face, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMultMatrixf(const GLfloat *m)
+{
+   if (!_gles1_api.glMultMatrixf)
+     {
+        ERR("Can not call glMultMatrixf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMultMatrixf(m);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+{
+   if (!_gles1_api.glMultiTexCoord4f)
+     {
+        ERR("Can not call glMultiTexCoord4f() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMultiTexCoord4f(target, s, t, r, q);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+{
+   if (!_gles1_api.glNormal3f)
+     {
+        ERR("Can not call glNormal3f() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glNormal3f(nx, ny, nz);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+   if (!_gles1_api.glOrthof)
+     {
+        ERR("Can not call glOrthof() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glOrthof(left, right, bottom, top, zNear, zFar);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPointParameterf(GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glPointParameterf)
+     {
+        ERR("Can not call glPointParameterf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPointParameterf(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPointParameterfv(GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glPointParameterfv)
+     {
+        ERR("Can not call glPointParameterfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPointParameterfv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPointSize(GLfloat size)
+{
+   if (!_gles1_api.glPointSize)
+     {
+        ERR("Can not call glPointSize() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPointSize(size);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glPointSizePointerOES)
+     {
+        ERR("Can not call glPointSizePointerOES() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPointSizePointerOES(type, stride, pointer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPolygonOffset(GLfloat factor, GLfloat units)
+{
+   if (!_gles1_api.glPolygonOffset)
+     {
+        ERR("Can not call glPolygonOffset() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPolygonOffset(factor, units);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+{
+   if (!_gles1_api.glRotatef)
+     {
+        ERR("Can not call glRotatef() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glRotatef(angle, x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glScalef(GLfloat x, GLfloat y, GLfloat z)
+{
+   if (!_gles1_api.glScalef)
+     {
+        ERR("Can not call glScalef() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glScalef(x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glTexEnvf)
+     {
+        ERR("Can not call glTexEnvf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexEnvf(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glTexEnvfv)
+     {
+        ERR("Can not call glTexEnvfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexEnvfv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+   if (!_gles1_api.glTexParameterf)
+     {
+        ERR("Can not call glTexParameterf() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexParameterf(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+{
+   if (!_gles1_api.glTexParameterfv)
+     {
+        ERR("Can not call glTexParameterfv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexParameterfv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+{
+   if (!_gles1_api.glTranslatef)
+     {
+        ERR("Can not call glTranslatef() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTranslatef(x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glActiveTexture(GLenum texture)
+{
+   if (!_gles1_api.glActiveTexture)
+     {
+        ERR("Can not call glActiveTexture() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glActiveTexture(texture);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glAlphaFuncx(GLenum func, GLclampx ref)
+{
+   if (!_gles1_api.glAlphaFuncx)
+     {
+        ERR("Can not call glAlphaFuncx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glAlphaFuncx(func, ref);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glBindBuffer(GLenum target, GLuint buffer)
+{
+   if (!_gles1_api.glBindBuffer)
+     {
+        ERR("Can not call glBindBuffer() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glBindBuffer(target, buffer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glBindTexture(GLenum target, GLuint texture)
+{
+   if (!_gles1_api.glBindTexture)
+     {
+        ERR("Can not call glBindTexture() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glBindTexture(target, texture);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glBlendFunc(GLenum sfactor, GLenum dfactor)
+{
+   if (!_gles1_api.glBlendFunc)
+     {
+        ERR("Can not call glBlendFunc() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glBlendFunc(sfactor, dfactor);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
+{
+   if (!_gles1_api.glBufferData)
+     {
+        ERR("Can not call glBufferData() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glBufferData(target, size, data, usage);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)
+{
+   if (!_gles1_api.glBufferSubData)
+     {
+        ERR("Can not call glBufferSubData() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glBufferSubData(target, offset, size, data);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClear(GLbitfield mask)
+{
+   if (!_gles1_api.glClear)
+     {
+        ERR("Can not call glClear() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClear(mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
+{
+   if (!_gles1_api.glClearColorx)
+     {
+        ERR("Can not call glClearColorx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClearColorx(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClearDepthx(GLclampx depth)
+{
+   if (!_gles1_api.glClearDepthx)
+     {
+        ERR("Can not call glClearDepthx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClearDepthx(depth);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClearStencil(GLint s)
+{
+   if (!_gles1_api.glClearStencil)
+     {
+        ERR("Can not call glClearStencil() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClearStencil(s);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClientActiveTexture(GLenum texture)
+{
+   if (!_gles1_api.glClientActiveTexture)
+     {
+        ERR("Can not call glClientActiveTexture() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClientActiveTexture(texture);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glClipPlanex(GLenum plane, const GLfixed *equation)
+{
+   if (!_gles1_api.glClipPlanex)
+     {
+        ERR("Can not call glClipPlanex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glClipPlanex(plane, equation);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+{
+   if (!_gles1_api.glColor4ub)
+     {
+        ERR("Can not call glColor4ub() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glColor4ub(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+   if (!_gles1_api.glColor4x)
+     {
+        ERR("Can not call glColor4x() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glColor4x(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+{
+   if (!_gles1_api.glColorMask)
+     {
+        ERR("Can not call glColorMask() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glColorMask(red, green, blue, alpha);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glColorPointer)
+     {
+        ERR("Can not call glColorPointer() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glColorPointer(size, type, stride, pointer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
+{
+   if (!_gles1_api.glCompressedTexImage2D)
+     {
+        ERR("Can not call glCompressedTexImage2D() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
+{
+   if (!_gles1_api.glCompressedTexSubImage2D)
+     {
+        ERR("Can not call glCompressedTexSubImage2D() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+{
+   if (!_gles1_api.glCopyTexImage2D)
+     {
+        ERR("Can not call glCopyTexImage2D() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   if (!_gles1_api.glCopyTexSubImage2D)
+     {
+        ERR("Can not call glCopyTexSubImage2D() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glCullFace(GLenum mode)
+{
+   if (!_gles1_api.glCullFace)
+     {
+        ERR("Can not call glCullFace() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glCullFace(mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDeleteBuffers(GLsizei n, const GLuint *buffers)
+{
+   if (!_gles1_api.glDeleteBuffers)
+     {
+        ERR("Can not call glDeleteBuffers() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDeleteBuffers(n, buffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDeleteTextures(GLsizei n, const GLuint *textures)
+{
+   if (!_gles1_api.glDeleteTextures)
+     {
+        ERR("Can not call glDeleteTextures() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDeleteTextures(n, textures);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDepthFunc(GLenum func)
+{
+   if (!_gles1_api.glDepthFunc)
+     {
+        ERR("Can not call glDepthFunc() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDepthFunc(func);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDepthMask(GLboolean flag)
+{
+   if (!_gles1_api.glDepthMask)
+     {
+        ERR("Can not call glDepthMask() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDepthMask(flag);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDepthRangex(GLclampx zNear, GLclampx zFar)
+{
+   if (!_gles1_api.glDepthRangex)
+     {
+        ERR("Can not call glDepthRangex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDepthRangex(zNear, zFar);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDisable(GLenum cap)
+{
+   if (!_gles1_api.glDisable)
+     {
+        ERR("Can not call glDisable() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDisable(cap);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDisableClientState(GLenum array)
+{
+   if (!_gles1_api.glDisableClientState)
+     {
+        ERR("Can not call glDisableClientState() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDisableClientState(array);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+   if (!_gles1_api.glDrawArrays)
+     {
+        ERR("Can not call glDrawArrays() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDrawArrays(mode, first, count);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
+{
+   if (!_gles1_api.glDrawElements)
+     {
+        ERR("Can not call glDrawElements() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glDrawElements(mode, count, type, indices);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glEnable(GLenum cap)
+{
+   if (!_gles1_api.glEnable)
+     {
+        ERR("Can not call glEnable() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glEnable(cap);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glEnableClientState(GLenum array)
+{
+   if (!_gles1_api.glEnableClientState)
+     {
+        ERR("Can not call glEnableClientState() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glEnableClientState(array);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFinish(void)
+{
+   if (!_gles1_api.glFinish)
+     {
+        ERR("Can not call glFinish() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFinish();
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFlush(void)
+{
+   if (!_gles1_api.glFlush)
+     {
+        ERR("Can not call glFlush() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFlush();
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFogx(GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glFogx)
+     {
+        ERR("Can not call glFogx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFogx(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFogxv(GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glFogxv)
+     {
+        ERR("Can not call glFogxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFogxv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFrontFace(GLenum mode)
+{
+   if (!_gles1_api.glFrontFace)
+     {
+        ERR("Can not call glFrontFace() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFrontFace(mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+   if (!_gles1_api.glFrustumx)
+     {
+        ERR("Can not call glFrustumx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glFrustumx(left, right, bottom, top, zNear, zFar);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetBooleanv(GLenum pname, GLboolean *params)
+{
+   if (!_gles1_api.glGetBooleanv)
+     {
+        ERR("Can not call glGetBooleanv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetBooleanv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+   if (!_gles1_api.glGetBufferParameteriv)
+     {
+        ERR("Can not call glGetBufferParameteriv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetBufferParameteriv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetClipPlanex(GLenum pname, GLfixed eqn[4])
+{
+   if (!_gles1_api.glGetClipPlanex)
+     {
+        ERR("Can not call glGetClipPlanex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetClipPlanex(pname, eqn);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGenBuffers(GLsizei n, GLuint *buffers)
+{
+   if (!_gles1_api.glGenBuffers)
+     {
+        ERR("Can not call glGenBuffers() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGenBuffers(n, buffers);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGenTextures(GLsizei n, GLuint *textures)
+{
+   if (!_gles1_api.glGenTextures)
+     {
+        ERR("Can not call glGenTextures() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGenTextures(n, textures);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static GLenum
+_evgld_gles1_glGetError(void)
+{
+   GLenum ret;
+   if (!_gles1_api.glGetError)
+     {
+        ERR("Can not call glGetError() in this context!");
+        return EVAS_GL_NOT_INITIALIZED;
+     }
+   EVGL_FUNC_BEGIN();
+   ret = _evgl_gles1_glGetError();
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+static void
+_evgld_gles1_glGetFixedv(GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetFixedv)
+     {
+        ERR("Can not call glGetFixedv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetFixedv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetIntegerv(GLenum pname, GLint *params)
+{
+   if (!_gles1_api.glGetIntegerv)
+     {
+        ERR("Can not call glGetIntegerv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetIntegerv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetLightxv(GLenum light, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetLightxv)
+     {
+        ERR("Can not call glGetLightxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetLightxv(light, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetMaterialxv)
+     {
+        ERR("Can not call glGetMaterialxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetMaterialxv(face, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetPointerv(GLenum pname, GLvoid **params)
+{
+   if (!_gles1_api.glGetPointerv)
+     {
+        ERR("Can not call glGetPointerv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetPointerv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static const GLubyte *
+_evgld_gles1_glGetString(GLenum name)
+{
+   const GLubyte * ret;
+   if (!_gles1_api.glGetString)
+     {
+        ERR("Can not call glGetString() in this context!");
+        return NULL;
+     }
+   EVGL_FUNC_BEGIN();
+   ret = _evgl_gles1_glGetString(name);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+static void
+_evgld_gles1_glGetTexEnviv(GLenum env, GLenum pname, GLint *params)
+{
+   if (!_gles1_api.glGetTexEnviv)
+     {
+        ERR("Can not call glGetTexEnviv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetTexEnviv(env, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetTexEnvxv)
+     {
+        ERR("Can not call glGetTexEnvxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetTexEnvxv(env, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+   if (!_gles1_api.glGetTexParameteriv)
+     {
+        ERR("Can not call glGetTexParameteriv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetTexParameteriv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glGetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
+{
+   if (!_gles1_api.glGetTexParameterxv)
+     {
+        ERR("Can not call glGetTexParameterxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glGetTexParameterxv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glHint(GLenum target, GLenum mode)
+{
+   if (!_gles1_api.glHint)
+     {
+        ERR("Can not call glHint() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glHint(target, mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static GLboolean
+_evgld_gles1_glIsBuffer(GLuint buffer)
+{
+   GLboolean ret;
+   if (!_gles1_api.glIsBuffer)
+     {
+        ERR("Can not call glIsBuffer() in this context!");
+        return EINA_FALSE;
+     }
+   EVGL_FUNC_BEGIN();
+   ret = _evgl_gles1_glIsBuffer(buffer);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+static GLboolean
+_evgld_gles1_glIsEnabled(GLenum cap)
+{
+   GLboolean ret;
+   if (!_gles1_api.glIsEnabled)
+     {
+        ERR("Can not call glIsEnabled() in this context!");
+        return EINA_FALSE;
+     }
+   EVGL_FUNC_BEGIN();
+   ret = _evgl_gles1_glIsEnabled(cap);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+static GLboolean
+_evgld_gles1_glIsTexture(GLuint texture)
+{
+   GLboolean ret;
+   if (!_gles1_api.glIsTexture)
+     {
+        ERR("Can not call glIsTexture() in this context!");
+        return EINA_FALSE;
+     }
+   EVGL_FUNC_BEGIN();
+   ret = _evgl_gles1_glIsTexture(texture);
+   GLERR();
+   EVGL_FUNC_END();
+   return ret;
+}
+
+static void
+_evgld_gles1_glLightModelx(GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glLightModelx)
+     {
+        ERR("Can not call glLightModelx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightModelx(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLightModelxv(GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glLightModelxv)
+     {
+        ERR("Can not call glLightModelxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightModelxv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLightx(GLenum light, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glLightx)
+     {
+        ERR("Can not call glLightx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightx(light, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLightxv(GLenum light, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glLightxv)
+     {
+        ERR("Can not call glLightxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLightxv(light, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLineWidthx(GLfixed width)
+{
+   if (!_gles1_api.glLineWidthx)
+     {
+        ERR("Can not call glLineWidthx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLineWidthx(width);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLoadIdentity(void)
+{
+   if (!_gles1_api.glLoadIdentity)
+     {
+        ERR("Can not call glLoadIdentity() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLoadIdentity();
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLoadMatrixx(const GLfixed *m)
+{
+   if (!_gles1_api.glLoadMatrixx)
+     {
+        ERR("Can not call glLoadMatrixx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLoadMatrixx(m);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glLogicOp(GLenum opcode)
+{
+   if (!_gles1_api.glLogicOp)
+     {
+        ERR("Can not call glLogicOp() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glLogicOp(opcode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMaterialx(GLenum face, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glMaterialx)
+     {
+        ERR("Can not call glMaterialx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMaterialx(face, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMaterialxv(GLenum face, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glMaterialxv)
+     {
+        ERR("Can not call glMaterialxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMaterialxv(face, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMatrixMode(GLenum mode)
+{
+   if (!_gles1_api.glMatrixMode)
+     {
+        ERR("Can not call glMatrixMode() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMatrixMode(mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMultMatrixx(const GLfixed *m)
+{
+   if (!_gles1_api.glMultMatrixx)
+     {
+        ERR("Can not call glMultMatrixx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMultMatrixx(m);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+{
+   if (!_gles1_api.glMultiTexCoord4x)
+     {
+        ERR("Can not call glMultiTexCoord4x() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glMultiTexCoord4x(target, s, t, r, q);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz)
+{
+   if (!_gles1_api.glNormal3x)
+     {
+        ERR("Can not call glNormal3x() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glNormal3x(nx, ny, nz);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glNormalPointer)
+     {
+        ERR("Can not call glNormalPointer() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glNormalPointer(type, stride, pointer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+   if (!_gles1_api.glOrthox)
+     {
+        ERR("Can not call glOrthox() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glOrthox(left, right, bottom, top, zNear, zFar);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPixelStorei(GLenum pname, GLint param)
+{
+   if (!_gles1_api.glPixelStorei)
+     {
+        ERR("Can not call glPixelStorei() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPixelStorei(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPointParameterx(GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glPointParameterx)
+     {
+        ERR("Can not call glPointParameterx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPointParameterx(pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPointParameterxv(GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glPointParameterxv)
+     {
+        ERR("Can not call glPointParameterxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPointParameterxv(pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPointSizex(GLfixed size)
+{
+   if (!_gles1_api.glPointSizex)
+     {
+        ERR("Can not call glPointSizex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPointSizex(size);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPolygonOffsetx(GLfixed factor, GLfixed units)
+{
+   if (!_gles1_api.glPolygonOffsetx)
+     {
+        ERR("Can not call glPolygonOffsetx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPolygonOffsetx(factor, units);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPopMatrix(void)
+{
+   if (!_gles1_api.glPopMatrix)
+     {
+        ERR("Can not call glPopMatrix() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPopMatrix();
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glPushMatrix(void)
+{
+   if (!_gles1_api.glPushMatrix)
+     {
+        ERR("Can not call glPushMatrix() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glPushMatrix();
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+{
+   if (!_gles1_api.glReadPixels)
+     {
+        ERR("Can not call glReadPixels() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glReadPixels(x, y, width, height, format, type, pixels);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+{
+   if (!_gles1_api.glRotatex)
+     {
+        ERR("Can not call glRotatex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glRotatex(angle, x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glSampleCoverage(GLclampf value, GLboolean invert)
+{
+   if (!_gles1_api.glSampleCoverage)
+     {
+        ERR("Can not call glSampleCoverage() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glSampleCoverage(value, invert);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glSampleCoveragex(GLclampx value, GLboolean invert)
+{
+   if (!_gles1_api.glSampleCoveragex)
+     {
+        ERR("Can not call glSampleCoveragex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glSampleCoveragex(value, invert);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glScalex(GLfixed x, GLfixed y, GLfixed z)
+{
+   if (!_gles1_api.glScalex)
+     {
+        ERR("Can not call glScalex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glScalex(x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   if (!_gles1_api.glScissor)
+     {
+        ERR("Can not call glScissor() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glScissor(x, y, width, height);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glShadeModel(GLenum mode)
+{
+   if (!_gles1_api.glShadeModel)
+     {
+        ERR("Can not call glShadeModel() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glShadeModel(mode);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glStencilFunc(GLenum func, GLint ref, GLuint mask)
+{
+   if (!_gles1_api.glStencilFunc)
+     {
+        ERR("Can not call glStencilFunc() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glStencilFunc(func, ref, mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glStencilMask(GLuint mask)
+{
+   if (!_gles1_api.glStencilMask)
+     {
+        ERR("Can not call glStencilMask() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glStencilMask(mask);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+   if (!_gles1_api.glStencilOp)
+     {
+        ERR("Can not call glStencilOp() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glStencilOp(fail, zfail, zpass);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glTexCoordPointer)
+     {
+        ERR("Can not call glTexCoordPointer() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexCoordPointer(size, type, stride, pointer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexEnvi(GLenum target, GLenum pname, GLint param)
+{
+   if (!_gles1_api.glTexEnvi)
+     {
+        ERR("Can not call glTexEnvi() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexEnvi(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexEnvx(GLenum target, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glTexEnvx)
+     {
+        ERR("Can not call glTexEnvx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexEnvx(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+{
+   if (!_gles1_api.glTexEnviv)
+     {
+        ERR("Can not call glTexEnviv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexEnviv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glTexEnvxv)
+     {
+        ERR("Can not call glTexEnvxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexEnvxv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
+{
+   if (!_gles1_api.glTexImage2D)
+     {
+        ERR("Can not call glTexImage2D() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexParameteri(GLenum target, GLenum pname, GLint param)
+{
+   if (!_gles1_api.glTexParameteri)
+     {
+        ERR("Can not call glTexParameteri() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexParameteri(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexParameterx(GLenum target, GLenum pname, GLfixed param)
+{
+   if (!_gles1_api.glTexParameterx)
+     {
+        ERR("Can not call glTexParameterx() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexParameterx(target, pname, param);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+{
+   if (!_gles1_api.glTexParameteriv)
+     {
+        ERR("Can not call glTexParameteriv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexParameteriv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
+{
+   if (!_gles1_api.glTexParameterxv)
+     {
+        ERR("Can not call glTexParameterxv() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexParameterxv(target, pname, params);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
+{
+   if (!_gles1_api.glTexSubImage2D)
+     {
+        ERR("Can not call glTexSubImage2D() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glTranslatex(GLfixed x, GLfixed y, GLfixed z)
+{
+   if (!_gles1_api.glTranslatex)
+     {
+        ERR("Can not call glTranslatex() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glTranslatex(x, y, z);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+{
+   if (!_gles1_api.glVertexPointer)
+     {
+        ERR("Can not call glVertexPointer() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glVertexPointer(size, type, stride, pointer);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+static void
+_evgld_gles1_glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   if (!_gles1_api.glViewport)
+     {
+        ERR("Can not call glViewport() in this context!");
+        return;
+     }
+   EVGL_FUNC_BEGIN();
+   _evgl_gles1_glViewport(x, y, width, height);
+   GLERR();
+   EVGL_FUNC_END();
+}
+
+
+
+static void
+_evgl_load_gles1_apis(void *dl_handle, Evas_GL_API *funcs)
+{
+   if (!dl_handle) return;
+
+#define ORD(name) funcs->name = dlsym(dl_handle, #name)
+   /* Available only in Common profile */
+   ORD(glAlphaFunc);
+   ORD(glClearColor);
+   ORD(glClearDepthf);
+   ORD(glClipPlanef);
+   ORD(glColor4f);
+   ORD(glDepthRangef);
+   ORD(glFogf);
+   ORD(glFogfv);
+   ORD(glFrustumf);
+   ORD(glGetClipPlanef);
+   ORD(glGetFloatv);
+   ORD(glGetLightfv);
+   ORD(glGetMaterialfv);
+   ORD(glGetTexEnvfv);
+   ORD(glGetTexParameterfv);
+   ORD(glLightModelf);
+   ORD(glLightModelfv);
+   ORD(glLightf);
+   ORD(glLightfv);
+   ORD(glLineWidth);
+   ORD(glLoadMatrixf);
+   ORD(glMaterialf);
+   ORD(glMaterialfv);
+   ORD(glMultMatrixf);
+   ORD(glMultiTexCoord4f);
+   ORD(glNormal3f);
+   ORD(glOrthof);
+   ORD(glPointParameterf);
+   ORD(glPointParameterfv);
+   ORD(glPointSize);
+   ORD(glPointSizePointerOES);
+   ORD(glPolygonOffset);
+   ORD(glRotatef);
+   ORD(glScalef);
+   ORD(glTexEnvf);
+   ORD(glTexEnvfv);
+   ORD(glTexParameterf);
+   ORD(glTexParameterfv);
+   ORD(glTranslatef);
+   /* Available in both Common and Common-Lite profiles */
+   ORD(glActiveTexture);
+   ORD(glAlphaFuncx);
+   ORD(glBindBuffer);
+   ORD(glBindTexture);
+   ORD(glBlendFunc);
+   ORD(glBufferData);
+   ORD(glBufferSubData);
+   ORD(glClear);
+   ORD(glClearColorx);
+   ORD(glClearDepthx);
+   ORD(glClearStencil);
+   ORD(glClientActiveTexture);
+   ORD(glClipPlanex);
+   ORD(glColor4ub);
+   ORD(glColor4x);
+   ORD(glColorMask);
+   ORD(glColorPointer);
+   ORD(glCompressedTexImage2D);
+   ORD(glCompressedTexSubImage2D);
+   ORD(glCopyTexImage2D);
+   ORD(glCopyTexSubImage2D);
+   ORD(glCullFace);
+   ORD(glDeleteBuffers);
+   ORD(glDeleteTextures);
+   ORD(glDepthFunc);
+   ORD(glDepthMask);
+   ORD(glDepthRangex);
+   ORD(glDisable);
+   ORD(glDisableClientState);
+   ORD(glDrawArrays);
+   ORD(glDrawElements);
+   ORD(glEnable);
+   ORD(glEnableClientState);
+   ORD(glFinish);
+   ORD(glFlush);
+   ORD(glFogx);
+   ORD(glFogxv);
+   ORD(glFrontFace);
+   ORD(glFrustumx);
+   ORD(glGetBooleanv);
+   ORD(glGetBufferParameteriv);
+   ORD(glGetClipPlanex);
+   ORD(glGenBuffers);
+   ORD(glGenTextures);
+   ORD(glGetError);
+   ORD(glGetFixedv);
+   ORD(glGetIntegerv);
+   ORD(glGetLightxv);
+   ORD(glGetMaterialxv);
+   ORD(glGetPointerv);
+   ORD(glGetString);
+   ORD(glGetTexEnviv);
+   ORD(glGetTexEnvxv);
+   ORD(glGetTexParameteriv);
+   ORD(glGetTexParameterxv);
+   ORD(glHint);
+   ORD(glIsBuffer);
+   ORD(glIsEnabled);
+   ORD(glIsTexture);
+   ORD(glLightModelx);
+   ORD(glLightModelxv);
+   ORD(glLightx);
+   ORD(glLightxv);
+   ORD(glLineWidthx);
+   ORD(glLoadIdentity);
+   ORD(glLoadMatrixx);
+   ORD(glLogicOp);
+   ORD(glMaterialx);
+   ORD(glMaterialxv);
+   ORD(glMatrixMode);
+   ORD(glMultMatrixx);
+   ORD(glMultiTexCoord4x);
+   ORD(glNormal3x);
+   ORD(glNormalPointer);
+   ORD(glOrthox);
+   ORD(glPixelStorei);
+   ORD(glPointParameterx);
+   ORD(glPointParameterxv);
+   ORD(glPointSizex);
+   ORD(glPolygonOffsetx);
+   ORD(glPopMatrix);
+   ORD(glPushMatrix);
+   ORD(glReadPixels);
+   ORD(glRotatex);
+   ORD(glSampleCoverage);
+   ORD(glSampleCoveragex);
+   ORD(glScalex);
+   ORD(glScissor);
+   ORD(glShadeModel);
+   ORD(glStencilFunc);
+   ORD(glStencilMask);
+   ORD(glStencilOp);
+   ORD(glTexCoordPointer);
+   ORD(glTexEnvi);
+   ORD(glTexEnvx);
+   ORD(glTexEnviv);
+   ORD(glTexEnvxv);
+   ORD(glTexImage2D);
+   ORD(glTexParameteri);
+   ORD(glTexParameterx);
+   ORD(glTexParameteriv);
+   ORD(glTexParameterxv);
+   ORD(glTexSubImage2D);
+   ORD(glTranslatex);
+   ORD(glVertexPointer);
+   ORD(glViewport);
+#undef ORD
+}
+
+static Eina_Bool
+_evgl_gles1_api_init(void)
+{
+   static Eina_Bool _initialized = EINA_FALSE;
+   if (_initialized) return EINA_TRUE;
+
+   memset(&_gles1_api, 0, sizeof(_gles1_api));
+   _gles1_handle = dlopen("libGLES_CM.so", RTLD_NOW);
+   if (!_gles1_handle) _gles1_handle = dlopen("libGLES_CM.so.1", RTLD_NOW);
+   if (!_gles1_handle) _gles1_handle = dlopen("libGLES_CM.so.1.1", RTLD_NOW);
+   if (!_gles1_handle) _gles1_handle = dlopen("libGLESv1_CM.so", RTLD_NOW);
+   if (!_gles1_handle) _gles1_handle = dlopen("libGLESv1_CM.so.1", RTLD_NOW);
+   if (!_gles1_handle)
+     {
+        WRN("OpenGL ES 1 was not found on this system. Evas GL will not support GLES 1 contexts.");
+        return EINA_FALSE;
+     }
+
+   _evgl_load_gles1_apis(_gles1_handle, &_gles1_api);
+   if (!_evgl_api_gles1_ext_init())
+     WRN("Could not initialize OpenGL ES 1 extensions yet.");
+
+   _initialized = EINA_TRUE;
+   return EINA_TRUE;
+}
+
+static void
+_debug_gles1_api_get(Evas_GL_API *funcs)
+{
+   if (!funcs) return;
+
+#define ORD(name) EVAS_API_OVERRIDE(name, funcs, _evgld_gles1_)
+   /* Available only in Common profile */
+   ORD(glAlphaFunc);
+   ORD(glClearColor);
+   ORD(glClearDepthf);
+   ORD(glClipPlanef);
+   ORD(glColor4f);
+   ORD(glDepthRangef);
+   ORD(glFogf);
+   ORD(glFogfv);
+   ORD(glFrustumf);
+   ORD(glGetClipPlanef);
+   ORD(glGetFloatv);
+   ORD(glGetLightfv);
+   ORD(glGetMaterialfv);
+   ORD(glGetTexEnvfv);
+   ORD(glGetTexParameterfv);
+   ORD(glLightModelf);
+   ORD(glLightModelfv);
+   ORD(glLightf);
+   ORD(glLightfv);
+   ORD(glLineWidth);
+   ORD(glLoadMatrixf);
+   ORD(glMaterialf);
+   ORD(glMaterialfv);
+   ORD(glMultMatrixf);
+   ORD(glMultiTexCoord4f);
+   ORD(glNormal3f);
+   ORD(glOrthof);
+   ORD(glPointParameterf);
+   ORD(glPointParameterfv);
+   ORD(glPointSize);
+   ORD(glPointSizePointerOES);
+   ORD(glPolygonOffset);
+   ORD(glRotatef);
+   ORD(glScalef);
+   ORD(glTexEnvf);
+   ORD(glTexEnvfv);
+   ORD(glTexParameterf);
+   ORD(glTexParameterfv);
+   ORD(glTranslatef);
+   /* Available in both Common and Common-Lite profiles */
+   ORD(glActiveTexture);
+   ORD(glAlphaFuncx);
+   ORD(glBindBuffer);
+   ORD(glBindTexture);
+   ORD(glBlendFunc);
+   ORD(glBufferData);
+   ORD(glBufferSubData);
+   ORD(glClear);
+   ORD(glClearColorx);
+   ORD(glClearDepthx);
+   ORD(glClearStencil);
+   ORD(glClientActiveTexture);
+   ORD(glClipPlanex);
+   ORD(glColor4ub);
+   ORD(glColor4x);
+   ORD(glColorMask);
+   ORD(glColorPointer);
+   ORD(glCompressedTexImage2D);
+   ORD(glCompressedTexSubImage2D);
+   ORD(glCopyTexImage2D);
+   ORD(glCopyTexSubImage2D);
+   ORD(glCullFace);
+   ORD(glDeleteBuffers);
+   ORD(glDeleteTextures);
+   ORD(glDepthFunc);
+   ORD(glDepthMask);
+   ORD(glDepthRangex);
+   ORD(glDisable);
+   ORD(glDisableClientState);
+   ORD(glDrawArrays);
+   ORD(glDrawElements);
+   ORD(glEnable);
+   ORD(glEnableClientState);
+   ORD(glFinish);
+   ORD(glFlush);
+   ORD(glFogx);
+   ORD(glFogxv);
+   ORD(glFrontFace);
+   ORD(glFrustumx);
+   ORD(glGetBooleanv);
+   ORD(glGetBufferParameteriv);
+   ORD(glGetClipPlanex);
+   ORD(glGenBuffers);
+   ORD(glGenTextures);
+   ORD(glGetError);
+   ORD(glGetFixedv);
+   ORD(glGetIntegerv);
+   ORD(glGetLightxv);
+   ORD(glGetMaterialxv);
+   ORD(glGetPointerv);
+   ORD(glGetString);
+   ORD(glGetTexEnviv);
+   ORD(glGetTexEnvxv);
+   ORD(glGetTexParameteriv);
+   ORD(glGetTexParameterxv);
+   ORD(glHint);
+   ORD(glIsBuffer);
+   ORD(glIsEnabled);
+   ORD(glIsTexture);
+   ORD(glLightModelx);
+   ORD(glLightModelxv);
+   ORD(glLightx);
+   ORD(glLightxv);
+   ORD(glLineWidthx);
+   ORD(glLoadIdentity);
+   ORD(glLoadMatrixx);
+   ORD(glLogicOp);
+   ORD(glMaterialx);
+   ORD(glMaterialxv);
+   ORD(glMatrixMode);
+   ORD(glMultMatrixx);
+   ORD(glMultiTexCoord4x);
+   ORD(glNormal3x);
+   ORD(glNormalPointer);
+   ORD(glOrthox);
+   ORD(glPixelStorei);
+   ORD(glPointParameterx);
+   ORD(glPointParameterxv);
+   ORD(glPointSizex);
+   ORD(glPolygonOffsetx);
+   ORD(glPopMatrix);
+   ORD(glPushMatrix);
+   ORD(glReadPixels);
+   ORD(glRotatex);
+   ORD(glSampleCoverage);
+   ORD(glSampleCoveragex);
+   ORD(glScalex);
+   ORD(glScissor);
+   ORD(glShadeModel);
+   ORD(glStencilFunc);
+   ORD(glStencilMask);
+   ORD(glStencilOp);
+   ORD(glTexCoordPointer);
+   ORD(glTexEnvi);
+   ORD(glTexEnvx);
+   ORD(glTexEnviv);
+   ORD(glTexEnvxv);
+   ORD(glTexImage2D);
+   ORD(glTexParameteri);
+   ORD(glTexParameterx);
+   ORD(glTexParameteriv);
+   ORD(glTexParameterxv);
+   ORD(glTexSubImage2D);
+   ORD(glTranslatex);
+   ORD(glVertexPointer);
+   ORD(glViewport);
+#undef ORD
+
+   evgl_api_gles1_ext_get(funcs);
+}
+
+static void
+_normal_gles1_api_get(Evas_GL_API *funcs)
+{
+   if (!funcs) return;
+
+#define ORD(name) EVAS_API_OVERRIDE(name, funcs, _evgl_gles1_)
+   /* Available only in Common profile */
+   ORD(glAlphaFunc);
+   ORD(glClearColor);
+   ORD(glClearDepthf);
+   ORD(glClipPlanef);
+   ORD(glColor4f);
+   ORD(glDepthRangef);
+   ORD(glFogf);
+   ORD(glFogfv);
+   ORD(glFrustumf);
+   ORD(glGetClipPlanef);
+   ORD(glGetFloatv);
+   ORD(glGetLightfv);
+   ORD(glGetMaterialfv);
+   ORD(glGetTexEnvfv);
+   ORD(glGetTexParameterfv);
+   ORD(glLightModelf);
+   ORD(glLightModelfv);
+   ORD(glLightf);
+   ORD(glLightfv);
+   ORD(glLineWidth);
+   ORD(glLoadMatrixf);
+   ORD(glMaterialf);
+   ORD(glMaterialfv);
+   ORD(glMultMatrixf);
+   ORD(glMultiTexCoord4f);
+   ORD(glNormal3f);
+   ORD(glOrthof);
+   ORD(glPointParameterf);
+   ORD(glPointParameterfv);
+   ORD(glPointSize);
+   ORD(glPointSizePointerOES);
+   ORD(glPolygonOffset);
+   ORD(glRotatef);
+   ORD(glScalef);
+   ORD(glTexEnvf);
+   ORD(glTexEnvfv);
+   ORD(glTexParameterf);
+   ORD(glTexParameterfv);
+   ORD(glTranslatef);
+   /* Available in both Common and Common-Lite profiles */
+   ORD(glActiveTexture);
+   ORD(glAlphaFuncx);
+   ORD(glBindBuffer);
+   ORD(glBindTexture);
+   ORD(glBlendFunc);
+   ORD(glBufferData);
+   ORD(glBufferSubData);
+   ORD(glClear);
+   ORD(glClearColorx);
+   ORD(glClearDepthx);
+   ORD(glClearStencil);
+   ORD(glClientActiveTexture);
+   ORD(glClipPlanex);
+   ORD(glColor4ub);
+   ORD(glColor4x);
+   ORD(glColorMask);
+   ORD(glColorPointer);
+   ORD(glCompressedTexImage2D);
+   ORD(glCompressedTexSubImage2D);
+   ORD(glCopyTexImage2D);
+   ORD(glCopyTexSubImage2D);
+   ORD(glCullFace);
+   ORD(glDeleteBuffers);
+   ORD(glDeleteTextures);
+   ORD(glDepthFunc);
+   ORD(glDepthMask);
+   ORD(glDepthRangex);
+   ORD(glDisable);
+   ORD(glDisableClientState);
+   ORD(glDrawArrays);
+   ORD(glDrawElements);
+   ORD(glEnable);
+   ORD(glEnableClientState);
+   ORD(glFinish);
+   ORD(glFlush);
+   ORD(glFogx);
+   ORD(glFogxv);
+   ORD(glFrontFace);
+   ORD(glFrustumx);
+   ORD(glGetBooleanv);
+   ORD(glGetBufferParameteriv);
+   ORD(glGetClipPlanex);
+   ORD(glGenBuffers);
+   ORD(glGenTextures);
+   ORD(glGetError);
+   ORD(glGetFixedv);
+   ORD(glGetIntegerv);
+   ORD(glGetLightxv);
+   ORD(glGetMaterialxv);
+   ORD(glGetPointerv);
+   ORD(glGetString);
+   ORD(glGetTexEnviv);
+   ORD(glGetTexEnvxv);
+   ORD(glGetTexParameteriv);
+   ORD(glGetTexParameterxv);
+   ORD(glHint);
+   ORD(glIsBuffer);
+   ORD(glIsEnabled);
+   ORD(glIsTexture);
+   ORD(glLightModelx);
+   ORD(glLightModelxv);
+   ORD(glLightx);
+   ORD(glLightxv);
+   ORD(glLineWidthx);
+   ORD(glLoadIdentity);
+   ORD(glLoadMatrixx);
+   ORD(glLogicOp);
+   ORD(glMaterialx);
+   ORD(glMaterialxv);
+   ORD(glMatrixMode);
+   ORD(glMultMatrixx);
+   ORD(glMultiTexCoord4x);
+   ORD(glNormal3x);
+   ORD(glNormalPointer);
+   ORD(glOrthox);
+   ORD(glPixelStorei);
+   ORD(glPointParameterx);
+   ORD(glPointParameterxv);
+   ORD(glPointSizex);
+   ORD(glPolygonOffsetx);
+   ORD(glPopMatrix);
+   ORD(glPushMatrix);
+   ORD(glReadPixels);
+   ORD(glRotatex);
+   ORD(glSampleCoverage);
+   ORD(glSampleCoveragex);
+   ORD(glScalex);
+   ORD(glScissor);
+   ORD(glShadeModel);
+   ORD(glStencilFunc);
+   ORD(glStencilMask);
+   ORD(glStencilOp);
+   ORD(glTexCoordPointer);
+   ORD(glTexEnvi);
+   ORD(glTexEnvx);
+   ORD(glTexEnviv);
+   ORD(glTexEnvxv);
+   ORD(glTexImage2D);
+   ORD(glTexParameteri);
+   ORD(glTexParameterx);
+   ORD(glTexParameteriv);
+   ORD(glTexParameterxv);
+   ORD(glTexSubImage2D);
+   ORD(glTranslatex);
+   ORD(glVertexPointer);
+   ORD(glViewport);
+#undef ORD
+
+   evgl_api_gles1_ext_get(funcs);
+}
+
+void
+_evgl_api_gles1_get(Evas_GL_API *funcs, Eina_Bool debug)
+{
+   if (!_evgl_gles1_api_init())
+     return;
+
+   if (debug)
+     _debug_gles1_api_get(funcs);
+   else
+     _normal_gles1_api_get(funcs);
+
+   // FIXME: This looks wrong, we should be calling the gles1 API
+   // TODO: Implement these wrappers first
+   //if (evgl_engine->direct_scissor_off)
+     //_direct_scissor_off_api_get(funcs);
+}
+
+Evas_GL_API *
+_evgl_api_gles1_internal_get(void)
+{
+   return &_gles1_api;
+}
index fe77871..7766e7f 100644 (file)
@@ -1624,19 +1624,19 @@ evgl_surface_create(void *eng_data, Evas_GL_Config *cfg, int w, int h)
         goto error;
      }
 
-   // Allocate a special surface for 1.1 and 3.x
+   // Allocate indirect surface for fallback rendering
    if ((cfg->gles_version == EVAS_GL_GLES_1_X) ||
        (cfg->gles_version == EVAS_GL_GLES_3_X))
      {
-        if (!evgl_engine->funcs->gles_pixmap_surface_create)
+        if (!evgl_engine->funcs->indirect_surface_create)
           {
-             ERR("Can't create %s surfaces",(cfg->gles_version == EVAS_GL_GLES_1_X)?"GLES 1.1":"GLES 3");
+             ERR("Cannot create indirect surface");
              evas_gl_common_error_set(eng_data, EVAS_GL_NOT_INITIALIZED);
              goto error;
           }
 
-        INF("Creating special surface for GLES 1.x/3.x rendering");
-        evgl_engine->funcs->gles_pixmap_surface_create(evgl_engine, eng_data, sfc, cfg, w, h);
+        INF("Creating indirect surface for fallback rendering");
+        evgl_engine->funcs->indirect_surface_create(evgl_engine, eng_data, sfc, cfg, w, h);
      }
 
    // Create internal buffers
@@ -1672,15 +1672,15 @@ evgl_surface_create(void *eng_data, Evas_GL_Config *cfg, int w, int h)
 
    if (sfc->direct_fb_opt)
      {
-        if (!sfc->gles1_indirect)
+        if (!sfc->indirect)
           {
              eina_hash_add(evgl_engine->direct_surfaces, &sfc->color_buf, sfc);
              DBG("Added tex %d as direct surface: %p", sfc->color_buf, sfc);
           }
         else
           {
-             eina_hash_add(evgl_engine->direct_surfaces, &sfc->gles1_sfc_native, sfc);
-             DBG("Added native %p as direct surface: %p", sfc->gles1_sfc_native, sfc);
+             eina_hash_add(evgl_engine->direct_surfaces, &sfc->indirect_sfc_native, sfc);
+             DBG("Added native %p as direct surface: %p", sfc->indirect_sfc_native, sfc);
           }
      }
    LKU(evgl_engine->resource_lock);
@@ -1865,24 +1865,24 @@ evgl_surface_destroy(void *eng_data, EVGL_Surface *sfc)
           }
      }
 
-   // Destroy surface used for 1.1
-   if (sfc->gles1_indirect)
+   // Destroy indirect surface
+   if (sfc->indirect)
      {
         int ret;
-        if (dbg) DBG("sfc %p is used for GLES 1.x indirect rendering", sfc);
+        if (dbg) DBG("sfc %p is used for indirect rendering", sfc);
 
-        if (!evgl_engine->funcs->gles_pixmap_surface_destroy)
+        if (!evgl_engine->funcs->indirect_surface_destroy)
           {
-             ERR("Error destroying GLES 1.x/3.x surface");
+             ERR("Error destroying indirect surface");
              return 0;
           }
 
-        DBG("Destroying special surface used for GLES 1.x/3.x rendering");
-        ret = evgl_engine->funcs->gles_pixmap_surface_destroy(eng_data, sfc);
+        DBG("Destroying special surface used for indirect rendering");
+        ret = evgl_engine->funcs->indirect_surface_destroy(eng_data, sfc);
 
         if (!ret)
           {
-             ERR("Engine failed to destroy a GLES1.x/3.x Surface.");
+             ERR("Engine failed to destroy indirect surface.");
              return ret;
           }
      }
@@ -2041,11 +2041,11 @@ evgl_context_destroy(void *eng_data, EVGL_Context *ctx)
         return 0;
      }
 
-   // Destroy GLES1/GLES3 indirect rendering context
-   if (ctx->gles_ir_context &&
-       !evgl_engine->funcs->context_destroy(eng_data, ctx->context))
+   // Destroy indirect rendering context
+   if (ctx->indirect_context &&
+       !evgl_engine->funcs->context_destroy(eng_data, ctx->indirect_context))
      {
-        ERR("Error destroying the GLES1 context.");
+        ERR("Error destroying the indirect context.");
         return 0;
      }
 
@@ -2199,10 +2199,10 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
    // GLES 1.x and 3.x
    if ((ctx->version == EVAS_GL_GLES_1_X) || (ctx->version == EVAS_GL_GLES_3_X))
      {
-        if (dbg) DBG("ctx %p is GLES 1", ctx);
+        if (dbg) DBG("ctx %p is GLES %d", ctx, ctx->version);
         if (_evgl_direct_renderable(rsc, sfc))
           {
-             // Transition from pixmap surface rendering to direct rendering
+             // Transition from indirect rendering to direct rendering
              if (!rsc->direct.rendered)
                {
                   // Restore viewport and scissor test to direct rendering mode
@@ -2215,20 +2215,20 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
           }
         else
           {
-             if (!ctx->gles_ir_context)
+             if (!ctx->indirect_context)
                {
-                  ctx->gles_ir_context =
+                  ctx->indirect_context =
                         evgl_engine->funcs->gles_context_create(eng_data, ctx, sfc);
                }
-             if (dbg) DBG("Calling make_current(%p, %p)", sfc->gles1_sfc, ctx->context);
-             if (!evgl_engine->funcs->make_current(eng_data, sfc->gles1_sfc,
-                                                   ctx->gles_ir_context, EINA_TRUE))
+             if (dbg) DBG("Calling make_current(%p, %p)", sfc->indirect_sfc, ctx->context);
+             if (!evgl_engine->funcs->make_current(eng_data, sfc->indirect_sfc,
+                                                   ctx->indirect_context, EINA_TRUE))
                {
-                  ERR("Failed to make current with GLES1 indirect surface.");
+                  ERR("Failed to make current with indirect surface.");
                   return 0;
                }
 
-             // Transition from direct rendering to pixmap surface rendering
+             // Transition from direct rendering to indirect rendering
              if (rsc->direct.rendered)
                {
                   glViewport(ctx->viewport_coord[0], ctx->viewport_coord[1], ctx->viewport_coord[2], ctx->viewport_coord[3]);
@@ -2240,10 +2240,6 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
              rsc->direct.rendered = 0;
           }
 
-        ctx->current_sfc = sfc;
-        rsc->current_ctx = ctx;
-        rsc->current_eng = eng_data;
-
       // Update GLESv1 extension functions after GLESv1 context is bound
       if (ctx->version == EVAS_GL_GLES_1_X)
         {
@@ -2254,108 +2250,107 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
            evgl_api_gles3_ext_get(gles3_funcs);
         }
 
-        _surface_context_list_print();
-
-        return 1;
      }
-
-   // GLES 2+ below
-
-   // Normal FBO Rendering
-   // Create FBO if it hasn't been created
-   if (!ctx->surface_fbo)
-      glGenFramebuffers(1, &ctx->surface_fbo);
-
-   // Direct Rendering
-   if (_evgl_direct_renderable(rsc, sfc))
+   else
      {
-        if (dbg) DBG("sfc %p is direct renderable.", sfc);
+        // GLES 2+ below
 
-        // This is to transition from FBO rendering to direct rendering
-        glGetIntegerv(GL_FRAMEBUFFER_BINDING, &curr_fbo);
-        if (ctx->surface_fbo == (GLuint)curr_fbo)
-          {
-             glBindFramebuffer(GL_FRAMEBUFFER, 0);
-             ctx->current_fbo = 0;
-          }
-        else if (ctx->current_sfc && (ctx->current_sfc->pbuffer.is_pbuffer))
-          {
-             // Using the same context, we were rendering on a pbuffer
-             glBindFramebuffer(GL_FRAMEBUFFER, 0);
-             ctx->current_fbo = 0;
-          }
+        // Normal FBO Rendering
+        // Create FBO if it hasn't been created
+        if (!ctx->surface_fbo)
+          glGenFramebuffers(1, &ctx->surface_fbo);
 
-        if (ctx->current_fbo == 0)
+        // Direct Rendering
+        if (_evgl_direct_renderable(rsc, sfc))
           {
-             // If master clip is set and clip is greater than 0, do partial render
-             if (rsc->direct.partial.enabled)
+             if (dbg) DBG("sfc %p is direct renderable.", sfc);
+
+             // This is to transition from FBO rendering to direct rendering
+             glGetIntegerv(GL_FRAMEBUFFER_BINDING, &curr_fbo);
+             if (ctx->surface_fbo == (GLuint)curr_fbo)
                {
-                  if (!ctx->partial_render)
+                  glBindFramebuffer(GL_FRAMEBUFFER, 0);
+                  ctx->current_fbo = 0;
+               }
+             else if (ctx->current_sfc && (ctx->current_sfc->pbuffer.is_pbuffer))
+               {
+                  // Using the same context, we were rendering on a pbuffer
+                  glBindFramebuffer(GL_FRAMEBUFFER, 0);
+                  ctx->current_fbo = 0;
+               }
+
+             if (ctx->current_fbo == 0)
+               {
+                  // If master clip is set and clip is greater than 0, do partial render
+                  if (rsc->direct.partial.enabled)
                     {
-                       evgl_direct_partial_render_start();
-                       ctx->partial_render = 1;
+                       if (!ctx->partial_render)
+                         {
+                            evgl_direct_partial_render_start();
+                            ctx->partial_render = 1;
+                         }
                     }
                }
-          }
-
-        rsc->direct.rendered = 1;
-     }
-   else if (sfc->pbuffer.native_surface)
-     {
-        if (dbg) DBG("Surface sfc %p is a pbuffer: %p", sfc, sfc->pbuffer.native_surface);
 
-        // Call end tiling
-        if (rsc->direct.partial.enabled)
-           evgl_direct_partial_render_end();
-
-        if (sfc->color_buf)
-          {
-             if (!_surface_buffers_fbo_set(sfc, sfc->color_buf))
-               ERR("Could not detach current FBO");
+             rsc->direct.rendered = 1;
           }
+        else if (sfc->pbuffer.native_surface)
+          {
+             if (dbg) DBG("Surface sfc %p is a pbuffer: %p", sfc, sfc->pbuffer.native_surface);
 
-        if (dbg) DBG("Calling make_current(%p, %p)", sfc->pbuffer.native_surface, ctx->context);
-        evgl_engine->funcs->make_current(eng_data, sfc->pbuffer.native_surface,
-                                         ctx->context, EINA_TRUE);
+             // Call end tiling
+             if (rsc->direct.partial.enabled)
+                evgl_direct_partial_render_end();
 
-        // Bind to the previously bound buffer (may be 0)
-        if (ctx->current_fbo)
-          glBindFramebuffer(GL_FRAMEBUFFER, ctx->current_fbo);
+             if (sfc->color_buf)
+               {
+                  if (!_surface_buffers_fbo_set(sfc, sfc->color_buf))
+                    ERR("Could not detach current FBO");
+               }
 
-        rsc->direct.rendered = 0;
-     }
-   else
-     {
-        if (dbg) DBG("Surface sfc %p is a normal surface.", sfc);
+             if (dbg) DBG("Calling make_current(%p, %p)", sfc->pbuffer.native_surface, ctx->context);
+             evgl_engine->funcs->make_current(eng_data, sfc->pbuffer.native_surface,
+                                              ctx->context, EINA_TRUE);
 
-        // Attach fbo and the buffers
-        if ((rsc->current_ctx != ctx) || (ctx->current_sfc != sfc) || (rsc->direct.rendered))
+             // Bind to the previously bound buffer (may be 0)
+             if (ctx->current_fbo)
+               glBindFramebuffer(GL_FRAMEBUFFER, ctx->current_fbo);
+
+             rsc->direct.rendered = 0;
+          }
+        else
           {
-             sfc->current_ctx = ctx;
-             if ((evgl_engine->direct_mem_opt) && (evgl_engine->direct_override))
-               {
-                  DBG("Not creating fallback surfaces even though it should. Use at OWN discretion!");
-               }
-             else
-               {
-                  // If it's transitioning from direct render to fbo render
-                  // Call end tiling
-                  if (rsc->direct.partial.enabled)
-                     evgl_direct_partial_render_end();
+             if (dbg) DBG("Surface sfc %p is a normal surface.", sfc);
 
-                  if (!_surface_buffers_fbo_set(sfc, ctx->surface_fbo))
+             // Attach fbo and the buffers
+             if ((rsc->current_ctx != ctx) || (ctx->current_sfc != sfc) || (rsc->direct.rendered))
+               {
+                  sfc->current_ctx = ctx;
+                  if ((evgl_engine->direct_mem_opt) && (evgl_engine->direct_override))
                     {
-                       ERR("Attaching buffers to context fbo failed. Engine: %p  Surface: %p Context FBO: %u", evgl_engine, sfc, ctx->surface_fbo);
-                       evas_gl_common_error_set(eng_data, EVAS_GL_BAD_CONTEXT);
-                       return 0;
+                       DBG("Not creating fallback surfaces even though it should. Use at OWN discretion!");
                     }
-               }
+                  else
+                    {
+                       // If it's transitioning from direct render to fbo render
+                       // Call end tiling
+                       if (rsc->direct.partial.enabled)
+                          evgl_direct_partial_render_end();
 
-             // Bind to the previously bound buffer
-             if (ctx->current_fbo)
-               glBindFramebuffer(GL_FRAMEBUFFER, ctx->current_fbo);
+                       if (!_surface_buffers_fbo_set(sfc, ctx->surface_fbo))
+                         {
+                            ERR("Attaching buffers to context fbo failed. Engine: %p  Surface: %p Context FBO: %u", evgl_engine, sfc, ctx->surface_fbo);
+                            evas_gl_common_error_set(eng_data, EVAS_GL_BAD_CONTEXT);
+                            return 0;
+                         }
+                    }
+
+                  // Bind to the previously bound buffer
+                  if (ctx->current_fbo)
+                    glBindFramebuffer(GL_FRAMEBUFFER, ctx->current_fbo);
+               }
+             rsc->direct.rendered = 0;
           }
-        rsc->direct.rendered = 0;
      }
 
    ctx->current_sfc = sfc;
@@ -2443,7 +2438,7 @@ evgl_native_surface_get(EVGL_Surface *sfc, Evas_Native_Surface *ns)
         return 0;
      }
 
-   if (!sfc->gles1_indirect)
+   if (!sfc->indirect)
      {
         ns->type = EVAS_NATIVE_SURFACE_OPENGL;
         ns->version = EVAS_NATIVE_SURFACE_VERSION;
@@ -2458,8 +2453,8 @@ evgl_native_surface_get(EVGL_Surface *sfc, Evas_Native_Surface *ns)
      {
         ns->type = EVAS_NATIVE_SURFACE_X11;
         ns->version = EVAS_NATIVE_SURFACE_VERSION;
-        ns->data.x11.pixmap = (unsigned long)(intptr_t)sfc->gles1_sfc_native;
-        ns->data.x11.visual = sfc->gles1_sfc_visual;
+        ns->data.x11.pixmap = (unsigned long)(intptr_t)sfc->indirect_sfc_native;
+        ns->data.x11.visual = sfc->indirect_sfc_visual;
      }
 
    return 1;
index 2ca7a59..a0356a5 100644 (file)
@@ -70,10 +70,10 @@ struct _EVGL_Interface
    int         (*pbuffer_surface_destroy)(void *data, void *surface);
 
    // Create a surface for 1.x & 3.x rendering (could be pbuffer or xpixmap for instance)
-   void       *(*gles_pixmap_surface_create)(EVGL_Engine *evgl, void *data, EVGL_Surface *evgl_sfc, Evas_GL_Config *cfg, int w, int h);
+   void       *(*indirect_surface_create)(EVGL_Engine *evgl, void *data, EVGL_Surface *evgl_sfc, Evas_GL_Config *cfg, int w, int h);
 
    // Destroy 1.x & 3.x surface (could be pbuffer or xpixmap for instance)
-   int         (*gles_pixmap_surface_destroy)(void *data, EVGL_Surface *evgl_sfc);
+   int         (*indirect_surface_destroy)(void *data, EVGL_Surface *evgl_sfc);
 
    // Create an indirect rendering context for GLES 1.x
    void       *(*gles_context_create)(void *data, EVGL_Context *share_ctx, EVGL_Surface *evgl_sfc);
@@ -114,9 +114,8 @@ struct _EVGL_Surface
    unsigned client_side_rotation : 1;
    unsigned alpha : 1;
 
-   // Flag indicating this surface is used for GLES 1 indirect rendering
-   unsigned gles1_indirect : 1;
-   unsigned xpixmap : 1;
+   // Flag indicating this surface is used for indirect rendering
+   unsigned indirect : 1;
 
    // Moved from evgl_engine
    unsigned direct_override : 1;
@@ -133,11 +132,11 @@ struct _EVGL_Surface
    int     buffer_mem[4];
 
    //-------------------------//
-   // Used if gles1_indirect == 1
-   EVGLNative_Surface gles1_sfc;
-   void              *gles1_sfc_native;
-   void              *gles1_sfc_visual;
-   void              *gles1_sfc_config;
+   // Used if indirect == 1
+   EVGLNative_Surface indirect_sfc;
+   void              *indirect_sfc_native;
+   void              *indirect_sfc_visual;
+   void              *indirect_sfc_config;
 
    //-------------------------//
    // Related to PBuffer Surface
@@ -178,7 +177,7 @@ struct _EVGL_Context
    int          viewport_direct[4];
 
    // For GLES1/GLES3 with indirect rendering
-   EVGLNative_Context gles_ir_context;
+   EVGLNative_Context indirect_context;
 
    // Partial Rendering
    int          partial_render;
index 8d580fd..08ac2e3 100644 (file)
@@ -876,13 +876,13 @@ evgl_eng_pbuffer_surface_destroy(void *data, void *surface)
 }
 
 // This function should create a surface that can be used for offscreen rendering
-// with GLES 1.x, and GLES 3.x nd still be bindable to a texture in Evas main GL context.
+// and still be bindable to a texture in Evas main GL context.
 // For now, this will create an X pixmap... Ideally it should be able to create
 // a bindable pbuffer surface or just an FBO if that is supported and it can
 // be shared with Evas.
 // FIXME: Avoid passing evgl_engine around like that.
 static void *
-evgl_eng_gles_pixmap_surface_create(EVGL_Engine *evgl EINA_UNUSED, void *data,
+evgl_eng_indirect_surface_create(EVGL_Engine *evgl EINA_UNUSED, void *data,
                               EVGL_Surface *evgl_sfc,
                               Evas_GL_Config *cfg, int w, int h)
 {
@@ -959,7 +959,7 @@ try_again:
    config_attrs[i++] = EGL_SURFACE_TYPE;
    config_attrs[i++] = EGL_PIXMAP_BIT;
    config_attrs[i++] = EGL_RENDERABLE_TYPE;
-   if(cfg->gles_version == EVAS_GL_GLES_3_X)
+   if (cfg->gles_version == EVAS_GL_GLES_3_X)
      config_attrs[i++] = EGL_OPENGL_ES3_BIT;
    else
      config_attrs[i++] = EGL_OPENGL_ES_BIT;
@@ -1090,32 +1090,29 @@ try_again:
         return NULL;
      }
 
-   evgl_sfc->gles1_indirect = EINA_TRUE;
-   evgl_sfc->xpixmap = EINA_TRUE;
-   evgl_sfc->gles1_sfc = egl_sfc;
-   evgl_sfc->gles1_sfc_native = (void *)(intptr_t) px;
-   evgl_sfc->gles1_sfc_visual = visual;
-   evgl_sfc->gles1_sfc_config = egl_cfg;
-   DBG("Successfully created GLES1 surface: Pixmap %lu EGLSurface %p", px, egl_sfc);
+   evgl_sfc->indirect = EINA_TRUE;
+   evgl_sfc->indirect_sfc = egl_sfc;
+   evgl_sfc->indirect_sfc_native = (void *)(intptr_t) px;
+   evgl_sfc->indirect_sfc_visual = visual;
+   evgl_sfc->indirect_sfc_config = egl_cfg;
+   DBG("Successfully created indirect surface: Pixmap %lu EGLSurface %p", px, egl_sfc);
    return evgl_sfc;
 
 #else
    // TODO/FIXME: do the same as with EGL above...
-   ERR("GLX support is not fully implemented for GLES 1.x");
+   ERR("GLX support is not fully implemented for indirect surface");
 
-   evgl_sfc->gles1_indirect = EINA_TRUE;
-   evgl_sfc->xpixmap = EINA_TRUE;
-   evgl_sfc->gles1_sfc_native = (void *)(intptr_t) px;
-   evgl_sfc->gles1_sfc = (void *)(intptr_t) px;
-   evgl_sfc->gles1_sfc_visual = eng_get_ob(re)->info->info.visual; // FIXME: Check this!
+   evgl_sfc->indirect = EINA_TRUE;
+   evgl_sfc->indirect_sfc_native = (void *)(intptr_t) px;
+   evgl_sfc->indirect_sfc = (void *)(intptr_t) px;
+   evgl_sfc->indirect_sfc_visual = eng_get_ob(re)->info->info.visual; // FIXME: Check this!
    return evgl_sfc;
 #endif
 }
 
-// This function should destroy the surface used for offscreen rendering
-// with GLES 1.x and GLES 3.x .This will also destroy the X pixmap...
+// This function should destroy the indirect surface as well as the X pixmap
 static int
-evgl_eng_gles_pixmap_surface_destroy(void *data, EVGL_Surface *evgl_sfc)
+evgl_eng_indirect_surface_destroy(void *data, EVGL_Surface *evgl_sfc)
 {
    Render_Engine *re = (Render_Engine *)data;
 
@@ -1127,24 +1124,24 @@ evgl_eng_gles_pixmap_surface_destroy(void *data, EVGL_Surface *evgl_sfc)
      }
 
 #ifdef GL_GLES
-   if ((!evgl_sfc) || (!evgl_sfc->gles1_sfc))
+   if ((!evgl_sfc) || (!evgl_sfc->indirect_sfc))
      {
-        ERR("Invalid surface.");
+        ERR("Invalid surface");
         glsym_evas_gl_common_error_set(data, EVAS_GL_BAD_SURFACE);
         return 0;
      }
 
-   eglDestroySurface(eng_get_ob(re)->egl_disp, (EGLSurface)evgl_sfc->gles1_sfc);
+   eglDestroySurface(eng_get_ob(re)->egl_disp, (EGLSurface)evgl_sfc->indirect_sfc);
 #endif
 
-   if (!evgl_sfc->gles1_sfc_native)
+   if (!evgl_sfc->indirect_sfc_native)
      {
-        ERR("Inconsistent parameters, not freeing XPixmap for gles1 surface!");
+        ERR("Inconsistent parameters, not freeing XPixmap for indirect surface!");
         glsym_evas_gl_common_error_set(data, EVAS_GL_BAD_PARAMETER);
         return 0;
      }
 
-   XFreePixmap(eng_get_ob(re)->disp, (Pixmap)evgl_sfc->gles1_sfc_native);
+   XFreePixmap(eng_get_ob(re)->disp, (Pixmap)evgl_sfc->indirect_sfc_native);
 
    return 1;
 }
@@ -1171,13 +1168,13 @@ evgl_eng_gles_context_create(void *data,
    context_attrs[1] = share_ctx->version;
    context_attrs[2] = EGL_NONE;
 
-   if (!sfc || !sfc->gles1_sfc_config)
+   if (!sfc || !sfc->indirect_sfc_config)
      {
         ERR("Surface is not set! Creating context anyways but eglMakeCurrent "
             "might very well fail with EGL_BAD_MATCH (0x3009)");
         config = eng_get_ob(re)->egl_config;
      }
-   else config = sfc->gles1_sfc_config;
+   else config = sfc->indirect_sfc_config;
 
    context = eglCreateContext(eng_get_ob(re)->egl_disp, config,
                               share_ctx ? share_ctx->context : NULL,
@@ -1190,10 +1187,10 @@ evgl_eng_gles_context_create(void *data,
         return NULL;
      }
 
-   DBG("Successfully created context for GLES1 indirect rendering.");
+   DBG("Successfully created context for indirect rendering.");
    return context;
 #else
-   CRI("Support for GLES1/GLES3 indirect rendering contexts is not implemented for GLX");
+   CRI("Support for indirect rendering contexts is not implemented for GLX");
    (void) share_ctx; (void) sfc;
    return NULL;
 #endif
@@ -1236,9 +1233,9 @@ static const EVGL_Interface evgl_funcs =
    evgl_eng_rotation_angle_get,
    evgl_eng_pbuffer_surface_create,
    evgl_eng_pbuffer_surface_destroy,
-   evgl_eng_gles1_surface_create,
-   evgl_eng_gles1_surface_destroy,
-   evgl_eng_gles1_context_create,
+   evgl_eng_indirect_surface_create,
+   evgl_eng_indirect_surface_destroy,
+   evgl_eng_gles_context_create,
    evgl_eng_native_win_surface_config_check,
 };